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.cs89
1 files changed, 60 insertions, 29 deletions
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
index 102218979..a39a2b1cd 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
@@ -182,19 +182,21 @@ namespace MediaBrowser.Server.Implementations.Sync
await processor.EnsureJobItems(job).ConfigureAwait(false);
// If it already has a converting status then is must have been aborted during conversion
- var jobItemsResult = _repo.GetJobItems(new SyncJobItemQuery
+ var jobItemsResult = GetJobItems(new SyncJobItemQuery
{
- Statuses = new SyncJobItemStatus[] { SyncJobItemStatus.Queued, SyncJobItemStatus.Converting },
- JobId = jobId
+ Statuses = new[] { SyncJobItemStatus.Queued, SyncJobItemStatus.Converting },
+ JobId = jobId,
+ AddMetadata = false
});
await processor.SyncJobItems(jobItemsResult.Items, false, new Progress<double>(), CancellationToken.None)
.ConfigureAwait(false);
- jobItemsResult = _repo.GetJobItems(new SyncJobItemQuery
+ jobItemsResult = GetJobItems(new SyncJobItemQuery
{
- Statuses = new SyncJobItemStatus[] { SyncJobItemStatus.Queued, SyncJobItemStatus.Converting },
- JobId = jobId
+ Statuses = new[] { SyncJobItemStatus.Queued, SyncJobItemStatus.Converting },
+ JobId = jobId,
+ AddMetadata = false
});
var returnResult = new SyncJobCreationResult
@@ -761,11 +763,13 @@ namespace MediaBrowser.Server.Implementations.Sync
if (jobItem.IsMarkedForRemoval)
{
// Tell the device to remove it since it has been marked for removal
+ _logger.Debug("Adding ItemIdsToRemove {0} because IsMarkedForRemoval is set.", jobItem.ItemId);
response.ItemIdsToRemove.Add(jobItem.ItemId);
}
else if (user == null)
{
// Tell the device to remove it since the user is gone now
+ _logger.Debug("Adding ItemIdsToRemove {0} because the user is no longer valid.", jobItem.ItemId);
response.ItemIdsToRemove.Add(jobItem.ItemId);
}
else if (job.UnwatchedOnly)
@@ -777,18 +781,22 @@ namespace MediaBrowser.Server.Implementations.Sync
if (libraryItem.IsPlayed(user) && libraryItem is Video)
{
// Tell the device to remove it since it has been played
+ _logger.Debug("Adding ItemIdsToRemove {0} because it has been marked played.", jobItem.ItemId);
response.ItemIdsToRemove.Add(jobItem.ItemId);
}
}
else
{
// Tell the device to remove it since it's no longer available
+ _logger.Debug("Adding ItemIdsToRemove {0} because it is no longer available.", jobItem.ItemId);
response.ItemIdsToRemove.Add(jobItem.ItemId);
}
}
}
else
{
+ _logger.Debug("Setting status to RemovedFromDevice for {0} because it is no longer on the device.", jobItem.ItemId);
+
// Content is no longer on the device
jobItem.Status = SyncJobItemStatus.RemovedFromDevice;
await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
@@ -842,11 +850,13 @@ namespace MediaBrowser.Server.Implementations.Sync
if (jobItem.IsMarkedForRemoval)
{
// Tell the device to remove it since it has been marked for removal
+ _logger.Debug("Adding ItemIdsToRemove {0} because IsMarkedForRemoval is set.", jobItem.Id);
response.ItemIdsToRemove.Add(jobItem.Id);
}
else if (user == null)
{
// Tell the device to remove it since the user is gone now
+ _logger.Debug("Adding ItemIdsToRemove {0} because the user is no longer valid.", jobItem.Id);
response.ItemIdsToRemove.Add(jobItem.Id);
}
else if (job.UnwatchedOnly)
@@ -858,18 +868,22 @@ namespace MediaBrowser.Server.Implementations.Sync
if (libraryItem.IsPlayed(user) && libraryItem is Video)
{
// Tell the device to remove it since it has been played
+ _logger.Debug("Adding ItemIdsToRemove {0} because it has been marked played.", jobItem.Id);
response.ItemIdsToRemove.Add(jobItem.Id);
}
}
else
{
// Tell the device to remove it since it's no longer available
+ _logger.Debug("Adding ItemIdsToRemove {0} because it is no longer available.", jobItem.Id);
response.ItemIdsToRemove.Add(jobItem.Id);
}
}
}
else
{
+ _logger.Debug("Setting status to RemovedFromDevice for {0} because it is no longer on the device.", jobItem.Id);
+
// Content is no longer on the device
jobItem.Status = SyncJobItemStatus.RemovedFromDevice;
await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
@@ -894,12 +908,6 @@ namespace MediaBrowser.Server.Implementations.Sync
response.ItemIdsToRemove = response.ItemIdsToRemove.Distinct(StringComparer.OrdinalIgnoreCase).ToList();
- var itemsOnDevice = request.LocalItemIds
- .Except(response.ItemIdsToRemove)
- .ToList();
-
- SetUserAccess(request, response, itemsOnDevice);
-
return response;
}
@@ -962,16 +970,39 @@ namespace MediaBrowser.Server.Implementations.Sync
await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false);
}
+ public async Task CancelItems(string targetId, IEnumerable<string> itemIds)
+ {
+ foreach (var item in itemIds)
+ {
+ var syncJobItemResult = GetJobItems(new SyncJobItemQuery
+ {
+ AddMetadata = false,
+ ItemId = item,
+ TargetId = targetId,
+ Statuses = new[] { SyncJobItemStatus.Queued, SyncJobItemStatus.ReadyToTransfer, SyncJobItemStatus.Converting, SyncJobItemStatus.Synced, SyncJobItemStatus.Failed }
+ });
+
+ foreach (var jobItem in syncJobItemResult.Items)
+ {
+ await CancelJobItem(jobItem.Id).ConfigureAwait(false);
+ }
+ }
+ }
+
public async Task CancelJobItem(string id)
{
var jobItem = _repo.GetJobItem(id);
- if (jobItem.Status != SyncJobItemStatus.Queued && jobItem.Status != SyncJobItemStatus.ReadyToTransfer && jobItem.Status != SyncJobItemStatus.Converting)
+ if (jobItem.Status != SyncJobItemStatus.Queued && jobItem.Status != SyncJobItemStatus.ReadyToTransfer && jobItem.Status != SyncJobItemStatus.Converting && jobItem.Status != SyncJobItemStatus.Failed && jobItem.Status != SyncJobItemStatus.Synced)
{
throw new ArgumentException("Operation is not valid for this job item");
}
- jobItem.Status = SyncJobItemStatus.Cancelled;
+ if (jobItem.Status != SyncJobItemStatus.Synced)
+ {
+ jobItem.Status = SyncJobItemStatus.Cancelled;
+ }
+
jobItem.Progress = 0;
jobItem.IsMarkedForRemoval = true;
@@ -995,24 +1026,24 @@ namespace MediaBrowser.Server.Implementations.Sync
{
_logger.ErrorException("Error deleting directory {0}", ex, path);
}
+
+ //var jobItemsResult = GetJobItems(new SyncJobItemQuery
+ //{
+ // AddMetadata = false,
+ // JobId = jobItem.JobId,
+ // Limit = 0,
+ // Statuses = new[] { SyncJobItemStatus.Converting, SyncJobItemStatus.Failed, SyncJobItemStatus.Queued, SyncJobItemStatus.ReadyToTransfer, SyncJobItemStatus.Synced, SyncJobItemStatus.Transferring }
+ //});
+
+ //if (jobItemsResult.TotalRecordCount == 0)
+ //{
+ // await CancelJob(jobItem.JobId).ConfigureAwait(false);
+ //}
}
- public async Task MarkJobItemForRemoval(string id)
+ public Task MarkJobItemForRemoval(string id)
{
- var jobItem = _repo.GetJobItem(id);
-
- if (jobItem.Status != SyncJobItemStatus.Synced)
- {
- throw new ArgumentException("Operation is not valid for this job item");
- }
-
- jobItem.IsMarkedForRemoval = true;
-
- await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false);
-
- var processor = GetSyncJobProcessor();
-
- await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false);
+ return CancelJobItem(id);
}
public async Task UnmarkJobItemForRemoval(string id)