private static void StartReader(Setting setting, DownloadTextItem sender) { Thread thread = new Thread(StartReaderPP) { IsBackground = true }; thread.Start(new StartReaderThreadParam { Context = SynchronizationContext.Current, Setting = setting, DownloadTextItem = sender }); }
private void SyncRun(object state) { Action action = ((RunContent)state).Action; object body = ((RunContent)state).Body; switch (action) { case Action.SetStatus: var param = (SetStatusParam)body; _logger.Add(param.Message, param.ToMessage, param.IsError); break; case Action.IsUpdaterTrue: ((Author)body).IsUpdated = true; break; case Action.IsUpdaterFalse: ((Author)body).IsUpdated = false; break; case Action.UpdateAuthorText: var updateTextParam = (UpdateTextParam)body; if (updateTextParam.IsNew) { _logger.Add(string.Format("{1}/{2}: '{0}' обновлен", updateTextParam.Author.Name, updateTextParam.Index, updateTextParam.Count)); if (_baloonInfo == "") { _baloonInfo = "Обновились авторы:\n"; } _baloonInfo = _baloonInfo + updateTextParam.Author.Name + "; "; } break; case Action.CachedAdd: var cachedParamAdd = (CachedParam)body; DownloadTextItem item = DownloadTextHelper.Add(cachedParamAdd.Author, cachedParamAdd.AuthorText); if (item.Text == null) { item.Start(); } cachedParamAdd.DownloadTextItem = item; break; case Action.CachedRemove: var cachedParamRemove = (CachedParam)body; cachedParamRemove.DownloadTextItem.Stop(); break; default: throw new ArgumentOutOfRangeException("state"); } }
private void ItemDownloadTextComplete(DownloadTextItem sender, DownloadDataCompletedEventArgs e) { if (sender.ReaderType == null) { sender.ReaderType = MainWindow.GetSettings().DefaultReader; } sender.DownloadTextComplete -= ItemDownloadTextComplete; if ((e == null) || ((e.Error == null) && (!e.Cancelled))) { switch (sender.ReaderType) { case 1: // внутренняя читалка sender.Logger.Add(string.Format("Открывается книга '{0}'.", sender.AuthorText.Name)); SIXamlReader reader = new SIXamlReader(MainWindow.GetSettings()); if (!File.Exists(sender.GetCachedFileName() + ".xaml")) { File.WriteAllText(sender.GetCachedFileName() + ".xaml", sender.Xaml, Encoding.GetEncoding(1251)); } UpdateView(false); reader.ShowReader(sender.GetCachedFileName() + ".xaml", sender); break; case 3: // другая читалка if (MainWindow.GetSettings().AlternativeReader.Trim().Length == 0) { sender.Logger.Add("Не задана внешняя читалка"); break; } if (!File.Exists(MainWindow.GetSettings().AlternativeReader.Trim())) { sender.Logger.Add(string.Format("Не найдена внешняя читалка '{0}'", MainWindow.GetSettings().AlternativeReader.Trim())); break; } if ((MainWindow.GetSettings().BookConverter.Trim().Length != 0) && (!File.Exists(MainWindow.GetSettings().BookConverter.Trim()))) { sender.Logger.Add(string.Format("Не найден конвертер '{0}'", MainWindow.GetSettings().BookConverter.Trim())); break; } UpdateView(false); StartReader(MainWindow.GetSettings(), sender); break; default: break; } } }
private void OpenReader(AuthorText authorText, int?readerType) { if (readerType == null) { readerType = MainWindow.GetSettings().DefaultReader; } readerType = readerType ?? 0; var site = Logic.Sites.SitesDetector.GetSite(_author.URL); if (site != null) { readerType = site.GetSupportedReaderNumber((int)readerType); } string url = authorText.GetFullLink(_author); switch (readerType) { case 0: // веб-страничка WEB.OpenURL(url.Trim()); break; case 1: // внутренняя читалка case 3: // другая читалка DownloadTextItem item = DownloadTextHelper.Add(_author, authorText); item.ReaderType = readerType; item.DownloadTextComplete += ItemDownloadTextComplete; if (item.Text == null) { item.Start(); } else { ItemDownloadTextComplete(item, null); } break; case 2: // Aj-reader string aj = "http://samlib.ru/img/m/mertwyj_o_a/aj.shtml?" + url.Replace("http://samlib.ru/", ""); WEB.OpenURL(aj.Trim()); break; default: break; } }
private void SaveButton_Click(object sender, RoutedEventArgs e) { AuthorText text = (e != null) && (e.OriginalSource.GetType() == typeof(Button)) ? ((Button)e.OriginalSource).DataContext as AuthorText : sender as AuthorText; if (text != null) { DownloadTextItem item = DownloadTextHelper.Add(_author, text); item.DownloadTextComplete += ItemDownloadSaveComplete; if (item.Text == null) { item.Start(); } else { ItemDownloadSaveComplete(item, null); } } }
private void ItemDownloadSaveComplete(DownloadTextItem sender, DownloadDataCompletedEventArgs args) { sender.DownloadTextComplete -= ItemDownloadTextComplete; if ((args == null) || ((args.Error == null) && (!args.Cancelled))) { if (sender.Text != null) { SaveFileDialog dialog = new SaveFileDialog { AddExtension = true, Filter = "HTML-файлы|*.html|Все файлы|*.*", ValidateNames = true, OverwritePrompt = true, FileName = sender.AuthorText.Link }; if (dialog.ShowDialog() == true) { File.WriteAllText(dialog.FileName, sender.Text, Encoding.GetEncoding(1251)); } } } }
private void ItemDownloadTextComplete(DownloadTextItem sender, DownloadDataCompletedEventArgs args) { _manualEvent.Set(); }