コード例 #1
0
        private InspectedAlbum Inspect(ISession session, MikuDbAlbum imported, ImportedAlbumOptions options)
        {
            Album albumMatch;
            var   foundAlbums = FindAlbums(session, imported);

            switch (options.MergedAlbumId)
            {
            case null:
                albumMatch = foundAlbums.FirstOrDefault();
                break;

            case 0:
                albumMatch = null;
                break;

            default:
                albumMatch = session.Load <Album>(options.MergedAlbumId);
                if (!foundAlbums.Contains(albumMatch))
                {
                    foundAlbums.Add(albumMatch);
                }
                break;
            }

            var importedContract = new MikuDbAlbumContract(imported);
            var data             = importedContract.Data;

            var artists = data.ArtistNames.Concat(data.VocalistNames).Concat(!string.IsNullOrEmpty(data.CircleName) ? new[] { data.CircleName } : new string[] {})
                          .Select(a => InspectArtist(session, a))
                          .ToArray();

            var matchedArtists = artists.Where(a => a.ExistingArtist != null).Select(a => a.ExistingArtist).ToArray();

            var tracks = data.Tracks.Select(t => InspectTrack(session, t, matchedArtists, albumMatch)).ToArray();

            var result = new InspectedAlbum(importedContract);

            result.MergeTracks = options.MergeTracks ?? true;

            if (albumMatch != null)
            {
                result.MergedAlbum   = new AlbumContract(albumMatch, PermissionContext.LanguagePreference);
                result.MergedAlbumId = albumMatch.Id;
            }

            result.ExistingAlbums = foundAlbums.Select(a => new AlbumContract(a, PermissionContext.LanguagePreference))
                                    .Concat(new[] { new AlbumContract {
                                                        Name = "Nothing"
                                                    } }).ToArray();

            result.Artists = artists.Select(a => a.InspectedArtist).ToArray();
            result.Tracks  = tracks;

            return(result);
        }
コード例 #2
0
        public MikuDbAlbum(MikuDbAlbumContract contract)
            : this()
        {
            ParamIs.NotNull(() => contract);

            CoverPicture = (contract.CoverPicture != null ? new PictureData(contract.CoverPicture) : null);
            Data         = XmlHelper.SerializeToXml(contract.Data);
            SourceUrl    = contract.SourceUrl;
            Status       = contract.Status;
            Title        = contract.Title;
        }