diff options
| author | Shadowghost <Ghost_of_Stone@web.de> | 2026-05-14 07:56:19 +0200 |
|---|---|---|
| committer | Shadowghost <Ghost_of_Stone@web.de> | 2026-05-14 07:56:19 +0200 |
| commit | ae7a8c418b980b84a65b955b151c5ece20523559 (patch) | |
| tree | 0cd9a3a159fe6d14a1a2b7ee8674c5f44861ab29 | |
| parent | b1b45199444e369b12844661f09d1cd0830d25f7 (diff) | |
Make Cache duration user configurable
7 files changed, 61 insertions, 3 deletions
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 @@ -54,6 +54,11 @@ public class PluginConfiguration : BasePluginConfiguration } /// <summary> + /// Gets or sets the cache duration in days for similar item results. A value of 0 disables caching. + /// </summary> + public int SimilarItemsCacheDays { get; set; } = 14; + + /// <summary> /// Gets the algorithm string for the API call. /// </summary> public string AlgorithmString => Algorithm.ToApiString(); 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 @@ <input is="emby-input" type="number" id="rateLimit" required pattern="[0-9]*" min="0" max="10" step=".01" label="Rate Limit (seconds)" /> <div class="fieldDescription">Span of time between requests in seconds. The official server is rate limited to one request per second.</div> </div> + <div class="inputContainer"> + <input is="emby-input" type="number" id="similarItemsCacheDays" required pattern="[0-9]*" min="0" max="365" label="Cache duration (days)" /> + <div class="fieldDescription">Number of days to cache similar artist results from ListenBrainz. Set to 0 to disable caching.</div> + </div> <br /> <div> <button is="emby-button" type="submit" class="raised button-submit block"><span>Save</span></button> @@ -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<Mus public MetadataPluginType Type => MetadataPluginType.SimilarityProvider; /// <inheritdoc/> - public TimeSpan? CacheDuration => TimeSpan.FromDays(14); + public TimeSpan? CacheDuration + { + get + { + var days = ListenBrainzPlugin.Instance?.Configuration.SimilarItemsCacheDays ?? 0; + return days > 0 ? TimeSpan.FromDays(days) : null; + } + } /// <inheritdoc/> public async IAsyncEnumerable<SimilarItemReference> 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. /// </summary> public string? StillSize { get; set; } + + /// <summary> + /// Gets or sets the cache duration in days for similar item results. A value of 0 disables caching. + /// </summary> + 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 @@ <span>Hide crew members without profile images.</span> </label> </div> + <div class="verticalSection"> + <h2>Similar Items</h2> + <div class="inputContainer"> + <input is="emby-input" type="number" id="similarItemsCacheDays" pattern="[0-9]*" required min="0" max="365" label="Cache duration (days)" /> + <div class="fieldDescription">Number of days to cache similar item results from TMDb. Set to 0 to disable caching.</div> + </div> + </div> <div class="verticalSection verticalSection-extrabottompadding"> <h2>Image Scaling</h2> <div class="selectContainer"> @@ -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<Movie> public MetadataPluginType Type => MetadataPluginType.SimilarityProvider; /// <inheritdoc/> - public TimeSpan? CacheDuration => TimeSpan.FromDays(7); + public TimeSpan? CacheDuration + { + get + { + var days = Plugin.Instance?.Configuration.SimilarItemsCacheDays ?? 0; + return days > 0 ? TimeSpan.FromDays(days) : null; + } + } /// <inheritdoc/> public async IAsyncEnumerable<SimilarItemReference> 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<Series> public MetadataPluginType Type => MetadataPluginType.SimilarityProvider; /// <inheritdoc/> - public TimeSpan? CacheDuration => TimeSpan.FromDays(7); + public TimeSpan? CacheDuration + { + get + { + var days = Plugin.Instance?.Configuration.SimilarItemsCacheDays ?? 0; + return days > 0 ? TimeSpan.FromDays(days) : null; + } + } /// <inheritdoc/> public async IAsyncEnumerable<SimilarItemReference> GetSimilarItemsAsync( |
