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.cs54
1 files changed, 49 insertions, 5 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
index 9cb697c81..199c6a975 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
@@ -392,7 +392,7 @@ namespace MediaBrowser.Server.Implementations.Sync
var jobItemResult = GetJobItems(new SyncJobItemQuery
{
TargetId = targetId,
- Status = SyncJobItemStatus.Transferring
+ Statuses = new List<SyncJobItemStatus> { SyncJobItemStatus.Transferring }
});
return jobItemResult.Items.Select(GetJobItemInfo)
@@ -404,21 +404,65 @@ namespace MediaBrowser.Server.Implementations.Sync
var jobItemResult = GetJobItems(new SyncJobItemQuery
{
TargetId = request.TargetId,
- Status = SyncJobItemStatus.Synced
+ Statuses = new List<SyncJobItemStatus> { SyncJobItemStatus.Synced }
});
+ var response = new SyncDataResponse();
+
foreach (var jobItem in jobItemResult.Items)
{
- if (!request.LocalItemIds.Contains(jobItem.ItemId, StringComparer.OrdinalIgnoreCase))
+ if (request.LocalItemIds.Contains(jobItem.ItemId, StringComparer.OrdinalIgnoreCase))
+ {
+ var job = _repo.GetJob(jobItem.JobId);
+ var user = _userManager.GetUserById(job.UserId);
+
+ if (user == null)
+ {
+ // Tell the device to remove it since the user is gone now
+ response.ItemIdsToRemove.Add(jobItem.ItemId);
+ }
+ else if (job.UnwatchedOnly)
+ {
+ var libraryItem = _libraryManager.GetItemById(jobItem.ItemId);
+
+ if (IsLibraryItemAvailable(libraryItem))
+ {
+ if (libraryItem.IsPlayed(user) && libraryItem is Video)
+ {
+ // Tell the device to remove it since it has been played
+ response.ItemIdsToRemove.Add(jobItem.ItemId);
+ }
+ }
+ else
+ {
+ // Tell the device to remove it since it's no longer available
+ response.ItemIdsToRemove.Add(jobItem.ItemId);
+ }
+ }
+ }
+ else
{
+ // Content is no longer on the device
jobItem.Status = SyncJobItemStatus.RemovedFromDevice;
await _repo.Update(jobItem).ConfigureAwait(false);
}
}
-
- var response = new SyncDataResponse();
+ response.ItemIdsToRemove = response.ItemIdsToRemove.Distinct(StringComparer.OrdinalIgnoreCase).ToList();
+
return response;
}
+
+ private bool IsLibraryItemAvailable(BaseItem item)
+ {
+ if (item == null)
+ {
+ return false;
+ }
+
+ // TODO: Make sure it hasn't been deleted
+
+ return true;
+ }
}
}