* Started capturing playlist_index on indexing pass
* Added playlist_index as a media item field
* Added playlist index to output variable templates
* Improved the way playlist_indexes are rejected on update
* Updated docs
* Undid unneeded changes
* Started adding youtube API for fast indexing
* Hooked youtube API into fast indexing
* Added youtube_api_key to settings
* Added youtube api key to settings UI
* Added tests
* Refactored the youtube api module
* More refactor
* Changed editing mode name from basic to standard
* [WIP] started on copy changes
* Updated copy
* Added compound index for updated media item table for performance
* Improved large number display on homepage
* Improved UI around large numbers
* Centered the content of homepage data cards
* Renamed migration
* [WIP] renamed and migrated upload_date column
* Refactored yt-dlp media module
* Refactored parse_upload_date
* Refactored media item upload_date_index
* Got media tests running
* Refactored media item table live
* Cleaned up the stragglers
* Fixed old oversight re: original_url
* Changed sqlite FTS to use a trigram tokenizer
* Added search UI to source tables
* Fix bug with special chars in search form
* improved main search results form
* Improved centering for media table header elements
* [WIP] started on codec parser
* Added codec preferences to settings model
* [WIP] added basic codec preference fields to settings form
* Hooked up the backend portion of the codec preference work
* Added codec settings to frontend
* Ensured you can remove codec data
* [WIP] Got query kinda working, now to refactor other queries
* Refactored all query methods to use dynamic snippets
* Refactored tab layout to grab tabs by name
* Removed standalone show buttons from in-app tables
* Removed unneeded comment
* Added ability to specify overwrite behaviour when downloading media
* Added helper for redownloading media items
* renamed media redownload worker to disambiguate it from similarly named methods
* Added new redownload option to source actions dropdown
* Refactored MediaQuery to use a __using__ macro
* docs
* Added upload date index field to media_items
* Added incrementing index for upload dates
* Added media item upload date index to download option builder
* Added new season_episode_index_from_date to UI; updated parser
* Improve support for channels
* Hopefully fixed flakey test
* Namespaced notification modules under lifecycle
* Added a JSON encoder for all the main model types
* Added startup task to create user script file
* Hook up user script event to media download
* Hooked up media deletion user script
* Added jq to docker deps
* Updated README
* Manually installed mutagen
* Stopped upgrade form from submitting on enter
* Gracefully handle duplicate enqueued downloads
* Update metadata thumbnail fetcher to use the best jpg available
* Updated downloader and runner to handle sponsorblock failures more gracefully
* stopped download worker from running if a media item is preventing download
* Properly escaped NFO file contents
* Added an NFO backfill worker
* Added a try-catch to the backfill since I _really_ don't want failures to halt app boot
* [WIP] renamed current settings module and tables to have backup suffix
* Created new settings table, schema, and context
* Migrated from old settings module to new one
* Removed settings backup modules
* Added some tests and docs
* [Enhancement] Adds ability to stop media from re-downloading (#159)
* Added column
* Added methods for ignoring media items from future download
* Added new deletion options to controller and UI
* Added controller actions and UI for editing a media item
* Added column to sources
* Added retention period to form
* [WIP] getting retention methods in place
* Hooked up retention worker
* Added column and UI to prevent automatic deletion
* Docs
* Removed unused backfill worker
* Added edit links to media item tabs on source view
* Clarified form wording
* Form wording (again)
* Removes header to allow embedding in frame
* Escaped links in podcast RSS builder
* Turned homepage sections into clickable links
* Enabled live dashboard in all ENVs
* Ensured download worker always returns a 2-member tuple
* Add media streaming (#108)
* [WIP] set up streaming route
* Added UUID to sources and media items
* Added media preview to MI show page
* Added plug to strip file extensions
* [VERY WIP] basic podcast RSS setup
* [WIP] got basic podcast RSS working
* [WIP] more expanding on RSS
* Comment
* [WIP] Working on refactoring feed
* Added UUID backfill to a migration
* [WIP] Moar refactoring
* [WIP] Adding UI for getting RSS feed
* Many tests
* Added conditional routing for feed URLs
* Removed the need for url_base to be set
* Updated preset name
* Rendered certain fields HTML-safe; Added logging to confirm range request support
* Fixed incorrect scheme issue
* Updated env var
* Updated other UI to use dropdown
* removed commented code
* Generate rss feeds (#123)
* Added plug to strip file extensions
* [VERY WIP] basic podcast RSS setup
* [WIP] got basic podcast RSS working
* [WIP] more expanding on RSS
* [WIP] Working on refactoring feed
* Added UUID backfill to a migration
* [WIP] Moar refactoring
* [WIP] Adding UI for getting RSS feed
* Many tests
* Added conditional routing for feed URLs
* Removed the need for url_base to be set
* Updated preset name
* Rendered certain fields HTML-safe; Added logging to confirm range request support
* Fixed incorrect scheme issue
* Updated env var
* Updated other UI to use dropdown
* removed commented code
* docs
* Added unique index to UUID fields
* increased file follower timeout to 10 minutes
* Removed unique index across a source's collection and its media profile
* Ensure source gets updating during slow indexing
* Hooked up series directory finding to source metadata runner
* Fixed aired NFO tag for episodes
* Updated MI NFO builder to take in a filepath
* Hooked up NFO generation to the source worker
* Added NFO controls to form
* Improved the way the source metadata worker updates the source
* Consolidated NFO selection options in media profile instead of source
* Adds method to improve cleanup of empty directories
* resolved bug where source metadata worker could call itself in an infinite loop
* Refactored file deletion for media items
* Removed useless filesystem data worker
* Updated task listing fns to take a record directly
* Refactored the way I call workers
* Improved some tests
* Add media profile presets (#85)
* Added presets for output templates
* Added presets for the entire media profile form
* Append `-thumb` to thumbnails when downloading (#87)
* Appended -thumb to thumbnails when downloading
* Added code to compensate for yt-dlp bug
* Squash all the commits from the other branch bc I broke things (#88)
* [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 download options to take a media item; allowed for specifying custom output path template options
* Fixed bug where indexing job wouldn't run for the first time
* Renamed friendly_name to custom_name
* Added new options to default template and UI
* Improved explainer UI
* Added tabbed view; improved relationships for media profile
* Adds new maybe_limit method for queries
* Improves UI for media items, associated tasks