[2] add collection order option custom.desc

This commit is contained in:
meisnate12 2022-12-23 03:14:51 -05:00
parent 81c4ffe53a
commit 7a0fbc88ef
4 changed files with 31 additions and 51 deletions

View file

@ -1,29 +1,7 @@
# Requirements Update (requirements will need to be reinstalled)
Updated plexapi requirement to 4.13.2
Updated retrying requirement to 1.3.4
Updated lxml requirement to 4.92
# New Features
Now supports Python 3.11
Wiki CSS update thanks to @YozoraXCII
Added `languages` template variable to the languages default
Added `mdb_average` as an option for `mass_update_*_ratings`
Added `custom_keys` dynamic collection attribute
Better Error handling for move errors
Added Sonarr v4 support
Added `album_genre`, `album_mood`, `album_style`, and `track_mood` as dynamic collection types
Added `only_run_on_create` to only run collections when the collection doesn't exist already
Added `exclude_user` as an option for playlist definitions
Added new collection_order `custom.desc`. ([FR](https://features.metamanager.wiki/features/p/reverse-sort-collectionorder-custom))
# Bug Fixes
Fixed positioning issues with the resolution/editions default and the ratings default
Fixed Metadata Asset Failures
Fixed `smart_label` collection counts
Fixed `delete_collections` operation
Fixed using `include` with the defaults
Fixed #1174 Content mapper error
Fixed mal builder errors
Fixed #1224
Fixed audio_codec and video_format defaults regex patterns
Fixed tvdb xpaths for their builders and operations
Fixed overlays to allow only suppression of overlays which exist inside the same file
Fixed Italian Translation

View file

@ -1 +1 @@
1.18.1-develop1
1.18.1-develop2

View file

@ -5,7 +5,7 @@ All the following attributes update various details of the definition's Metadata
**Only `tmdb_person` works with Playlists.**
| Attribute | Description & Values |
|:-----------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|:-----------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `tmdb_person` | **Description:** Changes summary and poster to a TMDb Person's biography and profile as well as allow the people specified to be used in [Plex Searches](../builders/plex.md#plex-search).<br>**Values:** TMDb Person ID (List or Comma-separated string) |
| `sort_title` | **Description:** Changes the sort title.<br>You can "promote" certain collections to the top of a library by creating a sort title starting with a `+` or "demote" certain collections to the bottom of a library by creating a sort title starting with a `~`.<br>**Values:** Text to change Sort Title |
| `content_rating` | **Description:** Changes the content rating.<br>**Values:** Text to change Content Rating |
@ -13,7 +13,7 @@ All the following attributes update various details of the definition's Metadata
| `label.remove` | **Description:** Removes existing labels from the collection.<br>**Values:** Comma-separated string of labels to remove |
| `label.sync` | **Description:** Matches the labels of the collection to the labels provided (Leave blank to remove all labels)<br>**Values:** Comma-separated string of labels to sync |
| `collection_mode` | **Description:** Changes the Collection Mode<br>**Values:**<table class="clearTable"><tr><td>`default`</td><td>Library default</td></tr><tr><td>`hide`</td><td>Hide Collection</td></tr><tr><td>`hide_items`</td><td>Hide Items in this Collection</td></tr><tr><td>`show_items`</td><td>Show this Collection and its Items</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order<br>**Normal Collections Only**<br>When using `custom` you can only have a single builder in the collection.<br>**Values:**<table class="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom`</td><td>Order Collection Via the Builder Order</td></tr><tr><td>[Any `plex_search` Sort Option](../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `collection_order` | **Description:** Changes the Collection Order<br>**Normal Collections Only**<br>When using `custom.asc`/`custom.desc` you can only have a single builder in the collection.<br>**Values:**<table class="clearTable"><tr><td>`release`</td><td>Order Collection by Release Dates</td></tr><tr><td>`alpha`</td><td>Order Collection Alphabetically</td></tr><tr><td>`custom.asc`/`custom.desc`</td><td>Order Collection Via the Builder Order ascending or descending</td></tr><tr><td>[Any `plex_search` Sort Option](../builders/plex.md#sort-options)</td><td>Order Collection by any `plex_search` Sort Option</td></tr></table> |
| `collection_filtering` | **Description:** Changes the Collection Filtering<br>**Smart Collections Only**<br>**Values:**<table class="clearTable"><tr><td>`admin`</td><td>Always the server admin user</td></tr><tr><td>`user`</td><td>User currently viewing the content</td></tr></table> |
| `builder_level` | **Description:** Make season, episode, album or track collections/overlays from `plex_all`, `plex_search`, `trakt_list`, or `imdb_list` Builders and Filters<br>**Values:**<table class="clearTable"><tr><td>`season`</td><td>Collection contains seasons</td></tr><tr><td>`episode`</td><td>Collection contains episodes</td></tr><tr><td>`album`</td><td>Collection contains albums</td></tr><tr><td>`track`</td><td>Collection contains tracks</td></tr></table> |
| `visible_library` | **Description:** Changes collection visible on Library (Only works with Plex Pass)<br>**Values:**<table class="clearTable"><tr><td>`true`</td><td>Visible</td></tr><tr><td>`false`</td><td>Not Visible</td></tr><tr><td>[Any `schedule` Option](schedule)</td><td>Visible When Scheduled</td></tr></table> |

View file

@ -662,17 +662,17 @@ class CollectionBuilder:
test_sort = self.library.default_collection_order
logger.warning("")
logger.warning(f"{self.Type} Warning: collection_order not found using library default_collection_order: {test_sort}")
self.custom_sort = self.playlist
self.custom_sort = "custom" if self.playlist else None
if test_sort:
if self.smart:
raise Failed(f"{self.Type} Error: collection_order does not work with Smart Collections")
logger.debug("")
logger.debug("Validating Method: collection_order")
logger.debug(f"Value: {test_sort}")
if test_sort in plex.collection_order_options:
self.details["collection_order"] = test_sort
if test_sort == "custom" and self.build_collection:
self.custom_sort = True
if test_sort in plex.collection_order_options + ["custom.asc", "custom.desc"]:
self.details["collection_order"] = test_sort.split(".")[0]
if test_sort.startswith("custom") and self.build_collection:
self.custom_sort = test_sort
else:
sort_type = self.builder_level
if sort_type == "item":
@ -690,11 +690,11 @@ class CollectionBuilder:
if ts not in sorts:
raise Failed(f"{self.Type} Error: collection_order: {ts} is invalid. Options: {', '.join(sorts)}")
self.custom_sort.append(ts)
if isinstance(self.custom_sort, list) and not self.custom_sort:
if not self.custom_sort:
raise Failed(f"{self.Type} Error: {test_sort} collection_order invalid\n\trelease (Order Collection by release dates)\n\talpha (Order Collection Alphabetically)\n\tcustom (Custom Order Collection)\n\tOther sorting options can be found at https://github.com/meisnate12/Plex-Meta-Manager/wiki/Smart-Builders#sort-options")
if self.smart:
self.custom_sort = False
self.custom_sort = None
for method_key, method_data in self.data.items():
if method_key.lower() in ignored_details:
@ -810,7 +810,7 @@ class CollectionBuilder:
if self.blank_collection and len(self.builders) > 0:
raise Failed(f"{self.Type} Error: No builders allowed with blank_collection")
if self.custom_sort is True and (len(self.builders) > 1 or self.builders[0][0] not in custom_sort_builders):
if not isinstance(self.custom_sort, list) and self.custom_sort and (len(self.builders) > 1 or self.builders[0][0] not in custom_sort_builders):
raise Failed(f"{self.Type} Error: " + ('Playlists' if self.playlist else 'collection_order: custom') +
(f" can only be used with a single builder per {self.type}" if len(self.builders) > 1 else f" cannot be used with {self.builders[0][0]}"))
@ -2762,8 +2762,10 @@ class CollectionBuilder:
logger.info("")
logger.separator(f"Sorting {self.name} {self.Type}", space=False, border=False)
logger.info("")
if self.custom_sort is True:
if not isinstance(self.custom_sort, list):
items = self.found_items
if self.custom_sort == "custom.desc":
items = items[::-1]
else:
plex_search = {"sort_by": self.custom_sort}
if self.builder_level in ["season", "episode"]: