Example #1
0
 protected virtual void OnDownloadResult(DownloadResult result)
 {
     if (this.DownloadResult != null)
     {
         this.DownloadResult(this, new ManagerDownloadCompleteResultEventArgs(result));
     }
 }
Example #2
0
        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);
        }
Example #3
0
        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);
            });
        }
Example #4
0
 public ManagerDownloadCompleteResultEventArgs(DownloadResult downloadResult)
 {
     this.DownloadResult = downloadResult;
 }