using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Sync; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Sync; using System.Collections.Generic; using System.Threading.Tasks; namespace MediaBrowser.Api.Sync { /// /// Class SessionInfoWebSocketListener /// class SyncJobsWebSocketListener : BasePeriodicWebSocketListener, WebSocketListenerState> { /// /// Gets the name. /// /// The name. protected override string Name { get { return "SyncJobs"; } } private readonly ISyncManager _syncManager; private string _userId; private string _targetId; public SyncJobsWebSocketListener(ILogger logger, ISyncManager syncManager) : base(logger) { _syncManager = syncManager; _syncManager.SyncJobCancelled += _syncManager_SyncJobCancelled; _syncManager.SyncJobCreated += _syncManager_SyncJobCreated; _syncManager.SyncJobUpdated += _syncManager_SyncJobUpdated; } protected override void ParseMessageParams(string[] values) { base.ParseMessageParams(values); if (values.Length > 0) { _userId = values[0]; } if (values.Length > 1) { _targetId = values[1]; } } void _syncManager_SyncJobUpdated(object sender, Model.Events.GenericEventArgs e) { SendData(false); } void _syncManager_SyncJobCreated(object sender, Model.Events.GenericEventArgs e) { SendData(true); } void _syncManager_SyncJobCancelled(object sender, Model.Events.GenericEventArgs e) { SendData(true); } /// /// Gets the data to send. /// /// The state. /// Task{SystemInfo}. protected override async Task> GetDataToSend(WebSocketListenerState state) { var jobs = await _syncManager.GetJobs(new SyncJobQuery { UserId = _userId, TargetId = _targetId }).ConfigureAwait(false); return jobs.Items; } protected override bool SendOnTimer { get { return false; } } protected override void Dispose(bool dispose) { _syncManager.SyncJobCancelled -= _syncManager_SyncJobCancelled; _syncManager.SyncJobCreated -= _syncManager_SyncJobCreated; _syncManager.SyncJobUpdated -= _syncManager_SyncJobUpdated; base.Dispose(dispose); } } }