protected virtual void OnDownloadConvertResult(CompositeResult <DownloadResult, ConvertResult> result) { this.DequeueRequests(); if (this.DownloadConvertResult != null) { this.DownloadConvertResult(this, new ManagerCompositeCompleteResultEventArgs(result)); } if (this.CurrentlyProcessingRequestsCount == 0) { this.OnAllFilesDownloaded(); } }
protected virtual void DequeueRequest(DownloadConvertRequest currentRequest) { if (this.CurrentlyProcessingRequestsCount >= this.MaxParallelRequests) { return; } this.CurrentlyProcessingRequests.Add(currentRequest); Task.Factory.StartNew(() => { DownloadResult downloadResult = this.Downloader.Download(currentRequest.MediaFile, currentRequest.DownloadPath); this.OnDownloadResult(downloadResult); ConvertResult convertResult; if (downloadResult.IsDownloaded) { convertResult = this.Converter.Convert(currentRequest.MediaFile, downloadResult.DownloadPath, currentRequest.ConvertPath, currentRequest.ConvertMetadata); } else { convertResult = new ConvertResult(currentRequest.MediaFile) { IsConverted = false }; } this.OnConvertResult(convertResult); CompositeResult <DownloadResult, ConvertResult> finalResult = new CompositeResult <DownloadResult, ConvertResult>(currentRequest.MediaFile, downloadResult, convertResult); lock (SyncRoot) { this.CurrentlyProcessingRequests.Remove(currentRequest); } this.OnDownloadConvertResult(finalResult); }); }
public ManagerCompositeCompleteResultEventArgs(CompositeResult <DownloadResult, ConvertResult> compositeResult) { this.CompositeResult = compositeResult; }