Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }