From cfea26531240b1cc52180f2b0c22b107e88a5a3c Mon Sep 17 00:00:00 2001 From: bel Date: Wed, 26 Jun 2019 17:41:19 -0600 Subject: [PATCH] Fix torrent handler Former-commit-id: 2bf1e2e21137e4020d2ace31e4560e9a97684403 --- .gitignore | 1 + handlers/torrent/main.go | 17 ++++++++++++----- handlers/torrent/main_test.go | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 7efa538..b96bc51 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ rssmon3 exec-rssmon3 **.sw* **/testdata +**/._* diff --git a/handlers/torrent/main.go b/handlers/torrent/main.go index e2eb1a4..591795b 100644 --- a/handlers/torrent/main.go +++ b/handlers/torrent/main.go @@ -25,6 +25,7 @@ type Config struct { vpntor string outdir string interval time.Duration + last time.Time db storage.DB ctx context.Context can context.CancelFunc @@ -35,6 +36,7 @@ func main() { if err != nil { panic(err) } + log.Println(config) for { if err := mainLoop(config); err != nil { @@ -43,12 +45,15 @@ func main() { } } -func mainLoop(config Config) error { +func mainLoop(config *Config) error { + block := config.interval - time.Since(config.last) + log.Printf("Blocking %v", block) select { - case <-time.After(config.interval): + case <-time.After(block): if err := pull(config.db, config.vpntor, config.outdir, config.url); err != nil { log.Println(err) } + config.last = time.Now() case <-config.ctx.Done(): if err := config.ctx.Err(); err != nil { return err @@ -57,7 +62,7 @@ func mainLoop(config Config) error { return nil } -func config() (Config, error) { +func config() (*Config, error) { as := args.NewArgSet() as.Append(args.STRING, "url", "url of rss feed", "http://192.168.0.86:33419/api/tag/torrent") as.Append(args.STRING, "vpntor", "url of vpntor", "http://192.168.0.86:9091/transmission/rpc") @@ -68,7 +73,7 @@ func config() (Config, error) { as.Append(args.STRING, "user", "db user", "") as.Append(args.STRING, "pass", "db pass", "") if err := as.Parse(); err != nil { - return Config{}, err + return &Config{}, err } db, err := storage.New( @@ -82,7 +87,7 @@ func config() (Config, error) { } ctx, can := context.WithCancel(context.Background()) - return Config{ + return &Config{ url: as.Get("url").GetString(), vpntor: as.Get("vpntor").GetString(), interval: as.Get("interval").GetDuration(), @@ -98,6 +103,7 @@ func pull(db storage.DB, vpntor, outdir, url string) error { if err != nil { return err } + log.Printf("feed: %v", gofeed.Title) for _, item := range gofeed.Items { if ok, err := isDone(db, item.Link); err != nil { return err @@ -156,6 +162,7 @@ func isDone(db storage.DB, url string) (bool, error) { } func handle(vpntor, outdir, content string) error { + log.Printf("magnets: %v", findMagnets(content)) for _, magnet := range findMagnets(content) { resp, err := submit(vpntor, outdir, magnet) if err != nil { diff --git a/handlers/torrent/main_test.go b/handlers/torrent/main_test.go index 6c6bce6..3e8464f 100644 --- a/handlers/torrent/main_test.go +++ b/handlers/torrent/main_test.go @@ -52,7 +52,7 @@ func fakeRSSServer() *httptest.Server { func TestMainLoopCtx(t *testing.T) { ctx, can := context.WithCancel(context.Background()) can() - c := Config{ + c := &Config{ interval: time.Hour, ctx: ctx, }