From bda55fe162a6140ecf69abfd287ebd19d8b3757a Mon Sep 17 00:00:00 2001 From: YouROK <8yourok8@mail.ru> Date: Tue, 27 Apr 2021 11:19:14 +0300 Subject: [PATCH] add watch torrent dir --- server/cmd/main.go | 57 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/server/cmd/main.go b/server/cmd/main.go index 06783c2..e8a912d 100644 --- a/server/cmd/main.go +++ b/server/cmd/main.go @@ -3,8 +3,11 @@ package main import ( "context" "fmt" + "io/ioutil" "net" "os" + "path/filepath" + "strings" "time" "github.com/alexflint/go-arg" @@ -13,18 +16,21 @@ import ( "server" "server/log" "server/settings" + "server/torr" "server/version" + "server/web/api/utils" ) type args struct { - Port string `arg:"-p" help:"web server port"` - Path string `arg:"-d" help:"database path"` - LogPath string `arg:"-l" help:"log path"` - WebLogPath string `arg:"-w" help:"web log path"` - RDB bool `arg:"-r" help:"start in read-only DB mode"` - HttpAuth bool `arg:"-a" help:"http auth on all requests"` - DontKill bool `arg:"-k" help:"dont kill server on signal"` - UI bool `arg:"-u" help:"run page torrserver in browser"` + Port string `arg:"-p" help:"web server port"` + Path string `arg:"-d" help:"database path"` + LogPath string `arg:"-l" help:"log path"` + WebLogPath string `arg:"-w" help:"web log path"` + RDB bool `arg:"-r" help:"start in read-only DB mode"` + HttpAuth bool `arg:"-a" help:"http auth on all requests"` + DontKill bool `arg:"-k" help:"dont kill server on signal"` + UI bool `arg:"-u" help:"run page torrserver in browser"` + TorrentsDir string `arg:"-t" help:"autoload torrent from dir"` } func (args) Version() string { @@ -58,6 +64,10 @@ func main() { }() } + if params.TorrentsDir != "" { + go watchTDir(params.TorrentsDir) + } + server.Start(params.Port, params.RDB) log.TLogln(server.WaitServer()) log.Close() @@ -83,3 +93,34 @@ func dnsResolve() { fmt.Println("Check new dns", addrs, err) } } + +func watchTDir(dir string) { + time.Sleep(5 * time.Second) + path, err := filepath.Abs(dir) + if err != nil { + path = dir + } + for { + files, err := ioutil.ReadDir(path) + if err == nil { + for _, file := range files { + filename := filepath.Join(path, file.Name()) + if strings.ToLower(filepath.Ext(file.Name())) == ".torrent" { + sp, err := utils.ParseLink("file://" + filename) + if err == nil { + tor, err := torr.AddTorrent(sp, "", "", "") + if err == nil { + if tor.GotInfo() { + torr.SaveTorrentToDB(tor) + tor.Drop() + os.Remove(filename) + time.Sleep(time.Second) + } + } + } + } + } + } + time.Sleep(time.Second) + } +}