diff --git a/PlexRequests.Core/CacheKeys.cs b/PlexRequests.Core/CacheKeys.cs index d10bb0bb2..439953d94 100644 --- a/PlexRequests.Core/CacheKeys.cs +++ b/PlexRequests.Core/CacheKeys.cs @@ -28,6 +28,11 @@ namespace PlexRequests.Core { public class CacheKeys { + public struct TimeFrameMinutes + { + public const int SchedulerCaching = 60; + } + public const string PlexLibaries = "PlexLibaries"; public const string TvDbToken = "TheTvDbApiToken"; diff --git a/PlexRequests.Helpers/MemoryCacheProvider.cs b/PlexRequests.Helpers/MemoryCacheProvider.cs index 6e513502c..fdb78f291 100644 --- a/PlexRequests.Helpers/MemoryCacheProvider.cs +++ b/PlexRequests.Helpers/MemoryCacheProvider.cs @@ -73,8 +73,8 @@ namespace PlexRequests.Helpers /// public T Get(string key) where T : class { - var item = Cache.Get(key) as T; - return item; + lock (key) + return Cache.Get(key) as T; } /// @@ -86,7 +86,11 @@ namespace PlexRequests.Helpers public void Set(string key, object data, int cacheTime = 20) { var policy = new CacheItemPolicy { AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(cacheTime) }; - Cache.Add(new CacheItem(key, data), policy); + lock (key) + { + Cache.Remove(key); + Cache.Add(new CacheItem(key, data), policy); + } } /// @@ -98,7 +102,10 @@ namespace PlexRequests.Helpers var keys = Cache.Where(x => x.Key.Contains(key)); foreach (var k in keys) { - Cache.Remove(k.Key); + lock (key) + { + Cache.Remove(k.Key); + } } } } diff --git a/PlexRequests.Services/Jobs/CouchPotatoCacher.cs b/PlexRequests.Services/Jobs/CouchPotatoCacher.cs index 8bc50c5b6..2440477f0 100644 --- a/PlexRequests.Services/Jobs/CouchPotatoCacher.cs +++ b/PlexRequests.Services/Jobs/CouchPotatoCacher.cs @@ -63,7 +63,10 @@ namespace PlexRequests.Services.Jobs { Log.Trace("Getting all movies from CouchPotato"); var movies = CpApi.GetMovies(settings.FullUri, settings.ApiKey, new[] { "active" }); - Cache.Set(CacheKeys.CouchPotatoQueued, movies, 10); + if (movies != null) + { + Cache.Set(CacheKeys.CouchPotatoQueued, movies, CacheKeys.TimeFrameMinutes.SchedulerCaching); + } } } diff --git a/PlexRequests.Services/Jobs/PlexAvailabilityChecker.cs b/PlexRequests.Services/Jobs/PlexAvailabilityChecker.cs index cf2de344d..3c7915fa6 100644 --- a/PlexRequests.Services/Jobs/PlexAvailabilityChecker.cs +++ b/PlexRequests.Services/Jobs/PlexAvailabilityChecker.cs @@ -238,7 +238,7 @@ namespace PlexRequests.Services.Jobs private List CachedLibraries(AuthenticationSettings authSettings, PlexSettings plexSettings, bool setCache) { - Log.Trace("Obtaining library sections from Plex for the following request"); + Log.Trace("Obtaining library sections from Plex"); List results = new List(); @@ -250,12 +250,22 @@ namespace PlexRequests.Services.Jobs if (setCache) { - results = GetLibraries(authSettings, plexSettings); - Cache.Set(CacheKeys.PlexLibaries, results, 10); + Log.Trace("Plex Lib API Call"); + results = GetLibraries(authSettings, plexSettings); + + Log.Trace("Plex Lib Cache Set Call"); + if (results != null) + { + Cache.Set(CacheKeys.PlexLibaries, results, CacheKeys.TimeFrameMinutes.SchedulerCaching); + } } else { - results = Cache.GetOrSet(CacheKeys.PlexLibaries, () => GetLibraries(authSettings, plexSettings), 10); + Log.Trace("Plex Lib GetSet Call"); + results = Cache.GetOrSet(CacheKeys.PlexLibaries, () => { + Log.Trace("Plex Lib API Call (inside getset)"); + return GetLibraries(authSettings, plexSettings); + }, CacheKeys.TimeFrameMinutes.SchedulerCaching); } return results; } @@ -278,6 +288,7 @@ namespace PlexRequests.Services.Jobs } } + Log.Trace("Returning Plex Libs"); return libs; } diff --git a/PlexRequests.Services/Jobs/SickRageCacher.cs b/PlexRequests.Services/Jobs/SickRageCacher.cs index 3c626a336..1a28956a5 100644 --- a/PlexRequests.Services/Jobs/SickRageCacher.cs +++ b/PlexRequests.Services/Jobs/SickRageCacher.cs @@ -62,8 +62,11 @@ namespace PlexRequests.Services.Jobs if (settings.Enabled) { Log.Trace("Getting all shows from SickRage"); - var movies = SrApi.GetShows(settings.ApiKey, settings.FullUri); - Cache.Set(CacheKeys.SickRageQueued, movies.Result); + var shows = SrApi.GetShows(settings.ApiKey, settings.FullUri); + if (shows != null) + { + Cache.Set(CacheKeys.SickRageQueued, shows.Result, CacheKeys.TimeFrameMinutes.SchedulerCaching); + } } } diff --git a/PlexRequests.Services/Jobs/SonarrCacher.cs b/PlexRequests.Services/Jobs/SonarrCacher.cs index 63e2425d1..983a50eea 100644 --- a/PlexRequests.Services/Jobs/SonarrCacher.cs +++ b/PlexRequests.Services/Jobs/SonarrCacher.cs @@ -64,7 +64,10 @@ namespace PlexRequests.Services.Jobs { Log.Trace("Getting all tv series from Sonarr"); var series = SonarrApi.GetSeries(settings.ApiKey, settings.FullUri); - Cache.Set(CacheKeys.SonarrQueued, series, 10); + if (series != null) + { + Cache.Set(CacheKeys.SonarrQueued, series, CacheKeys.TimeFrameMinutes.SchedulerCaching); + } } }