ChannelPostScanTask.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #pragma warning disable CS1591
  2. using System;
  3. using System.Linq;
  4. using System.Threading;
  5. using System.Threading.Tasks;
  6. using MediaBrowser.Controller.Channels;
  7. using MediaBrowser.Controller.Entities;
  8. using MediaBrowser.Controller.Library;
  9. using Microsoft.Extensions.Logging;
  10. namespace Emby.Server.Implementations.Channels
  11. {
  12. public class ChannelPostScanTask
  13. {
  14. private readonly IChannelManager _channelManager;
  15. private readonly ILogger _logger;
  16. private readonly ILibraryManager _libraryManager;
  17. public ChannelPostScanTask(IChannelManager channelManager, ILogger logger, ILibraryManager libraryManager)
  18. {
  19. _channelManager = channelManager;
  20. _logger = logger;
  21. _libraryManager = libraryManager;
  22. }
  23. public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
  24. {
  25. CleanDatabase(cancellationToken);
  26. progress.Report(100);
  27. return Task.CompletedTask;
  28. }
  29. private void CleanDatabase(CancellationToken cancellationToken)
  30. {
  31. var installedChannelIds = ((ChannelManager)_channelManager).GetInstalledChannelIds();
  32. var uninstalledChannels = _libraryManager.GetItemList(new InternalItemsQuery
  33. {
  34. IncludeItemTypes = new[] { typeof(Channel).Name },
  35. ExcludeItemIds = installedChannelIds.ToArray()
  36. });
  37. foreach (var channel in uninstalledChannels)
  38. {
  39. cancellationToken.ThrowIfCancellationRequested();
  40. CleanChannel((Channel)channel, cancellationToken);
  41. }
  42. }
  43. private void CleanChannel(Channel channel, CancellationToken cancellationToken)
  44. {
  45. _logger.LogInformation("Cleaning channel {0} from database", channel.Id);
  46. // Delete all channel items
  47. var items = _libraryManager.GetItemList(new InternalItemsQuery
  48. {
  49. ChannelIds = new[] { channel.Id }
  50. });
  51. foreach (var item in items)
  52. {
  53. cancellationToken.ThrowIfCancellationRequested();
  54. _libraryManager.DeleteItem(
  55. item,
  56. new DeleteOptions
  57. {
  58. DeleteFileLocation = false
  59. },
  60. false);
  61. }
  62. // Finally, delete the channel itself
  63. _libraryManager.DeleteItem(
  64. channel,
  65. new DeleteOptions
  66. {
  67. DeleteFileLocation = false
  68. },
  69. false);
  70. }
  71. }
  72. }