internal static void zipAndDel(Manga m1) { foreach (Chapitre chap in m1.MangaChapToDlLst) { string startPath = chap.ChapPath; string zipPath = chap.ChapPath + @".cbr"; ZipFile.CreateFromDirectory(startPath, zipPath); Directory.Delete(chap.ChapPath, true); } }
private static void writeCR(Manga m, String source) { String file = _rootPath + @"/_Lst"; if (!File.Exists(file)) { File.Create(file); } File.WriteAllText(file, "\n" + source + "#951753#" + m.MangaTitleClean + "#951753#" + m.HigherChap + "\n"); }
/// <summary> /// Complète l'objet Manga avec la liste des tous les chapitres trouvés /// </summary> /// <param name="manga"></param> /// <returns></returns> private void getChapsFromManga(Manga manga) { HtmlWeb web = new HtmlWeb(); HtmlDocument mangaPage = web.Load(manga.MangaUrl); var chapters = mangaPage.DocumentNode.Descendants("h5").Where(u => u.HasAttributes); foreach (var c in chapters) { String ChapTitleUrl = c.Descendants("a").First().InnerText; String ChapUrl = c.Descendants("a").First().GetAttributeValue("href", null); Chapitre chap = new Chapitre(manga, ChapTitleUrl, ChapUrl); manga.MangaChapCompleteLst.Add(chap); } }
/********** Fin Constructeurs ***********/ /********** Méthodes ***********/ /// <summary> /// TODO: lorsque d'autres sites seront fonctionnels, à voir ce qui est mutualisable /// Construit un objet manga complet à partir d'un titre tel que défini dans l'url /// </summary> /// <param name="manga"></param> /// <returns></returns> internal Manga getInfosManga(String titleUrl) { Manga manga = new Manga(titleUrl); manga.MangaUrl = LelScanUrlMangaRoot + "/" + manga.MangaTitleUrl; manga.MangaPath = Program._rootPath + "/" + manga.MangaTitleClean; //manga.MangaPath = Path.Combine(Program._rootPath, manga.MangaTitleClean); Console.WriteLine("Récupération des informations du manga {0}.", manga.MangaTitleClean); Console.WriteLine("Veuillez patienter ..."); getChapsFromManga(manga); getChapsToDlList(manga); Console.WriteLine(" {0} chapitre(s) à télécharger / {1}, soit {2} page(s) / {3}.", manga.MangaChapToDlLst.Count, manga.MangaChapCompleteLst.Count, manga.MangaNbrPagesToDl, manga.MangaNbrPagesTot); return(manga); }
public Chapitre(Manga manga, string chapTitleUrl, string chapUrl) { MangaPath = manga.MangaPath; ChapTitleUrl = chapTitleUrl; ChapUrl = chapUrl; ChapPicLst = new List <Picture>(); ChapPath = manga.MangaPath + "/" + ChapTitleClean; int.TryParse(chapTitleUrl.Split(" ").Last(), out int i); ChapNumber = i; ChapNbrPage = 0; ChapNbrPageAlreadyDled = 0; chapAlreadyDled = false; if (ChapNumber > HigherChap) { HigherChap = ChapNumber; } }
/// <summary> /// Téléchargement un manga à partir d'un objet Manga /// </summary> internal void dlMangaWebClient(Manga manga) { Console.WriteLine("Téléchargement en cours, veuillez partienter"); // Création du chronomètre. //Stopwatch timeDl = new Stopwatch(); // Démarrage du chronomètre. //timeDl.Start(); DirectoryInfo mangaDir = Directory.CreateDirectory(manga.MangaPath); // on veux les télécharger dans l'ordre ascendant foreach (var c in manga.MangaChapToDlLst) { dlChapWebClient(c); } // Arrêt du chronomètre. //timeDl.Stop(); // IHM. //Menu.Menu.next("Téléchargement terminé, durée du téléchargement: " + timeDl.Elapsed.TotalSeconds + " secondes"); }
/// <summary> /// Complète l'objet Manga avec la liste des tous les chapitres à télécharger /// </summary> /// <param name="manga"></param> private void getChapsToDlListThread(Manga manga) { //Parallel.ForEach(manga.MangaChapCompleteLst, (chap) => foreach (Chapitre chap in manga.MangaChapCompleteLst) { int nbPicDled = 0; if (Directory.Exists(chap.ChapPath)) { nbPicDled = Directory.GetFiles(chap.ChapPath, "*.*", SearchOption.AllDirectories).Length; } getChapPagesThread(chap); manga.MangaNbrPagesTot += chap.ChapNbrPage; // si on à plus d'images à dl que ce qu'on à déjà, on mets le chap dans la liste des chaps à dl (pas parfait comme méthode, on peut avoir des images qui n'ont rien à voir dans notre dossier ...) if (nbPicDled < chap.ChapNbrPage) { manga.MangaChapToDlLst.Add(chap); manga.MangaNbrPagesToDl += chap.ChapNbrPage; } } //}); }
/// <summary> /// a.compareTo(b) => [-1, a < b][0, a=b][1, a>b] /// 1 < a = A < b /// </summary> /// <param name="obj"></param> public int CompareTo(object obj) { Manga manga = (Manga)obj; return(String.Compare(MangaTitleUrl, manga.MangaTitleUrl, true)); }