diff --git a/internal/app.go b/internal/app.go index 7405dc2..b2b0376 100644 --- a/internal/app.go +++ b/internal/app.go @@ -127,10 +127,18 @@ func MainApp(configPath string) { zurglog, ) + hasFFprobe := true + _, err = exec.LookPath("ffprobe") + if err != nil { + hasFFprobe = false + zurglog.Warn("ffprobe not found in PATH (do you have ffmpeg installed?), you won't be able to perform media analysis") + } + torrentMgr := torrent.NewTorrentManager( config, api, workerPool, + hasFFprobe, log.Named("manager"), log.Named("repair"), ) @@ -148,11 +156,6 @@ func MainApp(configPath string) { log.Named("router"), ) - _, err = exec.LookPath("ffprobe") - if err != nil { - zurglog.Warn("ffprobe not found in PATH (do you have ffmpeg installed?), you won't be able to perform media analysis") - } - //// pprof // workerPool.Submit(func() { // if err := netHttp.ListenAndServe(":6060", nil); err != nil && err != netHttp.ErrServerClosed { diff --git a/internal/torrent/manager.go b/internal/torrent/manager.go index 2684ceb..09cffc3 100644 --- a/internal/torrent/manager.go +++ b/internal/torrent/manager.go @@ -55,12 +55,13 @@ type TorrentManager struct { OnceDoneBin mapset.Set[string] DeleteOnCompletionBin cmap.ConcurrentMap[string, string] + hasFFprobe bool } // NewTorrentManager creates a new torrent manager // it will fetch all torrents and their info in the background // and store them in-memory and cached in files -func NewTorrentManager(cfg config.ConfigInterface, api *realdebrid.RealDebrid, workerPool *ants.Pool, log, repairLog *logutil.Logger) *TorrentManager { +func NewTorrentManager(cfg config.ConfigInterface, api *realdebrid.RealDebrid, workerPool *ants.Pool, hasFFprobe bool, log, repairLog *logutil.Logger) *TorrentManager { t := &TorrentManager{ requiredVersion: "0.10.0", @@ -87,6 +88,7 @@ func NewTorrentManager(cfg config.ConfigInterface, api *realdebrid.RealDebrid, w OnceDoneBin: mapset.NewSet[string](), DeleteOnCompletionBin: cmap.New[string](), + hasFFprobe: hasFFprobe, } t.initializeBins() diff --git a/internal/torrent/refresh.go b/internal/torrent/refresh.go index 1b1b440..8344038 100644 --- a/internal/torrent/refresh.go +++ b/internal/torrent/refresh.go @@ -27,6 +27,7 @@ func (t *TorrentManager) refreshTorrents(initialRun bool) { var mergeChan = make(chan *Torrent, len(instances)) allTorrents, _ := t.DirectoryMap.Get(INT_ALL) + oldKeys := mapset.NewSet[string](allTorrents.Keys()...) freshIDs := mapset.NewSet[string]() freshAccessKeys := mapset.NewSet[string]() @@ -87,9 +88,20 @@ func (t *TorrentManager) refreshTorrents(initialRun bool) { t.assignDirectory(mainTorrent, !initialRun) } + // new torrents + t.workerPool.Submit(func() { + if !t.hasFFprobe { + return + } + freshAccessKeys.Difference(oldKeys).Each(func(accessKey string) bool { + torrent, _ := allTorrents.Get(accessKey) + t.applyMediaInfoDetails(torrent) + return false + }) + }) + // removed torrents - oldPlusNewKeys := mapset.NewSet[string](allTorrents.Keys()...) - oldPlusNewKeys.Difference(freshAccessKeys).Each(func(accessKey string) bool { + oldKeys.Difference(freshAccessKeys).Each(func(accessKey string) bool { t.Delete(accessKey, false) return false })