public BookInfo(NDTBook bookToken) { if (bookToken == null) { throw new ArgumentNullException(nameof(bookToken)); } this.Title = bookToken.Title; this.Author = bookToken.Author; var description = bookToken.Description; var lines = description.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); if (lines.Length == 0) { this.Description = string.Empty; } else if (lines.Length == 1) { this.Description = lines[0].Trim(); } else { this.Description = string.Join(Environment.NewLine, new[] { string.Empty }.Concat(lines.Select(line => " " + line.Trim()))); } this.Cover = bookToken.Cover; bookToken.StartCreep(); foreach (var token in bookToken.Children.OfType <NDTChapter>().Select(token => new ChapterInfo(token))) { this.Chapters.Add(token); } if (this.Chapters.Count == 0) { foreach (var token in bookToken.Children.OfType <NDTVolume>().SelectMany(token => { token.StartCreep(); return(token.Children.OfType <NDTChapter>()); }).Select(token => new ChapterInfo(token))) { this.Chapters.Add(token); } } }
private static void downloadNormal(INovelDownloadPlugin plugin, NDTBook bookToken) { new Thread(() => { using (StreamWriter writer = new StreamWriter(string.Format("{0}.txt", process(bookToken.Title)), false, Encoding.UTF8)) { //StringBuilder sb = new StringBuilder(); Console.WriteLine("{0} - {1}", bookToken.Type, bookToken.Title); writer.WriteLine(string.Format("书名:{0}", bookToken.Title)); writer.WriteLine(string.Format("作者:{0}", bookToken.Author)); writer.WriteLine(); writer.WriteLine(); bookToken.CreepStarted += (sender, e) => Console.WriteLine("\t开始下载书籍《{0}》", bookToken.Title); bookToken.CreepFetched += (sender, e) => Console.WriteLine("\t获取 【{0}】", e.Data); bookToken.CreepFinished += (sender, e) => Console.WriteLine("\t下载书籍《{0}》完成。", bookToken.Title); bookToken.StartCreep(); foreach (NDTChapter chapterToken in bookToken.Children) { chapterToken.CreepStarted += (sender, e) => { Console.WriteLine("\t开始下载章节【{0}】”", chapterToken.Title); writer.WriteLine("--------------------"); writer.WriteLine(); writer.WriteLine(chapterToken.Title); }; chapterToken.CreepFetched += (sender, e) => { //Console.WriteLine("{0}", e.Data); writer.WriteLine(string.Format(" {0}", e.Data)); }; chapterToken.CreepFinished += (sender, e) => { Console.WriteLine("\t下载章节【{0}】完成。\n", chapterToken.Title); writer.WriteLine(); }; chapterToken.StartCreep(); } //Console.WriteLine(sb.ToString()); } }).Start(); }
/// <summary> /// 提供输出书籍的实现。 /// </summary> /// <param name="bookToken">书籍节点。</param> /// <param name="outputDir">输出目录。</param> protected override void WriteInternal(NDTBook bookToken, string outputDir) { using (StreamWriter writer = new StreamWriter(Path.Combine(outputDir, $"{bookToken.Title}.txt"), false, Encoding.UTF8)) { //StringBuilder sb = new StringBuilder(); this.LogWriter.WriteLine("{0} - {1}", bookToken.Type, bookToken.Title); writer.WriteLine(string.Format("书名:{0}", bookToken.Title)); writer.WriteLine(string.Format("作者:{0}", bookToken.Author)); writer.WriteLine(); writer.WriteLine(); bookToken.CreepStarted += (sender, e) => this.LogWriter.WriteLine("\t开始获取书籍《{0}》", bookToken.Title); bookToken.CreepFetched += (sender, e) => this.LogWriter.WriteLine("\t获取 【{0}】", e.Data); bookToken.CreepFinished += (sender, e) => this.LogWriter.WriteLine("\t书籍《{0}》获取完成。", bookToken.Title); bookToken.StartCreep(); foreach (NDTChapter chapterToken in bookToken.Children) { chapterToken.CreepStarted += (sender, e) => { this.LogWriter.WriteLine("\t开始获取章节【{0}】”", chapterToken.Title); writer.WriteLine("--------------------"); writer.WriteLine(); writer.WriteLine(chapterToken.Title); }; chapterToken.CreepFetched += (sender, e) => { //this.LogWriter.WriteLine("{0}", e.Data); writer.WriteLine(string.Format(" {0}", e.Data)); }; chapterToken.CreepFinished += (sender, e) => { this.LogWriter.WriteLine("\t章节【{0}】获取完成。\n", chapterToken.Title); writer.WriteLine(); }; chapterToken.StartCreep(); } //this.LogWriter.WriteLine(sb.ToString()); } }
private static void downloadLight(INovelDownloadPlugin plugin, NDTBook bookToken) { new Thread(() => { Console.WriteLine("{0} - {1}", bookToken.Type, bookToken.Title); DirectoryInfo directory = new DirectoryInfo(process(bookToken.Title)); bookToken.CreepStarted += (sender, e) => { Console.WriteLine("\t开始下载书籍《{0}》", bookToken.Title); if (!directory.Exists) { directory.Create(); } }; bookToken.CreepFetched += (sender, e) => Console.WriteLine("\t获取 ({0})", e.Data); bookToken.CreepFinished += (sender, e) => Console.WriteLine("\t下载书籍《{0}》完成。", bookToken.Title); bookToken.StartCreep(); foreach (NDTVolume volumeToken in bookToken.Children) { FileInfo file = new FileInfo(Path.Combine(directory.FullName, process(volumeToken.Title) + ".txt")); StreamWriter writer = null; volumeToken.CreepStarted += (sender, e) => { Console.WriteLine("\t\t开始下载卷({0})", volumeToken.Title); writer = file.CreateText(); }; volumeToken.CreepFetched += (sender, e) => Console.WriteLine("\t\t获取 【{0}】", e.Data); volumeToken.CreepFinished += (sender, e) => Console.WriteLine("\t\t下载卷({0})完成。", volumeToken.Title); volumeToken.StartCreep(); writer.WriteLine("[{0}][{1}][{2}]", bookToken.Author, bookToken.Title, volumeToken.Title); writer.WriteLine(); writer.WriteLine("≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡"); writer.WriteLine(); writer.WriteLine(" 书名:{0}", bookToken.Title); writer.WriteLine(" 作者:{0}", bookToken.Author); writer.WriteLine(" 来源:{0}", bookToken.Uri.Host); writer.WriteLine(); writer.WriteLine(" 本资源由小说下载插件 {0}({1}) v{2} 【{3}】 扫描提供。", plugin.DisplayName, plugin.Name, plugin.Version, plugin.Description); writer.WriteLine(); writer.WriteLine("≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡"); writer.WriteLine(); writer.WriteLine(); writer.WriteLine(volumeToken.Title); writer.WriteLine(); writer.Flush(); foreach (NDTChapter chapterToken in volumeToken.Children) { chapterToken.CreepStarted += (sender, e) => { Console.WriteLine("\t\t\t开始下载章节【{0}】”", chapterToken.Title); writer.WriteLine(); writer.WriteLine(); writer.WriteLine(chapterToken.Title); writer.WriteLine(); }; chapterToken.CreepFetched += (sender, e) => { writer.WriteLine(" {0}", e.Data); }; chapterToken.CreepFinished += (sender, e) => { Console.WriteLine("\t\t\t下载章节【{0}】完成。\n", chapterToken.Title); writer.WriteLine(); }; chapterToken.StartCreep(); } writer.Flush(); writer.Close(); writer.Dispose(); } }).Start(); }
/// <summary> /// 提供输出书籍的实现。 /// </summary> /// <param name="bookToken">书籍节点。</param> /// <param name="outputDir">输出目录。</param> protected override void WriteInternal(NDTBook bookToken, string outputDir) { this.LogWriter.WriteLine("{0} - {1}", bookToken.Type, bookToken.Title); DirectoryInfo book = null; bookToken.CreepStarted += (sender, e) => { this.LogWriter.WriteLine("\t开始获取书籍《{0}》", bookToken.Title); // 创建书籍根目录。 book = new DirectoryInfo(outputDir).CreateSubdirectory(bookToken.Title); }; bookToken.CreepFetched += (sender, e) => this.LogWriter.WriteLine("\t获取({0})", e.Data); bookToken.CreepFinished += (sender, e) => this.LogWriter.WriteLine("\t书籍《{0}》获取完成。", bookToken.Title); bookToken.StartCreep(); foreach (NDTVolume volumeToken in bookToken.Children) { FileInfo file = new FileInfo(Path.Combine(book.FullName, volumeToken.Title + ".txt")); StreamWriter writer = null; volumeToken.CreepStarted += (sender, e) => { this.LogWriter.WriteLine("\t\t开始获取卷({0})", volumeToken.Title); writer = file.CreateText(); }; volumeToken.CreepFetched += (sender, e) => this.LogWriter.WriteLine("\t\t获取 【{0}】", e.Data); volumeToken.CreepFinished += (sender, e) => this.LogWriter.WriteLine("\t\t卷({0})获取完成。", volumeToken.Title); volumeToken.StartCreep(); writer.WriteLine("[{0}][{1}][{2}]", bookToken.Author, bookToken.Title, volumeToken.Title); writer.WriteLine(); writer.WriteLine("≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡"); writer.WriteLine(); writer.WriteLine(" 书名:{0}", bookToken.Title); writer.WriteLine(" 作者:{0}", bookToken.Author); writer.WriteLine(" 来源:{0}", bookToken.Uri.Host); writer.WriteLine(); writer.WriteLine(" 本资源由小说下载插件 {0}({1}) v{2} 【{3}】 扫描提供。", this.Plugin.DisplayName, this.Plugin.Name, this.Plugin.Version, this.Plugin.Description); writer.WriteLine(); writer.WriteLine("≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡"); writer.WriteLine(); writer.WriteLine(); writer.WriteLine(volumeToken.Title); writer.WriteLine(); writer.Flush(); foreach (NDTChapter chapterToken in volumeToken.Children) { chapterToken.CreepStarted += (sender, e) => { this.LogWriter.WriteLine("\t\t\t开始下载章节【{0}】”", chapterToken.Title); writer.WriteLine(); writer.WriteLine(); writer.WriteLine(chapterToken.Title); writer.WriteLine(); }; chapterToken.CreepFetched += (sender, e) => { writer.WriteLine(" {0}", e.Data); }; chapterToken.CreepFinished += (sender, e) => { this.LogWriter.WriteLine("\t\t\t章节【{0}】下载完成。\n", chapterToken.Title); writer.WriteLine(); }; chapterToken.StartCreep(); } writer.Flush(); writer.Close(); writer.Dispose(); } }