Пример #1
0
        private void ReplaceField(
            string tokenName, string tokenStr, StringBuilder sb, SongInAlbum track, ContentLanguagePreference languagePreference)
        {
            var val = GetField(GetFieldValue(tokenName, track, languagePreference));

            sb.Replace(tokenStr, val);
        }
Пример #2
0
        public void SetUp()
        {
            _album = new Album(new LocalizedString("Synthesis", ContentLanguageSelection.English));

            _producer = new Artist(TranslatedString.Create("Tripshots"))
            {
                Id = 1, ArtistType = ArtistType.Producer
            };
            _vocalist = new Artist(TranslatedString.Create("Hatsune Miku"))
            {
                Id = 39, ArtistType = ArtistType.Vocaloid
            };
            _producerContract = new ArtistContract(_producer, ContentLanguagePreference.Default);
            _vocalistContract = new ArtistContract(_vocalist, ContentLanguagePreference.Default);

            _song1 = new Song(new LocalizedString("Nebula", ContentLanguageSelection.English))
            {
                Id = 2
            };
            _song1.AddArtist(_producer);

            _album.AddArtist(_producer);
            _album.AddArtist(_vocalist);

            var songInAlbum = new SongInAlbum(_song1, _album, 1, 1);

            _songInAlbumContract         = new SongInAlbumEditContract(songInAlbum, ContentLanguagePreference.Default);
            _songInAlbumContract.Artists = new[] { _producerContract };
        }
Пример #3
0
        public SongInAlbumEditContract(SongInAlbum songInAlbum, ContentLanguagePreference languagePreference)
        {
            ParamIs.NotNull(() => songInAlbum);

            DiscNumber    = songInAlbum.DiscNumber;
            SongInAlbumId = songInAlbum.Id;
            TrackNumber   = songInAlbum.TrackNumber;

            ArtistString        = string.Empty;
            SongAdditionalNames = string.Empty;
            SongId = 0;

            var song = songInAlbum.Song;

            if (song != null)
            {
                Artists             = song.ArtistList.Select(a => new ArtistContract(a, languagePreference)).ToArray();
                ArtistString        = song.ArtistString[languagePreference];
                SongName            = song.TranslatedName[languagePreference];
                SongAdditionalNames = string.Join(", ", song.AllNames.Where(n => n != SongName));
                SongId = song.Id;
            }
            else
            {
                Artists  = new ArtistContract[0];
                SongName = songInAlbum.Name;
            }

            IsCustomTrack = song == null;
        }
Пример #4
0
        private string GetProducerStr(SongInAlbum track, ContentLanguagePreference languagePreference)
        {
            if (track.Song == null)
            {
                return(string.Empty);
            }

            return(string.Join(", ", ArtistHelper.GetProducerNames(track.Song.Artists, SongHelper.IsAnimation(track.Song.SongType), languagePreference)));
        }
Пример #5
0
        private string GetVocalistStr(SongInAlbum track, ContentLanguagePreference languagePreference)
        {
            if (track.Song == null)
            {
                return(string.Empty);
            }

            return(string.Join(", ", ArtistHelper.GetVocalistNames(track.Song.Artists, languagePreference)));
        }
Пример #6
0
        public SongInAlbumContract(SongInAlbum songInAlbum, ContentLanguagePreference languagePreference)
        {
            ParamIs.NotNull(() => songInAlbum);

            DiscNumber  = songInAlbum.DiscNumber;
            Id          = songInAlbum.Id;
            Song        = new SongWithAdditionalNamesContract(songInAlbum.Song, languagePreference);
            TrackNumber = songInAlbum.TrackNumber;
        }
        public AlbumForSongRefContract(SongInAlbum songInAlbum)
        {
            DiscNumber  = songInAlbum.DiscNumber;
            TrackNumber = songInAlbum.TrackNumber;

            var album = songInAlbum.Album;

            Id       = album.Id;
            NameHint = album.DefaultName;
        }
Пример #8
0
        public virtual SongInAlbum AddSong(string songName, int trackNum, int discNum)
        {
            ParamIs.NotNullOrEmpty(() => songName);

            var track = new SongInAlbum(songName, this, trackNum, discNum);

            AllSongs.Add(track);

            return(track);
        }
Пример #9
0
        private string ApplyFormat(SongInAlbum track, string format, ContentLanguagePreference languagePreference, MatchCollection fieldMatches)
        {
            var sb = new StringBuilder(format);

            foreach (Match match in fieldMatches)
            {
                ReplaceField(match.Groups[1].Value, match.Value, sb, track, languagePreference);
            }

            return(sb.ToString());
        }
Пример #10
0
        public virtual SongInAlbum AddSong(Song song, int trackNum, int discNum)
        {
            ParamIs.NotNull(() => song);

            var track = new SongInAlbum(song, this, trackNum, discNum);

            AllSongs.Add(track);
            song.AllAlbums.Add(track);

            return(track);
        }
Пример #11
0
        public SongInAlbumEditContract(SongInAlbum songInAlbum, ContentLanguagePreference languagePreference)
        {
            ParamIs.NotNull(() => songInAlbum);

            ArtistString        = songInAlbum.Song.ArtistString[languagePreference];
            DiscNumber          = songInAlbum.DiscNumber;
            SongName            = songInAlbum.Song.TranslatedName[languagePreference];
            SongAdditionalNames = string.Join(", ", songInAlbum.Song.AllNames.Where(n => n != SongName));
            SongId        = songInAlbum.Song.Id;
            SongInAlbumId = songInAlbum.Id;
            TrackNumber   = songInAlbum.TrackNumber;
        }
Пример #12
0
        public SongInAlbumForApiContract(SongInAlbum songInAlbum, ContentLanguagePreference languagePreference, SongOptionalFields fields)
        {
            ParamIs.NotNull(() => songInAlbum);

            DiscNumber  = songInAlbum.DiscNumber;
            Id          = songInAlbum.Id;
            TrackNumber = songInAlbum.TrackNumber;

            var song = songInAlbum.Song;

            Song = song != null ? new SongForApiContract(song, null, languagePreference, fields) : null;
            Name = Song != null ? Song.Name : songInAlbum.Name;
        }
Пример #13
0
        public SongInAlbumContract(SongInAlbum songInAlbum, ContentLanguagePreference languagePreference, bool getThumbUrl = true)
        {
            ParamIs.NotNull(() => songInAlbum);

            DiscNumber  = songInAlbum.DiscNumber;
            Id          = songInAlbum.Id;
            TrackNumber = songInAlbum.TrackNumber;

            var song = songInAlbum.Song;

            Song = song != null ? new SongContract(song, languagePreference, getThumbUrl) : null;
            Name = Song != null ? Song.Name : songInAlbum.Name;
        }
Пример #14
0
        private string ApplyFormat(SongInAlbum track, string format, ContentLanguagePreference languagePreference)
        {
            var album = track.Album;
            var sb    = new StringBuilder(format);

            sb.Replace("%album%", GetField(album.Names.SortNames[languagePreference]));
            sb.Replace("%artists%", GetField(track.Song.ArtistString[languagePreference]));
            sb.Replace("%discnumber%", track.DiscNumber.ToString());
            sb.Replace("%producers%", GetField(string.Join(", ", ArtistHelper.GetProducerNames(track.Song.Artists, SongHelper.IsAnimation(track.Song.SongType), languagePreference))));
            sb.Replace("%title%", GetField(track.Song.Names.SortNames[languagePreference]));
            sb.Replace("%track%", track.TrackNumber.ToString());
            sb.Replace("%vocalists%", GetField(string.Join(", ", ArtistHelper.GetVocalistNames(track.Song.Artists, languagePreference))));

            return(sb.ToString());
        }
Пример #15
0
        public virtual void OnSongDeleting(SongInAlbum songInAlbum)
        {
            ParamIs.NotNull(() => songInAlbum);

            if (!songInAlbum.Album.Equals(this))
            {
                throw new ArgumentException("Song is not in album");
            }

            foreach (var song in Songs.Where(song => song.TrackNumber > songInAlbum.TrackNumber))
            {
                song.TrackNumber--;
            }

            AllSongs.Remove(songInAlbum);
        }
Пример #16
0
        public SongInAlbumRefContract(SongInAlbum songInAlbum)
        {
            DiscNumber  = songInAlbum.DiscNumber;
            TrackNumber = songInAlbum.TrackNumber;

            var song = songInAlbum.Song;

            if (song != null)
            {
                Id       = song.Id;
                NameHint = song.DefaultName;
            }
            else
            {
                NameHint = songInAlbum.Name;
            }
        }
Пример #17
0
        public static Tag[] GetGenreTags(SongInAlbum songInAlbum)
        {
            Tag[] genres;

            if (songInAlbum.Song != null)
            {
                genres = songInAlbum.Song.Tags.TagsByVotes.Where(t => t.CategoryName == TagCommonCategoryNames.Genres).ToArray();

                if (genres.Any())
                {
                    return(genres.ToArray());
                }
            }

            genres = songInAlbum.Album.Tags.TagsByVotes.Where(t => t.CategoryName == TagCommonCategoryNames.Genres).ToArray();
            return(genres.ToArray());
        }
Пример #18
0
 public SongInAlbumRefContract(SongInAlbum songInAlbum)
     : base(songInAlbum.Song)
 {
     DiscNumber  = songInAlbum.DiscNumber;
     TrackNumber = songInAlbum.TrackNumber;
 }
Пример #19
0
 public static bool TrackPropertiesEqual(SongInAlbum first, SongInAlbumEditContract second)
 {
     return(first.DiscNumber == second.DiscNumber && first.TrackNumber == second.TrackNumber);
 }
Пример #20
0
        private string GetFieldValue(string fieldName, SongInAlbum track, ContentLanguagePreference languagePreference)
        {
            var album = track.Album;

            switch (fieldName.ToLowerInvariant())
            {
            // Album title
            case "album":
                return(album.Names.SortNames[languagePreference]);

            // Artists for album
            case "albumartist":
                return(album.ArtistString[languagePreference]);

            case "album artist":                     // foobar style
                return(album.ArtistString[languagePreference]);

            case "albummaincircle":
                var circle = ArtistHelper.GetMainCircle(album.Artists.ToArray(), AlbumHelper.IsAnimation(album.DiscType));
                return(circle != null ? circle.TranslatedName[languagePreference] : GetAlbumMainProducersStr(album, languagePreference));

            // Artists for song, both producers and vocalists
            case "artist":
                return(track.Song != null ? track.Song.ArtistString[languagePreference] : string.Empty);

            case "track artist":                     // foobar style
                return(track.Song != null ? track.Song.ArtistString[languagePreference] : string.Empty);

            case "catalognum":
                return(album.OriginalRelease != null ? album.OriginalRelease.CatNum : string.Empty);

            case "disccount":
                return((album.Songs.Any() ? album.Songs.Max(s => s.DiscNumber) : 0).ToString());

            // Disc number
            case "discnumber":
                return(track.DiscNumber.ToString());

            // List of vocalists, separated by comma, with "feat." in the beginning if there are any vocalists, otherwise empty.
            case "featvocalists":
                var vocalistStr = GetVocalistStr(track, languagePreference);
                return(vocalistStr.Any() ? " feat. " + vocalistStr : string.Empty);

            case "genres":
                return(string.Join(", ", SongHelper.GetGenreTags(track).Select(t => t.NameWithSpaces)));

            // List of producers
            case "producers":
                return(GetProducerStr(track, languagePreference));

            // Album release date
            case "releasedate":
                return(track.Album.OriginalReleaseDate.ToString());

            case "releaseyear":
                return(track.Album.OriginalReleaseDate.Year.ToString());

            case "releaseevent":
                return(album.OriginalReleaseEventName);

            // Song title
            case "title":
                return(track.Song != null ? track.Song.Names.SortNames[languagePreference] : track.Name);

            case "totaltrackcount":
                return(album.Songs.Count().ToString());

            // Track number
            case "track":
                return(track.TrackNumber.ToString());

            case "tracknumber":                     // foobar style
                return(track.TrackNumber.ToString());

            // List of vocalists, separated by comma.
            case "vocalists":
                return(GetVocalistStr(track, languagePreference));

            default:
                return(string.Empty);
            }
        }
Пример #21
0
 private void AssertEquals(SongInAlbum first, SongInAlbumEditContract second, string message)
 {
     Assert.IsTrue(Album.TrackPropertiesEqual(first, second), message);
     Assert.IsTrue(Album.TrackArtistsEqual(first.Song, second), message);
 }
Пример #22
0
 private void AssertEquals(SongInAlbum first, SongInAlbumEditContract second, string message)
 {
     Album.TrackPropertiesEqual(first, second).Should().BeTrue(message);
     Album.TrackArtistsEqual(first.Song, second).Should().BeTrue(message);
 }