diff --git a/VERSION b/VERSION
index 960279e5..0e6595b9 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.17.0-develop16
+1.17.0-develop17
diff --git a/docs/metadata/builders/plex.md b/docs/metadata/builders/plex.md
index f0a27c5f..f14835a9 100644
--- a/docs/metadata/builders/plex.md
+++ b/docs/metadata/builders/plex.md
@@ -262,26 +262,28 @@ No number search can take multiple values.
### Number Attributes
-| Number Search | Description | Movie
Libraries | Show
Libraries | Music
Libraries |
-|:----------------------|:--------------------------------------------------------------------------------------------|:------------------:|:-----------------:|:------------------:|
-| `duration` | Uses the duration attribute to match using minutes
**Minimum:** `0` | ✅ | ❌ | ❌ |
-| `plays` | Uses the plays attribute to match
**Minimum:** `0` | ✅ | ✅ | ❌ |
-| `episode_plays` | Uses the Episode's plays attribute to match
**Minimum:** `0` | ❌ | ✅ | ❌ |
-| `critic_rating` | Uses the critic rating attribute to match
**Range:** `0.0` - `10.0` | ✅ | ✅ | ❌ |
-| `audience_rating` | Uses the audience rating attribute to match
**Range:** `0.0` - `10.0` | ✅ | ✅ | ❌ |
-| `user_rating` | Uses the user rating attribute to match
**Range:** `0.0` - `10.0` | ✅ | ✅ | ❌ |
-| `episode_user_rating` | Uses the user rating attribute of the show's episodes to match
**Range:** `0.0` - `10.0` | ❌ | ✅ | ❌ |
-| `year` | Uses the year attribute to match
**Minimum:** `0` | ✅ | ✅ | ❌ |
-| `episode_year` | Uses the Episode's year attribute to match
**Minimum:** `0` | ❌ | ✅ | ❌ |
-| `album_year` | Uses the Album's year attribute to match
**Minimum:** `0` | ❌ | ❌ | ✅ |
-| `album_decade` | Uses the Album's decade attribute to match
**Minimum:** `0` | ❌ | ❌ | ✅ |
-| `album_plays` | Uses the Album's plays attribute to match
**Minimum:** `0` | ❌ | ❌ | ✅ |
-| `track_plays` | Uses the Track's plays attribute to match
**Minimum:** `0` | ❌ | ❌ | ✅ |
-| `track_skips` | Uses the Track's skips attribute to match
**Minimum:** `0` | ❌ | ❌ | ✅ |
-| `artist_user_rating` | Uses the Artist's user rating attribute to match
**Range:** `0.0` - `10.0` | ❌ | ❌ | ✅ |
-| `album_user_rating` | Uses the Album's user rating attribute to match
**Range:** `0.0` - `10.0` | ❌ | ❌ | ✅ |
-| `album_critic_rating` | Uses the Album's critic rating attribute to match
**Range:** `0.0` - `10.0` | ❌ | ❌ | ✅ |
-| `track_user_rating` | Uses the Track's user rating attribute to match
**Range:** `0.0` - `10.0` | ❌ | ❌ | ✅ |
+| Number Search | Description | Movie
Libraries | Show
Libraries | Music
Libraries |
+|:--------------------------|:------------------------------------------------------------------------------------------------|:------------------:|:-----------------:|:------------------:|
+| `duration` | Uses the duration attribute to match using minutes
**Minimum:** `0` | ✅ | ❌ | ❌ |
+| `plays` | Uses the plays attribute to match
**Minimum:** `0` | ✅ | ✅ | ❌ |
+| `episode_plays` | Uses the Episode's plays attribute to match
**Minimum:** `0` | ❌ | ✅ | ❌ |
+| `critic_rating` | Uses the critic rating attribute to match
**Range:** `0.0` - `10.0` | ✅ | ✅ | ❌ |
+| `audience_rating` | Uses the audience rating attribute to match
**Range:** `0.0` - `10.0` | ✅ | ✅ | ❌ |
+| `user_rating` | Uses the user rating attribute to match
**Range:** `0.0` - `10.0` | ✅ | ✅ | ❌ |
+| `episode_user_rating` | Uses the user rating attribute of the show's episodes to match
**Range:** `0.0` - `10.0` | ❌ | ✅ | ❌ |
+| `episode_critic_rating` | Uses the critic rating attribute of the show's episodes to match
**Range:** `0.0` - `10.0` | ❌ | ✅ | ❌ |
+| `episode_audience_rating` | Uses the audience rating attribute of the show's episodes to match
**Range:** `0.0` - `10.0` | ❌ | ✅ | ❌ |
+| `year` | Uses the year attribute to match
**Minimum:** `0` | ✅ | ✅ | ❌ |
+| `episode_year` | Uses the Episode's year attribute to match
**Minimum:** `0` | ❌ | ✅ | ❌ |
+| `album_year` | Uses the Album's year attribute to match
**Minimum:** `0` | ❌ | ❌ | ✅ |
+| `album_decade` | Uses the Album's decade attribute to match
**Minimum:** `0` | ❌ | ❌ | ✅ |
+| `album_plays` | Uses the Album's plays attribute to match
**Minimum:** `0` | ❌ | ❌ | ✅ |
+| `track_plays` | Uses the Track's plays attribute to match
**Minimum:** `0` | ❌ | ❌ | ✅ |
+| `track_skips` | Uses the Track's skips attribute to match
**Minimum:** `0` | ❌ | ❌ | ✅ |
+| `artist_user_rating` | Uses the Artist's user rating attribute to match
**Range:** `0.0` - `10.0` | ❌ | ❌ | ✅ |
+| `album_user_rating` | Uses the Album's user rating attribute to match
**Range:** `0.0` - `10.0` | ❌ | ❌ | ✅ |
+| `album_critic_rating` | Uses the Album's critic rating attribute to match
**Range:** `0.0` - `10.0` | ❌ | ❌ | ✅ |
+| `track_user_rating` | Uses the Track's user rating attribute to match
**Range:** `0.0` - `10.0` | ❌ | ❌ | ✅ |
## Boolean Searches
diff --git a/modules/config.py b/modules/config.py
index 9d77eb57..32a0c074 100644
--- a/modules/config.py
+++ b/modules/config.py
@@ -731,7 +731,7 @@ class ConfigFile:
error_check("mass_trakt_rating_update", "Trakt")
lib_vars = {}
- if "template_variables" in lib and lib["template_variables"] and isinstance(lib["template_variables"], dict):
+ if lib and "template_variables" in lib and lib["template_variables"] and isinstance(lib["template_variables"], dict):
lib_vars = lib["template_variables"]
try:
diff --git a/modules/plex.py b/modules/plex.py
index 718d9fe7..805a8ea0 100644
--- a/modules/plex.py
+++ b/modules/plex.py
@@ -25,6 +25,8 @@ search_translation = {
"network": "show.network",
"critic_rating": "rating",
"audience_rating": "audienceRating",
+ "episode_critic_rating": "episode.rating",
+ "episode_audience_rating": "episode.audienceRating",
"user_rating": "userRating",
"episode_user_rating": "episode.userRating",
"content_rating": "contentRating",
@@ -239,6 +241,8 @@ show_only_searches = [
"episode_last_played", "episode_last_played.not", "episode_last_played.before", "episode_last_played.after",
"episode_plays.gt", "episode_plays.gte", "episode_plays.lt", "episode_plays.lte",
"episode_user_rating.gt", "episode_user_rating.gte", "episode_user_rating.lt", "episode_user_rating.lte",
+ "episode_critic_rating.gt", "episode_critic_rating.gte", "episode_critic_rating.lt", "episode_critic_rating.lte",
+ "episode_audience_rating.gt", "episode_audience_rating.gte", "episode_audience_rating.lt", "episode_audience_rating.lte",
"episode_year", "episode_year.not", "episode_year.gt", "episode_year.gte", "episode_year.lt", "episode_year.lte",
"unplayed_episodes", "episode_unplayed", "episode_duplicate", "episode_progress", "episode_unmatched", "show_unmatched",
]
@@ -258,8 +262,8 @@ date_modifiers = ["", ".not", ".before", ".after"]
year_attributes = ["decade", "year", "episode_year", "album_year", "album_decade"]
number_attributes = ["plays", "episode_plays", "album_plays", "track_plays", "track_skips"] + year_attributes
float_attributes = [
- "user_rating", "episode_user_rating", "critic_rating", "audience_rating", "duration",
- "artist_user_rating", "album_user_rating", "album_critic_rating", "track_user_rating"
+ "user_rating", "episode_user_rating", "critic_rating", "episode_critic_rating", "audience_rating", "episode_audience_rating",
+ "duration", "artist_user_rating", "album_user_rating", "album_critic_rating", "track_user_rating"
]
number_modifiers = [".gt", ".gte", ".lt", ".lte"]
search_display = {"added": "Date Added", "release": "Release Date", "hdr": "HDR", "progress": "In Progress", "episode_progress": "Episode In Progress"}
@@ -779,6 +783,8 @@ class Plex(Library):
logger.warning(f"Plex Warning: {item.title} has no Season 1 Episode 1 ")
elif method == "plex_search":
logger.info(f"Processing {data[1]}")
+ if self.config.trace_mode:
+ logger.debug(data[2])
items = self.get_filter_items(data[2])
elif method == "plex_collectionless":
good_collections = []