private async Task <IEnumerable <ChannelItemInfo> > GetLatestItems(ISupportsLatestMedia indexable, IChannel channel, string userId, CancellationToken cancellationToken) { var cacheLength = TimeSpan.FromHours(12); var cachePath = GetChannelDataCachePath(channel, userId, "channelmanager-latest", null, false); try { if (_fileSystem.GetLastWriteTimeUtc(cachePath).Add(cacheLength) > DateTime.UtcNow) { return(_jsonSerializer.DeserializeFromFile <List <ChannelItemInfo> >(cachePath)); } } catch (FileNotFoundException) { } catch (DirectoryNotFoundException) { } await _resourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); try { try { if (_fileSystem.GetLastWriteTimeUtc(cachePath).Add(cacheLength) > DateTime.UtcNow) { return(_jsonSerializer.DeserializeFromFile <List <ChannelItemInfo> >(cachePath)); } } catch (FileNotFoundException) { } catch (DirectoryNotFoundException) { } var result = await indexable.GetLatestMedia(new ChannelLatestMediaSearch { UserId = userId }, cancellationToken).ConfigureAwait(false); var resultItems = result.ToList(); CacheResponse(resultItems, cachePath); return(resultItems); } finally { _resourcePool.Release(); } }
private async Task<IEnumerable<ChannelItemInfo>> GetLatestItems(ISupportsLatestMedia indexable, IChannel channel, string userId, CancellationToken cancellationToken) { var cacheLength = TimeSpan.FromHours(12); var cachePath = GetChannelDataCachePath(channel, userId, "channelmanager-latest", null, false); try { if (_fileSystem.GetLastWriteTimeUtc(cachePath).Add(cacheLength) > DateTime.UtcNow) { return _jsonSerializer.DeserializeFromFile<List<ChannelItemInfo>>(cachePath); } } catch (FileNotFoundException) { } catch (DirectoryNotFoundException) { } await _resourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); try { try { if (_fileSystem.GetLastWriteTimeUtc(cachePath).Add(cacheLength) > DateTime.UtcNow) { return _jsonSerializer.DeserializeFromFile<List<ChannelItemInfo>>(cachePath); } } catch (FileNotFoundException) { } catch (DirectoryNotFoundException) { } var result = await indexable.GetLatestMedia(new ChannelLatestMediaSearch { UserId = userId }, cancellationToken).ConfigureAwait(false); var resultItems = result.ToList(); CacheResponse(resultItems, cachePath); return resultItems; } finally { _resourcePool.Release(); } }