fix(podcasts): remove query parameters from URL when getting the extension

This commit is contained in:
Alex McGrath
2023-01-12 15:54:55 +00:00
committed by Senan Kelly
parent 6aa4c42ce5
commit 19be6f0881

View File

@@ -168,7 +168,7 @@ func (p *Podcasts) AddNewEpisodes(podcast *db.Podcast, items []*gofeed.Item) err
for _, item := range getEntriesAfterDate(items, *podcastEpisode.PublishDate) { for _, item := range getEntriesAfterDate(items, *podcastEpisode.PublishDate) {
episode, err := p.AddEpisode(podcast.ID, item) episode, err := p.AddEpisode(podcast.ID, item)
if errors.Is(err, ErrNoAudioInFeedItem) { if errors.Is(err, ErrNoAudioInFeedItem) {
log.Println("failed to find audio in feed item, skipping") log.Printf("failed to find audio in feed (%s, %s) item, skipping", podcast.Title, item.Title)
continue continue
} }
if err != nil { if err != nil {
@@ -234,8 +234,13 @@ func (p *Podcasts) AddEpisode(podcastID int, item *gofeed.Item) (*db.PodcastEpis
return nil, ErrNoAudioInFeedItem return nil, ErrNoAudioInFeedItem
} }
func isAudio(mediaType, url string) bool { func isAudio(mediaType, rawItemURL string) (bool, error) {
return mime.TypeByAudioExtension(path.Ext(url)) != "" itemURL, err := url.Parse(rawItemURL)
if err != nil {
return false, err
}
return mime.TypeByAudioExtension(path.Ext(itemURL.Path)) != "", nil
} }
func itemToEpisode(podcastID, size, duration int, audio string, func itemToEpisode(podcastID, size, duration int, audio string,
@@ -254,7 +259,7 @@ func itemToEpisode(podcastID, size, duration int, audio string,
func (p *Podcasts) findEnclosureAudio(podcastID, duration int, item *gofeed.Item) (*db.PodcastEpisode, bool) { func (p *Podcasts) findEnclosureAudio(podcastID, duration int, item *gofeed.Item) (*db.PodcastEpisode, bool) {
for _, enc := range item.Enclosures { for _, enc := range item.Enclosures {
if !isAudio(enc.Type, enc.URL) { if t, err := isAudio(enc.Type, enc.URL); !t || err != nil {
continue continue
} }
size, _ := strconv.Atoi(enc.Length) size, _ := strconv.Atoi(enc.Length)
@@ -269,7 +274,7 @@ func (p *Podcasts) findMediaAudio(podcastID, duration int, item *gofeed.Item) (*
return nil, false return nil, false
} }
for _, ext := range extensions { for _, ext := range extensions {
if !isAudio(ext.Attrs["type"], ext.Attrs["url"]) { if t, err := isAudio(ext.Attrs["type"], ext.Attrs["url"]); !t || err != nil {
continue continue
} }
return itemToEpisode(podcastID, 0, duration, ext.Attrs["url"], item), true return itemToEpisode(podcastID, 0, duration, ext.Attrs["url"], item), true