update channels

This commit is contained in:
Luke Pulverenti
2014-06-06 13:14:02 -04:00
parent 6120286bfd
commit f271e358a1
24 changed files with 202 additions and 103 deletions

View File

@@ -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)