From 4d7f98361894e9de90ab964c3496fb7f613c28e2 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 28 Jul 2015 23:42:03 -0400 Subject: update recording scheduler --- MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs') diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs index d266cca6c..baf446942 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs @@ -12,7 +12,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Server.Implementations.Channels { - public class ChannelPostScanTask : ILibraryPostScanTask + public class ChannelPostScanTask { private readonly IChannelManager _channelManager; private readonly IUserManager _userManager; -- cgit v1.2.3 From 0e9c9a53ba2ba705c6da3e80dbbbec7434479fe3 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 21 Aug 2015 11:55:11 -0400 Subject: update channels --- .../Channels/ChannelDownloadScheduledTask.cs | 409 --------------------- .../Channels/ChannelPostScanTask.cs | 12 +- .../MediaBrowser.Server.Implementations.csproj | 1 - 3 files changed, 11 insertions(+), 411 deletions(-) delete mode 100644 MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs (limited to 'MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs') diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs b/MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs deleted file mode 100644 index 337e26e8d..000000000 --- a/MediaBrowser.Server.Implementations/Channels/ChannelDownloadScheduledTask.cs +++ /dev/null @@ -1,409 +0,0 @@ -using MediaBrowser.Common.IO; -using MediaBrowser.Common.Progress; -using MediaBrowser.Common.ScheduledTasks; -using MediaBrowser.Controller.Channels; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Channels; -using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.MediaInfo; -using MediaBrowser.Model.Querying; -using MoreLinq; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Server.Implementations.Channels -{ - public class ChannelDownloadScheduledTask : IScheduledTask, IConfigurableScheduledTask - { - private readonly IChannelManager _manager; - private readonly IServerConfigurationManager _config; - private readonly ILogger _logger; - private readonly IFileSystem _fileSystem; - private readonly ILibraryManager _libraryManager; - private readonly IUserManager _userManager; - - public ChannelDownloadScheduledTask(IChannelManager manager, IServerConfigurationManager config, ILogger logger, IFileSystem fileSystem, ILibraryManager libraryManager, IUserManager userManager) - { - _manager = manager; - _config = config; - _logger = logger; - _fileSystem = fileSystem; - _libraryManager = libraryManager; - _userManager = userManager; - } - - public string Name - { - get { return "Download channel content"; } - } - - public string Description - { - get { return "Downloads channel content based on configuration."; } - } - - public string Category - { - get { return "Channels"; } - } - - public async Task Execute(CancellationToken cancellationToken, IProgress progress) - { - CleanChannelContent(cancellationToken); - - var users = _userManager.Users - .DistinctBy(GetUserDistinctValue) - .Select(i => i.Id.ToString("N")) - .ToList(); - - var numComplete = 0; - - foreach (var user in users) - { - double percentPerUser = 1; - percentPerUser /= users.Count; - var startingPercent = numComplete * percentPerUser * 100; - - var innerProgress = new ActionableProgress(); - innerProgress.RegisterAction(p => progress.Report(startingPercent + (percentPerUser * p))); - - await DownloadContent(user, cancellationToken, innerProgress).ConfigureAwait(false); - - numComplete++; - double percent = numComplete; - percent /= users.Count; - progress.Report(percent * 100); - } - - progress.Report(100); - } - - public static string GetUserDistinctValue(User user) - { - var channels = user.Policy.EnabledChannels - .OrderBy(i => i) - .ToList(); - - return string.Join("|", channels.ToArray()); - } - - private async Task DownloadContent(string user, - CancellationToken cancellationToken, - IProgress progress) - { - var innerProgress = new ActionableProgress(); - innerProgress.RegisterAction(p => progress.Report(0 + (.8 * p))); - await DownloadAllChannelContent(user, cancellationToken, innerProgress).ConfigureAwait(false); - progress.Report(80); - - innerProgress = new ActionableProgress(); - innerProgress.RegisterAction(p => progress.Report(80 + (.2 * p))); - await DownloadLatestChannelContent(user, cancellationToken, progress).ConfigureAwait(false); - progress.Report(100); - } - - private async Task DownloadLatestChannelContent(string userId, - CancellationToken cancellationToken, - IProgress progress) - { - var result = await _manager.GetLatestChannelItemsInternal(new AllChannelMediaQuery - { - UserId = userId - - }, cancellationToken).ConfigureAwait(false); - - progress.Report(5); - - var innerProgress = new ActionableProgress(); - innerProgress.RegisterAction(p => progress.Report(5 + (.95 * p))); - - var path = _manager.ChannelDownloadPath; - - await DownloadChannelContent(result, path, cancellationToken, innerProgress).ConfigureAwait(false); - } - - private async Task DownloadAllChannelContent(string userId, - CancellationToken cancellationToken, - IProgress progress) - { - var result = await _manager.GetAllMediaInternal(new AllChannelMediaQuery - { - UserId = userId - - }, cancellationToken).ConfigureAwait(false); - - progress.Report(5); - - var innerProgress = new ActionableProgress(); - innerProgress.RegisterAction(p => progress.Report(5 + (.95 * p))); - - var path = _manager.ChannelDownloadPath; - - await DownloadChannelContent(result, path, cancellationToken, innerProgress).ConfigureAwait(false); - } - - private async Task DownloadChannelContent(QueryResult result, - string path, - CancellationToken cancellationToken, - IProgress progress) - { - var numComplete = 0; - - var options = _config.GetChannelsConfiguration(); - - foreach (var item in result.Items) - { - var channelItem = item as IChannelMediaItem; - - if (channelItem != null) - { - var channelFeatures = _manager.GetChannelFeatures(channelItem.ChannelId); - - if (channelFeatures.SupportsContentDownloading) - { - if (options.DownloadingChannels.Contains(channelItem.ChannelId)) - { - try - { - await DownloadChannelItem(channelItem, options, cancellationToken, path); - } - catch (OperationCanceledException) - { - break; - } - catch (ChannelDownloadException) - { - // Logged at lower levels - } - catch (Exception ex) - { - _logger.ErrorException("Error downloading channel content for {0}", ex, item.Name); - } - } - } - } - - numComplete++; - double percent = numComplete; - percent /= result.Items.Length; - progress.Report(percent * 100); - } - - progress.Report(100); - } - - private double? GetDownloadLimit(ChannelOptions channelOptions) - { - return channelOptions.DownloadSizeLimit; - } - - private async Task DownloadChannelItem(IChannelMediaItem item, - ChannelOptions channelOptions, - CancellationToken cancellationToken, - string path) - { - var itemId = item.Id.ToString("N"); - var sources = await _manager.GetStaticMediaSources(item, true, cancellationToken) - .ConfigureAwait(false); - - var cachedVersions = sources.Where(i => i.Protocol == MediaProtocol.File).ToList(); - - if (cachedVersions.Count > 0) - { - await RefreshMediaSourceItems(cachedVersions, cancellationToken).ConfigureAwait(false); - return; - } - - var limit = GetDownloadLimit(channelOptions); - - if (limit.HasValue) - { - if (IsSizeLimitReached(path, limit.Value)) - { - return; - } - } - - var destination = Path.Combine(path, item.ChannelId, itemId); - - await _manager.DownloadChannelItem(item, destination, new Progress(), cancellationToken) - .ConfigureAwait(false); - - await RefreshMediaSourceItem(destination, cancellationToken).ConfigureAwait(false); - } - - private async Task RefreshMediaSourceItems(IEnumerable items, CancellationToken cancellationToken) - { - foreach (var item in items) - { - await RefreshMediaSourceItem(item.Path, cancellationToken).ConfigureAwait(false); - } - } - - private async Task RefreshMediaSourceItem(string path, CancellationToken cancellationToken) - { - var item = _libraryManager.ResolvePath(new FileInfo(path)); - - if (item != null) - { - var forceSave = false; - - // Get the version from the database - var dbItem = _libraryManager.GetItemById(item.Id); - - if (dbItem == null) - { - forceSave = true; - } - else - { - item = dbItem; - } - - await item.RefreshMetadata(new MetadataRefreshOptions - { - ForceSave = forceSave - - }, cancellationToken).ConfigureAwait(false); - } - } - - private bool IsSizeLimitReached(string path, double gbLimit) - { - try - { - var byteLimit = gbLimit * 1000000000; - - long total = 0; - - foreach (var file in new DirectoryInfo(path).EnumerateFiles("*", SearchOption.AllDirectories)) - { - total += file.Length; - - if (total >= byteLimit) - { - return true; - } - } - - return false; - } - catch (DirectoryNotFoundException) - { - return false; - } - } - - public IEnumerable GetDefaultTriggers() - { - return new ITaskTrigger[] - { - new IntervalTrigger{ Interval = TimeSpan.FromHours(3)}, - }; - } - - private void CleanChannelContent(CancellationToken cancellationToken) - { - var options = _config.GetChannelsConfiguration(); - - if (!options.MaxDownloadAge.HasValue) - { - return; - } - - var minDateModified = DateTime.UtcNow.AddDays(0 - options.MaxDownloadAge.Value); - - var path = _manager.ChannelDownloadPath; - - try - { - DeleteCacheFilesFromDirectory(cancellationToken, path, minDateModified, new Progress()); - } - catch (DirectoryNotFoundException) - { - // No biggie here. Nothing to delete - } - } - - /// - /// Deletes the cache files from directory with a last write time less than a given date - /// - /// The task cancellation token. - /// The directory. - /// The min date modified. - /// The progress. - private void DeleteCacheFilesFromDirectory(CancellationToken cancellationToken, string directory, DateTime minDateModified, IProgress progress) - { - var filesToDelete = new DirectoryInfo(directory).EnumerateFiles("*", SearchOption.AllDirectories) - .Where(f => _fileSystem.GetLastWriteTimeUtc(f) < minDateModified) - .ToList(); - - var index = 0; - - foreach (var file in filesToDelete) - { - double percent = index; - percent /= filesToDelete.Count; - - progress.Report(100 * percent); - - cancellationToken.ThrowIfCancellationRequested(); - - DeleteFile(file.FullName); - - index++; - } - - progress.Report(100); - } - - /// - /// Deletes the file. - /// - /// The path. - private void DeleteFile(string path) - { - try - { - _fileSystem.DeleteFile(path); - } - catch (IOException ex) - { - _logger.ErrorException("Error deleting file {0}", ex, path); - } - } - - /// - /// Gets a value indicating whether this instance is hidden. - /// - /// true if this instance is hidden; otherwise, false. - public bool IsHidden - { - get - { - return !_manager.GetAllChannelFeatures().Any(); - } - } - - /// - /// Gets a value indicating whether this instance is enabled. - /// - /// true if this instance is enabled; otherwise, false. - public bool IsEnabled - { - get - { - return true; - } - } - } -} diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs index baf446942..b9f03fbc6 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.Progress; using MediaBrowser.Controller.Channels; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Channels; using MediaBrowser.Model.Logging; @@ -28,7 +29,7 @@ namespace MediaBrowser.Server.Implementations.Channels public async Task Run(IProgress progress, CancellationToken cancellationToken) { var users = _userManager.Users - .DistinctBy(ChannelDownloadScheduledTask.GetUserDistinctValue) + .DistinctBy(GetUserDistinctValue) .Select(i => i.Id.ToString("N")) .ToList(); @@ -54,6 +55,15 @@ namespace MediaBrowser.Server.Implementations.Channels progress.Report(100); } + public static string GetUserDistinctValue(User user) + { + var channels = user.Policy.EnabledChannels + .OrderBy(i => i) + .ToList(); + + return string.Join("|", channels.ToArray()); + } + private async Task DownloadContent(string user, CancellationToken cancellationToken, IProgress progress) { var channels = await _channelManager.GetChannelsInternal(new ChannelQuery diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 824f3e856..74329b08f 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -109,7 +109,6 @@ - -- cgit v1.2.3 From fafa879eef6c1fd7590bab78f842cf997251f5ab Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 22 Aug 2015 13:50:37 -0400 Subject: keep channels db clean --- .../Channels/ChannelPostScanTask.cs | 61 +++++++++++++++++++++- .../Channels/RefreshChannelsScheduledTask.cs | 6 ++- .../Library/Validators/GameGenresValidator.cs | 2 + .../Library/Validators/GenresValidator.cs | 2 + .../Library/Validators/MusicGenresValidator.cs | 2 + .../Library/Validators/PeopleValidator.cs | 42 +++++++++++++-- .../Library/Validators/StudiosValidator.cs | 2 + .../LiveTv/EmbyTV/EmbyTV.cs | 2 +- 8 files changed, 110 insertions(+), 9 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs') 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 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 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 progress, CancellationToken cancellationToken) { var folderItems = new List(); 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(), 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(); + 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; -- cgit v1.2.3