aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/MediaBrowser.Api.csproj1
-rw-r--r--MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs120
-rw-r--r--MediaBrowser.Api/Sync/SyncService.cs4
3 files changed, 123 insertions, 2 deletions
diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj
index 552091280..23cdf8b7a 100644
--- a/MediaBrowser.Api/MediaBrowser.Api.csproj
+++ b/MediaBrowser.Api/MediaBrowser.Api.csproj
@@ -130,6 +130,7 @@
<Compile Include="SearchService.cs" />
<Compile Include="Session\SessionsService.cs" />
<Compile Include="SimilarItemsHelper.cs" />
+ <Compile Include="Sync\SyncJobWebSocketListener.cs" />
<Compile Include="Sync\SyncJobsWebSocketListener.cs" />
<Compile Include="Sync\SyncService.cs" />
<Compile Include="System\ActivityLogService.cs" />
diff --git a/MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs b/MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs
new file mode 100644
index 000000000..61a26d160
--- /dev/null
+++ b/MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs
@@ -0,0 +1,120 @@
+using MediaBrowser.Controller.Net;
+using MediaBrowser.Controller.Sync;
+using MediaBrowser.Model.Events;
+using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Sync;
+using System;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Api.Sync
+{
+ /// <summary>
+ /// Class SessionInfoWebSocketListener
+ /// </summary>
+ class SyncJobWebSocketListener : BasePeriodicWebSocketListener<CompleteSyncJobInfo, WebSocketListenerState>
+ {
+ /// <summary>
+ /// Gets the name.
+ /// </summary>
+ /// <value>The name.</value>
+ protected override string Name
+ {
+ get { return "SyncJob"; }
+ }
+
+ private readonly ISyncManager _syncManager;
+ private string _jobId;
+
+ public SyncJobWebSocketListener(ILogger logger, ISyncManager syncManager)
+ : base(logger)
+ {
+ _syncManager = syncManager;
+ _syncManager.SyncJobCancelled += _syncManager_SyncJobCancelled;
+ _syncManager.SyncJobUpdated += _syncManager_SyncJobUpdated;
+ _syncManager.SyncJobItemCreated += _syncManager_SyncJobItemCreated;
+ _syncManager.SyncJobItemUpdated += _syncManager_SyncJobItemUpdated;
+ }
+
+ void _syncManager_SyncJobItemUpdated(object sender, GenericEventArgs<SyncJobItem> e)
+ {
+ if (string.Equals(e.Argument.Id, _jobId, StringComparison.Ordinal))
+ {
+ SendData(false);
+ }
+ }
+
+ void _syncManager_SyncJobItemCreated(object sender, GenericEventArgs<SyncJobItem> e)
+ {
+ if (string.Equals(e.Argument.Id, _jobId, StringComparison.Ordinal))
+ {
+ SendData(true);
+ }
+ }
+
+ protected override void ParseMessageParams(string[] values)
+ {
+ base.ParseMessageParams(values);
+
+ if (values.Length > 0)
+ {
+ _jobId = values[0];
+ }
+ }
+
+ void _syncManager_SyncJobUpdated(object sender, GenericEventArgs<SyncJob> e)
+ {
+ if (string.Equals(e.Argument.Id, _jobId, StringComparison.Ordinal))
+ {
+ SendData(false);
+ }
+ }
+
+ void _syncManager_SyncJobCancelled(object sender, GenericEventArgs<SyncJob> e)
+ {
+ if (string.Equals(e.Argument.Id, _jobId, StringComparison.Ordinal))
+ {
+ SendData(true);
+ }
+ }
+
+ /// <summary>
+ /// Gets the data to send.
+ /// </summary>
+ /// <param name="state">The state.</param>
+ /// <returns>Task{SystemInfo}.</returns>
+ protected override Task<CompleteSyncJobInfo> GetDataToSend(WebSocketListenerState state)
+ {
+ var job = _syncManager.GetJob(_jobId);
+ var items = _syncManager.GetJobItems(new SyncJobItemQuery
+ {
+ AddMetadata = true,
+ JobId = _jobId
+ });
+
+ var info = new CompleteSyncJobInfo
+ {
+ Job = job,
+ JobItems = items.Items.ToList()
+ };
+
+ return Task.FromResult(info);
+ }
+
+ protected override bool SendOnTimer
+ {
+ get
+ {
+ return false;
+ }
+ }
+
+ protected override void Dispose(bool dispose)
+ {
+ _syncManager.SyncJobCancelled -= _syncManager_SyncJobCancelled;
+ _syncManager.SyncJobUpdated -= _syncManager_SyncJobUpdated;
+
+ base.Dispose(dispose);
+ }
+ }
+}
diff --git a/MediaBrowser.Api/Sync/SyncService.cs b/MediaBrowser.Api/Sync/SyncService.cs
index 93d8a8d0a..13c716136 100644
--- a/MediaBrowser.Api/Sync/SyncService.cs
+++ b/MediaBrowser.Api/Sync/SyncService.cs
@@ -206,7 +206,7 @@ namespace MediaBrowser.Api.Sync
{
var jobItem = _syncManager.GetJobItem(request.Id);
- if (jobItem.Status != SyncJobItemStatus.Transferring)
+ if (jobItem.Status < SyncJobItemStatus.ReadyToTransfer)
{
throw new ArgumentException("The job item is not yet ready for transfer.");
}
@@ -286,7 +286,7 @@ namespace MediaBrowser.Api.Sync
{
var jobItem = _syncManager.GetJobItem(request.Id);
- if (jobItem.Status != SyncJobItemStatus.Transferring)
+ if (jobItem.Status < SyncJobItemStatus.ReadyToTransfer)
{
throw new ArgumentException("The job item is not yet ready for transfer.");
}