Adds the ability to create map and list-based override variables.
For example, you can now create lists like this:
```
overrides:
urls:
- "https://...1"
- "https://...2"
```
which is equivalent to:
```
overrides:
urls: >-
{
[
"https://...1",
"https://...2",
]
}
```
Likewise, maps can now look like:
```
overrides:
music_video_category:
concerts:
- "https://...1"
- "https://...2"
interviews:
- "https://...3"
```
which is equivalent to:
```
overrides:
music_video_category: >-
{
"concerts": [
"https://...1",
"https://...2"
],
"interviews": [
"https://...3"
]
}
```
With the right functions, it was possible for subscription validation to raise a false-positive error. This should hopefully resolve that issue and give validation a small performance increase
A complete gutting of the internals of ytdl-sub to support functions in our variable syntax, in addition to being able to access a yt-dlp entry's .info.json fields using functions. Functionally, ytdl-sub should still look and behave the same from a user-perspective.
With so many lines of code changed (+8927, -2708), no doubt there will be new issues. Please make a GH issue or reach out on Discord if your config/subscriptions break in any way/shape/form.
Details on how to use function support will come soon in the form of proper documentation in our readthedocs.
Adds a new mechanism to limit subscriptions' number of videos to an explicit number (only supported date ranges prior to this).
Example usage:
```
output_options:
keep_max_files: 10
```
will only keep 10 videos at max.
In addition:
- `keep_max_files` is bundled into the `Only Recent` preset and can be used via setting the `only_recent_max_files` override variable (see examples or README for usage).
- Changed the `date_range` variable name to `only_recent_date_range` for more clarity. Usage of `date_range` will continue to work.
Provides options to make ytdl-sub look more 'human-like' to protect from throttling. For range-based values, a random number will be chosen within the range to avoid sleeps looking scripted.
Usage:
```
throttle_protection:
sleep_per_download_s:
min: 2.2
max: 10.8
sleep_per_subscription_s:
min: 9.0
max: 14.1
max_downloads_per_subscription:
min: 10
max: 36
subscription_download_probability: 1.0
```
Closes Feature Request: https://github.com/jmbannon/ytdl-sub/issues/743
Subscriptions support using presets as keys, and using keys to set override variables as values.
For example:
```
tv_show:
only_recent:
[News]:
"Breaking News": "https://www.youtube.com/@SomeBreakingNews"
[Tech]:
"Two Minute Papers": "https://www.youtube.com/@TwoMinutePapers"
```
Will create two subscriptions named "Breaking News" and "Two Minute Papers", equivalent to:
```
"Breaking News":
preset:
- "tv_show"
- "only_recent"
overrides:
subscription_indent_1: "News"
subscription_name: "Breaking News"
subscription_value: "https://www.youtube.com/@SomeBreakingNews"
"Two Minute Papers":
preset:
- "tv_show"
overrides:
subscription_indent_1: "Tech"
subscription_name: "Two Minute Papers" subscription_value: "https://www.youtube.com/@TwoMinutePapers"
```
You can provide as many parent presets in the form of keys, and subscription indents as ``[keys]``.
This can drastically simplify subscription definitions by setting things you want configurable like so in your
parent preset:
```
presets:
tv_show_name:
overrides:
tv_show_name: "{subscription_name}"
url: "{subscription_value}"
genre: "{subscription_indent_1}"
```
NOTE!!!
Changing your subscription name from 'legacy' subscriptions will need their download archive file migrated to a new name. A future update will assist in this migration process. Either wait until then or, if you consider yourself a ytdl-sub expert, keep a backup of your subscription file before migrating.
* [FEATURE
] Reformat existing downloads
* working?!?!
* reformat in output dir
* close, need info json enabled by default
* asdfadsfsaf
* lint
* closer
* multi created variables do not exist for update command!
* info json downloader
* [REFACTOR] Shared plugin and download options class
* more refactoring
* lint
* put in initialize plugins
* changes
* [REFACTOR] simplify enhanced download archive
* working!
* in main
* simplified, many url tests working
* ready?
* [BUGFIX] Fix missing contains function when checking entries
* remove children func
* [BACKEND] Bandcamp e2e test, update music example
* WIP
* combine soundcloud and all music into music_audio config
* sc fixtures
* updated tests and examples
* bandcamp e2e test
* regen off
* remove url validators
* use bandcamp artist url for more parent coverage
* lint
* actually working
* changed plugin format. Need unit tests, documentation, update e2e to filter
* refactor plugin name, matching now working
* description work in progress, need more intricate testing
* tests looks good, regenerate output
* e2e tested, need more failure tests, no dupe variable names, add docs
* unit tests passing again
* more fail tests
* updated with name, default, better docs
* sanitized vars created
* youtube video url
* WIP, channel /user/ and /c/ should be valid
* unit tests passing
* soundcloud artist url
* soundcloud username
* break configs with name change
* Update all yamls with urls
* update all docs
* more negative url tests