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

Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
admin committed 2026-10-15 09:54:49 +02:00
1 parent 78c894234c
commit f580d88a14
46 files changed
+3700 -8

No files matched your search

+5 -1
View File
@@ -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()
}
}
}