aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-08-22 13:50:37 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-08-22 13:50:37 -0400
commitfafa879eef6c1fd7590bab78f842cf997251f5ab (patch)
tree229f296354fe3ece249097e6f4a556474182e5ad
parent03e6cfde601fb92a5d6a6e50028a02a9d9bb66c8 (diff)
keep channels db clean
-rw-r--r--MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs61
-rw-r--r--MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs6
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs42
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs2
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs2
8 files changed, 110 insertions, 9 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>();
diff --git a/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs b/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs
index df94580a5..005bbb852 100644
--- a/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs
+++ b/MediaBrowser.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs
@@ -13,12 +13,14 @@ namespace MediaBrowser.Server.Implementations.Channels
private readonly IChannelManager _channelManager;
private readonly IUserManager _userManager;
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;
_userManager = userManager;
_logger = logger;
+ _libraryManager = libraryManager;
}
public string Name
@@ -42,7 +44,7 @@ namespace MediaBrowser.Server.Implementations.Channels
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);
}
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs
index ee06fecdf..b57e128d3 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/GameGenresValidator.cs
@@ -84,6 +84,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
foreach (var id in invalidIds)
{
+ cancellationToken.ThrowIfCancellationRequested();
+
var item = _libraryManager.GetItemById(id);
await _libraryManager.DeleteItem(item, new DeleteOptions
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs
index 6ab70ea22..11d4c9f16 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/GenresValidator.cs
@@ -85,6 +85,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
foreach (var id in invalidIds)
{
+ cancellationToken.ThrowIfCancellationRequested();
+
var item = _libraryManager.GetItemById(id);
await _libraryManager.DeleteItem(item, new DeleteOptions
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs
index 8be0f4349..0a66b4b41 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/MusicGenresValidator.cs
@@ -85,6 +85,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
foreach (var id in invalidIds)
{
+ cancellationToken.ThrowIfCancellationRequested();
+
var item = _libraryManager.GetItemById(id);
await _libraryManager.DeleteItem(item, new DeleteOptions
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs
index ef9dee8b5..a4c43af5d 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs
@@ -92,15 +92,25 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
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 validIds = new List<Guid>();
+
foreach (var person in dict)
{
cancellationToken.ThrowIfCancellationRequested();
@@ -109,6 +119,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
{
var item = _libraryManager.GetPerson(person.Key);
+ validIds.Add(item.Id);
+
var options = new MetadataRefreshOptions
{
MetadataRefreshMode = person.Value ? MetadataRefreshMode.Default : MetadataRefreshMode.ValidationOnly,
@@ -130,6 +142,28 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
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);
_logger.Info("People validation complete");
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs
index c90cbb2f0..c122d64d3 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs
@@ -84,6 +84,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
foreach (var id in invalidIds)
{
+ cancellationToken.ThrowIfCancellationRequested();
+
var item = _libraryManager.GetItemById(id);
await _libraryManager.DeleteItem(item, new DeleteOptions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
index 9b7e83894..d4b02568a 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
@@ -21,7 +21,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
{
- public class EmbyTV : ILiveTvService, IHasRegistrationInfo, IDisposable
+ public class EmbyTV : ILiveTvService/*, IHasRegistrationInfo*/, IDisposable
{
private readonly IApplicationHost _appHpst;
private readonly ILogger _logger;