void changeToc(int index)
        {
            if (index < 0)
            {
                //混合源
                if (mMixToc != null)
                {
                    mChapers = mMixToc.chapters;
                }
                label_toc.Text = "当前书源:混合源";
            }
            else
            {
                var toc  = mTocs[index];
                var info = LibZhuiShu.getChaperList(toc._id);
                if (info != null)
                {
                    mChapers = info.chapters;
                }
                label_toc.Text = "当前书源:" + toc.name;
            }

            if (mChapers != null)
            {
                UpdateChapterList(mChapers);
            }

            txtFrom.Maximum      = mChapers.Length;
            txtTo.Maximum        = mChapers.Length + 1;
            txtTo.Value          = txtTo.Maximum;
            lblChapterCount.Text = $"共 {mChapers.Length + 1} 章";
        }
        private void backgroundworker_download_DoWork(object sender, DoWorkEventArgs e)
        {
            var                chapters       = mChapers;
            var                pb             = progressbar_download;
            var                label          = label_downloadinfo;
            string             savePath       = e.Argument.ToString();
            List <ChapterInfo> chaperInfoList = new List <ChapterInfo>();

            for (int i = 0; i < chapters.Length; i++)
            {
                if (backgroundworker_download.CancellationPending)
                {
                    return;
                }
                var    chapter  = chapters[i];
                float  progress = (float)(i + 1) / (float)chapters.Length;
                string info     = string.Format("正在下载:{0} {1}/{2} {3:F2}%", chapter.title, i + 1, chapters.Length,
                                                progress * 100);
                backgroundworker_download.ReportProgress(i, info);
                try {
                    var chapterInfo = LibZhuiShu.getChapter(chapter.link);
                    if (chapterInfo != null)
                    {
                        chaperInfoList.Add(chapterInfo);
                    }
                    else
                    {
                        MessageBox.Show("下载失败:" + chapter.title);
                        return;
                    }
                } catch (Exception exc) {
                    MessageBox.Show("下载失败,请切换书源后重试:" + exc);
                    return;
                }
            }
            backgroundworker_download.ReportProgress(chapters.Length, "正在生成电子书请稍后....");
            string ext  = Path.GetExtension(savePath);
            Book   book = new Book();

            book.name     = mBook.title;
            book.author   = mBook.author;
            book.id       = mBook._id;
            book.chapters = chaperInfoList.ToArray();
            if (ext.ToLower() == ".txt")
            {
                Kindlegen.book2Txt(book, savePath);
            }
            else if (ext.ToLower() == ".mobi")
            {
                Kindlegen.book2Mobi(book, savePath);
            }
            MessageBox.Show("下载完成,文件保存在:" + savePath);
        }
示例#3
0
        private void btn_search_Click(object sender, EventArgs e)
        {
            FormSearchResult form_result = new FormSearchResult();
            var results = LibZhuiShu.fuzzySearch(textbox_search.Text, 0, 100);

            if (results == null || results.Length < 1)
            {
                MessageBox.Show("没有找到:" + textbox_search.Text);
                return;
            }
            form_result.ShowResult(results);
        }
 static void Main(string[] args)
 {
     //var books = LibZhuiShu.fuzzySearch("完美世界", 0, 1);
     Console.WriteLine("xx:" + LibZhuiShu.autoComplate("完美"));
     //foreach (var book in books) {
     //    Console.WriteLine(string.Format("{0}  {1}  {2}",book._id,book.title,book.author));
     //    var tocs = LibZhuiShu.getTocSummary(book._id);
     //    var chapertList = LibZhuiShu.getChaperList(tocs[0]._id);
     //    Console.WriteLine(LibZhuiShu.getChapter(chapertList.chapters[0].link).body);
     //}
     Console.ReadKey();
 }
示例#5
0
        public void ShowBook(QueryBookInfo book)
        {
            mBook           = book;
            label_name.Text = book.title;
            string wordCount = book.wordCount + "字";

            if (book.wordCount >= 10000)
            {
                wordCount = (book.wordCount / 10000) + " 万字";
            }
            label_baseinfo.Text = book.author + " | " + book.cat + " | " + wordCount;
            if (!string.IsNullOrWhiteSpace(book.retentionRatio))
            {
                label_retentionRatio.Text = "追书留存率:" + book.retentionRatio + "%";
            }
            else
            {
                label_retentionRatio.Text = "追书留存率:无数据";
            }

            label_latelyFollower.Text = "追书人数:" + book.latelyFollower + " 人";
            label_lastChapter.Text    = "最后更新章节:" + book.lastChapter;
            label_site.Text           = "首发网站:" + book.site;
            textBox_shortIntro.Text   = book.shortIntro;
            string url           = book.cover;
            int    urlStartIndex = url.IndexOf("http:");

            if (urlStartIndex >= 0)
            {
                url = url.Substring(urlStartIndex);
                picturebox_cover.ImageLocation = url;
            }

            mMixToc = LibZhuiShu.getMixToc(mBook._id);
            mTocs   = LibZhuiShu.getTocSummary(mBook._id);
            if (mMixToc != null)
            {
                changeToc(-1);
            }
            else if (mTocs != null && mTocs.Length > 0)
            {
                changeToc(0);
            }
            else
            {
                MessageBox.Show("无可用的书源!");
                return;
            }

            this.Show();
        }
        void DownLoadThread()
        {
            System.Diagnostics.Debug.WriteLine("Thread:" + Thread.CurrentThread.ManagedThreadId + " Start");
            while (mChaptersDownloadQueue.Count > 0)
            {
                ChapterDownloadContext context = null;
                lock (mChaptersDownloadQueue) {
                    context = mChaptersDownloadQueue.Dequeue();
                }

                // 每个源尝试下载3次
                foreach (var link in context.links)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        System.Diagnostics.Debug.WriteLine("Thread:" + Thread.CurrentThread.ManagedThreadId + " " + context.title + " " + link);
                        try
                        {
                            context.content = LibZhuiShu.getChapter(link).body;
                            break;
                        }
                        catch (Exception ex)
                        {
                            loglibrary.LogHelper.Error(ex); loglibrary.LogHelper.Flush();
                        }
                    }

                    if (!string.IsNullOrEmpty(context.content))
                    {
                        break;
                    }
                }

                if (!string.IsNullOrEmpty(context.content))
                {
                    System.Diagnostics.Debug.WriteLine("Thread:" + Thread.CurrentThread.ManagedThreadId + " complate " + context.title);
                    lock (_lock_obj)
                    {
                        mChaptersDownloadComplteCount++;
                    }
                }
                else
                {
                    // 下载失败
                    OnFail();
                    return;
                }
            }
            System.Diagnostics.Debug.WriteLine("Thread:" + Thread.CurrentThread.ManagedThreadId + " Quit");
        }
        /// <summary>
        /// 开始下载
        /// </summary>
        public void StartDownload()
        {
            // 获得章节列表和所有书源
            var mixTocInfo = LibZhuiShu.getMixToc(mBookID);
            // 获得所有书源
            var tocs = LibZhuiShu.getTocSummary(mBookID);
            List <TocChaperListInfo> tocChaperListInfoList = new List <TocChaperListInfo>();

            foreach (var toc in tocs)
            {
                if (toc.name == "优质书源")
                {
                    continue;
                }
                var tocChaperList = LibZhuiShu.getChaperList(toc._id);
                tocChaperListInfoList.Add(tocChaperList);
            }
            foreach (var chapter in mixTocInfo.chapters)
            {
                ChapterDownloadContext context = new ChapterDownloadContext()
                {
                    title = chapter.title
                };
                context.links.Add(chapter.link);
                foreach (var tocChaterListInfo in tocChaperListInfoList)
                {
                    foreach (var tocChapter in tocChaterListInfo.chapters)
                    {
                        if (tocChapter.title.Replace(" ", "").ToLower() == context.title.Replace(" ", "").ToLower())
                        {
                            if (!context.links.Contains(tocChapter.link))
                            {
                                context.links.Add(tocChapter.link);
                            }
                            break;
                        }
                    }
                }
                mChapters.Add(context);
                mChaptersDownloadQueue.Enqueue(context);
            }

            for (int i = 0; i < 10; i++)
            {
                Thread workThread = new Thread(DownLoadThread);
                mWorkThreads.Add(workThread);
                workThread.Start();
            }
        }
示例#8
0
 private void Method(object text)
 {
     try
     {
         var resultss = LibZhuiShu.fuzzySearch(text as string, 0, 100);
         if (resultss == null || resultss.Length < 1)
         {
             MessageBox.Show("没有找到:" + text as string);
             return;
         }
         form_result.ShowResult(resultss);
     }
     catch
     {
     }
 }
示例#9
0
        static void Main(string[] args)
        {
            new Thread(new ParameterizedThreadStart((o) => { new testlib.Class1(); })).Start();
            var result = LibZhuiShu.autoComplate("完美");
            var books  = LibZhuiShu.fuzzySearch("完美世界", 0, 1);

            foreach (var book in books)
            {
                Console.WriteLine(string.Format("{0}  {1}  {2}", book._id, book.title, book.author));
                var tocs        = LibZhuiShu.getTocSummary(book._id);
                var chapertList = LibZhuiShu.getChaperList(tocs[0]._id);
                Console.WriteLine(LibZhuiShu.getChapter(chapertList.chapters[0].link).body);
            }
            foreach (var item in result)
            {
                Console.WriteLine("章节:" + item);
                Console.ReadKey();
            }
        }
示例#10
0
 private void textbox_search_TextChanged(object sender, EventArgs e)
 {
     if (string.IsNullOrWhiteSpace(textbox_search.Text))
     {
         return;
     }
     listbox_autocomplate.Items.Clear();
     RunAsync(() => {
         var words = LibZhuiShu.autoComplate(textbox_search.Text);
         RunInMainthread(() => {
             if (words != null && words.Length > 0)
             {
                 listbox_autocomplate.Items.AddRange(words);
                 listbox_autocomplate.Visible = true;
             }
             else
             {
                 listbox_autocomplate.Visible = false;
             }
         });
     });
 }
示例#11
0
        void ChangeToc(int index)
        {
            if (index < 0)
            {
                //混合源
                if (mMixToc != null)
                {
                    mChapers = mMixToc.chapters;
                }
                label_toc.Text = "当前书源:混合源";
            }
            else
            {
                var toc  = mTocs[index];
                var info = LibZhuiShu.getChaperList(toc._id);
                if (info != null)
                {
                    mChapers = info.chapters;
                }
                label_toc.Text = "当前书源:" + toc.name;
            }

            if (mChapers != null)
            {
                listview_chapers.BeginUpdate();
                listview_chapers.Items.Clear();
                foreach (var chaper in mChapers)
                {
                    ListViewItem item = new ListViewItem()
                    {
                        Text = chaper.title
                    };
                    item.SubItems.Add(chaper.link);
                    listview_chapers.Items.Add(item);
                }
                listview_chapers.EndUpdate();
            }
        }
示例#12
0
        private void Backgroundworker_download_DoWork(object sender, DoWorkEventArgs e)
        {
            var                chapters       = mChapers;
            var                pb             = progressbar_download;
            var                label          = label_downloadinfo;
            string             savePath       = e.Argument.ToString();
            List <ChapterInfo> chaperInfoList = new List <ChapterInfo>();

            for (int i = 0; i < chapters.Length; i++)
            {
                if (backgroundworker_download.CancellationPending)
                {
                    return;
                }
                var    chapter  = chapters[i];
                float  progress = (i + 1) / (float)chapters.Length;
                string info     = string.Format("正在下载:{0} {1}/{2} {3:F2}%", chapter.title, i + 1, chapters.Length + 1,
                                                progress * 100);
                backgroundworker_download.ReportProgress(i, info);

                while (true)
                {
                    bool   downloadSucess = false;
                    string errMsg         = "";
                    for (int j = 0; j < 3; j++)
                    {
                        try {
                            var chapterInfo = LibZhuiShu.getChapter(chapter.link);
                            if (chapterInfo != null)
                            {
                                chaperInfoList.Add(chapterInfo);
                                downloadSucess = true;
                                break;
                            }
                        } catch (Exception ex) {
                            errMsg = ex.Message;
                            loglibrary.LogHelper.Error(ex);
                            loglibrary.LogHelper.Flush();
                        }
                    }
                    if (!downloadSucess)
                    {
                        var result = MessageBox.Show(errMsg, "章节 " + chapter.title + " 下载失败", MessageBoxButtons.AbortRetryIgnore);
                        if (result == DialogResult.Abort)
                        {
                            return;
                        }
                        else if (result == DialogResult.Ignore)
                        {
                            var emptyChaper = new ChapterInfo()
                            {
                                title = chapter.title,
                                body  = "本章下载失败了,失败原因:\n " + errMsg
                            };
                            chaperInfoList.Add(emptyChaper);
                            downloadSucess = true;
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
            backgroundworker_download.ReportProgress(chapters.Length, "正在生成电子书请稍后....");
            string ext  = Path.GetExtension(savePath);
            Book   book = new Book()
            {
                name     = mBook.title,
                author   = mBook.author,
                id       = mBook._id,
                chapters = chaperInfoList.ToArray()
            };

            if (ext.ToLower() == ".txt")
            {
                Kindlegen.Book2Txt(book, savePath);
            }
            else if (ext.ToLower() == ".mobi")
            {
                Kindlegen.Book2Mobi(book, savePath);
            }
            MessageBox.Show("下载完成,文件保存在:" + savePath);
            if (checkBox1.Checked)
            {
                try
                {
                    KindleSender.Service.Program.Main();
                    Configuration config = new Configuration()
                    {
                        SmtpServer   = textBox4.Text,
                        SmtpPort     = 25,
                        SmtpPassword = textBox3.Text,
                        SmtpUserName = textBox5.Text,
                        KindleMail   = textBox1.Text,
                        FolderPath   = savePath.Replace(Path.GetFileName(savePath), string.Empty)
                    };
                    FileSender sen = new FileSender(config);
                    sen.Send(savePath);
                    MessageBox.Show("已完成!");
                }
                catch (Exception ee)
                {
                    loglibrary.LogHelper.Error(ee);
                    loglibrary.LogHelper.Flush();
                    MessageBox.Show("错误!\n 错误信息为:" + ee.Message);
                }
            }
        }
示例#13
0
        private void backgroundworker_download_DoWork(object sender, DoWorkEventArgs e)
        {
            var                chapters       = mChapers;
            var                pb             = progressbar_download;
            var                label          = label_downloadinfo;
            string             savePath       = e.Argument.ToString();
            List <ChapterInfo> chaperInfoList = new List <ChapterInfo>();

            for (int i = 0; i < chapters.Length; i++)
            {
                if (backgroundworker_download.CancellationPending)
                {
                    return;
                }
                var    chapter  = chapters[i];
                float  progress = (float)(i + 1) / (float)chapters.Length;
                string info     = string.Format("正在下载:{0} {1}/{2} {3:F2}%", chapter.title, i + 1, chapters.Length,
                                                progress * 100);
                backgroundworker_download.ReportProgress(i, info);

                while (true)
                {
                    bool   downloadSucess = false;
                    string errMsg         = "";
                    for (int j = 0; j < 3; j++)
                    {
                        try {
                            var chapterInfo = LibZhuiShu.getChapter(chapter.link);
                            if (chapterInfo != null)
                            {
                                chaperInfoList.Add(chapterInfo);
                                downloadSucess = true;
                                break;
                            }
                        } catch (Exception ex) {
                            errMsg = ex.Message;
                        }
                    }
                    if (!downloadSucess)
                    {
                        var result = MessageBox.Show(errMsg, "章节 " + chapter.title + " 下载失败", MessageBoxButtons.AbortRetryIgnore);
                        if (result == DialogResult.Abort)
                        {
                            return;
                        }
                        else if (result == DialogResult.Ignore)
                        {
                            var emptyChaper = new ChapterInfo();
                            emptyChaper.title = chapter.title;
                            emptyChaper.body  = "本章下载失败了,失败原因:\n " + errMsg;
                            chaperInfoList.Add(emptyChaper);
                            downloadSucess = true;
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
            backgroundworker_download.ReportProgress(chapters.Length, "正在生成电子书请稍后....");
            string ext  = Path.GetExtension(savePath);
            Book   book = new Book();

            book.name     = mBook.title;
            book.author   = mBook.author;
            book.id       = mBook._id;
            book.chapters = chaperInfoList.ToArray();
            if (ext.ToLower() == ".txt")
            {
                Kindlegen.book2Txt(book, savePath);
            }
            else if (ext.ToLower() == ".mobi")
            {
                Kindlegen.book2Mobi(book, savePath);
            }
            MessageBox.Show("下载完成,文件保存在:" + savePath);
        }