From 6ed2a85f45c4b59b4fe6ee1c93b81aa76a69fc78 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 14 Aug 2015 10:42:40 -0400 Subject: update polymer --- MediaBrowser.Server.Implementations/Sync/SyncManager.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Sync/SyncManager.cs') diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 6c71a90a0..36f8984dd 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -52,8 +52,8 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly IConfigurationManager _config; private readonly IUserDataManager _userDataManager; private readonly Func _mediaSourceManager; - private readonly IJsonSerializer _json; - private readonly ITaskManager _taskManager; + private readonly IJsonSerializer _json; + private readonly ITaskManager _taskManager; private ISyncProvider[] _providers = { }; @@ -63,7 +63,7 @@ namespace MediaBrowser.Server.Implementations.Sync public event EventHandler> SyncJobItemUpdated; public event EventHandler> SyncJobItemCreated; - public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, Func dtoService, IServerApplicationHost appHost, ITVSeriesManager tvSeriesManager, Func mediaEncoder, IFileSystem fileSystem, Func subtitleEncoder, IConfigurationManager config, IUserDataManager userDataManager, Func mediaSourceManager, IJsonSerializer json, ITaskManager taskManager) + public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, Func dtoService, IServerApplicationHost appHost, ITVSeriesManager tvSeriesManager, Func mediaEncoder, IFileSystem fileSystem, Func subtitleEncoder, IConfigurationManager config, IUserDataManager userDataManager, Func mediaSourceManager, IJsonSerializer json, ITaskManager taskManager) { _libraryManager = libraryManager; _repo = repo; @@ -80,7 +80,7 @@ namespace MediaBrowser.Server.Implementations.Sync _userDataManager = userDataManager; _mediaSourceManager = mediaSourceManager; _json = json; - _taskManager = taskManager; + _taskManager = taskManager; } public void AddParts(IEnumerable providers) @@ -126,7 +126,7 @@ namespace MediaBrowser.Server.Implementations.Sync if (string.IsNullOrWhiteSpace(request.Name)) { - throw new ArgumentException("Please supply a name for the sync job."); + request.Name = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString(); } var target = GetSyncTargets(request.UserId) @@ -217,9 +217,10 @@ namespace MediaBrowser.Server.Implementations.Sync }, _logger); } - if (returnResult.JobItems.Any (i => i.Status == SyncJobItemStatus.Queued || i.Status == SyncJobItemStatus.Converting)) { - _taskManager.QueueScheduledTask (); - } + if (returnResult.JobItems.Any(i => i.Status == SyncJobItemStatus.Queued || i.Status == SyncJobItemStatus.Converting)) + { + _taskManager.QueueScheduledTask(); + } return returnResult; } -- cgit v1.2.3 From 9849f522efa21097fcd827635ef75535bb821bf0 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 17 Aug 2015 00:56:22 -0400 Subject: fix playlist runtime display --- MediaBrowser.Server.Implementations/Dto/DtoService.cs | 3 ++- MediaBrowser.Server.Implementations/Sync/SyncManager.cs | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Sync/SyncManager.cs') diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 7b19589b7..aa6ab1d65 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -1647,7 +1647,8 @@ namespace MediaBrowser.Server.Implementations.Dto IsFolder = false, Recursive = true, IsVirtualUnaired = false, - IsMissing = false + IsMissing = false, + User = user }).Result.Items; diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 36f8984dd..5bd35a325 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -1,8 +1,8 @@ -using MediaBrowser.Common; -using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Events; using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; +using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller; using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Drawing; @@ -32,7 +32,6 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.ScheduledTasks; namespace MediaBrowser.Server.Implementations.Sync { -- cgit v1.2.3 From ede3746ea7772b09b740ae59f19c9e7343458534 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 18 Aug 2015 15:45:41 -0400 Subject: don't duplicate synced items --- .../Sync/IServerSyncProvider.cs | 11 +++++++ .../Listings/Emby/EmbyListingsNorthAmerica.cs | 8 ++++- .../Sync/AppSyncProvider.cs | 7 ++++- .../Sync/SyncJobProcessor.cs | 36 ++++++++++++++++++++++ .../Sync/SyncManager.cs | 15 +++++++++ 5 files changed, 75 insertions(+), 2 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Sync/SyncManager.cs') diff --git a/MediaBrowser.Controller/Sync/IServerSyncProvider.cs b/MediaBrowser.Controller/Sync/IServerSyncProvider.cs index 860c736ea..36ad27290 100644 --- a/MediaBrowser.Controller/Sync/IServerSyncProvider.cs +++ b/MediaBrowser.Controller/Sync/IServerSyncProvider.cs @@ -63,4 +63,15 @@ namespace MediaBrowser.Controller.Sync /// Task<SyncedFileInfo>. Task SendFile(string path, string[] pathParts, SyncTarget target, IProgress progress, CancellationToken cancellationToken); } + + public interface IHasDuplicateCheck + { + /// + /// Allows the duplicate job item. + /// + /// The original. + /// The duplicate. + /// true if XXXX, false otherwise. + bool AllowDuplicateJobItem(SyncJobItem original, SyncJobItem duplicate); + } } diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListingsNorthAmerica.cs b/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListingsNorthAmerica.cs index db6e8de3f..2993740d6 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListingsNorthAmerica.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListingsNorthAmerica.cs @@ -50,7 +50,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings.Emby { Id = info.listingID.ToString(CultureInfo.InvariantCulture), Name = GetStringValue(info.showName), - EpisodeTitle = GetStringValue(info.episodeTitle), HomePageUrl = GetStringValue(info.webLink), Overview = info.description, IsHD = info.hd, @@ -101,6 +100,13 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings.Emby program.SeriesId = info.seriesID.ToString(CultureInfo.InvariantCulture); program.IsSeries = true; program.IsRepeat = info.repeat; + + program.EpisodeTitle = GetStringValue(info.episodeTitle); + + if (string.Equals(program.Name, program.EpisodeTitle, StringComparison.OrdinalIgnoreCase)) + { + program.EpisodeTitle = null; + } } if (info.starRating > 0) diff --git a/MediaBrowser.Server.Implementations/Sync/AppSyncProvider.cs b/MediaBrowser.Server.Implementations/Sync/AppSyncProvider.cs index 7b1fa4dec..03485012f 100644 --- a/MediaBrowser.Server.Implementations/Sync/AppSyncProvider.cs +++ b/MediaBrowser.Server.Implementations/Sync/AppSyncProvider.cs @@ -9,7 +9,7 @@ using System.Linq; namespace MediaBrowser.Server.Implementations.Sync { - public class AppSyncProvider : ISyncProvider, IHasUniqueTargetIds, IHasSyncQuality + public class AppSyncProvider : ISyncProvider, IHasUniqueTargetIds, IHasSyncQuality, IHasDuplicateCheck { private readonly IDeviceManager _deviceManager; @@ -104,5 +104,10 @@ namespace MediaBrowser.Server.Implementations.Sync IsConverting = isConverting }; } + + public bool AllowDuplicateJobItem(SyncJobItem original, SyncJobItem duplicate) + { + return false; + } } } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index 04ebcd903..1061a373e 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -466,6 +466,32 @@ namespace MediaBrowser.Server.Implementations.Sync return; } + // See if there's already another active job item for the same target + var existingJobItems = _syncManager.GetJobItems(new SyncJobItemQuery + { + AddMetadata = false, + ItemId = jobItem.ItemId, + TargetId = job.TargetId, + Statuses = new[] { SyncJobItemStatus.Converting, SyncJobItemStatus.Queued, SyncJobItemStatus.ReadyToTransfer, SyncJobItemStatus.Synced, SyncJobItemStatus.Transferring } + }); + + var duplicateJobItems = existingJobItems.Items + .Where(i => !string.Equals(i.Id, jobItem.Id, StringComparison.OrdinalIgnoreCase)) + .ToList(); + + if (duplicateJobItems.Count > 0) + { + var syncProvider = _syncManager.GetSyncProvider(jobItem, job) as IHasDuplicateCheck; + + if (!duplicateJobItems.Any(i => AllowDuplicateJobItem(syncProvider, i, jobItem))) + { + _logger.Debug("Cancelling sync job item because there is already another active job for the same target."); + jobItem.Status = SyncJobItemStatus.Cancelled; + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); + return; + } + } + var video = item as Video; if (video != null) { @@ -488,6 +514,16 @@ namespace MediaBrowser.Server.Implementations.Sync } } + private bool AllowDuplicateJobItem(IHasDuplicateCheck provider, SyncJobItem original, SyncJobItem duplicate) + { + if (provider != null) + { + return provider.AllowDuplicateJobItem(original, duplicate); + } + + return true; + } + private async Task Sync(SyncJobItem jobItem, SyncJob job, Video item, User user, bool enableConversion, SyncOptions syncOptions, IProgress progress, CancellationToken cancellationToken) { var jobOptions = _syncManager.GetVideoOptions(jobItem, job); diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 5bd35a325..18fcb4e79 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -1159,6 +1159,21 @@ namespace MediaBrowser.Server.Implementations.Sync return options; } + public ISyncProvider GetSyncProvider(SyncJobItem jobItem, SyncJob job) + { + foreach (var provider in _providers) + { + foreach (var target in GetSyncTargets(provider)) + { + if (string.Equals(target.Id, jobItem.TargetId, StringComparison.OrdinalIgnoreCase)) + { + return provider; + } + } + } + return null; + } + public SyncJobOptions GetVideoOptions(SyncJobItem jobItem, SyncJob job) { var options = GetSyncJobOptions(jobItem.TargetId, job.Profile, job.Quality); -- cgit v1.2.3