Example #1
0
 /// <summary>
 /// Обновляет список произведений автора
 /// </summary>
 /// <param name="page">Страница автора со списком произведений</param>
 /// <param name="context">Контекст синхронизации для обновления GUI</param>
 /// <returns>true - автор обновился</returns>
 public bool UpdateAuthorInfo(string page, SynchronizationContext context, bool skipBookDescriptionChecking = false)
 {
     Sites.ISite _site = null;
     _site = Sites.SitesDetector.GetSite(URL);
     if (_site == null)
     {
         return(false);
     }
     return(_site.UpdateAuthorInfo(page, this, context, skipBookDescriptionChecking));
 }
Example #2
0
        public string GetAuthorPage()
        {
            Sites.ISite _site = null;
            _site = Sites.SitesDetector.GetSite(URL);
            if (_site == null)
            {
                return("");
            }
            return(_site.GetAuthorPage(URL));
            //string url = URL;
            //if (!url.EndsWith("indexdate.shtml") && !url.EndsWith("indextitle.shtml"))
            //    url = (url.EndsWith("/")) ? URL + "indextitle.shtml" : URL + "/indextitle.shtml";

            //return WEB.DownloadPageSilent(url);
        }
Example #3
0
        public static Author AddAuthor(string url)
        {
            _logger.Add("Добавление автора...");
            // Перевести URL на samlib.ru
            url = url.ToLowerInvariant().Replace("zhurnal.lib.ru", "samlib.ru");

            // аналог DoEvents в WPF, иначе "Добавление автора..." вообще не появляется, т.к. метод синхронный
            Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));

            if (!url.StartsWith("http://") && !url.StartsWith("https://"))
            {
                url = "http://" + url;
            }

            Sites.ISite site = Sites.SitesDetector.GetSite(url);

            if (site == null)
            {
                _logger.Add("Указан незнакомый адрес/домен/протокол.", true, true);
                return(null);
            }


            // Если URL заканчивается на index.shtml, преобразовать его в нужный)
            url = site.PrepareAuthorUrlOnAdding(url);


            Author author = Authors.FindAuthor(url);

            if (author != null)
            {
                _logger.Add("Этот автор уже присутствует в списке", true, true);
                return(author);
            }

            try
            {
                string pageContent = WEB.DownloadPageSilent(url);
                if (pageContent == null)
                {
                    _logger.Add("Не удалось открыть страницу автора", true, true);
                    return(null);
                }


                string   authorName = "";
                DateTime updateDate = DateTime.MinValue;
                site.GetAuthorCredentials(pageContent, out authorName, out updateDate);
                //int index = pageContent.IndexOf('.', pageContent.IndexOf("<title>")) + 1;
                //string authorName = pageContent.Substring(index, pageContent.IndexOf('.', index) - index);
                //DateTime updateDate = GetUpdateDate(pageContent);

                if (updateDate == DateTime.MinValue)
                {
                    _logger.Add("Не удалось получить дату со страницы автора", true, true);
                    return(null);
                }
                if (authorName.Trim() == "")
                {
                    _logger.Add("Не удалось получить имя автора", true, true);
                    return(null);
                }
                author = new Author {
                    Name = authorName, IsNew = false, UpdateDate = updateDate, URL = url
                };


                author.CheckID();// генерим id
                Authors.Add(author);
                author.UpdateAuthorInfo(pageContent, SynchronizationContext.Current);
                _logger.Add("Добавлен: " + author.Name);
                author.Changed = true;
            }
            catch (Exception ex)
            {
                _logger.Add(ex.StackTrace, false, true);
                _logger.Add(ex.Message, false, true);
                _logger.Add("Необработанная ошибка при добавлении автора", true, true);
            }
            return(author);
        }