mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-29 03:26:37 +08:00
62b204367c
- Add BootCloudLibraries() to auto-scan all cloud libraries on startup - Delay 3s to avoid conflict with system init, scan without auto-scrape - Enable CORS for /api/cloud/play/* and /api/img to support 3rd-party players - Fixes issue where each user triggers separate cloud library scans - Fixes issue where Infuse/Emby apps cannot play cloud resources
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
// Package service — generic on-disk cleanup helper used by the
|
|
// scheduler. Public so handlers can call it for "purge transcode cache
|
|
// now" buttons.
|
|
package service
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"time"
|
|
)
|
|
|
|
// walkAndPrune recursively deletes every file under root whose mtime is
|
|
// older than cutoff. Empty directories left behind are removed too.
|
|
// Best-effort: per-file errors are ignored so a single permission denial
|
|
// doesn't abort the cleanup.
|
|
func walkAndPrune(root string, cutoff time.Time) error {
|
|
if root == "" {
|
|
return nil
|
|
}
|
|
if _, err := os.Stat(root); err != nil {
|
|
return nil // nothing to clean
|
|
}
|
|
dirs := []string{}
|
|
_ = filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
if info.IsDir() {
|
|
if path != root {
|
|
dirs = append(dirs, path)
|
|
}
|
|
return nil
|
|
}
|
|
if info.ModTime().Before(cutoff) {
|
|
_ = os.Remove(path) // #nosec G122 -- cache pruning is best-effort under the configured cache root.
|
|
}
|
|
return nil
|
|
})
|
|
// Remove emptied directories from deepest to shallowest.
|
|
for i := len(dirs) - 1; i >= 0; i-- {
|
|
_ = os.Remove(dirs[i])
|
|
}
|
|
return nil
|
|
}
|