diff options
| author | Luke <luke.pulverenti@gmail.com> | 2014-12-17 17:42:31 -0500 |
|---|---|---|
| committer | Luke <luke.pulverenti@gmail.com> | 2014-12-17 17:42:31 -0500 |
| commit | a7f2bc5fda526e227e0dbdd23e0d408ed627da14 (patch) | |
| tree | 9d3ca8e950bc8a0aae88fad7005971ec937f9e5a /MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs | |
| parent | 999f2e03f4cbd70bb5f253fd7d4c9bc11bf9c963 (diff) | |
| parent | e3484bdcc204ae39e0bfdf08e758012a048d539c (diff) | |
Merge pull request #956 from MediaBrowser/dev
3.0.5464.40000
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs | 49 |
1 files changed, 42 insertions, 7 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; |
