Ejemplo n.º 1
0
 public FileDownloader(IFileDownloaderActions actions, AvailableFile file, int refreshProgresIntervalInMiliseconds)
 {
     _actions = actions;
     _file    = file;
     _refreshProgresIntervalInMiliseconds = refreshProgresIntervalInMiliseconds;
     _webClient = new WebClient();
 }
Ejemplo n.º 2
0
 public void DownloadErrorHappened(AvailableFile file)
 {
     if (_downloaders.ContainsKey(file))
     {
         _downloaders.TryRemove(file, out FileDownloader downloader);
     }
     _downloaderView.RefreshAvailableFiles();
 }
Ejemplo n.º 3
0
        private void AddDownloadedFile(AvailableFile file, byte[] data)
        {
            var downloadedFile = _downloadFileManager.CreateFile(file.Uri.Segments.Last(), _fileStoragePath, data);

            lock (_downloadedFiles)
            {
                _downloadedFiles.Enqueue(downloadedFile);
            }
        }
Ejemplo n.º 4
0
 public void StopDownload(AvailableFile file)
 {
     if (_downloaders.ContainsKey(file))
     {
         _downloaders[file].Stop();
     }
     else if (file.Status == FileStatusEnum.ForDownload)
     {
         file.Status = FileStatusEnum.DownloadStopped;
     }
 }
Ejemplo n.º 5
0
 private void StartDownloadIfAvailable(AvailableFile file)
 {
     file.Modified = DateTime.Now;
     file.Status   = FileStatusEnum.ForDownload;
     if (_appSettings.NumberOfDownloaders > _downloaders.Count)
     {
         if (!_downloaders.ContainsKey(file))
         {
             var fd = new FileDownloader(this, file, _appSettings.RefreshProgresIntervalInMiliseconds);
             _downloaders.TryAdd(file, fd);
             fd.Start();
         }
     }
 }
Ejemplo n.º 6
0
        public void DownloadCompleted(AvailableFile file, byte[] data)
        {
            _downloaders.TryRemove(file, out FileDownloader downloader);

            AddDownloadedFile(file, data);

            while (_appSettings.NumberOfDownloaders > _downloaders.Count && _availableFiles.Any(f => f.Status == FileStatusEnum.ForDownload))
            {
                var nextFile = _availableFiles.OrderBy(f => f.Modified).FirstOrDefault(f => f.Status == FileStatusEnum.ForDownload);
                StartDownloadIfAvailable(nextFile);
            }

            if (_downloaders.Count == 0)
            {
                DeleteOldFiles();
            }

            _downloaderView.RefreshAvailableFiles();
            _downloaderView.SetDownloadedFiles(_downloadedFiles);
        }
Ejemplo n.º 7
0
 public void StartDownload(AvailableFile file)
 {
     StartDownloadIfAvailable(file);
     _downloaderView.RefreshAvailableFiles();
 }