private void btn_downloadAllMangaScanned_Click(object sender, EventArgs e) { try { Stopwatch dlTime = new Stopwatch(); dlTime.Start(); if (lb_mangaScanned.SelectedItems.Count > 0) { allButtonDisable(); List <Manga> mangaLst = new List <Manga>(); foreach (Manga m in lb_mangaScanned.SelectedItems) { mangaLst.Add(m); } Manga.infDlZip(mangaLst); //une fois terminé, on vide la liste des chapitres à dl; foreach (Manga m in lb_mangaScanned.SelectedItems) { m.MangaChapToDlLst.Clear(); m.MangaChapCompleteLst.Clear(); } allButtonEnable(); } dlTime.Stop(); String time = dlTime.Elapsed.Seconds.ToString(); String msg = "Téléchargement terminé en " + time + " secondes..."; MessageBox.Show(msg, "Cool", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message, ex.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Complète l'objet Manga avec la liste des tous les chapitres à télécharger /// </summary> /// <param name="manga"></param> public static void getChapsToDlList(Manga manga, object o) { //si le dossier existe, on à déjà téléchargé des choses pour ce manga //on va analyser pour exclure ce qu'on à déjà téléchargé //sinon on prends toute la liste if (Directory.Exists(manga.MangaPath)) { //pour chaque chapitre on vérifie s'il existe ou pas foreach (var chap in manga.MangaChapCompleteLst) { Outils.checkFicChap(chap); //si le chapitre à déjà été rappatrié, on s'arrête la, on prends le partie pris de considérer que si le dossier / fichier existe, il est complet if (!chap.chapAlreadyDled) { //Sinon, on récupère la liste des pages du chapitre et on ajoute le chapitre dans la liste à dl Chapitre.getChapPages(chap, o); manga.MangaChapToDlLst.Add(chap); manga.MangaNbrPagesToDl += chap.ChapNbrPage; } } } else { //le répertoire n'existe pas il faut tout télécharger foreach (var chap in manga.MangaChapCompleteLst) { Chapitre.getChapPages(chap, o); manga.MangaChapToDlLst.Add(chap); manga.MangaNbrPagesToDl += chap.ChapNbrPage; } } }
private void btn_scanAllMangas_Click(object sender, EventArgs e) { LelScan lel = new LelScan(); List <Manga> mangaLst = Manga.getAllManga(lel); addMangaToScannedList(mangaLst); }
private static List <Chapitre> addChapToChapLst(Manga m, IEnumerable <String> chapsLinks) { // c'est le plus haut chapitre récupéré la dernière fois int higherChap = m.HigherChap; List <Chapitre> cLst = new List <Chapitre>(); foreach (String url in chapsLinks) { Uri uri = new Uri(url); int idxLstSeg = uri.Segments.Length - 1; int.TryParse(uri.Segments[idxLstSeg].Split(' ').Last(), out int chapNbr); // si on avait déjà téléchargé un chapitre plus haut, on ne redl pas celui la // mais on parcours quand même toute la liste car on ne sait pas dans quel ordre on récup les chapitres //if (chapNbr > m.HigherChap) //{ Chapitre c = new Chapitre(m, uri); cLst.Add(c); if (chapNbr > higherChap) { higherChap = chapNbr; } //} } m.HigherChap = higherChap; return(cLst); }
/*************** BUTTONS ***************/ private void btn_scanPopularManga_Click(object sender, EventArgs e) { LelScan lel = new LelScan(); //récupère la liste des mangas populaires List <Manga> mangaLst = Manga.getAllPopularMangaList(lel); addMangaToScannedList(mangaLst); }
internal static void infDlZip(List <Manga> mangaLst) { LelScan lel = new LelScan(); Manga.getInfosMangas(mangaLst, lel); Outils.dlMangaWebClient(mangaLst); Outils.zipAndDel(mangaLst); }
private void btn_downloadMangaFollowed_Click(object sender, EventArgs e) { allButtonDisable(); List <Manga> mLst = (List <Manga>)lb_mangaFollowed.DataSource; Manga.infDlZip(mLst); //on met à jour la liste des mangas suivis avec le chapitre le plus haut DL Outils.updateFicMangaFollowed(mLst); MessageBox.Show("Les téléchargements des mangas suivis sont terminés", "Cool", MessageBoxButtons.OK, MessageBoxIcon.Information); allButtonEnable(); }
private static List <Manga> addMangaToMangaLst(IEnumerable <String> mangaUrl) { List <Manga> mPopLst = new List <Manga>(); foreach (var url in mangaUrl) { Manga manga = new Manga(new Uri(url)); mPopLst.Add(manga); } return(mPopLst); }
private void btn_getAllChapterForSelectedManga_Click(object sender, EventArgs e) { lb_chap.DataSource = null; if (lb_mangaScanned.SelectedItems.Count > 0) { LelScan lel = new LelScan(); Manga m = (Manga)lb_mangaScanned.SelectedItem; Chapitre.getChapsFromManga(m, lel); lb_chap.DataSource = m.MangaChapCompleteLst; lb_chap.DisplayMember = "ChapTitleShow"; } }
/********** Fin Constructeurs ***********/ /********** Méthodes ***********/ public static IEnumerable <String> getChapsLinksFromManga(Manga manga, HtmlAgilityPack.HtmlDocument mangaPage) { //On récupère toutes les divs qui ont pour class manga-name IEnumerable <String> links = from h5 in mangaPage.DocumentNode.Descendants("h5") from a in h5.Descendants("a") let href = a.GetAttributeValue("href", null) where href != null select href; return(links); }
public Chapitre(Manga manga, string chapTitleUrl, string chapUrl) { MangaPath = manga.MangaPath; ChapUrl = new Uri(chapUrl); ChapPicLst = new List <Picture>(); ChapTitleFromUrl = chapTitleUrl; int.TryParse(ChapTitleFromUrl.Split(' ').Last(), out int i); ChapNumber = i; ChapNbrPage = 0; ChapNbrPageAlreadyDled = 0; chapAlreadyDled = false; }
internal static void zipAndDel(Manga m1) { if (Program._compress) { foreach (Chapitre chap in m1.MangaChapToDlLst) { string startPath = chap.ChapPath; string zipPath = chap.ChapPath + @".zip"; ZipFile.CreateFromDirectory(startPath, zipPath); Directory.Delete(chap.ChapPath, true); } } }
/// <summary> /// Récupère tous les mangas du site LelScan /// </summary> /// <param name="mLst"></param> /// <returns></returns> public static List <Manga> getAllManga(List <Manga> mLst) { HtmlWeb web = new HtmlWeb(); //par défault on commence à la page 1 String url = lelScanUrlMangaList.ToString(); bool next = true; //tant qu'il y a une page suivante while (next) { //on charge la page suivante HtmlAgilityPack.HtmlDocument docMangaLst = web.Load(url); //on récupère tous les mangas sur cette page var mangaNodes = from h5 in docMangaLst.DocumentNode.Descendants("h5") let href = h5.ChildNodes.First().GetAttributeValue("href", null) where href != null select href; foreach (var mangaUrl in mangaNodes) { var title = mangaUrl.Split('/').Last(); Uri urlM = new Uri(mangaUrl); Manga m = new Manga(title, urlM); mLst.Add(m); } //on détermine la prochaine page var nxtPage = from ul in docMangaLst.DocumentNode.Descendants("ul") let classe = ul.GetAttributeValue("class", null) where classe == "pagination" from a in ul.Descendants("a") let rel = a.GetAttributeValue("rel", null) where rel == "next" let href = a.GetAttributeValue("href", null) where href != null select href; String nextUrl = nxtPage.FirstOrDefault(); //s'il n'y a pas de prochaine page on arrête if (nextUrl != null && nextUrl.Contains("page")) { url = nextUrl; } else { next = false; } } return(mLst); }
public Chapitre(Manga manga, Uri url) { MangaPath = manga.MangaPath; ChapUrl = url; ChapPicLst = new List <Picture>(); int idxLstSeg = url.Segments.Length - 1; ChapTitleFromUrl = url.Segments[idxLstSeg]; int.TryParse(ChapTitleFromUrl.Split(' ').Last(), out int i); ChapNumber = i; ChapNbrPage = 0; ChapNbrPageAlreadyDled = 0; chapAlreadyDled = false; }
/// <summary> /// Complète l'objet Manga avec la liste des tous les chapitres trouvés /// </summary> /// <param name="manga"></param> /// <returns></returns> public static void getChapsFromManga(Manga m, object o) { HtmlWeb web = new HtmlWeb(); IEnumerable <String> chapsLinks; HtmlAgilityPack.HtmlDocument mPag = web.Load(m.MangaUrl); if (o is LelScan) { chapsLinks = LelScan.getChapsLinksFromManga(m, mPag); } else { throw new Exception(); } m.MangaChapCompleteLst = Chapitre.addChapToChapLst(m, chapsLinks); }
/// <summary> /// Récupère la liste de tous les manga populaires de lelscan /// </summary> /// <returns></returns> public static List <Manga> getAllPopularMangaList(object o) { HtmlWeb web = new HtmlWeb(); IEnumerable <String> mangaUrl; if (o is LelScan) { LelScan lel = (LelScan)o; HtmlAgilityPack.HtmlDocument LelScanHtmlPage = web.Load(lel.LelScanUrlRoot); mangaUrl = LelScan.getAllPopularMangaLinks(LelScanHtmlPage); } else { throw new Exception(); } return(Manga.addMangaToMangaLst(mangaUrl)); }
public static List <Manga> getFavAndPopulateLB() { String[] lines = Outils.readTxtFile(Program._followedManga); List <Manga> mFollowedLst = new List <Manga>(); foreach (String l in lines) { String site = l.Substring(0, 1); String url = Outils.searchSite(site).ToString(); String[] s = l.Substring(1).Split(new[] { Program._separator }, StringSplitOptions.RemoveEmptyEntries); int.TryParse(s[2], out int nbrHigherChap); url += s[0]; Manga m = new Manga(new Uri(url)); m.MangaPath = s[1]; m.HigherChap = nbrHigherChap; mFollowedLst.Add(m); } return(mFollowedLst); }
public static List <Manga> updFavPath() { String[] lines = Outils.readTxtFile(Program._followedManga); List <Manga> mFollowedLst = new List <Manga>(); for (int i = 0; i < lines.Length; i++) { String site = lines[i].Substring(0, 1); String[] s = lines[i].Substring(1).Split(new[] { Program._separator }, StringSplitOptions.RemoveEmptyEntries); Manga m = new Manga(new Uri(s[0])); String number = s[2]; int.TryParse(number, out int nbrHigherChap); s[1] = m.MangaPath; m.HigherChap = nbrHigherChap; mFollowedLst.Add(m); Outils.reencodeSite(m.MangaUrl); lines[i] = m.MangaUrl.ToString() + Program._separator + m.MangaPath + Program._separator + number; } File.WriteAllLines(Program._followedManga, lines); return(mFollowedLst); }