diff --git a/server/settings/btsets.go b/server/settings/btsets.go index 6a167c1..145eccc 100644 --- a/server/settings/btsets.go +++ b/server/settings/btsets.go @@ -2,6 +2,10 @@ package settings import ( "encoding/json" + "io" + "io/fs" + "path/filepath" + "strings" "server/log" ) @@ -62,6 +66,23 @@ func SetBTSets(sets *BTSets) { if sets.TorrentsSavePath == "" { sets.UseDisk = false + } else if sets.UseDisk { + BTsets = sets + + go filepath.WalkDir(sets.TorrentsSavePath, func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() && strings.ToLower(d.Name()) == ".tsc" { + BTsets.TorrentsSavePath = path + log.TLogln("Find directory \"" + BTsets.TorrentsSavePath + "\", use as cache dir") + return io.EOF + } + if d.IsDir() && strings.HasPrefix(d.Name(), ".") { + return filepath.SkipDir + } + return nil + }) } BTsets = sets diff --git a/server/torr/apihelper.go b/server/torr/apihelper.go index 5229045..65cb0ea 100644 --- a/server/torr/apihelper.go +++ b/server/torr/apihelper.go @@ -107,21 +107,37 @@ func GetTorrent(hashHex string) *Torrent { func SetTorrent(hashHex, title, poster, data string) *Torrent { hash := metainfo.NewHashFromHex(hashHex) - tor := bts.GetTorrent(hash) - if tor != nil { - tor.Title = title - tor.Poster = poster - tor.Data = data + torr := bts.GetTorrent(hash) + torrDb := GetTorrentDB(hash) + + if title == "" && torr == nil && torrDb != nil { + torr = GetTorrent(hashHex) + torr.GotInfo() + if torr.Torrent != nil && torr.Torrent.Info() != nil { + title = torr.Info().Name + } } - tor = GetTorrentDB(hash) - if tor != nil { - tor.Title = title - tor.Poster = poster - tor.Data = data - AddTorrentDB(tor) + if torr != nil { + if title == "" && torr.Torrent != nil && torr.Torrent.Info() != nil { + title = torr.Info().Name + } + torr.Title = title + torr.Poster = poster + torr.Data = data + } + + if torrDb != nil { + torrDb.Title = title + torrDb.Poster = poster + torrDb.Data = data + AddTorrentDB(torrDb) + } + if torr != nil { + return torr + } else { + return torrDb } - return tor } func RemTorrent(hashHex string) { diff --git a/server/torr/storage/torrstor/cache.go b/server/torr/storage/torrstor/cache.go index a2258d5..a480ca8 100644 --- a/server/torr/storage/torrstor/cache.go +++ b/server/torr/storage/torrstor/cache.go @@ -194,12 +194,10 @@ func (c *Cache) cleanPieces() { c.removePiece(p) rems-- if rems <= 0 { - break + utils.FreeOSMemGC() + return } } - if rems <= 0 { - utils.FreeOSMemGC() - } } }