コード例 #1
0
        /// <summary>
        /// 为指定的小说下载插件注册书籍输出器。
        /// </summary>
        /// <param name="plugin">小说下载插件。</param>
        /// <param name="bookWriter">书籍输出器。</param>
        /// <exception cref="ArgumentNullException"><paramref name="plugin"/> 的值为 <see langword="null"/> 。</exception>
        /// <exception cref="ArgumentNullException"><paramref name="bookWriter"/> 的值为 <see langword="null"/> 。</exception>
        /// <exception cref="InvalidOperationException">已为插件注册了书籍输出器。</exception>
        /// <exception cref="InvalidOperationException">插件未加载。</exception>
        public void RegisterBookWriter(INovelDownloadPlugin plugin, IBookWriter bookWriter)
        {
            if (plugin == null)
            {
                throw new ArgumentNullException(nameof(plugin));
            }
            if (bookWriter == null)
            {
                throw new ArgumentNullException(nameof(bookWriter));
            }

            if (this.Plugins.ContainsKey(plugin.Guid))
            {
                if (this.BookWriters.ContainsKey(plugin.Guid))
                {
                    throw new InvalidOperationException("已为插件注册了书籍输出器。");
                }
                else
                {
                    this.BookWriters.Add(plugin.Guid, bookWriter);
                }
            }
            else
            {
                throw new InvalidOperationException("插件未加载。");
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: windygu/NovelDownloader
        private static void download(INovelDownloadPlugin plugin, string url, NDTBook bookToken = null)
        {
            if (bookToken == null && !plugin.TryGetBookToken(new Uri(url, UriKind.RelativeOrAbsolute), out bookToken))
            {
                return;
            }

            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine(string.Format("{0}({1}) v{2}\n{3}", plugin.DisplayName, plugin.Name, plugin.Version, plugin.Description));
            Console.ForegroundColor = ConsoleColor.Gray;

            Console.WriteLine();

            if (bookToken is NovelDownloader.Plugin.luoqiu.com.BookToken ||
                bookToken is NovelDownloader.Plugin._81zw.com.BookToken ||
                bookToken is NovelDownloader.Plugin.顶点小说.BookToken)
            {
                downloadNormal(plugin, bookToken);
            }
            else if (bookToken is NovelDownloader.Plugin.wenku8.com.BookToken ||
                     bookToken is NovelDownloader.Plugin.qidian.com.BookToken)
            {
                downloadLight(plugin, bookToken);
            }
            else
            {
                Console.WriteLine("无法下载《{0]》", bookToken.Title);
            }
        }
コード例 #3
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();
        }
コード例 #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();
        }