public void DownloadAndParseWebSiteBookIndexPage(Book book) { var downloader = new HttpContentDownloader(); downloader.Download(book.IndexPage, ar => { try { //At this step, we can get the index page in the search engine var state = (RequestState)ar.AsyncState; var response = (HttpWebResponse)state.Request.EndGetResponse(ar); response.GetResponseStream(); book.RootUrl = UrlHelper.GetRootUrlString(response.ResponseUri); var parser = new WebsiteBookIndexPageParser(); try { ProgressIndicatorHelper.CrossThreadStartProgressIndicator(true, "下载完成,解析目录中"); parser.Parse(response.GetResponseStream(), book); SelectedBook = book; ModelManager.GetBookIndexModel().Book = SelectedBook; if (GetBookIndexPageCompleted != null) { GetBookIndexPageCompleted(this, null); } } catch (Exception e) { ExceptionHandler.HandleException(e); } } catch (WebException e) { if (e.Status == WebExceptionStatus.RequestCanceled) { throw new TimeoutException(String.Format("连接{0}目录页超时", book.WebSite.WebSiteName)); } } }); }
public void Refresh() { ProgressIndicatorHelper.StartProgressIndicator(true , "更新本书目录"); var downloader = new HttpContentDownloader(); DownloaderList.Add(downloader); downloader.Download(Book.IndexPage, ar => { //At this step, we can get the index page in the search engine var state = (RequestState)ar.AsyncState; state.stopTimer = true; var response = (HttpWebResponse)state.Request.EndGetResponse(ar); response.GetResponseStream(); Book.RootUrl = UrlHelper.GetRootUrlString(response.ResponseUri); var parser = new WebsiteBookIndexPageParser(); var temp = new Book {RootUrl = Book.RootUrl}; parser.Parse(response.GetResponseStream(), temp ); var newChapters = new List<Chapter>(); newChapters.AddRange( temp.Chapters.Where ( chapter => !Book.Chapters.Any(c => c.ChapterName == chapter.ChapterName) )); if (newChapters.Count > 0) { var totalChapters = new List<Chapter>(); totalChapters.AddRange(Book.Chapters); totalChapters.AddRange(newChapters); _storage.SaveChapters(newChapters); Book.Chapters = totalChapters.ToArray(); LastPage(); } else { CrossThreadHelper.CrossThreadMethodCall(() => MessageBox.Show("本书尚未有新的章节")); } ProgressIndicatorHelper.StopProgressIndicator(); }); }