* WIP - started improving handling of sorting for sources index table
* WIP - Added UI to table to indicate sort column and direction
* Refactored toggle liveview into a livecomponent
* Added sorting for all table attrs
* Added pagination to the sources table
* Added tests for updated liveviews and live components
* Add tests for new helper methods
* Added fancy new CSS to my sources table
* Added size to sources table
* Adds relative div to ensure that sorting arrow doesn't run away
* Fixed da tests
* [Unrelated] updated module name for existing liveview module
* Updated toggle component and moved MP index table to a liveview
* [WIP] reverted MP index table; added source count to MP index
* Moved new live table to sources index
* Added 'enabled' boolean to sources
* Got 'enabled' logic working re: downloading pending media
* Updated sources context to do the right thing when a source is updated
* Docs and tests
* Updated slow indexing to maintain its old schedule if re-enabled
* Hooked up the enabled toggle to the sources page
* [Unrelated] added direct links to various tabs on the sources table
* More tests
* Removed unneeded guard in
* Removed outdated comment
* [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
* 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
* Added scratchpad dir
* Installed Alpine
* [WIP] began integrating Tailwind and accompanying theme
* [WIP] Set up basic views for sources
* Adds new UI to media profiles page
* Removes unneeded view
* Updated package.json (and made an excuse to make a branch)
* Video filepath parser (#6)
* Restructured files; Added parser placeholder
* More restructuring
* Added basic parser for hydrating template strings
* Improved docs
* More docs
* Initial implementation of media profiles (#7)
* [WIP] Added basic video download method
* [WIP] Very-WIP first steps at parsing options and downloading
* Made my options safe by default and removed special safe versions
* Ran html generator for mediaprofile model - leaving as-is for now
* Addressed a bunch of TODO comments
* Add "channel" type Media Source (#8)
* [WIP] Working on fetching channel metadata in yt-dlp backend
* Finished first draft of methods to do with querying channels
* Renamed CommandRunnerMock to have a more descriptive name
* Ran the phx generator for the channel model
* Renamed Downloader namespace to MediaClient
* [WIP] saving before attempting LiveView
* LiveView did not work out but here's a working controller how about
* Index a channel (#9)
* Ran a MediaItem generator; Reformatted to my liking
* [WIP] added basic index function
* setup oban
* Added basic Oban job for indexing
* Added in workers for indexing; hooked them into record creation flow
* Added a task model with a phx generator
* Tied together tasks with jobs and channels
* Download indexed videos (#10)
* Clarified documentation
* more comments
* [WIP] hooked up basic video downloading; starting work on metadata
* Added metadata model and parsing
Adding the metadata model made me realize that, in many cases, yt-dlp
returns undesired input in stdout, breaking parsing. In order to get
the metadata model working, I had to change the way in which the app
interacts with yt-dlp. Now, output is written as a file to disk which
is immediately re-read and returned.
* Added tests for video download worker
* Hooked up video downloading to the channel indexing pipeline
* Adds tasks for media items
* Updated video metadata parser to extract the title
* Ran linting
* Added credo
* Added and ran Prettier; First pass at GH Actions
* Updated actions workflow to hopefully work on this branch
* Name the folder correctly how about
* Added proper container prefix to commands
* Apparently you have to get back into the root after commands
* CI is working, update branches to final value