protected virtual void OnDownloadResult(DownloadResult result) { if (this.DownloadResult != null) { this.DownloadResult(this, new ManagerDownloadCompleteResultEventArgs(result)); } }
public DownloadResult Download(MediaFile file, string tempFolderPath, bool resumePreviousDownload = false) { DownloadResult result = new DownloadResult(file); result.IsDownloaded = true; MediaFileMetadata metadata = file.Metadata; string outputPath = Path.Combine(tempFolderPath, metadata.FileName + metadata.FileExtension); if (!this.OnMediaFileDownloadStarting(file, outputPath) || metadata == MediaFileMetadata.DefaultMetadata) { result.IsDownloaded = false; return(result); } file.InitializeMetadata(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(metadata.DownloadLink); request.Method = WebRequestMethods.File.DownloadFile; request.UserAgent = MediaDownloader.GetRandomUserAgent(); request.KeepAlive = true; request.Timeout = Timeout.Infinite; try { bool fileExists = File.Exists(outputPath); if (!fileExists || !this.IsFileLocked(new FileInfo(outputPath))) { this.CreateFileDownloadRequest(file, outputPath, request, resumePreviousDownload); } else { result.IsDownloaded = false; result.Exceptions.Add(new IOException("File {0} is locked, try killing the process that has locked it")); return(result); } } catch (WebException webEx) { Debug.WriteLine("File " + file.Metadata.FileName + " Could not be downloaded " + webEx + " " + webEx.InnerException); result.IsDownloaded = false; result.Exceptions.Add(webEx); } result.DownloadPath = outputPath; return(result); }
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 ManagerDownloadCompleteResultEventArgs(DownloadResult downloadResult) { this.DownloadResult = downloadResult; }