public DownloadConvertRequest EnqueueDownloadAndConvertRequest(MediaFile file, string downloadPath, string convertPath, MediaConverterMetadata convertMetadata) { DownloadConvertRequest request = new DownloadConvertRequest(file, downloadPath, convertPath, convertMetadata); this.Queue.Enqueue(request); return(request); }
public void StartDownload(DownloadConvertRequest request) { if (this.Queue.Contains(request)) { var list = this.Queue.ToList(); list.Remove(request); this.Queue.Clear(); for (int i = 0; i < list.Count; i++) { this.Queue.Enqueue(list[i]); } } this.DequeueRequest(request); }
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); }); }