update channel manager

pull/702/head
Luke Pulverenti 9 years ago
parent a67c8df252
commit 5013fddc2d

@ -104,6 +104,11 @@ namespace MediaBrowser.Server.Implementations.Channels
.OrderBy(i => i.Name); .OrderBy(i => i.Name);
} }
public IEnumerable<Guid> GetInstalledChannelIds()
{
return GetAllChannels().Select(i => GetInternalChannelId(i.Name));
}
public Task<QueryResult<Channel>> GetChannelsInternal(ChannelQuery query, CancellationToken cancellationToken) public Task<QueryResult<Channel>> GetChannelsInternal(ChannelQuery query, CancellationToken cancellationToken)
{ {
var user = string.IsNullOrWhiteSpace(query.UserId) var user = string.IsNullOrWhiteSpace(query.UserId)
@ -408,25 +413,15 @@ namespace MediaBrowser.Server.Implementations.Channels
private async Task<Channel> GetChannel(IChannel channelInfo, CancellationToken cancellationToken) private async Task<Channel> GetChannel(IChannel channelInfo, CancellationToken cancellationToken)
{ {
var parentFolder = await GetInternalChannelFolder(cancellationToken).ConfigureAwait(false);
var parentFolderId = parentFolder.Id;
var id = GetInternalChannelId(channelInfo.Name); var id = GetInternalChannelId(channelInfo.Name);
var path = Channel.GetInternalMetadataPath(_config.ApplicationPaths.InternalMetadataPath, id); var path = Channel.GetInternalMetadataPath(_config.ApplicationPaths.InternalMetadataPath, id);
var isNew = false; var isNew = false;
var forceUpdate = false;
if (!_fileSystem.DirectoryExists(path))
{
_logger.Debug("Creating directory {0}", path);
_fileSystem.CreateDirectory(path);
if (!_fileSystem.DirectoryExists(path))
{
throw new IOException("Path not created: " + path);
}
isNew = true;
}
var item = _libraryManager.GetItemById(id) as Channel; var item = _libraryManager.GetItemById(id) as Channel;
var channelId = channelInfo.Name.GetMD5().ToString("N"); var channelId = channelInfo.Name.GetMD5().ToString("N");
@ -438,18 +433,29 @@ namespace MediaBrowser.Server.Implementations.Channels
Name = channelInfo.Name, Name = channelInfo.Name,
Id = id, Id = id,
DateCreated = _fileSystem.GetCreationTimeUtc(path), DateCreated = _fileSystem.GetCreationTimeUtc(path),
DateModified = _fileSystem.GetLastWriteTimeUtc(path), DateModified = _fileSystem.GetLastWriteTimeUtc(path)
Path = path,
ChannelId = channelId
}; };
isNew = true; isNew = true;
} }
if (!string.Equals(item.ChannelId, channelId, StringComparison.OrdinalIgnoreCase)) if (!string.Equals(item.Path, path, StringComparison.OrdinalIgnoreCase))
{ {
isNew = true; isNew = true;
} }
item.Path = path;
if (!string.Equals(item.ChannelId, channelId, StringComparison.OrdinalIgnoreCase))
{
forceUpdate = true;
}
item.ChannelId = channelId;
if (item.ParentId != parentFolderId)
{
forceUpdate = true;
}
item.ParentId = parentFolderId;
item.OfficialRating = GetOfficialRating(channelInfo.ParentalRating); item.OfficialRating = GetOfficialRating(channelInfo.ParentalRating);
item.Overview = channelInfo.Description; item.Overview = channelInfo.Description;
@ -459,13 +465,17 @@ namespace MediaBrowser.Server.Implementations.Channels
{ {
item.Name = channelInfo.Name; item.Name = channelInfo.Name;
} }
await item.RefreshMetadata(new MetadataRefreshOptions(_fileSystem)
{
ForceSave = isNew
}, cancellationToken); if (isNew)
{
await _libraryManager.CreateItem(item, cancellationToken).ConfigureAwait(false);
}
else if (forceUpdate)
{
await item.UpdateToRepository(ItemUpdateType.None, cancellationToken).ConfigureAwait(false);
}
await item.RefreshMetadata(new MetadataRefreshOptions(_fileSystem), cancellationToken);
return item; return item;
} }
@ -1225,6 +1235,7 @@ namespace MediaBrowser.Server.Implementations.Channels
{ {
BaseItem item; BaseItem item;
bool isNew; bool isNew;
bool forceUpdate = false;
if (info.Type == ChannelItemType.Folder) if (info.Type == ChannelItemType.Folder)
{ {
@ -1254,7 +1265,6 @@ namespace MediaBrowser.Server.Implementations.Channels
item.ProductionYear = info.ProductionYear; item.ProductionYear = info.ProductionYear;
item.ProviderIds = info.ProviderIds; item.ProviderIds = info.ProviderIds;
item.OfficialRating = info.OfficialRating; item.OfficialRating = info.OfficialRating;
item.DateCreated = info.DateCreated ?? DateTime.UtcNow; item.DateCreated = info.DateCreated ?? DateTime.UtcNow;
} }
@ -1262,16 +1272,17 @@ namespace MediaBrowser.Server.Implementations.Channels
channelItem.ChannelId = internalChannelId.ToString("N"); channelItem.ChannelId = internalChannelId.ToString("N");
if (!string.Equals(channelItem.ExternalId, info.Id, StringComparison.OrdinalIgnoreCase)) if (item.ParentId != internalChannelId)
{ {
isNew = true; forceUpdate = true;
} }
channelItem.ExternalId = info.Id; item.ParentId = internalChannelId;
if (isNew) if (!string.Equals(channelItem.ExternalId, info.Id, StringComparison.OrdinalIgnoreCase))
{ {
channelItem.Tags = info.Tags; forceUpdate = true;
} }
channelItem.ExternalId = info.Id;
var channelMediaItem = item as IChannelMediaItem; var channelMediaItem = item as IChannelMediaItem;
@ -1286,7 +1297,7 @@ namespace MediaBrowser.Server.Implementations.Channels
item.Path = mediaSource == null ? null : mediaSource.Path; item.Path = mediaSource == null ? null : mediaSource.Path;
} }
if (!string.IsNullOrWhiteSpace(info.ImageUrl)) if (!string.IsNullOrWhiteSpace(info.ImageUrl) && !item.HasImage(ImageType.Primary))
{ {
item.SetImagePath(ImageType.Primary, info.ImageUrl); item.SetImagePath(ImageType.Primary, info.ImageUrl);
} }
@ -1300,6 +1311,10 @@ namespace MediaBrowser.Server.Implementations.Channels
await _libraryManager.UpdatePeople(item, info.People ?? new List<PersonInfo>()).ConfigureAwait(false); await _libraryManager.UpdatePeople(item, info.People ?? new List<PersonInfo>()).ConfigureAwait(false);
} }
} }
else if (forceUpdate)
{
await item.UpdateToRepository(ItemUpdateType.None, cancellationToken).ConfigureAwait(false);
}
return item; return item;
} }

Loading…
Cancel
Save