* 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)
* 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
* Removed collection_type user input instead inferring from yt-dlp response
* Updated docs
* Added delete buttons for source; Refactored the way deletion methods work
* Update source to always run an initial index
* Added deletion to the last models
* Improved clarity around deletion operation
* Improved task fetching and deletion methods
* More tests
* Added method for deleting media files and their content
* Adds controllers and methods for deleting media and files
* Improved tmpfile setup and teardown for tests
* Actually got tmpfile cleanup running once per suite run
* Finally fixed flash messages
* Adds description to media items; hooks it up to indexing/media downloading
* Added a search method using postgres fulltext search
* Hooked up search functionality to the search form
* Added persistence to the search form when on search page
* 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
* [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
* 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