diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Channels/ChannelManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Channels/ChannelManager.cs | 97 |
1 files changed, 70 insertions, 27 deletions
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs index 9f4db175e..964a4bbf6 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs @@ -97,7 +97,7 @@ namespace MediaBrowser.Server.Implementations.Channels if (user != null) { - channels = channels.Where(i => GetChannelProvider(i).IsEnabledFor(user) && i.IsVisible(user)) + channels = channels.Where(i => GetChannelProvider(i).IsEnabledFor(user.Id.ToString("N")) && i.IsVisible(user)) .ToList(); } @@ -371,7 +371,8 @@ namespace MediaBrowser.Server.Implementations.Channels Id = id, DateCreated = _fileSystem.GetCreationTimeUtc(fileInfo), DateModified = _fileSystem.GetLastWriteTimeUtc(fileInfo), - Path = path + Path = path, + OfficialRating = GetOfficialRating(channelInfo.ParentalRating) }; isNew = true; @@ -394,6 +395,23 @@ namespace MediaBrowser.Server.Implementations.Channels return item; } + private string GetOfficialRating(ChannelParentalRating rating) + { + switch (rating) + { + case ChannelParentalRating.Adult: + return "XXX"; + case ChannelParentalRating.UsR: + return "R"; + case ChannelParentalRating.UsPG13: + return "PG-13"; + case ChannelParentalRating.UsPG: + return "PG"; + default: + return null; + } + } + public Channel GetChannel(string id) { return (Channel)_libraryManager.GetItemById(new Guid(id)); @@ -412,16 +430,19 @@ namespace MediaBrowser.Server.Implementations.Channels var channelProvider = GetChannelProvider(channel); - return GetChannelFeaturesDto(channel, channelProvider.GetChannelFeatures()); + return GetChannelFeaturesDto(channel, channelProvider, channelProvider.GetChannelFeatures()); } - public ChannelFeatures GetChannelFeaturesDto(Channel channel, InternalChannelFeatures features) + public ChannelFeatures GetChannelFeaturesDto(Channel channel, + IChannel provider, + InternalChannelFeatures features) { + var isIndexable = provider is IIndexableChannel; + return new ChannelFeatures { CanFilter = !features.MaxPageSize.HasValue, - CanGetAllMedia = features.CanGetAllMedia, - CanSearch = features.CanSearch, + CanSearch = provider is ISearchableChannel, ContentTypes = features.ContentTypes, DefaultSortFields = features.DefaultSortFields, MaxPageSize = features.MaxPageSize, @@ -429,7 +450,7 @@ namespace MediaBrowser.Server.Implementations.Channels SupportsSortOrderToggle = features.SupportsSortOrderToggle, Name = channel.Name, Id = channel.Id.ToString("N"), - CanDownloadAllMedia = features.CanGetAllMedia + CanDownloadAllMedia = isIndexable }; } @@ -459,24 +480,28 @@ namespace MediaBrowser.Server.Implementations.Channels } var tasks = channels - .Where(i => i.GetChannelFeatures().CanGetAllMedia) .Select(async i => { - try + var indexable = i as IIndexableChannel; + + if (indexable != null) { - var result = await i.GetAllMedia(new InternalAllChannelMediaQuery + try { - User = user + var result = await indexable.GetAllMedia(new InternalAllChannelMediaQuery + { + UserId = query.UserId - }, cancellationToken).ConfigureAwait(false); + }, cancellationToken).ConfigureAwait(false); - return new Tuple<IChannel, ChannelItemResult>(i, result); - } - catch (Exception ex) - { - _logger.ErrorException("Error getting all media from {0}", ex, i.Name); - return new Tuple<IChannel, ChannelItemResult>(i, new ChannelItemResult { }); + return new Tuple<IChannel, ChannelItemResult>(i, result); + } + catch (Exception ex) + { + _logger.ErrorException("Error getting all media from {0}", ex, i.Name); + } } + return new Tuple<IChannel, ChannelItemResult>(i, new ChannelItemResult { }); }); var results = await Task.WhenAll(tasks).ConfigureAwait(false); @@ -600,7 +625,10 @@ namespace MediaBrowser.Server.Implementations.Channels bool sortDescending, CancellationToken cancellationToken) { - var cachePath = GetChannelDataCachePath(channel, user, folderId, sortField, sortDescending); + var userId = user.Id.ToString("N"); + + var cacheLength = TimeSpan.FromDays(1); + var cachePath = GetChannelDataCachePath(channel, userId, folderId, sortField, sortDescending); try { @@ -608,7 +636,7 @@ namespace MediaBrowser.Server.Implementations.Channels { var channelItemResult = _jsonSerializer.DeserializeFromFile<ChannelItemResult>(cachePath); - if (_fileSystem.GetLastWriteTimeUtc(cachePath).Add(channelItemResult.CacheLength) > DateTime.UtcNow) + if (_fileSystem.GetLastWriteTimeUtc(cachePath).Add(cacheLength) > DateTime.UtcNow) { return channelItemResult; } @@ -633,7 +661,7 @@ namespace MediaBrowser.Server.Implementations.Channels { var channelItemResult = _jsonSerializer.DeserializeFromFile<ChannelItemResult>(cachePath); - if (_fileSystem.GetLastWriteTimeUtc(cachePath).Add(channelItemResult.CacheLength) > DateTime.UtcNow) + if (_fileSystem.GetLastWriteTimeUtc(cachePath).Add(cacheLength) > DateTime.UtcNow) { return channelItemResult; } @@ -650,7 +678,7 @@ namespace MediaBrowser.Server.Implementations.Channels var query = new InternalChannelItemQuery { - User = user, + UserId = userId, StartIndex = startIndex, Limit = limit, SortBy = sortField, @@ -694,18 +722,27 @@ namespace MediaBrowser.Server.Implementations.Channels } private string GetChannelDataCachePath(IChannel channel, - User user, + string userId, string folderId, ChannelItemSortField? sortField, bool sortDescending) { var channelId = GetInternalChannelId(channel.Name).ToString("N"); - var folderKey = string.IsNullOrWhiteSpace(folderId) ? "root" : folderId.GetMD5().ToString("N"); + var userCacheKey = string.Empty; + + var hasCacheKey = channel as IHasCacheKey; + if (hasCacheKey != null) + { + userCacheKey = hasCacheKey.GetCacheKey(userId) ?? string.Empty; + } + + var folderKey = string.IsNullOrWhiteSpace(folderId) ? "root" : folderId; + folderKey = (folderKey + userCacheKey).GetMD5().ToString("N"); var version = string.IsNullOrWhiteSpace(channel.DataVersion) ? "0" : channel.DataVersion; - var filename = user.Id.ToString("N"); + var filename = userId; var hashfilename = false; if (sortField.HasValue) @@ -724,7 +761,12 @@ namespace MediaBrowser.Server.Implementations.Channels filename = filename.GetMD5().ToString("N"); } - return Path.Combine(_config.ApplicationPaths.CachePath, "channels", channelId, version, folderKey, filename + ".json"); + return Path.Combine(_config.ApplicationPaths.CachePath, + "channels", + channelId, + version, + folderKey, + filename + ".json"); } private async Task<QueryResult<BaseItemDto>> GetReturnItems(IEnumerable<BaseItem> items, int? totalCountFromProvider, User user, ChannelItemQuery query, CancellationToken cancellationToken) @@ -770,7 +812,8 @@ namespace MediaBrowser.Server.Implementations.Channels { // Increment this as needed to force new downloads // Incorporate Name because it's being used to convert channel entity to provider - return externalId + (channelProvider.DataVersion ?? string.Empty) + (channelProvider.Name ?? string.Empty) + "14"; + return externalId + (channelProvider.DataVersion ?? string.Empty) + + (channelProvider.Name ?? string.Empty) + "15"; } private async Task<BaseItem> GetChannelItemEntity(ChannelItemInfo info, IChannel channelProvider, Channel internalChannel, CancellationToken cancellationToken) |
