aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync/SyncManager.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncManager.cs107
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;
}