aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Sync
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2014-12-17 17:42:31 -0500
committerLuke <luke.pulverenti@gmail.com>2014-12-17 17:42:31 -0500
commita7f2bc5fda526e227e0dbdd23e0d408ed627da14 (patch)
tree9d3ca8e950bc8a0aae88fad7005971ec937f9e5a /MediaBrowser.Server.Implementations/Sync
parent999f2e03f4cbd70bb5f253fd7d4c9bc11bf9c963 (diff)
parente3484bdcc204ae39e0bfdf08e758012a048d539c (diff)
Merge pull request #956 from MediaBrowser/dev
3.0.5464.40000
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync')
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs49
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncManager.cs26
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncRepository.cs15
3 files changed, 82 insertions, 8 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
index 1976c0540..6dda869ee 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
@@ -48,7 +48,7 @@ namespace MediaBrowser.Server.Implementations.Sync
throw new InvalidOperationException("Cannot proceed with sync because user no longer exists.");
}
- var items = GetItemsForSync(job.RequestedItemIds, user)
+ var items = GetItemsForSync(job.RequestedItemIds, user, job.UnwatchedOnly)
.ToList();
var jobItems = _syncRepo.GetJobItems(new SyncJobItemQuery
@@ -59,6 +59,15 @@ namespace MediaBrowser.Server.Implementations.Sync
foreach (var item in items)
{
+ // Respect ItemLimit, if set
+ if (job.ItemLimit.HasValue)
+ {
+ if (jobItems.Count >= job.ItemLimit.Value)
+ {
+ break;
+ }
+ }
+
var itemId = item.Id.ToString("N");
var jobItem = jobItems.FirstOrDefault(i => string.Equals(i.ItemId, itemId, StringComparison.OrdinalIgnoreCase));
@@ -89,6 +98,13 @@ namespace MediaBrowser.Server.Implementations.Sync
await UpdateJobStatus(job, jobItems).ConfigureAwait(false);
}
+ public Task UpdateJobStatus(string id)
+ {
+ var job = _syncRepo.GetJob(id);
+
+ return UpdateJobStatus(job);
+ }
+
private Task UpdateJobStatus(SyncJob job)
{
if (job == null)
@@ -155,12 +171,31 @@ namespace MediaBrowser.Server.Implementations.Sync
return _syncRepo.Update(job);
}
- public IEnumerable<BaseItem> GetItemsForSync(IEnumerable<string> itemIds, User user)
+ public IEnumerable<BaseItem> GetItemsForSync(IEnumerable<string> itemIds, User user, bool unwatchedOnly)
{
- return itemIds
+ var items = itemIds
.SelectMany(i => GetItemsForSync(i, user))
- .Where(_syncManager.SupportsSync)
- .DistinctBy(i => i.Id);
+ .Where(_syncManager.SupportsSync);
+
+ if (unwatchedOnly)
+ {
+ // Avoid implicitly captured closure
+ var currentUser = user;
+
+ items = items.Where(i =>
+ {
+ var video = i as Video;
+
+ if (video != null)
+ {
+ return !video.IsPlayed(currentUser);
+ }
+
+ return true;
+ });
+ }
+
+ return items.DistinctBy(i => i.Id);
}
private IEnumerable<BaseItem> GetItemsForSync(string id, User user)
@@ -184,8 +219,8 @@ namespace MediaBrowser.Server.Implementations.Sync
.GetRecursiveChildren(user);
return itemByName.GetTaggedItems(items);
- }
-
+ }
+
if (item.IsFolder)
{
var folder = (Folder)item;
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
index c2f004f0b..664ec4038 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
@@ -49,7 +49,7 @@ namespace MediaBrowser.Server.Implementations.Sync
var user = _userManager.GetUserById(request.UserId);
var items = processor
- .GetItemsForSync(request.ItemIds, user)
+ .GetItemsForSync(request.ItemIds, user, request.UnwatchedOnly)
.ToList();
if (items.Any(i => !SupportsSync(i)))
@@ -265,5 +265,29 @@ namespace MediaBrowser.Server.Implementations.Sync
return null;
}
+
+ public async Task ReportSyncJobItemTransferred(string id)
+ {
+ var jobItem = _repo.GetJobItem(id);
+
+ jobItem.Status = SyncJobItemStatus.Completed;
+ jobItem.Progress = 100;
+
+ await _repo.Update(jobItem).ConfigureAwait(false);
+
+ var processor = new SyncJobProcessor(_libraryManager, _repo, this, _logger, _userManager);
+
+ await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false);
+ }
+
+ public SyncJobItem GetJobItem(string id)
+ {
+ return _repo.GetJobItem(id);
+ }
+
+ public QueryResult<SyncJobItem> GetJobItems(SyncJobItemQuery query)
+ {
+ return _repo.GetJobItems(query);
+ }
}
}
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
index a9e319cc4..7825b9e9a 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
@@ -352,6 +352,11 @@ namespace MediaBrowser.Server.Implementations.Sync
}
cmd.Parameters.Add(cmd, "@Status", DbType.String).Value = SyncJobStatus.Completed.ToString();
}
+ if (!string.IsNullOrWhiteSpace(query.TargetId))
+ {
+ whereClauses.Add("TargetId=@TargetId");
+ cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId;
+ }
var whereTextWithoutPaging = whereClauses.Count == 0 ?
string.Empty :
@@ -447,6 +452,16 @@ namespace MediaBrowser.Server.Implementations.Sync
whereClauses.Add("JobId=@JobId");
cmd.Parameters.Add(cmd, "@JobId", DbType.String).Value = query.JobId;
}
+ if (!string.IsNullOrWhiteSpace(query.TargetId))
+ {
+ whereClauses.Add("TargetId=@TargetId");
+ cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId;
+ }
+ if (query.Status.HasValue)
+ {
+ whereClauses.Add("Status=@Status");
+ cmd.Parameters.Add(cmd, "@Status", DbType.String).Value = query.Status.Value.ToString();
+ }
if (query.IsCompleted.HasValue)
{