/// <summary> /// Загружаем страницу манги /// </summary> /// <param name="url">Адрес страницы</param> /// <param name="path">Путь сохранения кратинки со страницы</param> /// <param name="id">Id страницы в списке</param> /// <param name="originalFilename">Оригинальное имя файла</param> /// <param name="filename">Возврат итмени загруженного файла</param> /// <returns>0 - всё ок, оначе - ошибка загрузки</returns> private byte downloadPage(string url, string path, int id, out string filename) { byte ex = 1; string imageUrl, code, imagePath, originalFilename; decimal startTime, finTime; //Ставим дефолтное значение filename = null; try { //Получаем время запуска загрузки startTime = timeMicro(); //Загружаем страницу code = loader.loadHtmlPage(url); //Если страница была загружена if (code.Length > 0) { //Инициализируем парсер var hp = new htmlGeHentaiParcer_NEW(code); //Загружаем адрес картинки imageUrl = hp.getImageUrl(); //Если мы получили адрес картинки if (imageUrl.Length > 0) { //Если адрес не входит в список косячных if (imageUrl != failURL) { //Получаем оригинальное имя файла originalFilename = hp.GetOriginalFileName(); //Формируем имя файла filename = CompileFileName(originalFilename, imageUrl, id); //Формируем путь загрузки imagePath = $"{path}{filename}"; //Грузим страницу, и получаем результат ex = loader.downloadFile(imageUrl, imagePath); //Получаем время завершения загрузки, со временем ожидания finTime = timeMicro() - startTime + Program.settingsStorage.settings.downloadMangaPageDelay / 1000; //Пересчитываем среднее время загрузки averageLoadTime = (averageLoadTime + finTime) / 2; } else { //Ошибка - мы привысили лимиты ex = 255; } } else { //Ошибка - адрес картинки не был найден ex = 4; } } else { //Ошибка - страница не была загружена ex = 3; } } catch (Exception e) { ex = 1; //Ставим дефолтное значение filename = null; } return(ex); }
/// <summary> /// Загружаем информацию о манге /// </summary> /// <param name="info">Информация о манге</param> /// <returns>Флаг загрузки информации. True - загрузка была</returns> private bool loadMangaInfo(ref manga info) { bool ex = false; //Объявляем переменные FindNextUrlStatus loadPagesStatus; string pageUrl, code; List <string> buff; htmlGeHentaiParcer_NEW hp; decimal startTime, finTime; try { //Если инфа о манге ещё не была загружена if (info.status == MangaStatus.status.Манга_добавлена) { //Получаем время запуска загрузки startTime = timeMicro(); //Загружаем страницу code = loader.loadHtmlPage(info.url); //Инициализируем парсер hp = new htmlGeHentaiParcer_NEW(code); //Если страница была загружена корректно if (code.Length > 0) { //Получаем название манги info.name = hp.getTitle(); //Получаем и парсим количество страниц info.countPages = hp.getCountPages(); //Ставим дефолтные значения получения страниц loadPagesStatus = FindNextUrlStatus.Страница_найдена; //В цикле подгружаем все страницы манги do { //Получаем картинки с текущей страницы buff = hp.getPagesUrl(); //Добавляем их в основной список addMangaPages(buff, ref info); //Если есть ещё одна страница - продолжаем загрузку loadPagesStatus = hp.GetNextPageUrl(out pageUrl); //Если страница есть if (loadPagesStatus == FindNextUrlStatus.Страница_найдена) { //Спим, чтобы сайт особо не бузил Thread.Sleep(Program.settingsStorage.settings.rootPageLoadDelay); //Загружаем страницу code = loader.loadHtmlPage(pageUrl); //Если ошибка загрузки страницы if (code.Length == 0) { //ОШибка - во время загрузки списка страниц манги info.status = MangaStatus.status.Ошибка_загрузки_страниц; //То выходим из цикла break; } //Инициализируем парсер hp = new htmlGeHentaiParcer_NEW(code); } //Если нужно ещё допарсить картинок } while (loadPagesStatus == FindNextUrlStatus.Страница_найдена); //Манга загружена корректно info.status = MangaStatus.status.Информация_загружена; //Получаем время завершения загрузки finTime = timeMicro() - startTime + Program.settingsStorage.settings.mangaInfoLoadDelay / 1000; //Пересчитываем среднее время загрузки averageLoadInfoTime = (averageLoadInfoTime + finTime) / 2; //Указываем, что загрузка была ex = true; } else { //Ошибка - корневая страница не была загружена info.status = MangaStatus.status.Ошибка_загрузки_информации; } } } catch { info.status = MangaStatus.status.Общая_ошибка_загрузки; } return(ex); }