Merge remote-tracking branch 'meisnate12/nightly' into nightly
2
VERSION
|
@ -1 +1 @@
|
|||
1.20.0-develop24
|
||||
1.20.0-develop29
|
||||
|
|
|
@ -596,6 +596,7 @@ dynamic_collections:
|
|||
- Haoliners Huimeng Animation
|
||||
- Haoliners Animation
|
||||
Illumination Entertainment:
|
||||
- Illumination
|
||||
- Illumination Films
|
||||
J.C.Staff:
|
||||
- J.C. Staff
|
||||
|
|
BIN
defaults/overlays/images/network/color/7mate.png
Normal file
After Width: | Height: | Size: 9.7 KiB |
BIN
defaults/overlays/images/network/color/Angel Studios.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
defaults/overlays/images/network/color/Kanal 5.png
Normal file
After Width: | Height: | Size: 6 KiB |
BIN
defaults/overlays/images/network/color/SVT Play.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
defaults/overlays/images/network/color/SVT.png
Normal file
After Width: | Height: | Size: 6.9 KiB |
BIN
defaults/overlays/images/network/color/Seven Network.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
defaults/overlays/images/network/color/TV4 Play.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
defaults/overlays/images/network/color/The Daily Wire.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
defaults/overlays/images/network/white/7mate.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
BIN
defaults/overlays/images/network/white/Angel Studios.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
defaults/overlays/images/network/white/Kanal 5.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
defaults/overlays/images/network/white/SVT Play.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
defaults/overlays/images/network/white/SVT.png
Normal file
After Width: | Height: | Size: 6.9 KiB |
BIN
defaults/overlays/images/network/white/Seven Network.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
defaults/overlays/images/network/white/TV4 Play.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
defaults/overlays/images/network/white/The Daily Wire.png
Normal file
After Width: | Height: | Size: 13 KiB |
|
@ -72,12 +72,6 @@ vars:
|
|||
v1-4: &v1-4 {vertical_offset: 198}
|
||||
v1-5: &v1-5 {vertical_offset: 259}
|
||||
|
||||
v0-1: &v0-1 {vertical_offset: -122}
|
||||
v0-2: &v0-2 {vertical_offset: -61}
|
||||
v0-3: &v0-3 {vertical_offset: 0}
|
||||
v0-4: &v0-4 {vertical_offset: 61}
|
||||
v0-5: &v0-5 {vertical_offset: 122}
|
||||
|
||||
v2-1: &v2-1 {vertical_offset: 150}
|
||||
v2-2: &v2-2 {vertical_offset: 211}
|
||||
v2-3: &v2-3 {vertical_offset: 272}
|
||||
|
@ -90,6 +84,24 @@ vars:
|
|||
v3-4: &v3-4 {vertical_offset: 406}
|
||||
v3-5: &v3-5 {vertical_offset: 467}
|
||||
|
||||
vct-1: &vct-1 {vertical_offset: -244}
|
||||
vct-2: &vct-2 {vertical_offset: -183}
|
||||
vct-3: &vct-3 {vertical_offset: -122}
|
||||
vct-4: &vct-4 {vertical_offset: -61}
|
||||
vct-5: &vct-5 {vertical_offset: 0}
|
||||
|
||||
vc-1: &vc-1 {vertical_offset: -122}
|
||||
vc-2: &vc-2 {vertical_offset: -61}
|
||||
vc-3: &vc-3 {vertical_offset: 0}
|
||||
vc-4: &vc-4 {vertical_offset: 61}
|
||||
vc-5: &vc-5 {vertical_offset: 122}
|
||||
|
||||
vcb-1: &vcb-1 {vertical_offset: 0}
|
||||
vcb-2: &vcb-2 {vertical_offset: 61}
|
||||
vcb-3: &vcb-3 {vertical_offset: 122}
|
||||
vcb-4: &vcb-4 {vertical_offset: 183}
|
||||
vcb-5: &vcb-5 {vertical_offset: 244}
|
||||
|
||||
vc-c: &vc-c {vertical_offset: 0}
|
||||
vc-t: &vc-t {vertical_offset: -30}
|
||||
vc-b: &vc-b {vertical_offset: 30}
|
||||
|
@ -155,29 +167,29 @@ queues:
|
|||
vertical_top3_right2: [<<: [*top_right, *v3-1, *h1-2], *v3-2, *v3-3, *v3-4, *v3-5]
|
||||
vertical_top3_right: [<<: [*top_right, *v3-1, *h1-1], *v3-2, *v3-3, *v3-4, *v3-5]
|
||||
|
||||
vertical_center_top_left: [<<: [*center_left, *v0-1, *h1-1], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_top_left2: [<<: [*center_left, *v0-1, *h1-2], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_top_center_left: [<<: [*center_center, *v0-1, *hc-l], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_top_center: [<<: [*center_center, *v0-1, *hc-c], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_top_center_right: [<<: [*center_center, *v0-1, *hc-r], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_top_right2: [<<: [*center_right, *v0-1, *h1-2], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_top_right: [<<: [*center_right, *v0-1, *h1-1], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_top_left: [<<: [*center_left, *vct-1, *h1-1], *vct-2, *vct-3, *vct-4, *vct-5]
|
||||
vertical_center_top_left2: [<<: [*center_left, *vct-1, *h1-2], *vct-2, *vct-3, *vct-4, *vct-5]
|
||||
vertical_center_top_center_left: [<<: [*center_center, *vct-1, *hc-l], *vct-2, *vct-3, *vct-4, *vct-5]
|
||||
vertical_center_top_center: [<<: [*center_center, *vct-1, *hc-c], *vct-2, *vct-3, *vct-4, *vct-5]
|
||||
vertical_center_top_center_right: [<<: [*center_center, *vct-1, *hc-r], *vct-2, *vct-3, *vct-4, *vct-5]
|
||||
vertical_center_top_right2: [<<: [*center_right, *vct-1, *h1-2], *vct-2, *vct-3, *vct-4, *vct-5]
|
||||
vertical_center_top_right: [<<: [*center_right, *vct-1, *h1-1], *vct-2, *vct-3, *vct-4, *vct-5]
|
||||
|
||||
vertical_center_left: [<<: [*center_left, *v0-1, *h1-1], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_left2: [<<: [*center_left, *v0-1, *h1-2], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_center_left: [<<: [*center_center, *v0-1, *hc-l], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_center: [<<: [*center_center, *v0-1, *hc-c], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_center_right: [<<: [*center_center, *v0-1, *hc-r], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_right2: [<<: [*center_right, *v0-1, *h1-2], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_right: [<<: [*center_right, *v0-1, *h1-1], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_left: [<<: [*center_left, *vc-1, *h1-1], *vc-2, *vc-3, *vc-4, *vc-5]
|
||||
vertical_center_left2: [<<: [*center_left, *vc-1, *h1-2], *vc-2, *vc-3, *vc-4, *vc-5]
|
||||
vertical_center_center_left: [<<: [*center_center, *vc-1, *hc-l], *vc-2, *vc-3, *vc-4, *vc-5]
|
||||
vertical_center_center: [<<: [*center_center, *vc-1, *hc-c], *vc-2, *vc-3, *vc-4, *vc-5]
|
||||
vertical_center_center_right: [<<: [*center_center, *vc-1, *hc-r], *vc-2, *vc-3, *vc-4, *vc-5]
|
||||
vertical_center_right2: [<<: [*center_right, *vc-1, *h1-2], *vc-2, *vc-3, *vc-4, *vc-5]
|
||||
vertical_center_right: [<<: [*center_right, *vc-1, *h1-1], *vc-2, *vc-3, *vc-4, *vc-5]
|
||||
|
||||
vertical_center_bottom_left: [<<: [*center_left, *v0-1, *h1-1], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_bottom_left2: [<<: [*center_left, *v0-1, *h1-2], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_bottom_center_left: [<<: [*center_center, *v0-1, *hc-l], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_bottom_center: [<<: [*center_center, *v0-1, *hc-c], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_bottom_center_right: [<<: [*center_center, *v0-1, *hc-r], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_bottom_right2: [<<: [*center_right, *v0-1, *h1-2], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_bottom_right: [<<: [*center_right, *v0-1, *h1-1], *v0-2, *v0-3, *v0-4, *v0-5]
|
||||
vertical_center_bottom_left: [<<: [*center_left, *vcb-1, *h1-1], *vcb-2, *vcb-3, *vcb-4, *vcb-5]
|
||||
vertical_center_bottom_left2: [<<: [*center_left, *vcb-1, *h1-2], *vcb-2, *vcb-3, *vcb-4, *vcb-5]
|
||||
vertical_center_bottom_center_left: [<<: [*center_center, *vcb-1, *hc-l], *vcb-2, *vcb-3, *vcb-4, *vcb-5]
|
||||
vertical_center_bottom_center: [<<: [*center_center, *vcb-1, *hc-c], *vcb-2, *vcb-3, *vcb-4, *vcb-5]
|
||||
vertical_center_bottom_center_right: [<<: [*center_center, *vcb-1, *hc-r], *vcb-2, *vcb-3, *vcb-4, *vcb-5]
|
||||
vertical_center_bottom_right2: [<<: [*center_right, *vcb-1, *h1-2], *vcb-2, *vcb-3, *vcb-4, *vcb-5]
|
||||
vertical_center_bottom_right: [<<: [*center_right, *vcb-1, *h1-1], *vcb-2, *vcb-3, *vcb-4, *vcb-5]
|
||||
|
||||
vertical_bottom3_left: [<<: [*bottom_left, *v3-1, *h1-1], *v3-2, *v3-3, *v3-4, *v3-5]
|
||||
vertical_bottom3_left2: [<<: [*bottom_left, *v3-1, *h1-2], *v3-2, *v3-3, *v3-4, *v3-5]
|
||||
|
|
|
@ -69,6 +69,10 @@ overlays:
|
|||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
||||
7mate:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
||||
ABC:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, {name: networks, search: [ABC, ABC.com]}]
|
||||
|
@ -125,6 +129,10 @@ overlays:
|
|||
variables: { weight: 10}
|
||||
template: [name: standard, {name: networks, search: [Animal Planet, Animal Planet Brasil, Animal Planet Deutschland]}]
|
||||
|
||||
Angel Studios:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, {name: networks, search: [Angel Studios, VidAngel]}]
|
||||
|
||||
Antena 3:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
@ -565,6 +573,10 @@ overlays:
|
|||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
||||
Kanal 5:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
||||
KBS2:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
@ -777,6 +789,10 @@ overlays:
|
|||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
||||
Seven Network:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
||||
Shahid:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
@ -837,6 +853,14 @@ overlays:
|
|||
variables: { weight: 10}
|
||||
template: [name: standard, {name: networks, search: [Sundance TV, SundanceTV]}]
|
||||
|
||||
SVT:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
||||
SVT Play:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
||||
SVT1:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
@ -885,6 +909,10 @@ overlays:
|
|||
variables: { weight: 10}
|
||||
template: [name: standard, {name: networks, search: [The CW, CW seed]}]
|
||||
|
||||
The Daily Wire:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
||||
The Roku Channel:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
@ -945,6 +973,10 @@ overlays:
|
|||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
||||
TV4 Play:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
||||
TVB Jade:
|
||||
variables: { weight: 10}
|
||||
template: [name: standard, name: networks]
|
||||
|
|
|
@ -980,7 +980,7 @@ overlays:
|
|||
template: [name: standard, name: studios]
|
||||
|
||||
Illumination Entertainment:
|
||||
template: [name: standard, {name: studios, search: [Illumination Entertainment, Illumination Films]}]
|
||||
template: [name: standard, {name: studios, search: [Illumination, Illumination Entertainment, Illumination Films]}]
|
||||
|
||||
Imagin:
|
||||
template: [name: standard, name: studios]
|
||||
|
|
|
@ -40,6 +40,7 @@ dynamic_collections:
|
|||
default: true
|
||||
include:
|
||||
- "#0"
|
||||
- 7mate
|
||||
- ABC
|
||||
- ABC Family
|
||||
- ABC Kids
|
||||
|
@ -54,6 +55,7 @@ dynamic_collections:
|
|||
- AMC
|
||||
- AMC+
|
||||
- Animal Planet
|
||||
- Angel Studios
|
||||
- Antena 3
|
||||
- Apple TV+
|
||||
- ARD
|
||||
|
@ -166,6 +168,7 @@ dynamic_collections:
|
|||
- joyn
|
||||
- JTBC
|
||||
- Kan 11
|
||||
- Kanal 5
|
||||
- KBS2
|
||||
- Kids WB
|
||||
- La 1
|
||||
|
@ -219,6 +222,7 @@ dynamic_collections:
|
|||
- SAT.1
|
||||
- SBS
|
||||
- Science
|
||||
- Seven Network
|
||||
- Shahid
|
||||
- Showcase
|
||||
- Showmax
|
||||
|
@ -234,6 +238,8 @@ dynamic_collections:
|
|||
- Starz
|
||||
- STAR+
|
||||
- Sundance TV
|
||||
- SVT
|
||||
- SVT Play
|
||||
- SVT1
|
||||
- Syfy
|
||||
- Syndication
|
||||
|
@ -246,6 +252,7 @@ dynamic_collections:
|
|||
- Tencent Video
|
||||
- TF1
|
||||
- The CW
|
||||
- The Daily Wire
|
||||
- The Roku Channel
|
||||
- The WB
|
||||
- TLC
|
||||
|
@ -261,6 +268,7 @@ dynamic_collections:
|
|||
- TV Tokyo
|
||||
- TV3
|
||||
- TV4
|
||||
- TV4 Play
|
||||
- TVB Jade
|
||||
- tving
|
||||
- tvN
|
||||
|
@ -306,6 +314,8 @@ dynamic_collections:
|
|||
Animal Planet:
|
||||
- Animal Planet Brasil
|
||||
- Animal Planet Deutschland
|
||||
Angel Studios:
|
||||
- VidAngel
|
||||
BET:
|
||||
- BET Her
|
||||
Canal+:
|
||||
|
|
|
@ -58,10 +58,10 @@ work. Any value not specified will use its default value if it has one if not it
|
|||
| `name_<<key>>`<sup>1</sup> | **Description:** Changes the name of the specified key's playlist.<br>**Values:** New Playlist Name |
|
||||
| `summary_<<key>>`<sup>1</sup> | **Description:** Changes the summary of the specified key's playlist.<br>**Values:** New Playlist Summary |
|
||||
| `libraries` | **Description:** Sets the names of the libraries to use for the Playlists.<br>**Default:** `Movies, TV Shows`<br>**Values:** Comma-separated string or list of library mapping names defined in the `libraries` attribute in the base of your [Configuration File](../config/overview.md. |
|
||||
| `sync_to_user` | **Description:** Sets the users to sync all playlists to.<br>**Default:** `playlist_sync_to_users` Global Setting Value<br>**Values:** Comma-separated string or list of user names. |
|
||||
| `sync_to_user_<<key>>`<sup>1</sup> | **Description:** Sets the users to sync the specified key's playlist to.<br>**Default:** `sync_to_user` Value<br>**Values:** Comma-separated string or list of user names. |
|
||||
| `sync_to_users` | **Description:** Sets the users to sync all playlists to.<br>**Default:** `playlist_sync_to_users` Global Setting Value<br>**Values:** Comma-separated string or list of user names. |
|
||||
| `sync_to_users_<<key>>`<sup>1</sup> | **Description:** Sets the users to sync the specified key's playlist to.<br>**Default:** `sync_to_user` Value<br>**Values:** Comma-separated string or list of user names. |
|
||||
| `exclude_user` | **Description:** Sets the users to exclude from sync for all playlists.<br>**Default:** `playlist_sync_to_users` Global Setting Value<br>**Values:** Comma-separated string or list of user names. |
|
||||
| `exclude_user_<<key>>`<sup>1</sup> | **Description:** Sets the users to exclude from sync the specified key's playlist.<br>**Default:** `sync_to_user` Value<br>**Values:** Comma-separated string or list of user names. |
|
||||
| `exclude_user_<<key>>`<sup>1</sup> | **Description:** Sets the users to exclude from sync the specified key's playlist.<br>**Default:** `sync_to_users` Value<br>**Values:** Comma-separated string or list of user names. |
|
||||
| `trakt_list_<<key>>`<sup>1</sup> | **Description:** Adds the Movies in the Trakt List to the specified key's playlist. Overrides the [default trakt_list](#default-trakt_list) for that playlist if used.<br>**Values:** List of Trakt List URLs | | | |
|
||||
| `delete_playlist` | **Description:** Will delete all playlists for the users defined by sync_to_users.<br>**Values:** `true` or `false` |
|
||||
| `delete_playlist_<<key>>`<sup>1</sup> | **Description:** Will delete the specified key's playlists for the users defined by sync_to_users.<br>**Values:** `true` or `false` |
|
||||
|
|
|
@ -161,7 +161,7 @@ In addition, templates also have a few special attributes that they can use:
|
|||
|
||||
3. Using the exists modifier by appending `.exists` to the key template variable:
|
||||
|
||||
* While `ture` the template variable specified must exist in the template call.
|
||||
* While `true` the template variable specified must exist in the template call.
|
||||
* While anything but `true` the template variable specified must not exist in the template call.
|
||||
|
||||
???+ example "Example"
|
||||
|
|
|
@ -64,9 +64,11 @@ To install a container from docker hub, you will need community applications - a
|
|||
|
||||
3. Choose which branch you want to run `latest`, `develop`, or `nightly`.
|
||||
|
||||
4. Click `Show more settings...` to set any [Environmental Variables](../environmental.md) you wish to use. **For the purposes of this walkthrough, the** `Container Path: /config` **path for the unRAID app is** `/mnt/user/appdata/plex-meta-manager`
|
||||
4. Set the `Console shell command:` to `Bash`
|
||||
|
||||
5. Hit `Apply`, and allow unRAID to download the docker container.
|
||||
5. Click `Show more settings...` to set any [Environmental Variables](../environmental.md) you wish to use. **For the purposes of this walkthrough, the** `Container Path: /config` **path for the unRAID app is** `/mnt/user/appdata/plex-meta-manager`. Other than this, set the `PMM_TIME` variable to `5:00` under the `Show more settings...`
|
||||
|
||||
6. Hit `Apply`, and allow unRAID to download the docker container.
|
||||
|
||||
#### Important note on Docker images
|
||||
|
||||
|
@ -74,19 +76,29 @@ This tutorial uses the official image, and you should, too. Don't change `meisn
|
|||
|
||||
The great thing about Docker is that all the setup you'd have to do to run PMM is already done inside the docker image.
|
||||
|
||||
That means we can just jump right into running it. Open a `Console` by left-clicking on the running Plex-Meta-Manager container and selecting `>_Console`. This will open up an interactive session within the container to be able to run the commands we want.
|
||||
|
||||
```
|
||||
python plex_meta_manager.py --run
|
||||
```
|
||||
First let's start the container. Oops! The container won't start?
|
||||
This is going to fail with an error. That's expected.
|
||||
|
||||
You should see something like this:
|
||||
You should see something like this in the unRAID logs for the container:
|
||||
|
||||
```
|
||||
Config Error: config not found at //config
|
||||
```
|
||||
This is going to fail with an error, which you will then fix.
|
||||
We need to have a file called `config.yml` in the correct directory for PMM to start. Open up an unRAID terminal session by clicking on the terminal icon `>_` in the top right of unRAID.
|
||||
|
||||
=== ":fontawesome-brands-linux: Linux"
|
||||
|
||||
[type this into your terminal]
|
||||
```
|
||||
mkdir /mnt/user/appdata/plex-meta-manager/config
|
||||
touch /mnt/user/appdata/plex-meta-manager/config/config.yml
|
||||
```
|
||||
|
||||
You can now close the unRAID terminal and start the PMM container.
|
||||
|
||||
**_From this point forward, you can Console `>_Console` into the running container as it will stay running_**
|
||||
|
||||
Open a Console by left-clicking on the running Plex-Meta-Manager container and selecting `>_Console`. This will open up an interactive session within the container to be able to run the commands we want.
|
||||
|
||||
### Create a directory to quiet an error later
|
||||
|
||||
|
|
|
@ -695,16 +695,16 @@
|
|||
"minimum": 1
|
||||
},
|
||||
"default_collection_order": {
|
||||
"description": "Used to set the collection_order for every collection run.\nSet the collection_order for every collection run by PMM unless the collection has a specific collection_order",
|
||||
"description": "Used to set the collection_order for every collection run.\nSet the collection_order for every collection run by PMM unless the collection has a specific collection_order\nTIP: 'custom' cannot be used if more than one builder is being used for the collection (such as imdb_list and trakt_list within the same collection). ",
|
||||
"type": ["string", "null"],
|
||||
"enum": [
|
||||
"added.asc", "added.desc", "audience_rating.asc",
|
||||
"added.asc", "added.desc", "alpha", "audience_rating.asc",
|
||||
"audience_rating.desc", "bitrate.asc", "bitrate.desc",
|
||||
"content_rating.asc", "content_rating.desc", "critic_rating.asc",
|
||||
"critic_rating.desc", "duration.asc", "duration.desc",
|
||||
"critic_rating.desc", "custom", "duration.asc", "duration.desc",
|
||||
"originally_available.asc", "originally_available.desc",
|
||||
"plays.asc", "plays.desc", "progress.asc", "progress.desc",
|
||||
"random", "release.asc", "release.desc",
|
||||
"random", "release", "release.asc", "release.desc",
|
||||
"resolution.asc", "resolution.desc", "title.asc", "title.desc",
|
||||
"user_rating.asc", "user_rating.desc", "viewed.asc", "viewed.desc",
|
||||
"year.asc", "year.desc", null
|
||||
|
@ -944,7 +944,7 @@
|
|||
"properties": {
|
||||
"pmm": {
|
||||
"type": "string",
|
||||
"enum": ["actor", "anilist","aspect","audio_language","bafta","based","basic","berlinale","cannes","cesar","choice","collectionless","content_rating_cs","content_rating_de","content_rating_mal","content_rating_uk","content_rating_us","continent","country","decade","director","emmy","flixpatrol","franchise","genre","golden","imdb","myanimelist","network","nfr","oscars","other_chart","pca","producer","razzie","region","resolution","sag","seasonal","separator_award","separator_chart","spirit","streaming","studio","subtitle_language","sundance","tautulli","tiff","tmdb","trakt","universe","venice","writer","year"]
|
||||
"enum": ["actor", "anilist","aspect","audio_language","bafta","based","basic","berlinale","cannes","cesar","choice","collectionless","content_rating_au","content_rating_cs","content_rating_de","content_rating_mal","content_rating_uk","content_rating_us","continent","country","decade","director","emmy","flixpatrol","franchise","genre","golden","imdb","myanimelist","network","nfr","oscars","other_chart","pca","producer","razzie","region","resolution","sag","seasonal","separator_award","separator_chart","spirit","streaming","studio","subtitle_language","sundance","tautulli","tiff","tmdb","trakt","universe","venice","writer","year"]
|
||||
},
|
||||
"schedule": {
|
||||
"type": "string"
|
||||
|
@ -1568,12 +1568,13 @@
|
|||
"location": { "type": "string", "enum": ["world","albania","argentina","armenia","australia","austria","azerbaijan","bahamas","bahrain","bangladesh","belarus","belgium","belize","benin","bolivia","bosnia_and_herzegovina","botswana","brazil","bulgaria","burkina_faso","cambodia","canada","chile","colombia","costa_rica","croatia","cyprus","czech_republic","denmark","dominican_republic","ecuador","egypt","estonia","finland","france","gabon","germany","ghana","greece","guatemala","guinea_bissau","haiti","honduras","hong_kong","hungary","iceland","india","indonesia","ireland","israel","italy","ivory_coast","jamaica","japan","jordan","kazakhstan","kenya","kuwait","kyrgyzstan","laos","latvia","lebanon","lithuania","luxembourg","malaysia","maldives","mali","malta","mexico","moldova","mongolia","montenegro","morocco","mozambique","namibia","netherlands","new_zealand","nicaragua","niger","nigeria","north_macedonia","norway","oman","pakistan","panama","papua_new_guinea","paraguay","peru","philippines","poland","portugal","qatar","romania","russia","rwanda","salvador","saudi_arabia","senegal","serbia","singapore","slovakia","slovenia","south_africa","south_korea","spain","sri_lanka","sweden","switzerland","taiwan","tajikistan","tanzania","thailand","togo","trinidad_and_tobago","turkey","turkmenistan","uganda","ukraine","united_arab_emirates","united_kingdom","united_states","uruguay","uzbekistan","venezuela","vietnam","zambia","zimbabwe"] },
|
||||
"minimum": { "type": "integer"},
|
||||
"offset": { "type": "integer", "minimum": 0 },
|
||||
"overlay_limit": { "type": "integer", "minimum": 1, "maximum": 5 },
|
||||
"originals_only": { "description": "Changes Streaming Service overlays to only apply to original content produced by the service.\nNote: Cannot be used with region, and only produces overlays for amazon, appletv, disney, max, hulu, netflix, paramount, peacock", "type": "boolean" },
|
||||
"overlay_limit": { "description": "Choose the number of overlay this queue displays.\nDefault: 3\nValues: 1, 2, 3, 4, or 5", "type": "integer", "minimum": 1, "maximum": 5 },
|
||||
"position": { "type": "string", "enum": ["left","right"] },
|
||||
"post_nr_text": { "type": "string" },
|
||||
"post_text": { "type": "string" },
|
||||
"pre_nr_text": { "type": "string" },
|
||||
"pre_text": { "type": "string" },
|
||||
"post_nr_text": { "description": "Choose the text after the 'nr' key for the Overlay.\nValues: Any String", "type": "string" },
|
||||
"post_text": { "description": "Choose the text after the key for the Overlay.\nDefault: +\nValues: Any String", "type": "string" },
|
||||
"pre_nr_text": { "description": "Choose the text before the 'nr' key for the Overlay.\nValues: Any String","type": "string" },
|
||||
"pre_text": { "description": "Choose the text before the key for the Overlay.\nValues: Any String", "type": "string" },
|
||||
"rating_alignment": { "type": "string", "enum": ["vertical", "horizontal"] },
|
||||
"rating1": { "type": "string", "enum": ["critic", "audience", "user"] },
|
||||
"rating1_image": { "type": "string", "enum": ["anidb", "imdb", "letterboxd", "tmdb", "metacritic", "rt_popcorn", "rt_tomato", "trakt", "mal", "mdb", "star"] },
|
||||
|
@ -1594,7 +1595,7 @@
|
|||
"repo": { "type": "string" },
|
||||
"stroke_color": { "type": "string", "pattern": "^\\#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$" },
|
||||
"stroke_width": { "type": "integer", "exclusiveMinimum": 0 },
|
||||
"style": { "type": "string", "enum": ["compact","standard","bigger","round","square","half", "red", "black", "yellow", "gray"] },
|
||||
"style": { "type": "string", "enum": ["compact","standard","bigger","round","square","half", "red", "black", "yellow", "gray", "color", "white"] },
|
||||
"text": { "type": "string" },
|
||||
"time_window": { "type": "string", "enum": ["today","yesterday","this_week","last_week","this_month","last_month","this_year","last_year"] },
|
||||
"url": { "type": "string", "format": "uri", "pattern": "^(https?)://" },
|
||||
|
@ -1608,6 +1609,7 @@
|
|||
},
|
||||
"patternProperties": {
|
||||
"^back_color_.*$": { "type": "string", "pattern": "^\\#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$" },
|
||||
"^font_color_.*$": { "type": "string", "pattern": "^\\#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$" },
|
||||
"^country_.*$": { "type": "string", "pattern": "^[A-Z]{2}$" },
|
||||
"^file_.*$": { "type": "string" },
|
||||
"^git_.*$": { "type": "string" },
|
||||
|
|
|
@ -59,6 +59,7 @@ item_false_details = ["item_lock_background", "item_lock_poster", "item_lock_tit
|
|||
item_bool_details = ["item_tmdb_season_titles", "revert_overlay", "item_assets", "item_refresh"] + item_false_details
|
||||
item_details = ["non_item_remove_label", "item_label", "item_genre", "item_edition", "item_radarr_tag", "item_sonarr_tag", "item_refresh_delay"] + item_bool_details + list(plex.item_advance_keys.keys())
|
||||
none_details = ["label.sync", "item_label.sync", "item_genre.sync", "radarr_taglist", "sonarr_taglist", "item_edition"]
|
||||
none_builders = ["radarr_tag_list", "sonarr_taglist"]
|
||||
radarr_details = [
|
||||
"radarr_add_missing", "radarr_add_existing", "radarr_upgrade_existing", "radarr_monitor_existing", "radarr_folder", "radarr_monitor",
|
||||
"radarr_search", "radarr_availability", "radarr_quality", "radarr_tag", "item_radarr_tag", "radarr_ignore_cache",
|
||||
|
@ -966,7 +967,7 @@ class CollectionBuilder:
|
|||
logger.debug(f"Validating Method: {method_key}")
|
||||
logger.debug(f"Value: {method_data}")
|
||||
try:
|
||||
if method_data is None and method_name in all_builders + plex.searches:
|
||||
if method_data is None and method_name in all_builders + plex.searches and method_final not in none_builders:
|
||||
raise Failed(f"{self.Type} Error: {method_final} attribute is blank")
|
||||
elif method_data is None and method_final not in none_details:
|
||||
logger.warning(f"Collection Warning: {method_final} attribute is blank")
|
||||
|
|
|
@ -918,7 +918,7 @@ class ConfigFile:
|
|||
default_path = os.path.join(default_dir, f"{str(library_name)}_Metadata_Backup.yml")
|
||||
if "path" not in input_dict:
|
||||
logger.warning(f"Config Warning: path attribute not found using default: {default_path}")
|
||||
if "path" in input_dict and not input_dict["path"]:
|
||||
elif "path" in input_dict and not input_dict["path"]:
|
||||
logger.warning(f"Config Warning: path attribute blank using default: {default_path}")
|
||||
else:
|
||||
default_path = input_dict["path"]
|
||||
|
|
|
@ -1123,10 +1123,14 @@ class Operations:
|
|||
if "year" in mv:
|
||||
special_names[f"{mv['title']} ({mv['year']})"] = mk
|
||||
items = self.library.get_all(load=True)
|
||||
titles = [i.title for i in items]
|
||||
titles = []
|
||||
year_titles = []
|
||||
for item in items:
|
||||
titles.append(item.title)
|
||||
year_titles.append(f"{item.title} ({item.year})")
|
||||
for i, item in enumerate(items, 1):
|
||||
logger.ghost(f"Processing: {i}/{len(items)} {item.title}")
|
||||
map_key, attrs = self.library.get_locked_attributes(item, titles)
|
||||
map_key, attrs = self.library.get_locked_attributes(item, titles, year_titles)
|
||||
if map_key in special_names:
|
||||
map_key = special_names[map_key]
|
||||
og_dict = yaml.data["metadata"][map_key] if map_key in yaml.data["metadata"] and yaml.data["metadata"][map_key] and isinstance(yaml.data["metadata"][map_key], dict) else {}
|
||||
|
|
|
@ -1494,27 +1494,40 @@ class Plex(Library):
|
|||
imdb_id = self.get_imdb_from_map(item)
|
||||
return tmdb_id, tvdb_id, imdb_id
|
||||
|
||||
def get_locked_attributes(self, item, titles=None):
|
||||
def get_locked_attributes(self, item, titles=None, year_titles=None):
|
||||
item = self.reload(item)
|
||||
attrs = {}
|
||||
match_dict = {}
|
||||
fields = {f.name: f for f in item.fields if f.locked}
|
||||
if isinstance(item, (Movie, Show)) and titles and titles.count(item.title) > 1:
|
||||
map_key = f"{item.title} ({item.year})"
|
||||
attrs["title"] = item.title
|
||||
attrs["year"] = item.year
|
||||
if year_titles.count(f"{item.title} ({item.year})") > 1:
|
||||
match_dict["title"] = item.title
|
||||
match_dict["year"] = item.year
|
||||
if item.editionTitle:
|
||||
map_key = f"{item.title} ({item.year}) [{item.editionTitle}]"
|
||||
match_dict["edition"] = item.editionTitle
|
||||
else:
|
||||
map_key = f"{item.title} ({item.year})"
|
||||
match_dict["blank_edition"] = True
|
||||
else:
|
||||
map_key = f"{item.title} ({item.year})"
|
||||
match_dict["title"] = item.title
|
||||
match_dict["year"] = item.year
|
||||
elif isinstance(item, (Season, Episode, Track)) and item.index:
|
||||
map_key = int(item.index)
|
||||
else:
|
||||
map_key = item.title
|
||||
|
||||
if "title" in fields:
|
||||
attrs["title"] = item.title
|
||||
if isinstance(item, (Movie, Show)):
|
||||
tmdb_id, tvdb_id, imdb_id = self.get_ids(item)
|
||||
tmdb_item = self.config.TMDb.get_item(item, tmdb_id, tvdb_id, imdb_id, is_movie=isinstance(item, Movie))
|
||||
if tmdb_item:
|
||||
attrs["alt_title"] = tmdb_item.title
|
||||
elif isinstance(item, (Season, Episode, Track)):
|
||||
attrs["title"] = item.title
|
||||
match_dict["title"] = [item.title, tmdb_item.title]
|
||||
|
||||
if match_dict:
|
||||
attrs["match"] = match_dict
|
||||
|
||||
def check_field(plex_key, pmm_key, var_key=None):
|
||||
if plex_key in fields and pmm_key not in self.metadata_backup["exclude"]:
|
||||
|
@ -1532,6 +1545,7 @@ class Plex(Library):
|
|||
attrs[pmm_key] = plex_value
|
||||
|
||||
check_field("titleSort", "sort_title")
|
||||
check_field("editionTitle", "edition")
|
||||
check_field("originalTitle", "original_artist" if self.is_music else "original_title")
|
||||
check_field("originallyAvailableAt", "originally_available")
|
||||
check_field("contentRating", "content_rating")
|
||||
|
|