Skip to content

[feature] Podcast Ingestion #93

Description

@masukomi

New Top Level object Podcast

A Podcast has

  • url
  • title
  • feed_url (hidden by default)
  • episodes
    Array of PodcastEpisode objects
  • abandoned
    Boolean. Defaults to false. If true indicates we should no longer suck down new episodes.
  • delete_unsaved_episodes_after
    Number of days after which audiofiles will be deleted. 0 or null indicates never delete episodes we've downloaded from this podcast.
  • XXX whatever bookmark uses to indicate a failed archive attempt when we can't download it anymore

A PodcastEpisode has

  • url
  • title
  • timestamp
  • remote_audio_file_url
  • local_audio_file_url
  • transcript
    created via whisper
  • saved
    Boolean indicates this episode shouldn't be deleted even after N days

Behavior

Form Submission for New Podcast

system will attempt to find feed_url by downloading url and looking tags pointing to RSS / ATOM feed URLs. If it can't find one it'll bring the user back to the page with the feed_url field visible. NOTE: the url may actually be the feed_url and we must test for this, ?and then reverse engineer the URL?

Once it has the Feed URL it'll try and find if ANY (not all) of the episodes in the feed have audio file attachments.

If neither the system, nor the user, can find a feed URL then the the Podcast object won't be created.

Checking for new episodes & deleting old ones

A cronjob will iterate over all Podcasts where abandoned == false download their feeds, look for new episodes, download those, delete the local audiofile url for any that are > delete_unsaved_episodes_after days old unless saved

Display

In the main timeline each episode will be an entry in between bookmarks based on the episode's timestamp
The episode view will have an audio player widget if there is a local copy, or a link to the episode page / audio file if there isn't.

The podcast view will have a reverse chronological list of all the episodes with links to the episode pages.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions