Media build part 2 (unreleased): drive wiring in every app (R-1024/R-1037), old-install repair (R-1047), drive events notice + real restart now/later + stream check, file browser lets go of dead/removed drives and recreates on return (R-1038), safe removal keeps the drive (R-1044), Plex claim on the running server + probe accept (R-1028/R-1045)
gates / gates (push) Successful in 45s
gates / gates (push) Successful in 45s
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
1 parent
78c894234c
commit
f580d88a14
46 files changed
+3700
-8
No files matched your search
@@ -308,6 +308,7 @@ func (s *Server) ReconcileDriveGates() {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
s.reconcileEjectedDrives(ctx, agent, resp.Disks)
|
||||
for _, a := range planDriveGates(s.settings.GetStoragePaths(), resp.Disks) {
|
||||
switch {
|
||||
case a.Stop:
|
||||
@@ -325,6 +326,7 @@ func (s *Server) ReconcileDriveGates() {
|
||||
// E-2 Part 5: when the absent drive is the BACKUP TARGET, that is the more specific and more
|
||||
// urgent fact, so it gets its own event rather than being folded into the generic one.
|
||||
s.notifyDriveAbsent(a.Path, stopped, driveTargetByPath(resp.Disks))
|
||||
s.mediaDriveEvent(a.Path, "removed")
|
||||
go s.SyncFileBrowserMounts()
|
||||
case a.Return:
|
||||
if a.Raw != "" {
|
||||
@@ -346,7 +348,9 @@ func (s *Server) ReconcileDriveGates() {
|
||||
// E-2b: the recovery half. An operator told a drive vanished must be told it came back —
|
||||
// otherwise the alarm is a dead end and the next one is trusted less.
|
||||
s.notifyDriveReturned(a.Path, driveTargetByPath(resp.Disks))
|
||||
go s.SyncFileBrowserMounts()
|
||||
s.mediaDriveEvent(a.Path, "returned")
|
||||
// R-1038: same path, same files → nothing „changed", yet the file browser holds the DEAD mount. Recreate.
|
||||
go s.SyncFileBrowserMountsForce()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user