fix: reset FileBrowser database when sources change
FileBrowser Quantum caches user source preferences in its SQLite database. After a restore, the config.yaml gets correct sources but the database still references the old "srv" source from docker-setup.sh initial install. Now SyncFileBrowserMounts() detects when sources changed and runs docker compose down -v to reset the database before recreating. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1600,6 +1600,14 @@ func (s *Server) SyncFileBrowserMounts() {
|
|||||||
// Generate and write config.yaml (sources + sidebar entries per drive)
|
// Generate and write config.yaml (sources + sidebar entries per drive)
|
||||||
configPath := stackDir + "/config.yaml"
|
configPath := stackDir + "/config.yaml"
|
||||||
fbConfig := generateFileBrowserConfig(paths)
|
fbConfig := generateFileBrowserConfig(paths)
|
||||||
|
|
||||||
|
// Detect if sources changed — if so, the database must be reset so
|
||||||
|
// FileBrowser picks up the new source list (user prefs cache old sources).
|
||||||
|
sourcesChanged := true
|
||||||
|
if oldConfig, err := os.ReadFile(configPath); err == nil {
|
||||||
|
sourcesChanged = string(oldConfig) != fbConfig
|
||||||
|
}
|
||||||
|
|
||||||
if err := os.WriteFile(configPath, []byte(fbConfig), 0644); err != nil {
|
if err := os.WriteFile(configPath, []byte(fbConfig), 0644); err != nil {
|
||||||
s.logger.Printf("[ERROR] Failed to write FileBrowser config: %v", err)
|
s.logger.Printf("[ERROR] Failed to write FileBrowser config: %v", err)
|
||||||
return
|
return
|
||||||
@@ -1617,6 +1625,20 @@ func (s *Server) SyncFileBrowserMounts() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If sources changed, reset database so FileBrowser re-reads config.yaml.
|
||||||
|
// The database caches user source preferences from the old config.
|
||||||
|
if sourcesChanged {
|
||||||
|
s.logger.Printf("[INFO] FileBrowser sources changed — resetting database")
|
||||||
|
resetCtx, resetCancel := context.WithTimeout(context.Background(), 30*time.Second)
|
||||||
|
defer resetCancel()
|
||||||
|
// Stop container first, then remove the data volume
|
||||||
|
stop := exec.CommandContext(resetCtx, "docker", "compose", "down", "-v")
|
||||||
|
stop.Dir = stackDir
|
||||||
|
if out, err := stop.CombinedOutput(); err != nil {
|
||||||
|
s.logger.Printf("[WARN] FileBrowser down -v: %s — %v", strings.TrimSpace(string(out)), err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Recreate container — H16: use 60s timeout to prevent hanging indefinitely.
|
// Recreate container — H16: use 60s timeout to prevent hanging indefinitely.
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|||||||
Reference in New Issue
Block a user