/// <summary> /// Пытается добавить текст автора в очередь закачки. /// Если уже есть в кеше, то не добавляет, а возвращает из кеша. /// </summary> /// <param name="author">Автор</param> /// <param name="text">Текст</param> /// <returns>Элемент очереди, либо из кеша</returns> public static DownloadTextItem Add(Author author, AuthorText text) { foreach (DownloadTextItem downloadTextItem in DownloadTextItems) { if (downloadTextItem.GetHashCode() == (new DownloadTextItem(author, text)).GetHashCode()) return downloadTextItem; } DownloadTextItem item = new DownloadTextItem(author, text) {Logger = _logger}; if (item.Text == null) DownloadTextItems.Add(item); ChangeVisibility(); return item; }
/// <summary> /// Пытается добавить текст автора в очередь закачки. /// Если уже есть в кеше, то не добавляет, а возвращает из кеша. /// </summary> /// <param name="author">Автор</param> /// <param name="text">Текст</param> /// <returns>Элемент очереди, либо из кеша</returns> public static DownloadTextItem Add(Author author, AuthorText text) { foreach (DownloadTextItem downloadTextItem in DownloadTextItems) { if (downloadTextItem.GetHashCode() == (new DownloadTextItem(author, text)).GetHashCode()) { return(downloadTextItem); } } DownloadTextItem item = new DownloadTextItem(author, text) { Logger = _logger }; if (item.Text == null) { DownloadTextItems.Add(item); } ChangeVisibility(); return(item); }
public void ShowReader(string xamlFileName, DownloadTextItem downloadTextItem ) { _downloadTextItem = downloadTextItem; SwitchTextsButton.DataContext = downloadTextItem.AuthorText; // для байндинга енейблинга или нет кнопки downloadTextItem.AuthorText.UpdateHasDiff(downloadTextItem.GetAuthor()); // проверим наличие файла различий, если он есть кнопка показа автоматом разблокируется string title = downloadTextItem.AuthorText.Name; string xamlText = File.ReadAllText(xamlFileName, Encoding.GetEncoding(1251)); StringReader input = new StringReader(xamlText); XmlTextReader reader = new XmlTextReader(input); content = System.Windows.Markup.XamlReader.Load(reader) as FlowDocument; if (content != null) { XamlReaderControl.Document = content; XamlReaderControl.Document.ColumnWidth = 800; } reader.Close(); Title = title; Show(); //if (XamlReaderControl.CanGoToPage(2)) // NavigationCommands.GoToPage.Execute(2, XamlReaderControl); }
public void ShowReader(string xamlFileName, DownloadTextItem downloadTextItem) { _downloadTextItem = downloadTextItem; SwitchTextsButton.DataContext = downloadTextItem.AuthorText; // для байндинга енейблинга или нет кнопки downloadTextItem.AuthorText.UpdateHasDiff(downloadTextItem.GetAuthor()); // проверим наличие файла различий, если он есть кнопка показа автоматом разблокируется string title = downloadTextItem.AuthorText.Name; string xamlText = File.ReadAllText(xamlFileName, Encoding.GetEncoding(1251)); StringReader input = new StringReader(xamlText); XmlTextReader reader = new XmlTextReader(input); content = System.Windows.Markup.XamlReader.Load(reader) as FlowDocument; if (content != null) { XamlReaderControl.Document = content; XamlReaderControl.Document.ColumnWidth = 800; } reader.Close(); Title = title; Show(); //if (XamlReaderControl.CanGoToPage(2)) // NavigationCommands.GoToPage.Execute(2, XamlReaderControl); }
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 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 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 ItemDownloadTextComplete(DownloadTextItem sender, DownloadDataCompletedEventArgs args) { _manualEvent.Set(); }
public static void Remove(DownloadTextItem item) { DownloadTextItems.Remove(item); ChangeVisibility(); }