/// <summary> /// Добавляем страницы к манге /// </summary> /// <param name="pages">Список адресов страниц</param> /// <param name="mn">Инфомрация о манге</param> private void addMangaPages(List <string> pages, ref manga mn) { //Проходимся по списку адресов foreach (var url in pages) { //Добавляем информацию о странице манги mn.addpage(url); } }
/// <summary> /// Загружаем мангу из стандартного класса /// </summary> /// <param name="manga">Манга, которую нужно загрузить</param> /// <returns>0 - если всё ок, иначе - код ошибки.</returns> public byte loadFromManga(manga manga) { byte ex = 1; MangaPage buff; byte result; try { //Проставляем значения name = manga.name; countPages = manga.countPages; url = manga.url; status = (byte)manga.status; //Инициализируем список страниц pages = new List <MangaPage>(); //Проходимся по списку страниц foreach (var pg in manga.pages) { //Инициализируем новую страницу buff = new MangaPage(); //Загружаем в неё информацию result = buff.loadFromPage(pg); //Если всё ок if (result == 0) { //Добавляем её в общий список pages.Add(buff); } else { //Возвращаем ошибку загрузки ex = 2; //Выходим из цикла break; } } //Всё ок ex = 0; } catch { ex = 1; } return(ex); }
/// <summary> /// Загружаем мангу в стандартный класс /// </summary> /// <returns>Информация о манге, либо null, в случае ошибки</returns> public manga loadToManga() { manga ex = null; page buff; try { //Инициализируем мангу ex = new manga(url); //Проставляем значения ex.name = name; ex.countPages = countPages; ex.status = (MangaStatus.status)status; //Проходимся по списку страниц foreach (var pg in pages) { //Загружаем инфу о странице buff = pg.loadToPage(); //Если всё ок if (buff != null) { //Добавляем её в общий список ex.pages.Add(buff); } else { //Возвращаем ошибку загрузки ex = null; //Выходим из цикла break; } } } catch { ex = 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); }