diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs index b9f03fbc6..976fa5615 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs @@ -18,12 +18,14 @@ namespace MediaBrowser.Server.Implementations.Channels private readonly IChannelManager _channelManager; private readonly IUserManager _userManager; private readonly ILogger _logger; + private readonly ILibraryManager _libraryManager; - public ChannelPostScanTask(IChannelManager channelManager, IUserManager userManager, ILogger logger) + public ChannelPostScanTask(IChannelManager channelManager, IUserManager userManager, ILogger logger, ILibraryManager libraryManager) { _channelManager = channelManager; _userManager = userManager; _logger = logger; + _libraryManager = libraryManager; } public async Task Run(IProgress<double> progress, CancellationToken cancellationToken) @@ -52,6 +54,8 @@ namespace MediaBrowser.Server.Implementations.Channels progress.Report(percent * 100); } + await CleanDatabase(cancellationToken).ConfigureAwait(false); + progress.Report(100); } @@ -63,7 +67,7 @@ namespace MediaBrowser.Server.Implementations.Channels return string.Join("|", channels.ToArray()); } - + private async Task DownloadContent(string user, CancellationToken cancellationToken, IProgress<double> progress) { var channels = await _channelManager.GetChannelsInternal(new ChannelQuery @@ -116,6 +120,59 @@ namespace MediaBrowser.Server.Implementations.Channels progress.Report(100); } + private async Task CleanDatabase(CancellationToken cancellationToken) + { + var allChannels = await _channelManager.GetChannelsInternal(new ChannelQuery { }, cancellationToken); + + var allIds = _libraryManager.GetItemIds(new InternalItemsQuery + { + IncludeItemTypes = new[] { typeof(Channel).Name } + }); + + var invalidIds = allIds + .Except(allChannels.Items.Select(i => i.Id).ToList()) + .ToList(); + + foreach (var id in invalidIds) + { + cancellationToken.ThrowIfCancellationRequested(); + + await CleanChannel(id, cancellationToken).ConfigureAwait(false); + } + } + + private async Task CleanChannel(Guid id, CancellationToken cancellationToken) + { + _logger.Debug("Cleaning channel {0} from database", id); + + // Delete all channel items + var allIds = _libraryManager.GetItemIds(new InternalItemsQuery + { + ChannelIds = new[] { id.ToString("N") } + }); + + foreach (var deleteId in allIds) + { + cancellationToken.ThrowIfCancellationRequested(); + + await DeleteItem(deleteId).ConfigureAwait(false); + } + + // Finally, delete the channel itself + await DeleteItem(id).ConfigureAwait(false); + } + + private Task DeleteItem(Guid id) + { + var item = _libraryManager.GetItemById(id); + + return _libraryManager.DeleteItem(item, new DeleteOptions + { + DeleteFileLocation = false + + }); + } + private async Task GetAllItems(string user, string channelId, string folderId, int currentRefreshLevel, int maxRefreshLevel, IProgress<double> progress, CancellationToken cancellationToken) { var folderItems = new List<string>(); |
