implement sync item removals

This commit is contained in:
Luke Pulverenti
2014-12-30 14:16:01 -05:00
parent 8d10ee581c
commit 5e6354854d
6 changed files with 66 additions and 22 deletions

View File

@@ -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;
}
}
}