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); }
/// <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; } } }
/// <summary> /// Vérifie si le chapitre à déjà été téléchargé /// </summary> /// <param name="chap"></param> public static void checkFicChap(Chapitre chap) { //le chapitre à déjà été dl si: //- un dossier avec son nom existe if (Directory.Exists(chap.ChapPath)) { chap.chapAlreadyDled = true; return; } if (Directory.Exists(chap.MangaPath)) { var files = Directory.GetFiles(chap.MangaPath, "*.*"); foreach (var f in files) { //on prends le numero sans l'extension int.TryParse(Path.GetFileNameWithoutExtension(f).Split(' ').Last(), out int numChap); if (numChap == chap.ChapNumber) { chap.chapAlreadyDled = true; return; } } } else { chap.chapAlreadyDled = false; return; } }
/// <summary> /// Récupère tout ce qui est nécéssaire sur les mangas à partir d'une liste /// </summary> /// <param name="mangaLst"></param> /// <returns></returns> internal static List <Manga> getInfosMangas(List <Manga> mLst, object o) { foreach (Manga m in mLst) { Chapitre.getChapsFromManga(m, o); Outils.getChapsToDlList(m, o); } return(mLst); }
internal static void getInfoChapitres(Chapitre c, object o) { Outils.checkFicChap(c); //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 (!c.chapAlreadyDled) { //Sinon, on récupère la liste des pages du chapitre et on ajoute le chapitre dans la liste à dl Chapitre.getChapPages(c, o); } }
private static void addPicToChapPicLst(Chapitre c, IEnumerable <string> picsUrl) { foreach (var picUrl in picsUrl) { Picture p = new Picture(c, new Uri(picUrl)); p.PicPath = Path.Combine(c.ChapPath, p.PicFullName); c.ChapPicLst.Add(p); } c.ChapNbrPage = c.ChapPicLst.Count; }
internal static void zipAndDel(Chapitre c) { if (Program._compress) { string startPath = c.ChapPath; string zipPath = c.ChapPath + @".zip"; ZipFile.CreateFromDirectory(startPath, zipPath); Directory.Delete(c.ChapPath, true); } }
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"; } }
public Picture(Chapitre chap, Uri imgUrl) { ChapPath = chap.ChapPath; PicUrl = imgUrl; String urlPath = PicUrl.AbsoluteUri; PicFullName = Path.GetFileName(urlPath); PicNameNoExt = Path.GetFileNameWithoutExtension(urlPath); PicExt = Path.GetExtension(urlPath); Regex reg = new Regex(@"\b*\d+(,?|.?)\d*\b"); String nbr = reg.Match(PicNameNoExt).ToString(); int.TryParse(nbr, out int num); PicNumber = num; }
/// <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); }
private void btn_downloadSelectedChapters_Click(object sender, EventArgs e) { allButtonDisable(); LelScan lel = new LelScan(); List <Chapitre> cDlLst = new List <Chapitre>(); foreach (Chapitre c in lb_chap.SelectedItems) { cDlLst.Add(c); } Chapitre.getInfoChapitres(cDlLst, lel); Outils.dlChapWebClient(cDlLst); Outils.zipAndDel(cDlLst); MessageBox.Show("Les téléchargements des chapitres selectionnés sont terminés", "Cool", MessageBoxButtons.OK, MessageBoxIcon.Information); allButtonEnable(); }
public static void getChapPages(Chapitre chap, object o) { HtmlWeb web = new HtmlWeb(); HtmlAgilityPack.HtmlDocument chapterPage = web.Load(chap.ChapUrl); IEnumerable <string> picsUrl; if (o is LelScan) { picsUrl = LelScan.getChapPages(chapterPage); } else { throw new Exception(); } addPicToChapPicLst(chap, picsUrl); }
/// <summary> /// Télécharge un chapitre à partir d'un objet Chapitre /// </summary> /// <param name="chap"></param> /// <returns></returns> public static void dlChapWebClient(Chapitre c) { DirectoryInfo cDir = Directory.CreateDirectory(c.ChapPath); int lgtNeed = c.ChapPicLst.Count().ToString().Length; foreach (var p in c.ChapPicLst) { String path = p.PicPath; String picNbr = p.PicNumber.ToString(); int diff = lgtNeed - picNbr.Length; if (diff > 0) { for (int i = 0; i < diff; i++) { picNbr = "0" + picNbr; } path = Path.Combine(p.ChapPath, picNbr + p.PicExt); } Outils.downloadFile(p.PicUrl.ToString(), path); } }