示例#1
0
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) //event handle when picking an item
        {
            string SelectedItem = (string)comboBox1.SelectedItem;

            try
            {
                //access books
                string  BookJSON = File.ReadAllText(@"C:\Users\RMBonMAC\Documents\GitHub\BookStore\BookStore\BookStore\bin\Debug\Books.json");
                JObject json     = JObject.Parse(BookJSON);

                JObject BookTarget = (JObject)json[SelectedItem];

                string book_target = BookTarget.ToString();

                Book foundBook = new Book();
                Newtonsoft.Json.JsonConvert.PopulateObject(book_target, foundBook);
                AuthorText.Text = foundBook.author;;
                IsbnText.Text   = foundBook.ISBN;
                PriceText.Text  = foundBook.price.ToString();
            }
            catch {
                AuthorText.Clear();
                IsbnText.Clear();
                PriceText.Clear();
            }

            QuantityText.Focus();
        }
示例#2
0
        public string GetUserBooksFolder(Author author, AuthorText authorText)
        {
            string urlWithoutHTTP = author.URL.Replace(@"http://", "");

            if (urlWithoutHTTP.EndsWith("/indexdate.shtml"))
            {
                urlWithoutHTTP = urlWithoutHTTP.Replace("/indexdate.shtml", "");
            }
            if (urlWithoutHTTP.EndsWith("/indextitle.shtml"))
            {
                urlWithoutHTTP = urlWithoutHTTP.Replace("/indextitle.shtml", "");
            }

            string endPath = urlWithoutHTTP.Substring(urlWithoutHTTP.IndexOf("/") + 1).Replace("/", @"\");



            if (!string.IsNullOrWhiteSpace(RootBooksFolder))
            {
                endPath = Path.Combine(RootBooksFolder, endPath);
            }

            string sectionName = authorText.SectionName;

            foreach (char c in Path.GetInvalidFileNameChars())
            {
                sectionName = sectionName.Replace(c, '_');
            }
            return(endPath);
        }
示例#3
0
        public string GetFileName(AuthorText authorText)
        {
            var parts = authorText.Link.Split("/".ToCharArray());
            var path  = parts[parts.Length - 1];

            return(TextCleaner.MakeFileAcceptableName(path));
        }
示例#4
0
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) //event handle when picking an item
        {
            try
            {
                MySqlConnection connection = new MySqlConnection("Datasource=localhost;port=3306;username=root;password="******"\"{comboBox1.SelectedItem.ToString()}\"";
                string query        = "SELECT * FROM bookstore.books WHERE title = " + selectedItem;
                connection.Open();
                MySqlCommand    command = new MySqlCommand(query, connection);
                MySqlDataReader reader  = command.ExecuteReader();
                if (reader.Read())
                {
                    AuthorText.Text = reader["author"].ToString();
                    PriceText.Text  = reader["price"].ToString();
                    IsbnText.Text   = reader["ISBN"].ToString();
                }
                connection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                //clear form
                AuthorText.Clear();
                IsbnText.Clear();
                PriceText.Clear();
            }

            QuantityText.Focus();
        }
示例#5
0
        /// <summary>
        /// This creates the book and if a certain book is picked, the corresponding text boxes will update with the
        /// correct information in each box.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string SelectedItem = (string)comboBox1.SelectedItem;

            try
            {
                string  jsonBook     = File.ReadAllText(@"Z:\Desktop\Fourth Year (F18-S19)\CompE561\Lab1\Lab1\bin\Debug\BookList.json");
                JObject JSON         = JObject.Parse(jsonBook);
                JObject targetBook   = (JObject)JSON[SelectedItem];
                string  s_targetBook = targetBook.ToString();
                Book    found        = new Book();
                Newtonsoft.Json.JsonConvert.PopulateObject(s_targetBook, found);
                AuthorText.Text = found.author;;
                IsbnText.Text   = found.ISBN;
                PriceText.Text  = found.price.ToString();
            }

            catch
            {
                AuthorText.Clear();
                IsbnText.Clear();
                PriceText.Clear();
            }
            QuantityText.Focus();
        }
        /// <summary>
        /// Конструктор (при нахождении файла в кеше устанавливается свойство Text
        /// </summary>
        /// <param name="author">Автор</param>
        /// <param name="text">Текст</param>
        public DownloadTextItem(Author author, AuthorText text)
        {
            _author    = author;
            AuthorText = text;
            string fileName = GetCachedFileName();

            if (File.Exists(fileName))
            {
                Text = File.ReadAllText(fileName, Encoding.GetEncoding(1251));
            }
            BytesReceived = 0;
        }
 public void Start()
 {
     if (_isDownloading)
     {
         return;
     }
     _isDownloading = true;
     _client        = null;
     _stop          = false;
     Logger.Add(string.Format("Запущена закачка книги '{0}'.", AuthorText.Name));
     WEB.DownloadPageSilent(AuthorText.GetFullLink(_author), Progress, Complete);
 }
示例#8
0
        /// <summary>
        /// опубликовать информация об обновлении книги
        /// </summary>
        /// <param name="authorUrl">урл автора</param>
        /// <param name="book">книга</param>
        /// <param name="authorName">имя автора</param>
        public void PublishMessageUpdatedBook(AuthorText book, string authorUrl, string authorName)
        {
            var paramJson = new fastJSON.JSONParameters
            {
                UsingGlobalTypes     = false,
                EnableAnonymousTypes = true,
                UseExtensions        = false
            };


            var paramBJson = new fastBinaryJSON.BJSONParameters
            {
                UsingGlobalTypes     = false,
                EnableAnonymousTypes = true,
                UseExtensions        = false
            };


            try
            {
                if (_settings.UseMessageBroker)
                {
                    var transportBookInfo = new TransportBookInfo()
                    {
                        AuthorLink  = authorUrl,
                        AuthorName  = authorName,
                        Description = book.Description,
                        Genres      = book.Genres,
                        Link        = book.Link,
                        Name        = book.Name,
                        SectionName = book.SectionName,
                        Size        = book.Size,
                        UpdateDate  = DateTime.Now.ToUniversalTime().Ticks
                    };
                    var jsonTransportBookInfo = fastBinaryJSON.BJSON.Instance.ToBJSON(transportBookInfo, paramBJson);// fastJSON.JSON.Instance.ToJSON(transportBookInfo);
                    var command = new SubscriptionMessageCommand()
                    {
                        JsonObjectBytes = jsonTransportBookInfo
                    };
                    PublishMessageUpdatedBook(fastJSON.JSON.Instance.ToJSON(command, paramJson));
                }
            }
            catch (Exception ex)
            {
                //_logger.Add("Остановлен сервис подписки на push-уведомления об обновлениях.");
            }
        }
        /// <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);
        }
示例#10
0
 private void OpenReader(AuthorText authorText, int? readerType)
 {
     if (readerType == null) readerType = MainWindow.GetSettings().DefaultReader;
     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://zhurnal.lib.ru/img/m/mertwyj_o_a/aj.shtml?" +
                         url.Replace("http://zhurnal.lib.ru/", "");
             WEB.OpenURL(aj.Trim());
             break;
         default:
             break;
     }
 }
示例#11
0
 private void OpenReader(AuthorText authorText)
 {
     OpenReader(authorText, null);
 }
示例#12
0
        public string GetUserBooksFolder(Author author, AuthorText authorText)
        {
            var path = Path.Combine(RootBooksFolder, authorText.SectionName);

            return(path);
        }
 public string GetCachedFileName()
 {
     return(AuthorText.GetCachedFileName(_author));
 }
示例#14
0
        public bool UpdateAuthorInfo(string page, Author author, SynchronizationContext context,
                                     bool skipBookDescriptionChecking = false)
        {
            try
            {
                lock (_lockObj)
                {
                    bool retValue = false;
                    if (string.IsNullOrWhiteSpace(author.AlternateURL) && author.URL.Contains("http://www.fanfiction.net/atom/u/"))
                    {
                        author.AlternateURL = author.URL.Replace("http://www.fanfiction.net/atom/u/",
                                                                 "http://www.fanfiction.net/u/");
                    }
                    if (string.IsNullOrWhiteSpace(author.AlternateURL) && author.URL.Contains("https://www.fanfiction.net/atom/u/"))
                    {
                        author.AlternateURL = author.URL.Replace("https://www.fanfiction.net/atom/u/",
                                                                 "https://www.fanfiction.net/u/");
                    }


                    var authorTemp = new Author {
                        UpdateDate = author.UpdateDate
                    };

                    using (XmlReader reader = XmlReader.Create(new StringReader(page)))
                    {
                        SyndicationFeed feed = SyndicationFeed.Load(reader);
                        int             cnt  = 0;
                        foreach (var item in feed.Items)
                        {
                            var text = new AuthorText
                            {
                                Description = CleanSummary(TextCleaner.Html2Text(item.Summary.Text)),
                                Genres      = item.Authors.Count > 0 ? item.Authors[0].Name : "",
                                Link        = item.Links.Count > 0 ?
                                              //item.Links[0].GetAbsoluteUri()==null ? "" : item.Links[0].GetAbsoluteUri().AbsolutePath
                                              item.Links[0].Uri.ToString()
                                    : "",
                                Name        = item.Title.Text,
                                Order       = cnt,
                                SectionName = item.Authors.Count > 0 ? item.Authors[0].Name : "",
                                Size        = -1,
                                UpdateDate  = item.LastUpdatedTime.LocalDateTime
                            };
                            authorTemp.Texts.Add(text);
                            cnt++;
                        }

                        if (author.Texts.Count > 0) // если раньше загружали автора, то проводим сравнение
                        {
                            foreach (AuthorText txt in authorTemp.Texts)
                            {
                                bool bFound  = false;
                                int  OldSize = 0; // стрый размер текста
                                foreach (AuthorText t in author.Texts)
                                {
                                    if (txt.Link == t.Link)
                                    {
                                        txt.Cached = t.Cached;
                                        if (t.IsNew)
                                        {
                                            // если книгу не читали до этой проверки, не меняем старое значение, чтобы видеть кумулятивное изменение размера
                                            OldSize = t.SizeOld;// запоминаем позапрошлый размер, чтобы запомнить изменения в новом тексте кумулятивно
                                        }
                                        else
                                        {
                                            OldSize = t.Size; // запоминаем старый размер, чтобы запомнить его в новом тексте
                                        }
                                        bFound = txt.Name == t.Name && txt.Description == t.Description;
                                        // && txt.UpdateDate == t.UpdateDate
                                        if (bFound)
                                        {
                                            // переносим значение isNew в новый массив, чтобы не потерять непрочитанные новые тексты
                                            txt.IsNew      = t.IsNew;
                                            txt.UpdateDate = t.UpdateDate;
                                            txt.SizeOld    = t.SizeOld; // переносим, чтобы при отсутствии изменений не скидывалась информация об изменениях
                                            break;
                                        }
                                    }
                                }
                                if (!bFound)
                                {
                                    retValue         = true;
                                    authorTemp.IsNew = true;
                                    txt.IsNew        = true;
                                    txt.UpdateDate   = DateTime.Now;
                                    txt.SizeOld      = OldSize;
                                    // да, автор обновился
                                    authorTemp.UpdateDate = DateTime.Now;

                                    //#region Отсылка информации об обновлении в шину брокера сообщений
                                    //MessageBroker.HiLevelManager.Manager.GetInstance().PublishMessageUpdatedBook(txt, author.URL, author.Name);
                                    //#endregion
                                    // отсылка инормации об обновлении на сервер статистики
                                    SIinformer.ApiStuff.ApiManager.GetInstance().PublishMessageUpdatedBook(MainWindow.MainForm.GetLogger(), MainWindow.GetSettings(), txt, author.URL, author.Name);
                                }
                            }
                            // доп проверка по количеству произведений
                            if (authorTemp.Texts.Count != author.Texts.Count)
                            {
                                retValue = true;
                                authorTemp.UpdateDate = feed.LastUpdatedTime.LocalDateTime;
                            }
                        }

                        // отсылка информации о книгах (не обновленные. обновленные идут отдельным вызовом) на сервер статистики
                        SIinformer.ApiStuff.ApiManager.GetInstance().SetBooksInfo(MainWindow.MainForm.GetLogger(), MainWindow.GetSettings(), authorTemp.Texts.Where(b => !b.IsNew).ToList(), author.URL, author.Name);

                        context.Post(Author.SyncRun, new Author.RunContent {
                            Renewed = author, New = authorTemp
                        });


                        reader.Close();
                    }

                    return(retValue);
                }//lock
            }
            catch (Exception ex)
            {
                MainWindow.MainForm.GetLogger().Add("Ошибка парсинка странички  " + author.URL + "     " + ex.Message);
            }
            return(false);
        }
示例#15
0
        public void PublishMessageUpdatedBook(Logger logger, Setting settings, AuthorText book, string authorUrl, string authorName)
        {
            if (!settings.UseMessageBroker)
            {
                return;
            }
            CheckProxy(settings);

            var paramBJson = new fastBinaryJSON.BJSONParameters
            {
                UsingGlobalTypes     = false,
                EnableAnonymousTypes = true,
                UseExtensions        = false
            };


            try
            {
                var transportBookInfo = new TransportBookInfo()
                {
                    AuthorLink  = authorUrl,
                    AuthorName  = authorName,
                    Description = book.Description,
                    Genres      = book.Genres,
                    Link        = book.Link,
                    Name        = book.Name,
                    SectionName = book.SectionName,
                    Size        = book.Size,
                    UpdateDate  = DateTime.Now.ToUniversalTime().Ticks
                };
                var jsonTransportBookInfo = fastBinaryJSON.BJSON.Instance.ToBJSON(transportBookInfo, paramBJson);

                var rpc = new JsonRpcClient(_proxy)
                {
                    Url = _apiUrl
                };
                rpc.Invoke <BooleanOperationResult>(
                    new RpcCommand()
                {
                    Method = "SetUpdateInfo", ParametersArray = new object[] { "clientId", SubscriptionManager.CurrentClientId, "jsonObjectBytes", jsonTransportBookInfo, "appId", "slkdjfhsjdfks928347832940hfjdsf982738r9" }
                },
                    (data) =>
                    GetUiControl().InvokeIfRequired(() =>

                {
                    if (data == null)
                    {
                        logger.Add("Не удалось отослать информацию об обновлении серверу статистики SIInformer", true);
                    }
                    else if (data.Result)
                    {
                        // ну, отослали успешно, чо делать-то? Да ничего. :-)
                    }
                    else
                    {
                        logger.Add("Не удалось отослать информацию об обновлении серверу статистики SIInformer: " + data.Error, true);
                    }
                }, DispatcherPriority.Normal), (error) => GetUiControl().InvokeIfRequired(() => logger.Add("Не удалось отослать информацию об обновлении серверу статистики SIInformer: " + error.Message, true), DispatcherPriority.Normal));
            }
            catch (Exception ex)
            {
                logger.Add("Ошибка работы модуля общения с сервером статистики SIInformer: " + ex.Message, true);
            }
        }
示例#16
0
 public string GetFileExtention(AuthorText authorText)
 {
     return(Path.GetExtension(authorText.Link));
 }
 public override int GetHashCode()
 {
     return(_author.GetHashCode() ^ AuthorText.GetHashCode());
 }
示例#18
0
 public string GetFileName(AuthorText authorText)
 {
     return(authorText.Link);
 }
        private void Complete(object sender, DownloadDataCompletedEventArgs e)
        {
            WebClient client = (WebClient)sender;

            client.DownloadDataCompleted   -= Complete;
            client.DownloadProgressChanged -= Progress;

            DownloadTextHelper.Remove(this);

            if ((e != null) && e.Cancelled)
            {
                Logger.Add(string.Format("Загрузка книги '{0}' прервана.", AuthorText.Name));
            }
            else if ((e != null) && (e.Error != null))
            {
                Logger.Add(e.Error.StackTrace, false, true);
                Logger.Add(e.Error.Message, false, true);
                Logger.Add(string.Format("Ошибка при загрузке книги '{0}'.", AuthorText.Name), true, true);
            }

            if ((e != null) && (e.Error == null) && (!e.Cancelled))
            {
                Text = (e.Result != null) ? WEB.ConvertPage(e.Result) : null;
                if (Text != null)
                {
                    Text = PostProcess(Text);
                    if (!Directory.Exists(Path.GetDirectoryName(GetCachedFileName())))
                    {
                        Directory.CreateDirectory(Path.GetDirectoryName(GetCachedFileName()));
                    }

                    // надо проверить разницу с предыдущим текстом
                    // для этого ищем предыдущий файл и сравниваем с ним, результат пишем в отдельный файл
                    #region Вычисление изменений в тексте файла

                    string CachedFileName = Path.GetFileNameWithoutExtension(GetCachedFileName());
                    // делаем так, потому что имя файла может поменяться. Мы ориентируемся на последний вариант в предположении,
                    // что автор обновляет проду, а не перезаливает с новым именем
                    // убираем штамп времени
                    string[] name_parts = CachedFileName.Split(".".ToCharArray());
                    if (name_parts.Length > 1)
                    {
                        string CachedFileNameWithoutTimeMask = "";
                        for (int i = 0; i < name_parts.Length - 1; i++)
                        {
                            CachedFileNameWithoutTimeMask = CachedFileNameWithoutTimeMask +
                                                            ((CachedFileNameWithoutTimeMask == "") ? name_parts[i] : "." + name_parts[i]);
                        }
                        CachedFileNameWithoutTimeMask = CachedFileNameWithoutTimeMask + ".";
                        // берем последний закачанный файл
                        var files = from f in Directory.GetFiles(Path.GetDirectoryName(GetCachedFileName()))
                                    where Path.GetFileName(f).ToLower().StartsWith(CachedFileNameWithoutTimeMask.ToLower()) &&
                                    Path.GetFileName(f).ToLower().EndsWith(".shtml")
                                    orderby f
                                    select f;
                        string last_file = "";
                        if (files.Count() > 0)
                        {
                            last_file = files.Last();
                        }

                        // если такой есть, то проведем сравнение
                        #region код вычисления различий
                        // если текст больше 150 кило - небудем находить различия, ибо медленно
                        if (Text.Length < 150 * 1024)
                        {
                            if (!string.IsNullOrEmpty(last_file))
                            {
                                // засунем вычисления в отдельный поток, так как это медленная операция
                                System.ComponentModel.BackgroundWorker bw = new System.ComponentModel.BackgroundWorker();
                                bw.DoWork += (o, e1) =>
                                {
                                    Logger.Add(string.Format("Нахождение различий в обновлении книги '{0}'.", AuthorText.Name));
                                    Helpers.HtmlDiff diff      = new Helpers.HtmlDiff(File.ReadAllText(last_file, Encoding.GetEncoding(1251)), Text);
                                    string           diff_file = "";
                                    try
                                    {
                                        diff_file = diff.Build();
                                    }
                                    catch
                                    { }
                                    if (!string.IsNullOrEmpty(diff_file))
                                    {
                                        diff_file = diff_file.Replace("<head>", "<head><STYLE type=\"text/css\">table {border:1px solid #d9d9d9;} td {border:1px solid #d9d9d9; padding:3px;} ins {background-color: #00542E;text-decoration:inherit;} del {color: #999;	background-color:#FEC8C8;} ins.mod { background-color: #FFE1AC; }</STYLE>");
                                        File.WriteAllText(
                                            Path.Combine(Path.GetDirectoryName(GetCachedFileName()), CachedFileName + "_diff.shtml"),
                                            diff_file, Encoding.GetEncoding(1251));
                                        AuthorText.UpdateHasDiff(_author);
                                    }
                                    Logger.Add(string.Format("Файл различий в обновлении книги '{0}' сформирован.", AuthorText.Name));
                                };
                                bw.RunWorkerAsync();
                            }
                        }
                        else
                        {
                            Logger.Add(string.Format("Нахождение различий в обновлении книги '{0}' не будет произведено, оазмер превышает 150кб.", AuthorText.Name));
                        }
                        #endregion
                    }


                    #endregion


                    File.WriteAllText(GetCachedFileName(), Text, Encoding.GetEncoding(1251));
                    Logger.Add(string.Format("Книга '{0}' закачана.", AuthorText.Name));
                }
            }
            if (DownloadTextComplete != null)
            {
                DownloadTextComplete(this, e);
            }
        }
示例#20
0
        public bool UpdateAuthorInfo(string page, Author author, SynchronizationContext context, bool skipBookDescriptionChecking = false)
        {
            lock (_lockObj)
            {
                bool retValue   = false;
                var  authorTemp = new Author {
                    UpdateDate = author.UpdateDate
                };

                // проанализируем данные на страничке. если раньше их не загружали, то в любом случае не показываем, что есть обновления, просто заполняем данные
                MatchCollection matches = Regex.Matches(page,
                                                        "<DL><DT><li>(?:<font.*?>.*?</font>)?\\s*(<b>(?<Authors>.*?)\\s*</b>\\s*)?<A HREF=(?<LinkToText>.*?)><b>\\s*(?<NameOfText>.*?)\\s*</b></A>.*?<b>(?<SizeOfText>\\d+)k</b>.*?<small>(?:Оценка:<b>(?<DescriptionOfRating>(?<rating>\\d+(?:\\.\\d+)?).*?)</b>.*?)?\\s*\"(?<Section>.*?)\"\\s*(?<Genres>.*?)?\\s*(?:<A HREF=\"(?<LinkToComments>.*?)\">Комментарии:\\s*(?<CommentsDescription>(?<CommentCount>\\d+).*?)</A>\\s*)?</small>.*?(?:<br><DD>(?<Description>.*?))?</DL>");
                if (matches.Count > 0)
                {
                    int cnt = 0;
                    foreach (Match m in matches)
                    {
                        var item = new AuthorText
                        {
                            Description = NormalizeHTML(m.Groups["Description"].Value).Trim(),
                            Genres      = NormalizeHTML(m.Groups["Genres"].Value),
                            Link        = m.Groups["LinkToText"].Value,
                            Name        = NormalizeHTML(m.Groups["NameOfText"].Value),
                            Order       = cnt,
                            SectionName =
                                NormalizeHTML(m.Groups["Section"].Value).Replace("@", ""),
                            Size = int.Parse(m.Groups["SizeOfText"].Value)
                        };
                        authorTemp.Texts.Add(item);
                        cnt++;
                    }
                }
                if (author.Texts.Count > 0) // если раньше загружали автора, то проводим сравнение
                {
                    foreach (AuthorText txt in authorTemp.Texts)
                    {
                        bool bFound  = false;
                        int  OldSize = 0; // стрый размер текста
                        foreach (AuthorText t in author.Texts)
                        {
                            if (txt.Link == t.Link)
                            {
                                txt.Cached = t.Cached;
                                if (t.IsNew)
                                {
                                    // если книгу не читали до этой проверки, не меняем старое значение, чтобы видеть кумулятивное изменение размера
                                    OldSize = t.SizeOld;// запоминаем позапрошлый размер, чтобы запомнить изменения в новом тексте кумулятивно
                                }
                                else
                                {
                                    OldSize = t.Size; // запоминаем старый размер, чтобы запомнить его в новом тексте
                                }
                                bFound = skipBookDescriptionChecking
                                             ? txt.Name == t.Name && txt.Size == t.Size
                                             : txt.Name == t.Name && txt.Size == t.Size & txt.Description == t.Description;
                                if (bFound)
                                {
                                    // переносим значение isNew в новый массив, чтобы не потерять непрочитанные новые тексты
                                    txt.IsNew      = t.IsNew;
                                    txt.UpdateDate = t.UpdateDate;
                                    txt.SizeOld    = t.SizeOld; // переносим, чтобы при отсутствии изменений не скидывалась информация об изменениях
                                    break;
                                }
                            }
                        }
                        if (!bFound)
                        {
                            retValue         = true;
                            authorTemp.IsNew = true;
                            txt.IsNew        = true;
                            txt.UpdateDate   = DateTime.Now;
                            txt.SizeOld      = OldSize;
                            // да, автор обновился
                            authorTemp.UpdateDate = DateTime.Now;

                            //#region Отсылка информации об обновлении в шину брокера сообщений
                            //MessageBroker.HiLevelManager.Manager.GetInstance().PublishMessageUpdatedBook(txt, author.URL, author.Name);
                            //#endregion
                            // отсылка инормации об обновлении на сервер статистики
                            SIinformer.ApiStuff.ApiManager.GetInstance().PublishMessageUpdatedBook(MainWindow.MainForm.GetLogger(), MainWindow.GetSettings(), txt, author.URL, author.Name);
                        }
                    }
                    // доп проверка по количеству произведений
                    if (authorTemp.Texts.Count != author.Texts.Count)
                    {
                        retValue = true;
                        authorTemp.UpdateDate = DateTime.Now;
                    }
                }

                // отсылка информации о книгах (не обновленные. обновленные идут отдельным вызовом) на сервер статистики
                SIinformer.ApiStuff.ApiManager.GetInstance().SetBooksInfo(MainWindow.MainForm.GetLogger(), MainWindow.GetSettings(), authorTemp.Texts.Where(b => !b.IsNew).ToList(), author.URL, author.Name);

                context.Post(Author.SyncRun, new Author.RunContent {
                    Renewed = author, New = authorTemp
                });

                return(retValue);
            } // lock
        }
示例#21
0
 public string GetFileExtention(AuthorText authorText)
 {
     return(".html");
 }