* [WIP] break out a few contexts, start refactoring fast index modules
* [WIP] more contexts, this time around slow indexing and downloads
* [WIP] got all tests passing
* [WIP] Added moduledocs
* Built a genserver to rename old jobs on boot
* Added a module naming check; moved things around
* Fixed specs
* Added new uploaded_at column to media items
* Updated indexer to pull upload date
* Updates media item creation to update on conflict
* Added download cutoff date to sources
* Applies cutoff date logic to pending media logic
* Updated docs
* Made method to getting singular media details; Renamed other related method
* Takes a fun and flirty digression to remove abstractions around yt-dlp since I'm 100% committed to using it exclusively
* Removed commented test code
* Lays the groundwork for fast indexing
* Added module for working with youtube RSS feed
* Added methods to kick off indexing workers from RSS response
* Improve short detection (#59)
* Made media attribute-related yt-dlp calls return a struct
* Added shorts attribute to media items
* Added ability to discern a short from yt-dlp response
* Updated search to use new shorts attribute
* Fast index UI (#63)
* Added fast_index field and adds it to source form
* Added fast indexing to source changeset operations
* Added fast indexing worker and updated other modules to start using it
* Handled fast index worker on source update
* Add support modals (#65)
* Added fast indexing upgrade modal
* Improved modal on smaller screens
* Updated links to work again
* Added donation modal
* Reverted source fast index to 15 minutes
* Removed unneeded HTML attributes from old alpine approach
* Adds a basic settings model
* Added more settings methods; Hooked up initial settings runner to app boot
* Update onboarding flow to use settings model instead of session data
* Updated config path to specify metadata storage path
* Removed metadata column from DB, replacing it with filepath columns
* Updated app to store compressed metadata; automatically download thumbnails
* Ensured metadata is deleted when other files are deleted
* Updated docs
* Added inets to application start so http calls work in prod
* Bumped up the line length because I fear no man
* Refactored indexing
Previously, indexing worked by collecting the video IDs of only videos
that matched indexing criteria. This new model instead stores ALL videos
for a given source, but will only _download_ videos that meet that criteria.
This lets us backfill without indexing, makes it easier to add in other
backends, lets us download one-off videos for a source that don't quite
meet criteria, you name it.
* Updated media finders to respect format filters; Added credo file
* [WIP] updated the output of VideoCollection to include playlists
* Updated source's name to collection_name; supported playlist ID/name fetching
* Hooked up collection_type to form; refactored enqueue_pending_media_downloads
* Added friendly_name to form
* Added media profile link to source view
* Updates comment
* Ensure channel detail lookup doesn't download the video - oops
* Ran the needful migrations for replacing channels with sources
* got media source test back working
* channel tasks test
* Media indexing worker test
* media tests
* Got all tests working except controller tests
* got all tests working
* Renamed Channel struct to Source
* renamed ChannelTasks
* More renaming; renamed channel details module
* Removed Channel yt-dlp module, instead throwing things in the VideoCollection module
* Renamed what looks like the last of the outstanding data
* Added subtitle options to media profile model
* Updated media profile form
* Adds subtitle-based options in options builder
* Updates metadata parser to include subtitles
* Adds subtitle_filepaths to media_item
* renamed video_filepath to media_filepath
* Added more fields to media profile show page