diff --git a/server/server.go b/server/server.go index 3d61f8f..3bcb179 100644 --- a/server/server.go +++ b/server/server.go @@ -1,6 +1,11 @@ package server import ( + "io/ioutil" + "os" + "path/filepath" + + "server/log" "server/settings" "server/web" ) @@ -10,9 +15,58 @@ func Start(port string, roSets bool) { if port == "" { port = "8090" } + go cleanCache() web.Start(port) } +func cleanCache() { + if !settings.BTsets.UseDisk || settings.BTsets.TorrentsSavePath == "/" || settings.BTsets.TorrentsSavePath == "" { + return + } + + dirs, err := ioutil.ReadDir(settings.BTsets.TorrentsSavePath) + if err != nil { + return + } + + torrs := settings.ListTorrent() + + log.TLogln("Remove unused cache in dir:", settings.BTsets.TorrentsSavePath) + for _, d := range dirs { + if len(d.Name()) != 40 { + // Not a hash + continue + } + + if !settings.BTsets.RemoveCacheOnDrop { + for _, t := range torrs { + if d.IsDir() && d.Name() != t.InfoHash.HexString() { + log.TLogln("Remove unused cache:", d.Name()) + removeAllFiles(filepath.Join(settings.BTsets.TorrentsSavePath, d.Name())) + break + } + } + } else { + if d.IsDir() { + log.TLogln("Remove unused cache:", d.Name()) + removeAllFiles(filepath.Join(settings.BTsets.TorrentsSavePath, d.Name())) + } + } + } +} + +func removeAllFiles(path string) { + files, err := ioutil.ReadDir(path) + if err != nil { + return + } + for _, f := range files { + name := filepath.Join(path, f.Name()) + os.Remove(name) + } + os.Remove(path) +} + func WaitServer() string { err := web.Wait() if err != nil {