Add support for Itunes

This commit is contained in:
Joakim Hellsén 2024-02-18 05:07:30 +01:00
commit f73a36c1c8
15 changed files with 883 additions and 51 deletions

138
itunes.go Normal file
View file

@ -0,0 +1,138 @@
package main
import (
"context"
"log"
"time"
"github.com/TheLovinator1/FeedVault/db"
"github.com/jackc/pgx/v5/pgtype"
"github.com/mmcdole/gofeed"
)
func createFeedItunes(ctx context.Context, feed *gofeed.Feed, newFeed db.Feed) (db.FeedItune, error) {
if feed.ITunesExt == nil {
log.Printf("No iTunes extensions to add to database")
return db.FeedItune{}, nil
}
// Add iTunes extensions to the database
itunesID, err := DB.CreateFeedItunes(ctx, db.CreateFeedItunesParams{
CreatedAt: pgtype.Timestamptz{Time: time.Now(), Valid: true},
UpdatedAt: pgtype.Timestamptz{Time: time.Now(), Valid: true},
DeletedAt: pgtype.Timestamptz{Valid: false},
Author: pgtype.Text{String: feed.ITunesExt.Author, Valid: feed.ITunesExt.Author != ""},
Block: pgtype.Text{String: feed.ITunesExt.Block, Valid: feed.ITunesExt.Block != ""},
Explicit: pgtype.Text{String: feed.ITunesExt.Explicit, Valid: feed.ITunesExt.Explicit != ""},
Keywords: pgtype.Text{String: feed.ITunesExt.Keywords, Valid: feed.ITunesExt.Keywords != ""},
Subtitle: pgtype.Text{String: feed.ITunesExt.Subtitle, Valid: feed.ITunesExt.Subtitle != ""},
Summary: pgtype.Text{String: feed.ITunesExt.Summary, Valid: feed.ITunesExt.Summary != ""},
Image: pgtype.Text{String: feed.ITunesExt.Image, Valid: feed.ITunesExt.Image != ""},
Complete: pgtype.Text{String: feed.ITunesExt.Complete, Valid: feed.ITunesExt.Complete != ""},
NewFeedUrl: pgtype.Text{String: feed.ITunesExt.NewFeedURL, Valid: feed.ITunesExt.NewFeedURL != ""},
Type: pgtype.Text{String: feed.ITunesExt.Type, Valid: feed.ITunesExt.Type != ""},
FeedID: newFeed.ID,
})
if err != nil {
log.Printf("Error adding iTunes extensions to database: %s", err)
return db.FeedItune{}, err
}
log.Printf("iTunes extensions added to database")
return itunesID, nil
}
func createItemItunes(ctx context.Context, item *gofeed.Item, newItem db.Item) (db.ItemItune, error) {
if item.ITunesExt == nil {
log.Printf("No iTunes extensions to add to database")
return db.ItemItune{}, nil
}
// Add iTunes extensions to the database
itunesID, err := DB.CreateItemItunes(ctx, db.CreateItemItunesParams{
CreatedAt: pgtype.Timestamptz{Time: time.Now(), Valid: true},
UpdatedAt: pgtype.Timestamptz{Time: time.Now(), Valid: true},
DeletedAt: pgtype.Timestamptz{Valid: false},
Author: pgtype.Text{String: item.ITunesExt.Author, Valid: item.ITunesExt.Author != ""},
Block: pgtype.Text{String: item.ITunesExt.Block, Valid: item.ITunesExt.Block != ""},
Explicit: pgtype.Text{String: item.ITunesExt.Explicit, Valid: item.ITunesExt.Explicit != ""},
Keywords: pgtype.Text{String: item.ITunesExt.Keywords, Valid: item.ITunesExt.Keywords != ""},
Subtitle: pgtype.Text{String: item.ITunesExt.Subtitle, Valid: item.ITunesExt.Subtitle != ""},
Summary: pgtype.Text{String: item.ITunesExt.Summary, Valid: item.ITunesExt.Summary != ""},
Image: pgtype.Text{String: item.ITunesExt.Image, Valid: item.ITunesExt.Image != ""},
IsClosedCaptioned: pgtype.Text{String: item.ITunesExt.IsClosedCaptioned, Valid: item.ITunesExt.IsClosedCaptioned != ""},
Episode: pgtype.Text{String: item.ITunesExt.Episode, Valid: item.ITunesExt.Episode != ""},
Season: pgtype.Text{String: item.ITunesExt.Season, Valid: item.ITunesExt.Season != ""},
Order: pgtype.Text{String: item.ITunesExt.Order, Valid: item.ITunesExt.Order != ""},
EpisodeType: pgtype.Text{String: item.ITunesExt.EpisodeType, Valid: item.ITunesExt.EpisodeType != ""},
ItemID: newItem.ID,
})
if err != nil {
log.Printf("Error adding iTunes extensions to database: %s", err)
return db.ItemItune{}, err
}
log.Printf("iTunes extensions added to database")
return itunesID, nil
}
func createFeedItunesCategories(ctx context.Context, feed *gofeed.Feed, itunes db.FeedItune) {
if feed.ITunesExt == nil {
log.Printf("No iTunes categories to add to database")
return
}
for _, cat := range feed.ITunesExt.Categories {
newCat, err := DB.CreateFeedItunesCategory(ctx, db.CreateFeedItunesCategoryParams{
CreatedAt: pgtype.Timestamptz{Time: time.Now(), Valid: true},
UpdatedAt: pgtype.Timestamptz{Time: time.Now(), Valid: true},
DeletedAt: pgtype.Timestamptz{Valid: false},
Text: pgtype.Text{String: cat.Text, Valid: cat.Text != ""}, // 🐈 meow
ItunesID: itunes.ID,
})
if err != nil {
log.Printf("Error adding iTunes category to database: %s", err)
continue
}
log.Printf("iTunes category added to database: %s", cat.Text)
// Add subcategories to the database
if cat.Subcategory != nil {
_, err = DB.CreateFeedItunesCategory(ctx, db.CreateFeedItunesCategoryParams{
CreatedAt: pgtype.Timestamptz{Time: time.Now(), Valid: true},
UpdatedAt: pgtype.Timestamptz{Time: time.Now(), Valid: true},
DeletedAt: pgtype.Timestamptz{Valid: false},
Text: pgtype.Text{String: cat.Subcategory.Text, Valid: cat.Subcategory.Text != ""}, // 🐈 meow
ItunesID: itunes.ID,
Subcategory: pgtype.Int8{Int64: newCat.ID, Valid: true},
})
if err != nil {
log.Printf("Error adding iTunes subcategory to database: %s", err)
continue
}
log.Printf("iTunes subcategory added to database: %s", cat.Text)
}
}
}
func createFeedItunesOwners(ctx context.Context, feed *gofeed.Feed, itunes db.FeedItune) {
if feed.ITunesExt == nil {
log.Printf("No iTunes owners to add to database")
return
}
if feed.ITunesExt.Owner == nil {
log.Printf("No iTunes owner to add to database")
return
}
_, err := DB.CreateFeedItunesOwner(ctx, db.CreateFeedItunesOwnerParams{
CreatedAt: pgtype.Timestamptz{Time: time.Now(), Valid: true},
UpdatedAt: pgtype.Timestamptz{Time: time.Now(), Valid: true},
DeletedAt: pgtype.Timestamptz{Valid: false},
Name: pgtype.Text{String: feed.ITunesExt.Owner.Name, Valid: feed.ITunesExt.Owner.Name != ""},
Email: pgtype.Text{String: feed.ITunesExt.Owner.Email, Valid: feed.ITunesExt.Owner.Email != ""},
ItunesID: itunes.ID,
})
if err != nil {
log.Printf("Error adding iTunes owner to database: %s", err)
return
}
log.Printf("iTunes owner added to database: %s", feed.ITunesExt.Owner.Name)
}