From 5fa7ac883d1b826ec02541109d65ba6b35aab972 Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Tue, 30 Jul 2024 16:54:55 -0600 Subject: [PATCH] torrent pushes to outdir:XYZ if category/tag set --- handlers/torrent/main.go | 54 +++++++++++++++++++++++------------ handlers/torrent/main_test.go | 9 ++++++ 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/handlers/torrent/main.go b/handlers/torrent/main.go index 20ce3e1..829d36b 100755 --- a/handlers/torrent/main.go +++ b/handlers/torrent/main.go @@ -105,30 +105,48 @@ func pull(db storage.DB, vpntor, outdir, url string) error { if err != nil { return err } - log.Printf("feed: %v", gfeed.Title) - for _, item := range gfeed.Items { - if ok, err := isDone(db, item.Link); err != nil { - return err - } else if ok { - continue - } - s, err := getItemContent(item) - if err != nil { - return err - } - if item.Author == nil { - item.Author = &gofeed.Person{Name: "."} - } - if err := handle(vpntor, path.Join(outdir, item.Author.Name), item.Link, s); err != nil { - return err - } - if err := db.Set(item.Link, []byte{}); err != nil { + return _pull(db, vpntor, outdir, gfeed.Title, gfeed.Items) +} + +func _pull(db storage.DB, vpntor, outdir, title string, items []*gofeed.Item) error { + log.Printf("feed: %v", title) + for _, item := range items { + if err := __pull(db, vpntor, outdir, item); err != nil { return err } } return nil } +func __pull(db storage.DB, vpntor, outdir string, item *gofeed.Item) error { + if ok, err := isDone(db, item.Link); err != nil { + return err + } else if ok { + return nil + } + s, err := getItemContent(item) + if err != nil { + return err + } + if item.Author == nil { + item.Author = &gofeed.Person{Name: "."} + } + if err := handle(vpntor, __pullOutput(outdir, item.Author.Name, item), item.Link, s); err != nil { + return err + } + return db.Set(item.Link, []byte{}) +} + +func __pullOutput(outdir, author string, item *gofeed.Item) string { + output := path.Join(outdir, author) + for _, category := range item.Categories { + if categoryOutDir := strings.TrimPrefix(category, "outdir:"); category != categoryOutDir { + output = categoryOutDir + } + } + return output +} + func getGoFeed(url string) (*gofeed.Feed, error) { resp, err := http.Get(url) if err != nil { diff --git a/handlers/torrent/main_test.go b/handlers/torrent/main_test.go index 9e4ea7d..1861d6f 100755 --- a/handlers/torrent/main_test.go +++ b/handlers/torrent/main_test.go @@ -257,3 +257,12 @@ func TestFindMagnets(t *testing.T) { } } } + +func Test__PullOutput(t *testing.T) { + if got := __pullOutput("x", "y", &gofeed.Item{Categories: []string{}}); got != "x/y" { + t.Error(got) + } + if got := __pullOutput("", "", &gofeed.Item{Categories: []string{"outdir:x"}}); got != "x" { + t.Error(got) + } +}