/// <summary> /// Fires the <see cref="BuildQueueRequestRemoved"/> event. /// </summary> /// <param name="request">The request that was removed.</param> protected void FireBuildQueueRequestRemoved(BuildQueueRequest request) { if (BuildQueueRequestRemoved != null) { var args = new BuildQueueRequestChangedArgs(request); BuildQueueRequestRemoved(this, args); } }
/// <summary> /// Updates the details on a build queue. /// </summary> /// <param name="value">The new build queue details.</param> public void Update(QueueSnapshot value) { // Validate the arguments if (value == null) { throw new ArgumentNullException("value"); } // Find all the changed properties var changes = new List <string>(); var newRequests = new List <BuildQueueRequest>(); var oldRequests = new List <BuildQueueRequest>(); lock (syncLock) { // Check for any request differences var requestValues = new Dictionary <BuildQueueRequest, QueuedRequestSnapshot>(); var oldRequestNames = new List <string>(requests.Keys); foreach (var request in value.Requests) { // Check if this request has already been loaded var requestName = request.ProjectName; if (oldRequestNames.Contains(requestName)) { requestValues.Add(requests[requestName], request); oldRequestNames.Remove(requestName); } else { // Otherwise this is a new request var newRequest = new BuildQueueRequest(client, this, request); newRequests.Add(newRequest); } } // Store the old request foreach (var request in oldRequestNames) { oldRequests.Add(requests[request]); } // Perform the actual update foreach (var request in oldRequestNames) { requests.Remove(request); } foreach (var request in newRequests) { if (!requests.ContainsKey(request.Name)) { requests.Add(request.Name, request); } } buildQueue = value; // Update all the requests foreach (var requestValue in requestValues) { requestValue.Key.Update(requestValue.Value); } } // Tell any listeners about any changes foreach (var request in newRequests) { FireBuildQueueRequestAdded(request); } foreach (var request in oldRequests) { FireBuildQueueRequestRemoved(request); } foreach (var change in changes) { FirePropertyChanged(change); } }
/// <summary> /// Initialise a new <see cref="BuildQueueRequestChangedArgs"/>. /// </summary> /// <param name="buildQueue">The build queue request that changed.</param> public BuildQueueRequestChangedArgs(BuildQueueRequest buildQueue) { BuildQueueRequest = buildQueue; }