private void btn_OpenFirstPage(object sender, RoutedEventArgs e) { //проверка введеных данных if (!checkInputData()) { return; } //подготовка url для скачивания Request_download_book request = PreparationURL(); Book.Download(1, 2, request, System.IO.Path.GetTempPath(), false); Process.Start(Book.pages[0].Item1); }
private string getAuthCookie() => Request_download_book.GetSID_Cookie(Parameters.Login, Parameters.Password, Parameters.BookID);
private void startDownload(string bookID, string pathToImage, string pathToPDF) { try { tbCurrentStatus.Text = "Подготовка"; //подготовка url для скачивания Request_download_book request = PreparationURL(); #region создание границ(номеров страниц) для скачивания int beginIndex = -1, endIndex = -1, maxIndex = -1; try { maxIndex = request.GetCountPage(bookID); } catch (Exception ex) { MessageBox.Show($"Ошибка загрузки книги.\nПодробнее: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (chbSaveInParts.IsChecked == true) { try { beginIndex = Convert.ToInt32(tbBeginWith.Text); endIndex = Convert.ToInt32(tbEndOn.Text) + 1; if (beginIndex > endIndex) { throw new Exception("Номер последней страницы не может быть больше номера первой"); } if (beginIndex <= 0) { throw new Exception("Номер первой страницы не может быть меньше единицы"); } if (endIndex > maxIndex) { throw new Exception($"Номер последней страницы не может быть больше количества страниц в книге({maxIndex})."); } } catch (Exception ex) { MessageBox.Show($"Ошибка чтения диапозонов.\nПодробнее {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); return; } } else { beginIndex = 1; endIndex = maxIndex; } #endregion btnSave.IsEnabled = false; btnOpenFirstPage.IsEnabled = false; //bool IsCompress = chbUseCompress.IsChecked == true; bool IsSavePdf = chbSavePdf.IsChecked == true; bool IsSaveImages = chbSaveImages.IsChecked == true; tbCurrentStatus.Text = "Скачивание страниц"; //отдельный поток на обновление интерфейса и создание документа new Thread(() => { Parallel.Invoke( async() => //асинхронная задача для обновления прогресс бара { int countPages = endIndex - beginIndex; while (countPages > Book.pages.Count) { Dispatcher.Invoke(() => pbDownloadProgress.Value = (int)(((double)(Book.pages.Count + 1) / countPages) * 100)); await Task.Delay(500); } }, async() => //ассинхронная задача для оценки скорости скачивания { int countPages = endIndex - beginIndex; DateTime startDate = DateTime.Now; while (countPages > Book.pages.Count) { await Task.Delay(1000); TimeSpan ts = DateTime.Now - startDate; long countByteDownloaded = Book.pages.Sum(x => x.Item2); Dispatcher.Invoke(() => tbDownloadSpeed.Text = Helpers.BytesToString(Convert.ToInt64((countByteDownloaded) / ts.TotalSeconds)) + "/s"); } }, () => //загрузка книги { Book.Download(beginIndex, endIndex, request, pathToImage, false); }); if (IsSavePdf) { Dispatcher.Invoke(() => tbCurrentStatus.Text = "Создание документа"); Book.SavePDFfromImages(pathToPDF, Book.pages.Select(x => x.Item1).ToList()); Dispatcher.Invoke(() => tbCurrentStatus.Text = "Успешно"); } Book.ClearImageCollection(IsSaveImages); MessageBox.Show("Загрузка завершена успешно", "Информация", MessageBoxButton.OK, MessageBoxImage.Information); Dispatcher.Invoke(() => { pbDownloadProgress.Value = 0; tbCurrentStatus.Text = ""; tbDownloadSpeed.Text = ""; btnSave.IsEnabled = true; btnOpenFirstPage.IsEnabled = true; }); Process.Start(System.IO.Path.GetDirectoryName(pathToPDF)); }).Start(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); Dispatcher.Invoke(() => { pbDownloadProgress.Value = 0; tbCurrentStatus.Text = ""; tbDownloadSpeed.Text = ""; btnSave.IsEnabled = true; btnOpenFirstPage.IsEnabled = true; }); return; } }