/// <summary> /// Мапирует релиз сайта album-info в музыкальный релиз /// </summary> /// <param name="release">Релиз сайта album-info</param> /// <returns>Музыкальный релиз</returns> private DbMusic MapAlbumInfoReleaseToMusic(AlbumInfoRelease release) { var music = new DbMusic(); var releaseName = PcreRegex.Match(release.Name, Helper.ReleaseNamePattern).Value; var releaseType = PcreRegex.Matches(release.Name, Helper.ReleaseTypePattern) .Select(m => m.Value).LastOrDefault(); var releaseArtist = release.Name.Substring(0, release.Name.IndexOf(" - ", StringComparison.Ordinal)); var releaseGenres = PcreRegex.Matches(release.Genre, Helper.ReleaseGenrePattern).Select(m => m.Value); var dateFormat = release.Date.Length > 4 ? Helper.LongDateFormat : Helper.ShortDateFormat; var provider = CultureInfo.CreateSpecificCulture(Const.CultureInfoText); var releaseDate = DateTime.ParseExact(release.Date, dateFormat, provider); SaveMusician(music, releaseArtist); SaveGenre(music, releaseGenres); music.Title = string.IsNullOrEmpty(releaseName) ? Helper.UnknownName : releaseName; music.ReleaseDate = releaseDate; music.Type = releaseType; music.Artist = string.IsNullOrEmpty(releaseArtist) ? Helper.UnknownArtist : releaseArtist; music.PosterImagePath = release.CoverPath; music.PosterImageUrl = release.ImageFullUrl; return(music); }
/// <summary> /// Парсинг страницы релиза /// </summary> /// <param name="document">HTML-страница релиза</param> /// <returns>Модель релиза на сайте album-info.ru</returns> private AlbumInfoRelease ParseRelease(IHtmlDocument document) { var release = new AlbumInfoRelease { Name = document.QuerySelector(Resources.AlbumInfoReleaseNameSelector).TextContent, Date = document.QuerySelector(Resources.AlbumInfoReleaseDateSelector).TextContent, ImageUrl = document.QuerySelector(Resources.AlbumInfoReleaseImageUrlSelector) .GetAttribute(Const.HrefAttribute), Genre = document.QuerySelector(Resources.AlbumInfoReleaseGenreSelector).TextContent, TrackList = document.QuerySelector(Resources.AlbumInfoReleaseTrackListSelector).TextContent }; return(release); }
/// <summary> /// Загружает и сохраняет в файловую систему обложку релиза /// </summary> /// <param name="release">Релиз</param> /// <param name="resourceLink">Адрес сайта</param> /// <param name="resourceId">ID ресурса</param> /// <returns>Task</returns> private async Task LoadAndSaveReleaseCover(AlbumInfoRelease release, string resourceLink, int resourceId) { var url = resourceLink + release.ImageUrl; var folderPath = $"{Helper.CoversPath}{resourceId}{@"\"}{DateTime.Now:yyyy_MM}{@"\"}"; var fileName = $"{release.ResourceInternalId}{Path.GetExtension(release.ImageUrl)}"; var fillPath = folderPath + fileName; var exists = Directory.Exists(folderPath); if (!exists) { Directory.CreateDirectory(folderPath); } if (File.Exists(fillPath)) { File.Delete(fillPath); } await _fileLoader.DownloadFile(url, fillPath).ConfigureAwait(false); release.CoverPath = fillPath; release.ImageFullUrl = url; }