private async Task download() { await Task.Delay(5000); var tasks = new List <Task>(); for (int i = 0; i < Setting.Instance.NumberThreads; i++) { var index = i; var task = Task.Run(async() => { while (true) { if (_isPause) { await Task.Delay(500); continue; } if (_images.IsEmpty && _isGetThreadsEnd) { break; } if (_isStop) { break; } if (_images.TryDequeue(out Tuple <string, string> item)) { var hashCode = item.Item2.GetHashCode(); if (this._downloadedImage.Contains(hashCode)) { continue; } this._downloadedImage.Add(hashCode); try { _store.Info.LastDownloadedPage = NextVozRegex.GetPage(item.Item1); using (var downloader = new ImageDownloader(item.Item2, Setting.Instance.Cookies)) { // var info = downloader.GetImageInfo(); DownloadProcess.Update(index, new ImageInfo { Url = item.Item2, }); downloader.ProgressChangedEventHandler += (sender, value) => { DownloadProcess.UpdateProcess(index, value); }; DownloadProcess.UpdateProcess(index, 0); var data = await downloader.DownloadAsync(); if (Setting.Instance.IgnoreSmallImage) { using (var imgStream = new MemoryStream(data.Data)) { using (var img = Image.FromStream(imgStream)) { if (img.Width < 200 || img.Height < 200) { continue; } } } } _store.Save(data.Data, data.GetFileName()); Status.IncrementSize(data.Size); Status.IncrementDownload(); Status.Update(); } } catch (Exception ex) { Status.Set(ex.Message); System.Diagnostics.Debug.WriteLine(item.Item1 + " " + item.Item2 + " " + ex.Message); } DownloadProcess.UpdateProcess(index, 100); } else { await Task.Delay(500); } } DownloadProcess.Update(index, new ImageInfo() { Url = "Xong", Size = 0, Extension = "" }); }); tasks.Add(task); await Task.Delay(100); } Task.WaitAll(tasks.ToArray()); _store.Info.TotalDownloadedImage = Status.TotalDownloadedImage; _store.Info.TotalDownloadedSize = Status.TotalDownloadedSize; _store.SaveInfo(); IsDownloading = false; DownloadFinishEvent?.Invoke(this); }
public async Task Start() { if (_isPause) { _isPause = false; return; } Status.Set("Đang tải về ..."); IsDownloading = true; _isPause = false; _isStop = false; _isGetThreadsEnd = false; _client = new NextVozClient(Setting.Instance.Cookies); var info = await GetThreadInfo(Setting.Instance.Link); var from = Math.Max(Setting.Instance.FromPage, 1); var to = Math.Max(Setting.Instance.ToPage, 1); if (Setting.Instance.AllPage) { from = 1; to = info.Page; } for (int i = from; i <= to; i++) { this._pages.Enqueue($"https://voz.vn/t/{info.ThreadId}/page-{i}"); } DownloadProcess.Create(Setting.Instance.NumberThreads); var dir = Setting.Instance.SavePath; if (Setting.Instance.CreateDirByThreadName) { dir = Path.Combine(Application.StartupPath, "Images", info.ThreadId.Trim('/')); } _store = new ImageStore( dir, Setting.Instance.SubDirectory, Setting.Instance.MaxImageInSubDirectory, new DownloadedInfo() { }); Status.Set(_store.Info.TotalDownloadedImage, _store.Info.TotalDownloadedSize); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } var t1 = Task.Run(getImagesUrl); var t2 = Task.Run(download); }
private void init() { System.Net.ServicePointManager.MaxServicePoints = Int32.MaxValue; System.Net.ServicePointManager.DefaultConnectionLimit = Int32.MaxValue; System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; try { txtLink.Text = Setting.Instance.Link; txtSavePath.Text = Setting.Instance.SavePath; cbDownloadAllPage.Checked = Setting.Instance.AllPage; cbSubDirectory.Checked = Setting.Instance.SubDirectory; cbIgnoreSmallImage.Checked = Setting.Instance.IgnoreSmallImage; cbCreateDirByThreadName.Checked = Setting.Instance.CreateDirByThreadName; nrMaxImageInSubDirectory.Value = Setting.Instance.MaxImageInSubDirectory; nrNumberThreads.Value = Setting.Instance.NumberThreads; nrFormPage.Value = Setting.Instance.FromPage; nrToPage.Value = Setting.Instance.ToPage; } catch { } if (string.IsNullOrEmpty(txtSavePath.Text)) { txtSavePath.Text = Path.Combine(Application.StartupPath, "Images"); } if (!string.IsNullOrEmpty(Setting.Instance.Cookies)) { btnLogin.Enabled = false; btnLogin.Text = "Đang đăng nhập"; var vozClient = new NextVozClient(Setting.Instance.Cookies); Task.Run(async() => { try { await vozClient.Login(Setting.Instance.Cookies); this.Invoke((Action)(() => { btnLogin.Enabled = true; btnLogin.Text = "Đăng xuất"; })); } catch { this.Invoke((Action)(() => { btnLogin.Enabled = true; btnLogin.Text = "Đăng nhập"; })); } }); } btnLogin.Enabled = string.IsNullOrEmpty(Setting.Instance.Cookies); _downloader = new NextVozDownloadImage(); if (!string.IsNullOrEmpty(Setting.Instance.Link)) { linkChanged(); } SetDoubleBuffered(this.lvDownloadProcess); EXListView lv = new EXListView(); lv.Location = lvDownloadProcess.Location; lv.Width = lvDownloadProcess.Width; lv.Height = lvDownloadProcess.Height; lv.Anchor = lvDownloadProcess.Anchor; this.Controls.Remove(lvDownloadProcess); this.Controls.Add(lv); lv.Columns.Add("Link", 450); lv.Columns.Add("Process", 300); Status.Init(lbStatus, lbTotalDownloaded, lbTotalSize); DownloadProcess.Init(lv); }