/// <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)); }
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); }
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); }