diff --git a/VERSION b/VERSION index 7bc2b21f..880de668 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.17.3-develop26 +1.17.3-develop27 diff --git a/docs/metadata/filters.md b/docs/metadata/filters.md index 7e12ae88..6168d7e4 100644 --- a/docs/metadata/filters.md +++ b/docs/metadata/filters.md @@ -155,20 +155,21 @@ Number filters can **NOT** take multiple values. ### Attribute -| Number Filters | Description | Movies | Shows | Seasons | Episodes | Artists | Albums | Track | -|:------------------------------|:---------------------------------------------------------------------|:-------:|:-------------------:|:-------------------:|:--------:|:--------:|:--------:|:--------:| -| `year` | Uses the year attribute to match
minimum: `1` | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | -| `tmdb_year`2 | Uses the year on TMDb to match
minimum: `1` | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| `critic_rating` | Uses the critic rating attribute to match
`0.0` - `10.0` | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | -| `audience_rating` | Uses the audience rating attribute to match
`0.0` - `10.0` | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | -| `user_rating` | Uses the user rating attribute to match
`0.0` - `10.0` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| `tmdb_vote_count`2 | Uses the tmdb vote count to match
minimum: `1` | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| `plays` | Uses the plays attribute to match
minimum: `1` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| `duration` | Uses the duration attribute to match using minutes
minimum: `0.0` | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | -| `channels` | Uses the audio channels attribute to match
minimum: `0` | ✅ | ✅1 | ✅1 | ✅ | ❌ | ❌ | ❌ | -| `height` | Uses the height attribute to match
minimum: `0` | ✅ | ✅1 | ✅1 | ✅ | ❌ | ❌ | ❌ | -| `width` | Uses the width attribute to match
minimum: `0` | ✅ | ✅1 | ✅1 | ✅ | ❌ | ❌ | ❌ | -| `aspect` | Uses the aspect attribute to match
minimum: `0.0` | ✅ | ✅1 | ✅1 | ✅ | ❌ | ❌ | ❌ | +| Number Filters | Description | Movies | Shows | Seasons | Episodes | Artists | Albums | Track | +|:------------------------------|:---------------------------------------------------------------------|:-------:|:-------------------:|:-------------------:|:--------:|:-------------------:|:-------------------:|:--------:| +| `year` | Uses the year attribute to match
minimum: `1` | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | +| `tmdb_year`2 | Uses the year on TMDb to match
minimum: `1` | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| `critic_rating` | Uses the critic rating attribute to match
`0.0` - `10.0` | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | +| `audience_rating` | Uses the audience rating attribute to match
`0.0` - `10.0` | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | +| `user_rating` | Uses the user rating attribute to match
`0.0` - `10.0` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| `tmdb_vote_count`2 | Uses the tmdb vote count to match
minimum: `1` | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| `plays` | Uses the plays attribute to match
minimum: `1` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| `duration` | Uses the duration attribute to match using minutes
minimum: `0.0` | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | +| `channels` | Uses the audio channels attribute to match
minimum: `0` | ✅ | ✅1 | ✅1 | ✅ | ❌ | ❌ | ❌ | +| `height` | Uses the height attribute to match
minimum: `0` | ✅ | ✅1 | ✅1 | ✅ | ❌ | ❌ | ❌ | +| `width` | Uses the width attribute to match
minimum: `0` | ✅ | ✅1 | ✅1 | ✅ | ❌ | ❌ | ❌ | +| `aspect` | Uses the aspect attribute to match
minimum: `0.0` | ✅ | ✅1 | ✅1 | ✅ | ❌ | ❌ | ❌ | +| `versions` | Uses the number of versions found to match
minimum: `0` | ✅ | ✅1 | ✅1 | ✅ | ✅1 | ✅1 | ✅ | 1 Filters using the special `episodes` [filter](#special-filters) with the [default percent](details/setting). diff --git a/docs/metadata/overlay.md b/docs/metadata/overlay.md index b689e42e..25780a94 100644 --- a/docs/metadata/overlay.md +++ b/docs/metadata/overlay.md @@ -205,7 +205,7 @@ There are multiple Special Text Variables that can be used when formatting the t | `<>`: Number of Episodes (`1`)
`<>`: Number of Episodes As Words (`One`)
`<>`: Number of Episodes With 10s Padding (`01`)
`<>`: Number of Episodes With 100s Padding (`001`) | ❌ | ✅ | ✅ | ❌ | | `<>`: Season Number (`1`)
`<>`: Season Number As Words (`One`)
`<>`: Season Number With 10s Padding (`01`)
`<>`: Season Number With 100s Padding (`001`) | ❌ | ❌ | ✅ | ✅ | | `<>`: Episode Number (`1`)
`<>`: Episode Number As Words (`One`)
`<>`: Episode Number With 10s Padding (`01`)
`<>`: Episode Number With 100s Padding (`001`) | ❌ | ❌ | ❌ | ✅ | -| `<>`: Number of Versions of the Item (`1`)
`<>`: Number of Versions of the Item As Words (`One`)
`<>`: Number of Versions of the Item With 10s Padding (`01`)
`<>`: Number of Versions of the Item With 100s Padding (`001`) | ❌ | ✅ | ✅ | ✅ | +| `<>`: Number of Versions of the Item (`1`)
`<>`: Number of Versions of the Item As Words (`One`)
`<>`: Number of Versions of the Item With 10s Padding (`01`)
`<>`: Number of Versions of the Item With 100s Padding (`001`) | ✅ | ❌ | ❌ | ✅ | | `<>`: Complete Runtime of the Item in minutes (`150`)
`<>`: Hours in runtime of the Item (`2`)
`<>`: Minutes remaining in the hour in the runtime of the Item (`30`) | ✅ | ❌ | ❌ | ✅ | | `<>`: Bitrate of the first media file for an item.
`<>`: Bitrate of the media file with the highest bitrate
`<>`: Bitrate of the media file with the lowest bitrate | ✅ | ❌ | ❌ | ✅ | | `<>`: Original Available Date of the Item
`<>`: Original Available Date of the Item in the given format. [Format Options](https://strftime.org/) | ✅ | ✅ | ❌ | ✅ | diff --git a/modules/builder.py b/modules/builder.py index ce870fde..9aa29c35 100644 --- a/modules/builder.py +++ b/modules/builder.py @@ -73,10 +73,10 @@ discover_status = { } sub_filters = [ "filepath", "audio_track_title", "resolution", "audio_language", "subtitle_language", "has_dolby_vision", - "channels", "height", "width", "aspect", "audio_codec", "audio_profile", "video_codec", "video_profile" + "channels", "height", "width", "aspect", "audio_codec", "audio_profile", "video_codec", "video_profile", "versions" ] filters_by_type = { - "movie_show_season_episode_artist_album_track": ["title", "summary", "collection", "has_collection", "added", "last_played", "user_rating", "plays", "filepath", "label", "audio_track_title"], + "movie_show_season_episode_artist_album_track": ["title", "summary", "collection", "has_collection", "added", "last_played", "user_rating", "plays", "filepath", "label", "audio_track_title", "versions"], "movie_show_season_episode_album_track": ["year"], "movie_show_season_episode_artist_album": ["has_overlay"], "movie_show_season_episode": ["resolution", "audio_language", "subtitle_language", "has_dolby_vision", "channels", "height", "width", "aspect", "audio_codec", "audio_profile", "video_codec", "video_profile"], @@ -120,7 +120,7 @@ date_filters = ["release", "added", "last_played", "first_episode_aired", "last_ date_modifiers = ["", ".not", ".before", ".after", ".regex"] number_filters = [ "year", "tmdb_year", "critic_rating", "audience_rating", "user_rating", "tmdb_vote_count", "plays", "duration", - "channels", "height", "width", "aspect"] + "channels", "height", "width", "aspect", "versions"] number_modifiers = ["", ".not", ".gt", ".gte", ".lt", ".lte"] special_filters = [ "history", "episodes", "seasons", "albums", "tracks", "original_language", "original_language.not", diff --git a/modules/meta.py b/modules/meta.py index 4461b207..495cd92d 100644 --- a/modules/meta.py +++ b/modules/meta.py @@ -762,6 +762,7 @@ class MetadataFile(DataFile): col["test"] = True if collection_title in sync: sync.pop(collection_title) + col_names.append(collection_title) self.collections[collection_title] = col if other_name and not other_keys: logger.warning(f"Config Warning: Other Collection {other_name} not needed") diff --git a/modules/plex.py b/modules/plex.py index 587802ea..fe138619 100644 --- a/modules/plex.py +++ b/modules/plex.py @@ -1451,6 +1451,8 @@ class Plex(Library): attr = getattr(media, filter_actual) if attr and attr > test_number: test_number = attr + elif filter_attr == "versions": + test_number = len(item.media) elif filter_attr == "audio_language": for media in item.media: for part in media.parts: