コード例 #1
0
ファイル: BookInfo.cs プロジェクト: windygu/NovelDownloader
        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);
                }
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: windygu/NovelDownloader
        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();
        }
コード例 #3
0
        /// <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());
            }
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: windygu/NovelDownloader
        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();
        }
コード例 #5
0
        /// <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();
            }
        }