public async Task ClearClearsTheCacheButNotFailedItems() { var cache = new CacheWithFail <string, Data>(); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => (Data)null)); cache.Clear(); Data data; cache.TryGetValue("Foo", out data).Should().Be(CacheState.NotFound); var called = false; await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => { called = true; return((Data)null); })); called.Should().BeFalse(); }
public async Task IfAddFailsThenFuncIsNotCalledAgain() { var cache = new CacheWithFail<string, Data>(); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => (Data)null)); var called = false; await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => { called = true; return (Data)null; })); called.Should().BeFalse(); }
public async Task IfAddFailsThenFuncIsNotCalledAgain() { var cache = new CacheWithFail <string, Data>(); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => (Data)null)); var called = false; await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => { called = true; return((Data)null); })); called.Should().BeFalse(); }
public async Task IfAddFailsThenFuncIsCalledAgainAfterTimeout() { var cache = new CacheWithFail <string, Data>(TimeSpan.FromMilliseconds(100)); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => (Data)null)); await Task.Delay(1000); var called = false; await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => { called = true; return((Data)null); })); called.Should().BeTrue(); }
public async Task IfItemIsInCacheFuncIsNotCalled() { var cache = new CacheWithFail<string, Data>(); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); var called = false; await cache.GetOrAddAsync("Foo", async s => await Task.Run(() => { called = true; return new Data { String = "Foo", Int = 1 }; })); called.Should().BeFalse(); }
public async Task <TvShow> GetTvShowAsync(Video video, bool forceRefresh) { TvShow show; if (!video.ExternalIds.TmdbId.IsNullOrEmpty()) { show = await _tvShowCache.GetOrAddAsync(video.ExternalIds.TmdbId, async s => await _tmdbConnection.GetTvShowAsync(s, video.SeasonNumber, video.EpisodeNumber), forceRefresh); if (show != null) { _tvShowCacheByTitle.Add(new TitleYearExternalIdKey(video.Show, video.Year, show.ExternalExternalIds.ImdbId, show.ExternalExternalIds.TvdbId), show); return(show); } } if (video.ExternalIds.ImdbId.IsNullOrEmpty() && video.ExternalIds.TvdbId.IsNullOrEmpty()) { show = await _tmdbConnection.SearchForTvShowAsync(video.Show, video.ExternalIds, video.SeasonNumber, video.EpisodeNumber); if (show != null) { _tvShowCache.Add(show.Id, show); _tvShowCacheByTitle.Add(new TitleYearExternalIdKey(video.Show, video.Year, show.ExternalExternalIds.ImdbId, show.ExternalExternalIds.TvdbId), show); } return(show); } var key = new TitleYearExternalIdKey(video.Show, video.Year, video.ExternalIds.ImdbId, video.ExternalIds.TvdbId); show = await _tvShowCacheByTitle.GetOrAddAsync(key, async s => await _tmdbConnection.SearchForTvShowAsync(video.Show, video.ExternalIds, video.SeasonNumber, video.EpisodeNumber), forceRefresh); if (show != null) { _tvShowCache.Add(show.Id, show); } return(show); }
public async Task <Series> GetSeriesAsync(string tvdbId, int seriesNumber, int episodeNumber, bool forceRefresh) { var foundSeries = await _seriesCache.GetOrAddAsync(tvdbId, async s => { var series = await _tvdbConnection.GetSeriesAsync(s); return((series == null || series.GetEpisode(seriesNumber, episodeNumber) == null) ? null : series); }, forceRefresh); if (foundSeries == null || foundSeries.GetEpisode(seriesNumber, episodeNumber) == null) { _seriesCache.MarkAsFailed(tvdbId); return(null); } return(foundSeries); }
public async Task ClearClearsTheCache() { var cache = new CacheWithFail <string, Data>(); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => (Data)null)); cache.Clear(); Data data; cache.TryGetValue("Foo", out data).Should().Be(CacheState.NotFound); }
public async Task IfItemIsInCacheFuncIsNotCalled() { var cache = new CacheWithFail <string, Data>(); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); var called = false; await cache.GetOrAddAsync("Foo", async s => await Task.Run(() => { called = true; return(new Data { String = "Foo", Int = 1 }); })); called.Should().BeFalse(); }
public async Task ForceReloadForcesAReload() { var cache = new CacheWithFail <string, Data>(); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); var called = false; await cache.GetOrAddAsync("Foo", async s => await Task.Run(() => { called = true; return(new Data { String = "Foo", Int = 1 }); }), true); called.Should().BeTrue(); }
public async Task <Movie> GetMovieAsync(Video video, bool forceRefresh) { Movie movie; if (!video.ExternalIds.TmdbId.IsNullOrEmpty()) { movie = await _movieCache.GetOrAddAsync(video.ExternalIds.TmdbId, async s => await _tmdbConnection.GetMovieAsync(s), forceRefresh); if (movie != null) { _movieCacheByTitle.Add(new TitleYearExternalIdKey(video.Title, video.Year, movie.ImdbId), movie); return(movie); } } if (video.ExternalIds.ImdbId.IsNullOrEmpty()) { movie = await _tmdbConnection.SearchForMovieAsync(video.Title, video.Year, video.ExternalIds); if (movie != null) { _movieCache.Add(movie.Id, movie); _movieCacheByTitle.Add(new TitleYearExternalIdKey(video.Title, video.Year, movie.ImdbId), movie); } return(movie); } var key = new TitleYearExternalIdKey(video.Title, video.Year, video.ExternalIds.ImdbId); movie = await _movieCacheByTitle.GetOrAddAsync(key, async s => await _tmdbConnection.SearchForMovieAsync(video.Title, video.Year, video.ExternalIds), forceRefresh); if (movie != null) { _movieCache.Add(movie.Id, movie); } return(movie); }
public async Task IfAddFailsThenFuncIsCalledAgainAfterTimeout() { var cache = new CacheWithFail<string, Data>(TimeSpan.FromMilliseconds(100)); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => (Data)null)); await Task.Delay(1000); var called = false; await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => { called = true; return (Data)null; })); called.Should().BeTrue(); }
public async Task ForceReloadForcesAReload() { var cache = new CacheWithFail<string, Data>(); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); var called = false; await cache.GetOrAddAsync("Foo", async s => await Task.Run(() => { called = true; return new Data { String = "Foo", Int = 1 }; }), true); called.Should().BeTrue(); }
public async Task ClearClearsTheCacheButNotFailedItems() { var cache = new CacheWithFail<string, Data>(); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => (Data)null)); cache.Clear(); Data data; cache.TryGetValue("Foo", out data).Should().Be(CacheState.NotFound); var called = false; await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => { called = true; return (Data)null; })); called.Should().BeFalse(); }
public async Task ClearClearsTheCache() { var cache = new CacheWithFail<string, Data>(); cache.Add("Foo", new Data { String = "Foo", Int = 1 }); await cache.GetOrAddAsync("Bar", async s => await Task.Run(() => (Data)null)); cache.Clear(); Data data; cache.TryGetValue("Foo", out data).Should().Be(CacheState.NotFound); }
public async Task <Person> GetPersonAsync(string tmdbId, bool forceRefresh) { return(await _peopleCache.GetOrAddAsync(tmdbId, async s => await _tmdbConnection.GetPersonAsync(tmdbId), forceRefresh)); }