Как переделать с WebClient на AltoHttp?

Доброго времени суток.
Подскажите пожалуйста, как переделать метод скачивания, и добавить адекватные кнопки паузы скачивания, возобновления, и resume?
Ибо мне заказ выполнили, а после оплаты, я посмотрел, а тут всё совершенно не так как я планировал, и заказывал, возможно тут найдутся люди, которые помогут, сделают...
По сути дела, всё конечно работает, но, нет кнопки паузы скачивания, нет возобновлений скачиваний.
Скорость пишется в байтах(это уже я просмотрел когда платил деньги)
Если кто сможет взяться за переделку данного "ЧУДА" даже и не бесплатно, оставьте пожалуйста свои контакты, только очень прошу, не почту, я обязательно Вам напишу...
public class Downloader
    {
        private readonly string master_url;
        private readonly IDownloadProvider downloadProvider;
        private long currentDownloadedSize;
        private long prevDownloadedSize;
        private double speed;
        private Stopwatch stopwatch = new Stopwatch();

        /// <summary>
        /// Представляет функциональность для закачки файлов
        /// </summary>
        /// <param name="MasterUrl">Ссылка, откуда будут скачиваться файлы.</param>
        /// <param name="provider">Провайдер для загрузки.</param>
        /// <param name="ntds">Необходимый размер закачки.</param>
        public Downloader(string MasterUrl, IDownloadProvider provider, long ntds)
        {
            master_url = MasterUrl;
            downloadProvider = provider;
            currentDownloadedSize = ntds;
        }

        /// <summary>
        /// Функционал загрузки файлов
        /// </summary>
        /// <param name="path">Абсолютный путь, куда файлы будут сохраняться</param>
        /// <param name="progressChanged">Событие, вызывающееся при изменении прогресса (при подключении прогрессбара указать)</param>
        /// <param name="completed">Событие, вызывающиеся при завершении закачки (при подключении прогрессбара указать)</param>
        public async Task DownloadFiles(string path)
        {
            using (WebClient wc = new WebClient())
            {
                wc.DownloadProgressChanged += Wc_DownloadProgressChanged;
                foreach (var fileName in downloadProvider.Files)
                {
                    CreateNeccessaryDirs(path + @"\" + fileName.Value);
                    if (File.Exists(path + @"\" + fileName.Value))
                    {
                        continue; 
                    }
                    prevDownloadedSize = 0L;
                    StartDownload?.Invoke(this, new StartDownloadFileArgs { FileName = fileName.Value });
                    stopwatch.Restart();
                    await wc.DownloadFileTaskAsync(new Uri(master_url + "/" + fileName.Key), path + @"\" + fileName.Value);
                    stopwatch.Stop();
                }
                ProgressChanged?.Invoke(this, new Events.DownloadProgressChangedEventArgs() { NewPercentage = 100 });
            }
        }

        private void Wc_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
        {
            if (prevDownloadedSize == 0)
            {
                prevDownloadedSize = e.BytesReceived / 1024;
            }

            if (stopwatch.Elapsed.TotalSeconds >= 1)
            {
                var dKBytes = (e.BytesReceived / 1024) - prevDownloadedSize;
                currentDownloadedSize += dKBytes;
                speed = dKBytes / stopwatch.Elapsed.TotalSeconds;
                prevDownloadedSize = 0L;
                OnProgressChanged();
                stopwatch.Restart();
            }
        }


        private void CreateNeccessaryDirs(string fileName)
        {
            var idx = fileName.LastIndexOf("\\");
            fileName = fileName.Remove(idx);
            Directory.CreateDirectory(fileName);
        }
        private int GetPercentage() => (int)Math.Round((currentDownloadedSize / (float)downloadProvider.Size) * 100); 

        private void OnProgressChanged()
        {
            Events.DownloadProgressChangedEventArgs eventInfo;
            eventInfo = new Events.DownloadProgressChangedEventArgs() { NewPercentage = GetPercentage(), 
                Speed = Math.Round(speed), DownloadedSize = currentDownloadedSize, AllSize = downloadProvider.Size };
           
            ProgressChanged?.Invoke(this, eventInfo);
        }
        

        public event DownloadProgressChanged ProgressChanged;

        public event StartDownloadEvent StartDownload;
    }
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 1
@alexbprofit
Junior SE
Вы сервис попутали, это делается на Хабр Фрилансе
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы