/// <summary> /// Attempts to cancel a synchronization job and returns true if it can be cancelled and false if it cannot be cancelled. /// </summary> /// <param name="item">CancelSyncRequest</param> /// <returns>True if the job can be cancelled, false if it cannot be cancelled</returns> public bool CancelSyncJob(CancelSyncRequest item) { if (item == null) throw new ArgumentNullException("item"); lock (Locker) { if (_queuedJobsLookup.Contains(item.TagName)) { for (int i = 0; i < _jobs.Count; i++) { if (_jobs[i].TagName == item.TagName) { _jobs.RemoveAt(i); _queuedJobsLookup.Remove(item.TagName); ServiceLocator.UIPriorityQueue().Enqueue(new CancelSyncNotification(item.TagName, true)); return true; } } } else if (_currJob != null && _currJobProgress != null && _currJob.TagName == item.TagName) { switch (_currJobProgress.State) { case SyncState.Started: case SyncState.Analyzing: _currJobProgress.Cancel(); _isPendingCancel.Add(_currJob.TagName); return true; default: return false; } } return false; } }
/// <summary> /// Returns a boolean indicating if the given request has been cancelled. /// </summary> /// <param name="request">The CancelSyncRequest containing information on which job to cancel.</param> /// <returns>A boolean indicating if the given request has been cancelled.</returns> public bool Cancel(CancelSyncRequest request) { return ManualQueueControl.Instance.CancelSyncJob(request); }