diff --git a/README.md b/README.md index 83e627c4..90a51cd6 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ [![Discord](https://img.shields.io/discord/822460010649878528?color=%2300bc8c&label=Discord&style=plastic)](https://discord.gg/NfH6mGFuAB) [![Reddit](https://img.shields.io/reddit/subreddit-subscribers/PlexMetaManager?color=%2300bc8c&label=r%2FPlexMetaManager&style=plastic)](https://www.reddit.com/r/PlexMetaManager/) [![Wiki](https://img.shields.io/readthedocs/plex-meta-manager?color=%2300bc8c&style=plastic)](https://metamanager.wiki) +[![Translations](https://img.shields.io/weblate/progress/plex-meta-manager?color=00bc8c&server=https%3A%2F%2Ftranslations.metamanager.wiki&style=plastic)](https://translations.metamanager.wiki/engage/plex-meta-manager/) [![GitHub Sponsors](https://img.shields.io/github/sponsors/meisnate12?color=%238a2be2&style=plastic)](https://github.com/sponsors/meisnate12) [![Sponsor or Donate](https://img.shields.io/badge/-Sponsor%2FDonate-blueviolet?style=plastic)](https://github.com/sponsors/meisnate12) [![Feature Requests](https://img.shields.io/badge/Feature%20Requests-blueviolet?style=plastic)](https://features.metamanager.wiki/) @@ -51,30 +52,6 @@ If you find steps 1-3 above daunting, there are some walkthroughs available that 2. The [Docker Walkthrough](https://metamanager.wiki/en/latest/home/guides/docker.html) covers the same thing, running the script via Docker. 3. The [unRAID Walkthrough](https://metamanager.wiki/en/latest/home/guides/unraid.html) gets you started configuring the script in UNRaid. It doesn't go through the same steps with regard to creating the config file and metadata file, so you may want to go through the [Docker Walkthrough](https://metamanager.wiki/en/latest/home/guides/docker.html) first on your computer to gain that understanding. -## Development & Nightly Builds - -Development and Nightly builds are deemed as "beta" builds which are updated far more frequently than the master branch. Bug fixes, new features and and any other code added to Plex Meta Manager first goes to the nightly branch, followed by the develop branch, before finally being released to the master branch. - -The development builds (particularly the nightly branch) is only recommended for those who have a technical knowledge of Plex Meta Manager, and are happy with having to frequently update to receive the latest changes. - -### Development - -[![Develop GitHub commits since latest stable release (by SemVer)](https://img.shields.io/github/commits-since/meisnate12/plex-meta-manager/latest/develop?label=Commits%20in%20Develop&style=plastic)](https://github.com/meisnate12/Plex-Meta-Manager/tree/develop) - -The [develop](https://github.com/meisnate12/Plex-Meta-Manager/tree/develop) branch has the most updated **documented** fixes and enhancements to Plex Meta Manager. This version is tested and documented to some degree, but it is still an active development branch, so there may be rough edges. - -If switching to the develop build, it is recommended to also use the [develop branch of the wiki](https://metamanager.wiki/en/develop/), which documents any changes made from the Master build. - -### Nightly - -[![Nightly GitHub commits since latest stable release (by SemVer)](https://img.shields.io/github/commits-since/meisnate12/plex-meta-manager/latest/nightly?label=Commits%20in%20Nightly&style=plastic)](https://github.com/meisnate12/Plex-Meta-Manager/tree/nightly) - -There is also a [nightly](https://github.com/meisnate12/Plex-Meta-Manager/tree/nightly) build which will have the absolute latest version of the script, but it could easily break, there is no guarantee that it even works, and any new features will not be documented. - -**This branch will have squashed commits which can cause `git pull`/`git fetch` to error you can use `git reset origin/nightly --hard` to fix the branch.** - -As this build is subject to extreme change, there is no promise of the feature being documented in the [nightly](https://metamanager.wiki/en/nightly/) branch of the wiki and all discussions relating to changes made in the nightly build will be held within the [Plex Meta Manager Discord Server](https://discord.gg/NfH6mGFuAB). - ## Example Usage Plex Meta Manager gives the user the power to curate a set of Collections to make discovering and organizing media easy. They can be built either using plex-based searches/filters, or by using popular builders such as TMDb, IMDb, Trakt, MDBList, MyAnimeList and many more. @@ -88,22 +65,96 @@ Some example collections that can be created are: * Actors * Decades -Below are some user-curated collections which have been created by Plex Meta Manager. +Below are some user-curated collections which have been created by Plex Meta Manager using the [PMM Defaults](https://metamanager.wiki/en/latest/defaults/guide.html). +### Example Movie Collection ![Movie Collection Preview](https://metamanager.wiki/en/latest/_images/movie-collection-preview.png) +### Example Movie Overlays ![Movie Library Preview](https://metamanager.wiki/en/latest/_images/movie-library-preview.png) +### Example Show Collection ![Show Collection Preview](https://metamanager.wiki/en/latest/_images/show-collection-preview.png) +### Example Show Overlays ![Show Library Preview](https://metamanager.wiki/en/latest/_images/show-collection-preview.png) -## Default and User Submitted Metadata/Overlay Files +## Develop & Nightly Branches + +Develop and Nightly branches are deemed as "beta" branches which are updated far more frequently than the master branch. Bug fixes, new features and any other code added to Plex Meta Manager first goes to the nightly branch, followed by the develop branch, before finally being released to the master branch. + +These branches (particularly the nightly branch) are only recommended for those who have a technical knowledge of Plex Meta Manager, and are happy with having to frequently update to receive the latest changes, and accept the risk that these branches may suffer breakages at any point. + +
+ Develop Branch - Click to Expand + +[![Develop GitHub commits since latest stable release (by SemVer)](https://img.shields.io/github/commits-since/meisnate12/plex-meta-manager/latest/develop?label=Commits%20in%20Develop&style=plastic)](https://github.com/meisnate12/Plex-Meta-Manager/tree/develop) + +The [develop](https://github.com/meisnate12/Plex-Meta-Manager/tree/develop) branch has the most updated **documented** fixes and enhancements to Plex Meta Manager. This version is tested and documented to some degree, but it is still an active Develop branch, so there may be rough edges. + +Switching to `develop`: +````{tab} Running in Docker +Add ":develop" to the image name in your run command or configuration: +``` +meisnate12/plex-meta-manager:develop +``` +```` +````{tab} Running on the Host +In the directory where you cloned PMM: +```bash +git checkout develop +``` +To switch back: +```bash +git checkout master +``` +```` + +If switching to the develop branch, it is recommended to also use the [develop branch of the wiki](https://metamanager.wiki/en/develop/), which documents any changes made from the Master branch. + +
+ +
+ +
+ Nightly Branch - Click to Expand + +[![Nightly GitHub commits since latest stable release (by SemVer)](https://img.shields.io/github/commits-since/meisnate12/plex-meta-manager/latest/nightly?label=Commits%20in%20Nightly&style=plastic)](https://github.com/meisnate12/Plex-Meta-Manager/tree/nightly) + +**This branch will have squashed commits which can cause `git pull`/`git fetch` to error you can use `git reset origin/nightly --hard` to fix the branch.** + +There is also a [nightly](https://github.com/meisnate12/Plex-Meta-Manager/tree/nightly) branch which will have the absolute latest version of the script, but it could easily break, there is no guarantee that it even works, and any new features will not be documented until they have progressed enough to reach the develop branch. + +Switching to `nightly`: + +````{tab} Running in Docker +Add ":nightly" to the image name in your run command or configuration: +``` +meisnate12/plex-meta-manager:nightly +``` +```` +````{tab} Running on the Host +In the directory where you cloned PMM: +```bash +git checkout nightly +``` +To switch back: +```bash +git checkout master +``` +```` + +As this branch is subject to extreme change, there is no promise of the feature being documented in the [nightly](https://metamanager.wiki/en/nightly/) branch of the wiki and all discussions relating to changes made in the nightly branch will be held within the [Plex Meta Manager Discord Server](https://discord.gg/NfH6mGFuAB). +
+ +## Defaults and User Metadata/Overlay Files The overlays and collection built in the images above can be easily added to any plex by using the [PMM Defaults](https://metamanager.wiki/en/latest/defaults/guide.html). These Files were created by the PMM team to make it easier than ever to have customized collections and overlays. To see user submitted Metadata configuration files, and you to even add your own, go to the [Plex Meta Manager Configs](https://github.com/meisnate12/Plex-Meta-Manager-Configs). +Plex Meta Manager can manage the metadata fields for movies, shows, seasons, episodes, artists, albums, tracks, and collections, which can allow you to have a full backup of your customizations in case of a database loss. + ## Discord Support Server Before posting on GitHub about an enhancement, error, or configuration question please visit the [Plex Meta Manager Discord Server](https://discord.gg/NfH6mGFuAB). we have a dedicated support thread system so that your query can be dealt with efficiently by our team and community. @@ -112,16 +163,11 @@ If you have an idea for how to enhance Plex Meta Manager or just want to vote on ## Errors and Configuration Questions If you are unable to use the [Plex Meta Manager Discord Server](https://discord.gg/NfH6mGFuAB), please follow this guidance: -* If you have an idea for how to enhance Plex Meta Manager please open a new [Feature Request](https://github.com/meisnate12/Plex-Meta-Manager/issues/new?assignees=meisnate12&labels=status%3Anot-yet-viewed%2C+enhancement&2.feature_request.yml&title=%5BFeature%5D%3A+). -* If you're getting an Error please update to the latest version and then open a [Bug Report](https://github.com/meisnate12/Plex-Meta-Manager/issues/new?assignees=meisnate12&labels=status%3Anot-yet-viewed%2C+bug&template=1.bug_report.yml&title=%5BBug%5D%3A++) if the error persists. +* If you're getting an Error please update to the latest version and then open a [Bug Report](https://github.com/meisnate12/Plex-Meta-Manager/issues/new?assignees=meisnate12&labels=status%3Anot-yet-viewed%2C+bug&template=bug_report.md&title=Bug%3A+) if the error persists. * If you see a mistake/typo with the [Plex Meta Manager Wiki](https://metamanager.wiki/) or have an idea of how we can improve it please open a [Wiki Request](https://github.com/meisnate12/Plex-Meta-Manager/issues/new?assignees=meisnate12&labels=status%3Anot-yet-viewed%2C+documentation&template=3.docs_request.yml&title=%5BDocs%5D%3A+) * If you have a metadata configuration query please post in the [Discussions](https://github.com/meisnate12/Plex-Meta-Manager/discussions). ## Contributing * Pull Requests are greatly encouraged, please submit all Pull Requests to the nightly branch. -## IBRACORP Video Walkthrough - -[IBRACORP](https://ibracorp.io/) made a video walkthrough for installing Plex Meta Manager on unRAID. While you might not be using unRAID the video goes over many key aspects of Plex Meta Manager and can be a great place to start learning how to use the script. Please note, since the making of the video, some significant changes have been made to Plex Meta Manager 1.17 and beyond so always reference the wiki for the latest details. - -[![Plex Meta Manager](https://img.youtube.com/vi/dF69MNoot3w/0.jpg)](https://www.youtube.com/watch?v=dF69MNoot3w "Plex Meta Manager") +
diff --git a/VERSION b/VERSION index 87e4aca9..a8630296 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.18.3-develop159 +1.18.3-develop160 diff --git a/defaults/chart/anilist.yml b/defaults/chart/anilist.yml index 83e278db..a0ced1cb 100644 --- a/defaults/chart/anilist.yml +++ b/defaults/chart/anilist.yml @@ -9,7 +9,7 @@ external_templates: pmm: templates template_variables: collection_section: "020" - image: chart/<> + image: chart/<> templates: anilist: diff --git a/defaults/chart/basic.yml b/defaults/chart/basic.yml index c00f4871..4b462398 100644 --- a/defaults/chart/basic.yml +++ b/defaults/chart/basic.yml @@ -9,7 +9,7 @@ external_templates: pmm: templates template_variables: collection_section: "010" - image: chart/<> + image: chart/<> collections: Newly Released: diff --git a/defaults/chart/imdb.yml b/defaults/chart/imdb.yml index dd0f2f1b..116df6a5 100644 --- a/defaults/chart/imdb.yml +++ b/defaults/chart/imdb.yml @@ -9,7 +9,7 @@ external_templates: pmm: templates template_variables: collection_section: "020" - image: chart/<> + image: chart/<> templates: imdb_chart: diff --git a/defaults/chart/myanimelist.yml b/defaults/chart/myanimelist.yml index 18da7bc6..a7a65d18 100644 --- a/defaults/chart/myanimelist.yml +++ b/defaults/chart/myanimelist.yml @@ -9,7 +9,7 @@ external_templates: pmm: templates template_variables: collection_section: "020" - image: chart/<> + image: chart/<> templates: mal: diff --git a/defaults/chart/other_chart.yml b/defaults/chart/other_chart.yml index e8d9d754..be12c6da 100644 --- a/defaults/chart/other_chart.yml +++ b/defaults/chart/other_chart.yml @@ -9,7 +9,7 @@ external_templates: pmm: templates template_variables: collection_section: "020" - image: chart/<> + image: chart/<> templates: anidb: diff --git a/defaults/chart/tautulli.yml b/defaults/chart/tautulli.yml index 03005f21..8de9e9e8 100644 --- a/defaults/chart/tautulli.yml +++ b/defaults/chart/tautulli.yml @@ -9,7 +9,7 @@ external_templates: pmm: templates template_variables: collection_section: "020" - image: chart/<> + image: chart/<> templates: tautulli: diff --git a/defaults/chart/tmdb.yml b/defaults/chart/tmdb.yml index 147507d5..afca610c 100644 --- a/defaults/chart/tmdb.yml +++ b/defaults/chart/tmdb.yml @@ -9,7 +9,7 @@ external_templates: pmm: templates template_variables: collection_section: "020" - image: chart/<> + image: chart/<> templates: tmdb: diff --git a/defaults/chart/trakt.yml b/defaults/chart/trakt.yml index d2600544..59ae2747 100644 --- a/defaults/chart/trakt.yml +++ b/defaults/chart/trakt.yml @@ -9,7 +9,7 @@ external_templates: pmm: templates template_variables: collection_section: "020" - image: chart/<> + image: chart/<> templates: trakt: diff --git a/defaults/movie/franchise.yml b/defaults/movie/franchise.yml index 191f1f8a..8e889dba 100644 --- a/defaults/movie/franchise.yml +++ b/defaults/movie/franchise.yml @@ -16,8 +16,7 @@ templates: movie_<>: <> pre: "_" order_<>: "" - sort: <> - sort_title: "!<><
><>>><>"
+      sort_title: "!<><
><>>><>"
       sort_title_<<key>>: <<sort_title>>
       radarr_add_missing_<<key>>: <<radarr_add_missing>>
       radarr_folder_<<key>>: <<radarr_folder>>
diff --git a/defaults/show/franchise.yml b/defaults/show/franchise.yml
index 8b194184..5b2a11d5 100644
--- a/defaults/show/franchise.yml
+++ b/defaults/show/franchise.yml
@@ -16,8 +16,7 @@ templates:
       name_mapping_<<key>>: <<name_mapping>>
       pre: "_"
       order_<<key>>: ""
-      sort: <<collection_name>>
-      sort_title: "!<<collection_section>><<pre>><<order_<<key>>>><<sort>>"
+      sort_title: "!<<collection_section>><<pre>><<order_<<key>>>><<title>>"
       sort_title_<<key>>: <<sort_title>>
       sonarr_add_missing_<<key>>: <<sonarr_add_missing>>
       sonarr_folder_<<key>>: <<sonarr_folder>>
diff --git a/defaults/templates.yml b/defaults/templates.yml
index 08d31e31..f73c4a10 100644
--- a/defaults/templates.yml
+++ b/defaults/templates.yml
@@ -29,7 +29,7 @@ templates:
             value: false
     run_definition: <<use_separator>>
     collection_mode: <<collection_mode>>
-    sort_title: "!<<collection_section>>_!<<collection_name>>"
+    sort_title: "!<<collection_section>>_!<<title>>"
     tmdb_movie: <<placeholder_tmdb_movie>>
     tvdb_show: <<placeholder_tvdb_show>>
     imdb_id: <<placeholder_imdb_id>>
@@ -43,8 +43,7 @@ templates:
   shared:
     default:
       collection_section: "00"
-      sort: <<collection_name>>
-      key: <<collection_name>>
+      key: <<mapping_name>>
       pre: "_"
       order: ""
       order_<<key>>: <<order>>
@@ -95,7 +94,7 @@ templates:
     visible_shared: <<visible_shared_<<key>>>>
     item_radarr_tag: <<item_radarr_tag_<<key>>>>
     item_sonarr_tag: <<item_sonarr_tag_<<key>>>>
-    sort_title: "!<<collection_section>><<pre>><<order_<<key>>>><<sort>>"
+    sort_title: "!<<collection_section>><<pre>><<order_<<key>>>><<title>>"
     url_poster: <<url_poster_<<key>>>>
     minimum_items: <<minimum_items_<<key>>>>
 
@@ -178,7 +177,7 @@ templates:
 
   arr:
     default:
-      key: <<collection_name>>
+      key: <<mapping_name>>
       radarr_add_missing_<<key>>: <<radarr_add_missing>>
       sonarr_add_missing_<<key>>: <<sonarr_add_missing>>
       radarr_folder_<<key>>: <<radarr_folder>>
@@ -225,12 +224,11 @@ templates:
   other_collection:
     default:
       collection_section: "00"
-      sort: <<collection_name>>
       pre: "_~"
     optional:
       - use_other
     run_definition: <<use_other>>
-    sort_title: "!<<collection_section>><<pre>><<sort>>"
+    sort_title: "!<<collection_section>><<pre>><<title>>"
 
   use_year_collections:
     optional:
diff --git a/docs/index.md b/docs/index.md
index 625ec4e6..ef7278ca 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -9,6 +9,7 @@
 [![Discord](https://img.shields.io/discord/822460010649878528?color=%2300bc8c&label=Discord&style=plastic)](https://discord.gg/NfH6mGFuAB)
 [![Reddit](https://img.shields.io/reddit/subreddit-subscribers/PlexMetaManager?color=%2300bc8c&label=r%2FPlexMetaManager&style=plastic)](https://www.reddit.com/r/PlexMetaManager/)
 [![Wiki](https://img.shields.io/readthedocs/plex-meta-manager?color=%2300bc8c&style=plastic)](https://metamanager.wiki)
+[![Translations](https://img.shields.io/weblate/progress/plex-meta-manager?color=00bc8c&server=https%3A%2F%2Ftranslations.metamanager.wiki&style=plastic)](https://translations.metamanager.wiki/engage/plex-meta-manager/)
 [![GitHub Sponsors](https://img.shields.io/github/sponsors/meisnate12?color=%238a2be2&style=plastic)](https://github.com/sponsors/meisnate12)
 [![Sponsor or Donate](https://img.shields.io/badge/-Sponsor%2FDonate-blueviolet?style=plastic)](https://github.com/sponsors/meisnate12)
 [![Feature Requests](https://img.shields.io/badge/Feature%20Requests-blueviolet?style=plastic)](https://features.metamanager.wiki/)
@@ -113,7 +114,7 @@ If switching to the develop branch, it is recommended to also use the [develop b
 
 </details>
 
-</br>
+<br>
 
 <details class="details-tabs">
   <summary>Nightly Branch - Click to Expand</summary>
diff --git a/modules/builder.py b/modules/builder.py
index 363ed31b..e586d054 100644
--- a/modules/builder.py
+++ b/modules/builder.py
@@ -2847,9 +2847,18 @@ class CollectionBuilder:
                 self.obj.editSummary(summary[1])
                 batch_display += f"\nSummary ({summary[0]}) | {summary[1]:<25}"
 
-            if "sort_title" in self.details and str(self.details["sort_title"]) != str(self.obj.titleSort):
-                self.obj.editSortTitle(self.details["sort_title"])
-                batch_display += f"\nSort Title | {self.details['sort_title']}"
+            if "sort_title" in self.details:
+                new_sort_title = str(self.details["sort_title"])
+                if "<<title>>" in new_sort_title:
+                    title = self.name
+                    for op in ["The ", "A ", "An "]:
+                        if title.startswith(f"{op} "):
+                            title = f"{new_sort_title[len(op):].strip()}, {op.strip()}"
+                            break
+                    new_sort_title.replace("<<title>>", title)
+                if new_sort_title != str(self.obj.titleSort):
+                    self.obj.editSortTitle(self.details["sort_title"])
+                    batch_display += f"\nSort Title | {self.details['sort_title']}"
 
             if "content_rating" in self.details and str(self.details["content_rating"]) != str(self.obj.contentRating):
                 self.obj.editContentRating(self.details["content_rating"])