diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync/SyncManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Sync/SyncManager.cs | 107 |
1 files changed, 94 insertions, 13 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 199c6a975..7e8db3e6a 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -73,11 +73,7 @@ namespace MediaBrowser.Server.Implementations.Sync if (string.IsNullOrWhiteSpace(request.Name)) { - if (request.Category.HasValue) - { - request.Name = request.Category.Value.ToString(); - } - else if (request.ItemIds.Count == 1) + if (request.ItemIds.Count == 1) { request.Name = GetDefaultName(_libraryManager.GetItemById(request.ItemIds[0])); } @@ -132,21 +128,49 @@ namespace MediaBrowser.Server.Implementations.Sync }; } - public QueryResult<SyncJob> GetJobs(SyncJobQuery query) + public Task UpdateJob(SyncJob job) + { + // Get fresh from the db and only update the fields that are supported to be changed. + var instance = _repo.GetJob(job.Id); + + instance.Name = job.Name; + instance.Quality = job.Quality; + instance.UnwatchedOnly = job.UnwatchedOnly; + instance.SyncNewContent = job.SyncNewContent; + instance.ItemLimit = job.ItemLimit; + + return _repo.Update(instance); + } + + public async Task<QueryResult<SyncJob>> GetJobs(SyncJobQuery query) { var result = _repo.GetJobs(query); - result.Items.ForEach(FillMetadata); + foreach (var item in result.Items) + { + await FillMetadata(item).ConfigureAwait(false); + } return result; } - private void FillMetadata(SyncJob job) + private async Task FillMetadata(SyncJob job) { var item = job.RequestedItemIds .Select(_libraryManager.GetItemById) .FirstOrDefault(i => i != null); + if (item == null) + { + var processor = new SyncJobProcessor(_libraryManager, _repo, this, _logger, _userManager, _tvSeriesManager); + + var user = _userManager.GetUserById(job.UserId); + + item = (await processor + .GetItemsForSync(job.Category, job.ParentId, job.RequestedItemIds, user, job.UnwatchedOnly).ConfigureAwait(false)) + .FirstOrDefault(); + } + if (item != null) { var hasSeries = item as IHasSeries; @@ -162,13 +186,25 @@ namespace MediaBrowser.Server.Implementations.Sync } var primaryImage = item.GetImageInfo(ImageType.Primary, 0); + var itemWithImage = item; + + if (primaryImage == null) + { + var parentWithImage = item.Parents.FirstOrDefault(i => i.HasImage(ImageType.Primary)); + + if (parentWithImage != null) + { + itemWithImage = parentWithImage; + primaryImage = parentWithImage.GetImageInfo(ImageType.Primary, 0); + } + } if (primaryImage != null) { try { - job.PrimaryImageTag = _imageProcessor.GetImageCacheTag(item, ImageType.Primary); - job.PrimaryImageItemId = item.Id.ToString("N"); + job.PrimaryImageTag = _imageProcessor.GetImageCacheTag(itemWithImage, ImageType.Primary); + job.PrimaryImageItemId = itemWithImage.Id.ToString("N"); } catch (Exception ex) @@ -179,6 +215,44 @@ namespace MediaBrowser.Server.Implementations.Sync } } + private void FillMetadata(SyncJobItem jobItem) + { + var item = _libraryManager.GetItemById(jobItem.ItemId); + + if (item == null) + { + return; + } + + var primaryImage = item.GetImageInfo(ImageType.Primary, 0); + var itemWithImage = item; + + if (primaryImage == null) + { + var parentWithImage = item.Parents.FirstOrDefault(i => i.HasImage(ImageType.Primary)); + + if (parentWithImage != null) + { + itemWithImage = parentWithImage; + primaryImage = parentWithImage.GetImageInfo(ImageType.Primary, 0); + } + } + + if (primaryImage != null) + { + try + { + jobItem.PrimaryImageTag = _imageProcessor.GetImageCacheTag(itemWithImage, ImageType.Primary); + jobItem.PrimaryImageItemId = itemWithImage.Id.ToString("N"); + + } + catch (Exception ex) + { + _logger.ErrorException("Error getting image info", ex); + } + } + } + public Task CancelJob(string id) { return _repo.DeleteJob(id); @@ -198,7 +272,7 @@ namespace MediaBrowser.Server.Implementations.Sync private IEnumerable<SyncTarget> GetSyncTargets(ISyncProvider provider, string userId) { - return provider.GetSyncTargets().Select(i => new SyncTarget + return provider.GetSyncTargets(userId).Select(i => new SyncTarget { Name = i.Name, Id = GetSyncTargetId(provider, i) @@ -330,7 +404,14 @@ namespace MediaBrowser.Server.Implementations.Sync public QueryResult<SyncJobItem> GetJobItems(SyncJobItemQuery query) { - return _repo.GetJobItems(query); + var result = _repo.GetJobItems(query); + + if (query.AddMetadata) + { + result.Items.ForEach(FillMetadata); + } + + return result; } private SyncedItem GetJobItemInfo(SyncJobItem jobItem) @@ -449,7 +530,7 @@ namespace MediaBrowser.Server.Implementations.Sync } response.ItemIdsToRemove = response.ItemIdsToRemove.Distinct(StringComparer.OrdinalIgnoreCase).ToList(); - + return response; } |
