torrent pushes to outdir:XYZ if category/tag set

master
Bel LaPointe 2024-07-30 16:54:55 -06:00
parent 84170b443d
commit 5fa7ac883d
2 changed files with 45 additions and 18 deletions

View File

@ -105,30 +105,48 @@ func pull(db storage.DB, vpntor, outdir, url string) error {
if err != nil { if err != nil {
return err return err
} }
log.Printf("feed: %v", gfeed.Title) return _pull(db, vpntor, outdir, gfeed.Title, gfeed.Items)
for _, item := range gfeed.Items { }
if ok, err := isDone(db, item.Link); err != nil {
return err func _pull(db storage.DB, vpntor, outdir, title string, items []*gofeed.Item) error {
} else if ok { log.Printf("feed: %v", title)
continue for _, item := range items {
} if err := __pull(db, vpntor, outdir, item); err != nil {
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 err return err
} }
} }
return nil 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) { func getGoFeed(url string) (*gofeed.Feed, error) {
resp, err := http.Get(url) resp, err := http.Get(url)
if err != nil { if err != nil {

View File

@ -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)
}
}