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); }
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(); }
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(); } }
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 { } }
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(); } }
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; } }); }); }
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(); } }
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); } } }
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); }