diff --git a/MediaBrowser.Providers/Plugins/ListenBrainz/Configuration/PluginConfiguration.cs b/MediaBrowser.Providers/Plugins/ListenBrainz/Configuration/PluginConfiguration.cs index c80d0f7218..6f60d18c33 100644 --- a/MediaBrowser.Providers/Plugins/ListenBrainz/Configuration/PluginConfiguration.cs +++ b/MediaBrowser.Providers/Plugins/ListenBrainz/Configuration/PluginConfiguration.cs @@ -53,6 +53,11 @@ public class PluginConfiguration : BasePluginConfiguration } } + /// + /// Gets or sets the cache duration in days for similar item results. A value of 0 disables caching. + /// + public int SimilarItemsCacheDays { get; set; } = 14; + /// /// Gets the algorithm string for the API call. /// diff --git a/MediaBrowser.Providers/Plugins/ListenBrainz/Configuration/config.html b/MediaBrowser.Providers/Plugins/ListenBrainz/Configuration/config.html index 3dd1033fdf..8fd792e5ac 100644 --- a/MediaBrowser.Providers/Plugins/ListenBrainz/Configuration/config.html +++ b/MediaBrowser.Providers/Plugins/ListenBrainz/Configuration/config.html @@ -30,6 +30,10 @@
Span of time between requests in seconds. The official server is rate limited to one request per second.
+
+ +
Number of days to cache similar artist results from ListenBrainz. Set to 0 to disable caching.
+

@@ -62,6 +66,13 @@ cancelable: false })); + var similarItemsCacheDays = document.querySelector('#similarItemsCacheDays'); + similarItemsCacheDays.value = config.SimilarItemsCacheDays; + similarItemsCacheDays.dispatchEvent(new Event('change', { + bubbles: true, + cancelable: false + })); + Dashboard.hideLoadingMsg(); }); }); @@ -74,6 +85,7 @@ config.LabsServer = document.querySelector('#labsServer').value; config.Algorithm = parseInt(document.querySelector('#algorithm').value, 10); config.RateLimit = document.querySelector('#rateLimit').value; + config.SimilarItemsCacheDays = parseInt(document.querySelector('#similarItemsCacheDays').value, 10); ApiClient.updatePluginConfiguration(ListenBrainzPluginConfig.uniquePluginId, config).then(Dashboard.processPluginConfigurationUpdateResult); }); diff --git a/MediaBrowser.Providers/Plugins/ListenBrainz/ListenBrainzSimilarArtistProvider.cs b/MediaBrowser.Providers/Plugins/ListenBrainz/ListenBrainzSimilarArtistProvider.cs index 3f03a724c5..3dca748d06 100644 --- a/MediaBrowser.Providers/Plugins/ListenBrainz/ListenBrainzSimilarArtistProvider.cs +++ b/MediaBrowser.Providers/Plugins/ListenBrainz/ListenBrainzSimilarArtistProvider.cs @@ -40,7 +40,14 @@ public class ListenBrainzSimilarArtistProvider : IRemoteSimilarItemsProvider MetadataPluginType.SimilarityProvider; /// - public TimeSpan? CacheDuration => TimeSpan.FromDays(14); + public TimeSpan? CacheDuration + { + get + { + var days = ListenBrainzPlugin.Instance?.Configuration.SimilarItemsCacheDays ?? 0; + return days > 0 ? TimeSpan.FromDays(days) : null; + } + } /// public async IAsyncEnumerable GetSimilarItemsAsync( diff --git a/MediaBrowser.Providers/Plugins/Tmdb/Configuration/PluginConfiguration.cs b/MediaBrowser.Providers/Plugins/Tmdb/Configuration/PluginConfiguration.cs index f11b1d95aa..78405c21fc 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/Configuration/PluginConfiguration.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/Configuration/PluginConfiguration.cs @@ -77,5 +77,10 @@ namespace MediaBrowser.Providers.Plugins.Tmdb /// Gets or sets a value indicating the still image size to fetch. /// public string? StillSize { get; set; } + + /// + /// Gets or sets the cache duration in days for similar item results. A value of 0 disables caching. + /// + public int SimilarItemsCacheDays { get; set; } = 7; } } diff --git a/MediaBrowser.Providers/Plugins/Tmdb/Configuration/config.html b/MediaBrowser.Providers/Plugins/Tmdb/Configuration/config.html index 89d380ec1f..4048fc1655 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/Configuration/config.html +++ b/MediaBrowser.Providers/Plugins/Tmdb/Configuration/config.html @@ -44,6 +44,13 @@ Hide crew members without profile images.
+
+

Similar Items

+
+ +
Number of days to cache similar item results from TMDb. Set to 0 to disable caching.
+
+

Image Scaling

@@ -161,6 +168,13 @@ cancelable: false })); + var similarItemsCacheDays = document.querySelector('#similarItemsCacheDays'); + similarItemsCacheDays.value = config.SimilarItemsCacheDays; + similarItemsCacheDays.dispatchEvent(new Event('change', { + bubbles: true, + cancelable: false + })); + pluginConfig = config; configureImageScaling(); }); @@ -179,6 +193,7 @@ config.MaxCrewMembers = document.querySelector('#maxCrewMembers').value; config.HideMissingCastMembers = document.querySelector('#hideMissingCastMembers').checked; config.HideMissingCrewMembers = document.querySelector('#hideMissingCrewMembers').checked; + config.SimilarItemsCacheDays = parseInt(document.querySelector('#similarItemsCacheDays').value, 10); config.PosterSize = document.querySelector('#selectPosterSize').value; config.BackdropSize = document.querySelector('#selectBackdropSize').value; config.LogoSize = document.querySelector('#selectLogoSize').value; diff --git a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieSimilarProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieSimilarProvider.cs index 8cf4e3b6f5..5206de78ce 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieSimilarProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieSimilarProvider.cs @@ -37,7 +37,14 @@ public class TmdbMovieSimilarProvider : IRemoteSimilarItemsProvider public MetadataPluginType Type => MetadataPluginType.SimilarityProvider; /// - public TimeSpan? CacheDuration => TimeSpan.FromDays(7); + public TimeSpan? CacheDuration + { + get + { + var days = Plugin.Instance?.Configuration.SimilarItemsCacheDays ?? 0; + return days > 0 ? TimeSpan.FromDays(days) : null; + } + } /// public async IAsyncEnumerable GetSimilarItemsAsync( diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesSimilarProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesSimilarProvider.cs index e713c37be8..c85718b993 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesSimilarProvider.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesSimilarProvider.cs @@ -37,7 +37,14 @@ public class TmdbSeriesSimilarProvider : IRemoteSimilarItemsProvider public MetadataPluginType Type => MetadataPluginType.SimilarityProvider; /// - public TimeSpan? CacheDuration => TimeSpan.FromDays(7); + public TimeSpan? CacheDuration + { + get + { + var days = Plugin.Instance?.Configuration.SimilarItemsCacheDays ?? 0; + return days > 0 ? TimeSpan.FromDays(days) : null; + } + } /// public async IAsyncEnumerable GetSimilarItemsAsync(