Add rescue block to SourceDeletionWorker to handle cases where the
source no longer exists. This prevents infinite retries when a deletion
job fails and the source has already been removed from the database.
Include :executing in the unique states list for both FastIndexingWorker
and MediaCollectionIndexingWorker. This ensures Oban properly tracks
executing jobs and prevents potential duplicate job issues.
Without :executing in the unique states, the uniqueness check doesn't
consider currently running jobs, which could lead to jobs not appearing
in the UI's active tasks view or duplicate jobs being scheduled.
After each successful indexing run, the source's download_cutoff_date is
automatically advanced to 7 days ago if the current cutoff date is older
(or nil). This prevents yt-dlp from scanning through months of old videos
on every index run, significantly improving indexing performance for
channels with large backlogs.
The 7-day buffer ensures recent videos are still checked on subsequent
index runs while keeping indexing fast (minutes instead of hours).
Also updates AGENTS.md to document Docker-based development workflow
and adds Pinchflat_improvements.md for tracking known issues.
Consolidate the home page UI by moving Active Tasks from a separate
section into a third tab alongside Downloaded and Pending tabs.
Co-authored-by: Daniel <ddacunha@MacBook-Pro-14.local>
* Bumped Elixir
* Silenced mix check warnings
* Updated all deps with minor version upgrades
* Updated more deps; Refactored text components to work with phoenix_html updates
* Sources that use cookies when_needed now retry downloads if we think it'd help
* tweaked error message we're checking on to match media_download_worker
* Added last_error to media item table
* Error messages are now persisted to the last_error field
* Minor layout updates
* Added help tooltip to source content view
* Added error information to homepage tables
* Remove unneeded index
* Added docs to tooltip component
* Added a command for updating yt-dlp
* Added a yt-dlp update worker to run daily
* Added a new file that runs post-boot when the app is ready to serve requests; put yt-dlp updater in there
* Updated config to expose the current env globally; updated startup tasks to not run in test env
* Removes unneeded test code
* Updated default job priorities for downloading queue
* Added the ability to set priority to various downloading helpers
* Sets sources to fast index on creation
* Added sleep interval to settings
* Added new sleep setting to yt-dlp runner and added tests
* Added setting for form; updated setting name
* Updated form label
* Prevented saving/updating of media items if being throttled by youtube
* Added the bot message to the list of non-retryable errors
* Fixed typo
* Added prometheus to deps list
* WIP - screwing around with Prometheus and grafana
* Added basic prometheus config
* Updated docs in prom_ex module
* Updated README
* WIP - moved plugs; set up a new token-protected route plug
* Added a route_token column to settings model
* Hooked up token_protected_route plug to database
* Hooked up new OPML route to UI; turned RSS and OPML feed buttons into links
* Docs, tests
* Added a note about the phoenix bug
* Added OPML Endpoint for podcast rss feeds
* changed opml route and added controller test for opml endpoint
* add copy opml feed button
* add copy opml feed button - correct url
* fix html indenting
* add indentation to opml
Co-authored-by: Kieran <kieran.eglin@gmail.com>
* use convention for unused controller params
Co-authored-by: Kieran <kieran.eglin@gmail.com>
* add test for opml_sources helper function
* change opml endpoint to be more inline with the other routes
---------
Co-authored-by: robs <git@robs.social>
Co-authored-by: Kieran <kieran.eglin@gmail.com>
* Updated yt-dlp runner to take an action type
* Added actions to all callers of the yt-dlp runner
* [SQUASH] updated test files to use new mocking strategy
* Removed unneeded alias
* 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
* Separate tabs for pending and downloaded in media history
- closes#504
* correct query for pending state and remove unecessary assign
* correct pending where
---------
Co-authored-by: robs <git@robs.social>
* Moved quality options to their own module
* Added language and format selection to quality option builder
* [WIP] migrating tests
* Added audio_lang to media_profile table
* Renamed column; added format options and tests
* Adds UI for audio_track to the media profile form
* Adds a version string to in-app streams to help with cache busting
* Added logic to ignore downloads that aren't in the right live state
* Added tests for get_downloadable_status method
* Added tests for media downloader module
* Added tests to download worker modeule
* [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
* Add option to use existing Media Profile as template for new profile
* Forgot to commit the edit form too
* Reset deletion mark on Source controller
* Add test for new preload profile feature
* mix check