From e4160bb4c0c73ca4b8ed854bca8e82f7c8dd8b3d Mon Sep 17 00:00:00 2001 From: Mikal Stordal Date: Sun, 7 Jul 2024 17:19:11 +0200 Subject: [PATCH 1/9] misc: fix stable manifest for future releases [skip ci] --- build_plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_plugin.py b/build_plugin.py index 4bde7113..b7a5d89c 100644 --- a/build_plugin.py +++ b/build_plugin.py @@ -20,7 +20,7 @@ def extract_target_framework(csproj_path): parser.add_argument("--repo", required=True) parser.add_argument("--version", required=True) parser.add_argument("--tag", required=True) -parser.add_argument("--prerelease", default=True) +parser.add_argument("--prerelease", default=False) opts = parser.parse_args() framework = extract_target_framework("./Shokofin/Shokofin.csproj") From 9c23c4efa7118a8ab1d25adb5ad8f8f1d14c86b6 Mon Sep 17 00:00:00 2001 From: Mikal Stordal Date: Wed, 10 Jul 2024 17:24:02 +0200 Subject: [PATCH 2/9] fix: fix mapping for series id on episode model --- Shokofin/API/Info/SeasonInfo.cs | 6 +++--- Shokofin/API/Models/Episode.cs | 2 +- Shokofin/Events/EventDispatchService.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Shokofin/API/Info/SeasonInfo.cs b/Shokofin/API/Info/SeasonInfo.cs index 581a7933..c2368494 100644 --- a/Shokofin/API/Info/SeasonInfo.cs +++ b/Shokofin/API/Info/SeasonInfo.cs @@ -163,17 +163,17 @@ public SeasonInfo(Series series, SeriesType? customType, IEnumerable ext // the previous episode anchors right. var seriesIdOrder = new string[] { seriesId }.Concat(extraIds).ToList(); episodesList = episodesList - .OrderBy(e => seriesIdOrder.IndexOf(e.Shoko.IDs.Series.ToString())) + .OrderBy(e => seriesIdOrder.IndexOf(e.Shoko.IDs.ParentSeries.ToString())) .ThenBy(e => e.AniDB.Type) .ThenBy(e => e.AniDB.EpisodeNumber) .ToList(); specialsList = specialsList - .OrderBy(e => seriesIdOrder.IndexOf(e.Shoko.IDs.Series.ToString())) + .OrderBy(e => seriesIdOrder.IndexOf(e.Shoko.IDs.ParentSeries.ToString())) .ThenBy(e => e.AniDB.Type) .ThenBy(e => e.AniDB.EpisodeNumber) .ToList(); altEpisodesList = altEpisodesList - .OrderBy(e => seriesIdOrder.IndexOf(e.Shoko.IDs.Series.ToString())) + .OrderBy(e => seriesIdOrder.IndexOf(e.Shoko.IDs.ParentSeries.ToString())) .ThenBy(e => e.AniDB.Type) .ThenBy(e => e.AniDB.EpisodeNumber) .ToList(); diff --git a/Shokofin/API/Models/Episode.cs b/Shokofin/API/Models/Episode.cs index 2964655a..912ed3b9 100644 --- a/Shokofin/API/Models/Episode.cs +++ b/Shokofin/API/Models/Episode.cs @@ -106,7 +106,7 @@ public class TvDB public class EpisodeIDs : IDs { - public int Series { get; set; } + public int ParentSeries { get; set; } public int AniDB { get; set; } diff --git a/Shokofin/Events/EventDispatchService.cs b/Shokofin/Events/EventDispatchService.cs index 3c735544..fa20313b 100644 --- a/Shokofin/Events/EventDispatchService.cs +++ b/Shokofin/Events/EventDispatchService.cs @@ -651,7 +651,7 @@ await season.RefreshMetadata(new(DirectoryService) { ) .ToList(); foreach (var episode in episodes) { - Logger.LogInformation("Refreshing episode {EpisodeName}. (Episode={EpisodeId},Episode={EpisodeId},Series={SeriesId})", episode.Name, episode.Id, episodeInfo.Id, episodeInfo.Shoko.IDs.Series.ToString()); + Logger.LogInformation("Refreshing episode {EpisodeName}. (Episode={EpisodeId},Episode={EpisodeId},Series={SeriesId})", episode.Name, episode.Id, episodeInfo.Id, episodeInfo.Shoko.IDs.ParentSeries.ToString()); await episode.RefreshMetadata(new(DirectoryService) { MetadataRefreshMode = MetadataRefreshMode.FullRefresh, ImageRefreshMode = MetadataRefreshMode.FullRefresh, From 7e09606140b654bc06207875f07645d925a11804 Mon Sep 17 00:00:00 2001 From: Mikal Stordal Date: Wed, 10 Jul 2024 17:24:23 +0200 Subject: [PATCH 3/9] misc: update exception message --- Shokofin/Utils/Ordering.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shokofin/Utils/Ordering.cs b/Shokofin/Utils/Ordering.cs index f76c30b4..b4617bb1 100644 --- a/Shokofin/Utils/Ordering.cs +++ b/Shokofin/Utils/Ordering.cs @@ -147,7 +147,7 @@ public static int GetEpisodeNumber(ShowInfo showInfo, SeasonInfo seasonInfo, Epi // If we still cannot find the episode for whatever reason, then bail. I don't fudging know why, but I know it's not the plugin's fault. if (index == -1) - throw new IndexOutOfRangeException($"Unable to find index to use for \"{episodeInfo.Shoko.Name}\". (Episode={episodeInfo.Id},Series={seasonInfo.Id},ExtraSeries={seasonInfo.ExtraIds})"); + throw new IndexOutOfRangeException($"Unable to find index to use for \"{episodeInfo.Shoko.Name}\". (Group=\"{showInfo.GroupId}\",Series=\"{seasonInfo.Id}\",ExtraSeries={(seasonInfo.ExtraIds.Count > 0 ? $"[\"{seasonInfo.ExtraIds.Join("\",\"")}\"]" : "[]")},Episode={episodeInfo.Id})"); return index + 1; } From 5575a5a4744340c8e8a813bc79c0e0926e7b3315 Mon Sep 17 00:00:00 2001 From: Mikal Stordal Date: Wed, 10 Jul 2024 17:24:43 +0200 Subject: [PATCH 4/9] fix: populate all lookup tables before returning --- Shokofin/API/ShokoAPIManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Shokofin/API/ShokoAPIManager.cs b/Shokofin/API/ShokoAPIManager.cs index e76fb083..06081d58 100644 --- a/Shokofin/API/ShokoAPIManager.cs +++ b/Shokofin/API/ShokoAPIManager.cs @@ -982,9 +982,9 @@ public bool TryGetDefaultSeriesIdForSeriesId(string seriesId, [NotNullWhen(true) PathToSeriesIdDictionary[path] = primaryId; SeriesIdToPathDictionary.TryAdd(primaryId, path); - - return primaryId; } + + return primaryId; } // In the edge case for series with only files with multiple From c6229e0aa18153877378608ed33974c64ffe2823 Mon Sep 17 00:00:00 2001 From: Mikal Stordal Date: Thu, 11 Jul 2024 02:15:40 +0200 Subject: [PATCH 5/9] misc: add another extra type conditional --- Shokofin/Utils/Ordering.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Shokofin/Utils/Ordering.cs b/Shokofin/Utils/Ordering.cs index b4617bb1..4b603bea 100644 --- a/Shokofin/Utils/Ordering.cs +++ b/Shokofin/Utils/Ordering.cs @@ -288,6 +288,8 @@ public static int GetSeasonNumber(ShowInfo showInfo, SeasonInfo seasonInfo, Epis ) return ExtraType.Clip; // Behind the Scenes + if (title.Contains("behind the scenes", System.StringComparison.CurrentCultureIgnoreCase)) + return ExtraType.BehindTheScenes; if (title.Contains("making of", System.StringComparison.CurrentCultureIgnoreCase)) return ExtraType.BehindTheScenes; if (title.Contains("music in", System.StringComparison.CurrentCultureIgnoreCase)) From 138ab618526947307841c940294d7d23176e389b Mon Sep 17 00:00:00 2001 From: Mikal Stordal Date: Fri, 12 Jul 2024 00:22:16 +0200 Subject: [PATCH 6/9] feat: Allow disabling the filter for movie libraries - Allow users to disable the filtering done on movie type libraries to keep out anything that's not a movie from the library. Use at your own risk. This essentially allows you to put any series in a movie type library and they will all show up as movies. --- Shokofin/Configuration/PluginConfiguration.cs | 6 ++++++ Shokofin/Configuration/configController.js | 3 +++ Shokofin/Configuration/configPage.html | 7 +++++++ Shokofin/Resolvers/ShokoIgnoreRule.cs | 2 +- Shokofin/Resolvers/ShokoResolver.cs | 2 +- Shokofin/Resolvers/VirtualFileSystemService.cs | 2 +- 6 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Shokofin/Configuration/PluginConfiguration.cs b/Shokofin/Configuration/PluginConfiguration.cs index 9ffc0f5e..09bd0d2d 100644 --- a/Shokofin/Configuration/PluginConfiguration.cs +++ b/Shokofin/Configuration/PluginConfiguration.cs @@ -285,6 +285,11 @@ public virtual string PrettyUrl /// public bool SeparateMovies { get; set; } + /// + /// Filter out anything that's not a movie in a movie library. + /// + public bool FilterMovieLibraries { get; set; } + /// /// Append all specials in AniDB movie series as special features for /// the movies. @@ -542,6 +547,7 @@ public PluginConfiguration() VFS_AddResolution = false; UseGroupsForShows = false; SeparateMovies = false; + FilterMovieLibraries = true; MovieSpecialsAsExtraFeaturettes = false; AddTrailers = true; AddCreditsAsThemeVideos = true; diff --git a/Shokofin/Configuration/configController.js b/Shokofin/Configuration/configController.js index 8156e0e1..28028be7 100644 --- a/Shokofin/Configuration/configController.js +++ b/Shokofin/Configuration/configController.js @@ -323,6 +323,7 @@ async function defaultSubmit(form) { config.CollectionGrouping = form.querySelector("#CollectionGrouping").value; config.CollectionMinSizeOfTwo = form.querySelector("#CollectionMinSizeOfTwo").checked; config.SeparateMovies = form.querySelector("#SeparateMovies").checked; + config.FilterMovieLibraries = form.querySelector("#FilterMovieLibraries").checked; config.SpecialsPlacement = form.querySelector("#SpecialsPlacement").value; config.MovieSpecialsAsExtraFeaturettes = form.querySelector("#MovieSpecialsAsExtraFeaturettes").checked; config.AddTrailers = form.querySelector("#AddTrailers").checked; @@ -533,6 +534,7 @@ async function syncSettings(form) { config.UseGroupsForShows = form.querySelector("#UseGroupsForShows").checked; config.SeasonOrdering = form.querySelector("#SeasonOrdering").value; config.SeparateMovies = form.querySelector("#SeparateMovies").checked; + config.FilterMovieLibraries = form.querySelector("#FilterMovieLibraries").checked; config.CollectionGrouping = form.querySelector("#CollectionGrouping").value; config.CollectionMinSizeOfTwo = form.querySelector("#CollectionMinSizeOfTwo").checked; config.SpecialsPlacement = form.querySelector("#SpecialsPlacement").value; @@ -1005,6 +1007,7 @@ export default function (page) { form.querySelector("#CollectionGrouping").value = config.CollectionGrouping; form.querySelector("#CollectionMinSizeOfTwo").checked = config.CollectionMinSizeOfTwo; form.querySelector("#SeparateMovies").checked = config.SeparateMovies; + form.querySelector("#FilterMovieLibraries").checked = config.FilterMovieLibraries; form.querySelector("#SpecialsPlacement").value = config.SpecialsPlacement === "Default" ? "AfterSeason" : config.SpecialsPlacement; form.querySelector("#MovieSpecialsAsExtraFeaturettes").checked = config.MovieSpecialsAsExtraFeaturettes; form.querySelector("#AddTrailers").checked = config.AddTrailers; diff --git a/Shokofin/Configuration/configPage.html b/Shokofin/Configuration/configPage.html index 91b50b58..79bd3f86 100644 --- a/Shokofin/Configuration/configPage.html +++ b/Shokofin/Configuration/configPage.html @@ -1139,6 +1139,13 @@

Library Settings

This filters out movies from the shows in your library. Disable this if you want your movies to show up as episodes within seasons of your shows instead.
+
+ +
This filters out anything that is not a movie in any movie libraries. Disable this if you want your anything to show up as movies in your movie libraries instead.
+