Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #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);
            });
        }