aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-01-20 23:56:00 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-01-20 23:56:00 -0500
commitf5b7e1dba42f0cf9951d8f2a2324f10fda425565 (patch)
tree3b35f14749b351586fa4085f2edf9a0176a8d4b3
parentf636c10e24a6f26f1c8e41ba6d3751334d6dcb90 (diff)
add mark for removal options
-rw-r--r--MediaBrowser.Api/Sync/SyncService.cs28
-rw-r--r--MediaBrowser.Controller/Sync/ISyncManager.cs14
-rw-r--r--MediaBrowser.Model/ApiClient/IApiClient.cs31
-rw-r--r--MediaBrowser.Model/Sync/SyncJobItem.cs9
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json3
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncManager.cs36
6 files changed, 119 insertions, 2 deletions
diff --git a/MediaBrowser.Api/Sync/SyncService.cs b/MediaBrowser.Api/Sync/SyncService.cs
index c763aa8df..b30df572b 100644
--- a/MediaBrowser.Api/Sync/SyncService.cs
+++ b/MediaBrowser.Api/Sync/SyncService.cs
@@ -44,6 +44,20 @@ namespace MediaBrowser.Api.Sync
public string Id { get; set; }
}
+ [Route("/Sync/JobItems/{Id}/MarkForRemoval", "POST", Summary = "Marks a job item for removal")]
+ public class MarkJobItemForRemoval : IReturnVoid
+ {
+ [ApiMember(Name = "Id", Description = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
+ public string Id { get; set; }
+ }
+
+ [Route("/Sync/JobItems/{Id}/UnmarkForRemoval", "POST", Summary = "Unmarks a job item for removal")]
+ public class UnmarkJobItemForRemoval : IReturnVoid
+ {
+ [ApiMember(Name = "Id", Description = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
+ public string Id { get; set; }
+ }
+
[Route("/Sync/JobItems/{Id}", "DELETE", Summary = "Cancels a sync job item")]
public class CancelSyncJobItem : IReturnVoid
{
@@ -299,5 +313,19 @@ namespace MediaBrowser.Api.Sync
Task.WaitAll(task);
}
+
+ public void Post(MarkJobItemForRemoval request)
+ {
+ var task = _syncManager.MarkJobItemForRemoval(request.Id);
+
+ Task.WaitAll(task);
+ }
+
+ public void Post(UnmarkJobItemForRemoval request)
+ {
+ var task = _syncManager.UnmarkJobItemForRemoval(request.Id);
+
+ Task.WaitAll(task);
+ }
}
}
diff --git a/MediaBrowser.Controller/Sync/ISyncManager.cs b/MediaBrowser.Controller/Sync/ISyncManager.cs
index 8e4b6a44a..62b6a3a37 100644
--- a/MediaBrowser.Controller/Sync/ISyncManager.cs
+++ b/MediaBrowser.Controller/Sync/ISyncManager.cs
@@ -128,5 +128,19 @@ namespace MediaBrowser.Controller.Sync
/// <param name="request">The request.</param>
/// <returns>Task&lt;SyncDataResponse&gt;.</returns>
Task<SyncDataResponse> SyncData(SyncDataRequest request);
+
+ /// <summary>
+ /// Marks the job item for removal.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>Task.</returns>
+ Task MarkJobItemForRemoval(string id);
+
+ /// <summary>
+ /// Unmarks the job item for removal.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>Task.</returns>
+ Task UnmarkJobItemForRemoval(string id);
}
}
diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs
index e8535278b..b6938b217 100644
--- a/MediaBrowser.Model/ApiClient/IApiClient.cs
+++ b/MediaBrowser.Model/ApiClient/IApiClient.cs
@@ -1449,12 +1449,41 @@ namespace MediaBrowser.Model.ApiClient
/// <param name="request">The request.</param>
/// <returns>Task&lt;SyncDataResponse&gt;.</returns>
Task<SyncDataResponse> SyncData(SyncDataRequest request);
-
/// <summary>
/// Gets the synchronize job item file URL.
/// </summary>
/// <param name="id">The identifier.</param>
/// <returns>System.String.</returns>
string GetSyncJobItemFileUrl(string id);
+ /// <summary>
+ /// Marks the synchronize job item for removal.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>Task.</returns>
+ Task MarkSyncJobItemForRemoval(string id);
+ /// <summary>
+ /// Unmarks the synchronize job item for removal.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>Task.</returns>
+ Task UnmarkSyncJobItemForRemoval(string id);
+ /// <summary>
+ /// Queues the failed synchronize job item for retry.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>Task.</returns>
+ Task QueueFailedSyncJobItemForRetry(string id);
+ /// <summary>
+ /// Cancels the synchronize job item.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>Task.</returns>
+ Task CancelSyncJobItem(string id);
+ /// <summary>
+ /// Enables the cancelled synchronize job item.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>Task.</returns>
+ Task EnableCancelledSyncJobItem(string id);
}
} \ No newline at end of file
diff --git a/MediaBrowser.Model/Sync/SyncJobItem.cs b/MediaBrowser.Model/Sync/SyncJobItem.cs
index 133065bf9..195d1e17e 100644
--- a/MediaBrowser.Model/Sync/SyncJobItem.cs
+++ b/MediaBrowser.Model/Sync/SyncJobItem.cs
@@ -86,8 +86,15 @@ namespace MediaBrowser.Model.Sync
/// </summary>
/// <value>The temporary path.</value>
public string TemporaryPath { get; set; }
+ /// <summary>
+ /// Gets or sets the additional files.
+ /// </summary>
+ /// <value>The additional files.</value>
public List<ItemFileInfo> AdditionalFiles { get; set; }
-
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is marked for removal.
+ /// </summary>
+ /// <value><c>true</c> if this instance is marked for removal; otherwise, <c>false</c>.</value>
public bool IsMarkedForRemoval { get; set; }
public SyncJobItem()
diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
index e4d20d3a1..62619a567 100644
--- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
+++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
@@ -59,6 +59,7 @@
"ButtonCancelItem": "Cancel item",
"ButtonQueueForRetry": "Queue for retry",
"ButtonReenable": "Re-enable",
+ "SyncJobItemStatusSyncedMarkForRemoval": "Marked for removal",
"LabelAbortedByServerShutdown": "(Aborted by server shutdown)",
"LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.",
"HeaderDeleteTaskTrigger": "Delete Task Trigger",
@@ -70,6 +71,8 @@
"LabelFree": "Free",
"HeaderSelectAudio": "Select Audio",
"HeaderSelectSubtitles": "Select Subtitles",
+ "ButtonMarkForRemoval": "Mark for removal from device",
+ "ButtonUnmarkForRemoval": "Unmark for removal from device",
"LabelDefaultStream": "(Default)",
"LabelForcedStream": "(Forced)",
"LabelDefaultForcedStream": "(Default/Forced)",
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
index 7e4455ab3..b5e29533b 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
@@ -684,5 +684,41 @@ namespace MediaBrowser.Server.Implementations.Sync
await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false);
}
+
+ public async 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 _repo.Update(jobItem).ConfigureAwait(false);
+
+ var processor = GetSyncJobProcessor();
+
+ await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false);
+ }
+
+ public async Task UnmarkJobItemForRemoval(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 = false;
+
+ await _repo.Update(jobItem).ConfigureAwait(false);
+
+ var processor = GetSyncJobProcessor();
+
+ await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false);
+ }
}
}