2
0
Luke Pulverenti 9 жил өмнө
parent
commit
fafa879eef

+ 59 - 2
MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs

@@ -18,12 +18,14 @@ namespace MediaBrowser.Server.Implementations.Channels
         private readonly IChannelManager _channelManager;
         private readonly IChannelManager _channelManager;
         private readonly IUserManager _userManager;
         private readonly IUserManager _userManager;
         private readonly ILogger _logger;
         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;
             _channelManager = channelManager;
             _userManager = userManager;
             _userManager = userManager;
             _logger = logger;
             _logger = logger;
+            _libraryManager = libraryManager;
         }
         }
 
 
         public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
         public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
@@ -52,6 +54,8 @@ namespace MediaBrowser.Server.Implementations.Channels
                 progress.Report(percent * 100);
                 progress.Report(percent * 100);
             }
             }
 
 
+            await CleanDatabase(cancellationToken).ConfigureAwait(false);
+            
             progress.Report(100);
             progress.Report(100);
         }
         }
 
 
@@ -63,7 +67,7 @@ namespace MediaBrowser.Server.Implementations.Channels
 
 
             return string.Join("|", channels.ToArray());
             return string.Join("|", channels.ToArray());
         }
         }
-        
+
         private async Task DownloadContent(string user, CancellationToken cancellationToken, IProgress<double> progress)
         private async Task DownloadContent(string user, CancellationToken cancellationToken, IProgress<double> progress)
         {
         {
             var channels = await _channelManager.GetChannelsInternal(new ChannelQuery
             var channels = await _channelManager.GetChannelsInternal(new ChannelQuery
@@ -116,6 +120,59 @@ namespace MediaBrowser.Server.Implementations.Channels
             progress.Report(100);
             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)
         private async Task GetAllItems(string user, string channelId, string folderId, int currentRefreshLevel, int maxRefreshLevel, IProgress<double> progress, CancellationToken cancellationToken)
         {
         {
             var folderItems = new List<string>();
             var folderItems = new List<string>();

+ 4 - 2
MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs

@@ -13,12 +13,14 @@ namespace MediaBrowser.Server.Implementations.Channels
         private readonly IChannelManager _channelManager;
         private readonly IChannelManager _channelManager;
         private readonly IUserManager _userManager;
         private readonly IUserManager _userManager;
         private readonly ILogger _logger;
         private readonly ILogger _logger;
+        private readonly ILibraryManager _libraryManager;
 
 
-        public RefreshChannelsScheduledTask(IChannelManager channelManager, IUserManager userManager, ILogger logger)
+        public RefreshChannelsScheduledTask(IChannelManager channelManager, IUserManager userManager, ILogger logger, ILibraryManager libraryManager)
         {
         {
             _channelManager = channelManager;
             _channelManager = channelManager;
             _userManager = userManager;
             _userManager = userManager;
             _logger = logger;
             _logger = logger;
+            _libraryManager = libraryManager;
         }
         }
 
 
         public string Name
         public string Name
@@ -42,7 +44,7 @@ namespace MediaBrowser.Server.Implementations.Channels
 
 
             await manager.RefreshChannels(new Progress<double>(), cancellationToken).ConfigureAwait(false);
             await manager.RefreshChannels(new Progress<double>(), cancellationToken).ConfigureAwait(false);
 
 
-            await new ChannelPostScanTask(_channelManager, _userManager, _logger).Run(progress, cancellationToken)
+            await new ChannelPostScanTask(_channelManager, _userManager, _logger, _libraryManager).Run(progress, cancellationToken)
                     .ConfigureAwait(false);
                     .ConfigureAwait(false);
         }
         }
 
 

+ 2 - 0
MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs

@@ -84,6 +84,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
 
 
             foreach (var id in invalidIds)
             foreach (var id in invalidIds)
             {
             {
+                cancellationToken.ThrowIfCancellationRequested();
+                
                 var item = _libraryManager.GetItemById(id);
                 var item = _libraryManager.GetItemById(id);
 
 
                 await _libraryManager.DeleteItem(item, new DeleteOptions
                 await _libraryManager.DeleteItem(item, new DeleteOptions

+ 2 - 0
MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs

@@ -85,6 +85,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
 
 
             foreach (var id in invalidIds)
             foreach (var id in invalidIds)
             {
             {
+                cancellationToken.ThrowIfCancellationRequested();
+                
                 var item = _libraryManager.GetItemById(id);
                 var item = _libraryManager.GetItemById(id);
 
 
                 await _libraryManager.DeleteItem(item, new DeleteOptions
                 await _libraryManager.DeleteItem(item, new DeleteOptions

+ 2 - 0
MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs

@@ -85,6 +85,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
 
 
             foreach (var id in invalidIds)
             foreach (var id in invalidIds)
             {
             {
+                cancellationToken.ThrowIfCancellationRequested();
+                
                 var item = _libraryManager.GetItemById(id);
                 var item = _libraryManager.GetItemById(id);
 
 
                 await _libraryManager.DeleteItem(item, new DeleteOptions
                 await _libraryManager.DeleteItem(item, new DeleteOptions

+ 38 - 4
MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs

@@ -92,15 +92,25 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
 
 
             foreach (var person in people)
             foreach (var person in people)
             {
             {
-                bool current;
-                if (!dict.TryGetValue(person.Name, out current) || !current)
+                var isMetadataEnabled = DownloadMetadata(person, peopleOptions);
+
+                bool currentValue;
+                if (dict.TryGetValue(person.Name, out currentValue))
+                {
+                    if (!currentValue && isMetadataEnabled)
+                    {
+                        dict[person.Name] = true;
+                    }
+                }
+                else
                 {
                 {
-                    dict[person.Name] = DownloadMetadata(person, peopleOptions);
+                    dict[person.Name] = isMetadataEnabled;
                 }
                 }
             }
             }
 
 
             var numComplete = 0;
             var numComplete = 0;
-
+            var validIds = new List<Guid>();
+            
             foreach (var person in dict)
             foreach (var person in dict)
             {
             {
                 cancellationToken.ThrowIfCancellationRequested();
                 cancellationToken.ThrowIfCancellationRequested();
@@ -109,6 +119,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
                 {
                 {
                     var item = _libraryManager.GetPerson(person.Key);
                     var item = _libraryManager.GetPerson(person.Key);
 
 
+                    validIds.Add(item.Id);
+                    
                     var options = new MetadataRefreshOptions
                     var options = new MetadataRefreshOptions
                     {
                     {
                          MetadataRefreshMode = person.Value ? MetadataRefreshMode.Default : MetadataRefreshMode.ValidationOnly,
                          MetadataRefreshMode = person.Value ? MetadataRefreshMode.Default : MetadataRefreshMode.ValidationOnly,
@@ -130,6 +142,28 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
                 progress.Report(100 * percent);
                 progress.Report(100 * percent);
             }
             }
 
 
+            var allIds = _libraryManager.GetItemIds(new InternalItemsQuery
+            {
+                IncludeItemTypes = new[] { typeof(Person).Name }
+            });
+
+            var invalidIds = allIds
+                .Except(validIds)
+                .ToList();
+
+            foreach (var id in invalidIds)
+            {
+                cancellationToken.ThrowIfCancellationRequested();
+
+                var item = _libraryManager.GetItemById(id);
+
+                await _libraryManager.DeleteItem(item, new DeleteOptions
+                {
+                    DeleteFileLocation = false
+
+                }).ConfigureAwait(false);
+            }
+
             progress.Report(100);
             progress.Report(100);
 
 
             _logger.Info("People validation complete");
             _logger.Info("People validation complete");

+ 2 - 0
MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs

@@ -84,6 +84,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
 
 
             foreach (var id in invalidIds)
             foreach (var id in invalidIds)
             {
             {
+                cancellationToken.ThrowIfCancellationRequested();
+                
                 var item = _libraryManager.GetItemById(id);
                 var item = _libraryManager.GetItemById(id);
 
 
                 await _libraryManager.DeleteItem(item, new DeleteOptions
                 await _libraryManager.DeleteItem(item, new DeleteOptions

+ 1 - 1
MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs

@@ -21,7 +21,7 @@ using System.Threading.Tasks;
 
 
 namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
 namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
 {
 {
-    public class EmbyTV : ILiveTvService, IHasRegistrationInfo, IDisposable
+    public class EmbyTV : ILiveTvService/*, IHasRegistrationInfo*/, IDisposable
     {
     {
         private readonly IApplicationHost _appHpst;
         private readonly IApplicationHost _appHpst;
         private readonly ILogger _logger;
         private readonly ILogger _logger;