138 lines
6.2 KiB
Go
138 lines
6.2 KiB
Go
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)
|
|
}
|