mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-03-27 12:31:57 +00:00
update channels
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user