Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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;
        }