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
            });
        }
Beispiel #2
0
        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);
                }
            }
        }
Beispiel #6
0
 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));
             }
         }
     }
 }
Beispiel #7
0
 private void ItemDownloadTextComplete(DownloadTextItem sender, DownloadDataCompletedEventArgs args)
 {
     _manualEvent.Set();
 }