aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-12-11 01:20:28 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-12-11 01:20:28 -0500
commitea9e8b957cdf5bb335967eeb1a018c4fc2a1db53 (patch)
tree634029375a7632d4c591256790f190493a802138 /MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
parent4548e6598def249d4b0fe4f4f12e2fa16d4f1e3c (diff)
update sync objects
Diffstat (limited to 'MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs89
1 files changed, 89 insertions, 0 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
new file mode 100644
index 000000000..c7f02b3dd
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
@@ -0,0 +1,89 @@
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Sync;
+using MediaBrowser.Model.Sync;
+using MoreLinq;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Server.Implementations.Sync
+{
+ public class SyncJobProcessor
+ {
+ private readonly ILibraryManager _libraryManager;
+ private readonly ISyncRepository _syncRepo;
+
+ public SyncJobProcessor(ILibraryManager libraryManager, ISyncRepository syncRepo)
+ {
+ _libraryManager = libraryManager;
+ _syncRepo = syncRepo;
+ }
+
+ public void ProcessJobItem(SyncJob job, SyncJobItem jobItem, SyncTarget target)
+ {
+
+ }
+
+ public async Task EnsureJobItems(SyncJob job)
+ {
+ var items = GetItemsForSync(job.RequestedItemIds)
+ .ToList();
+
+ var jobItems = _syncRepo.GetJobItems(job.Id)
+ .ToList();
+
+ var created = 0;
+
+ foreach (var item in items)
+ {
+ var itemId = item.Id.ToString("N");
+
+ var jobItem = jobItems.FirstOrDefault(i => string.Equals(i.ItemId, itemId, StringComparison.OrdinalIgnoreCase));
+
+ if (jobItem != null)
+ {
+ continue;
+ }
+
+ jobItem = new SyncJobItem
+ {
+ Id = Guid.NewGuid().ToString("N"),
+ ItemId = itemId,
+ JobId = job.Id,
+ TargetId = job.TargetId
+ };
+
+ await _syncRepo.Create(jobItem).ConfigureAwait(false);
+
+ created++;
+ }
+
+ job.ItemCount = jobItems.Count + created;
+ await _syncRepo.Update(job).ConfigureAwait(false);
+ }
+
+ public IEnumerable<BaseItem> GetItemsForSync(IEnumerable<string> itemIds)
+ {
+ return itemIds.SelectMany(GetItemsForSync).DistinctBy(i => i.Id);
+ }
+
+ private IEnumerable<BaseItem> GetItemsForSync(string id)
+ {
+ var item = _libraryManager.GetItemById(id);
+
+ if (item == null)
+ {
+ return new List<BaseItem>();
+ }
+
+ return GetItemsForSync(item);
+ }
+
+ private IEnumerable<BaseItem> GetItemsForSync(BaseItem item)
+ {
+ return new[] { item };
+ }
+ }
+}