예제 #1
0
        public void GetDefaultLyrics_UserLanguage()
        {
            var result = LyricsHelper.GetDefaultLyrics(lyrics, new OptionalCultureCode("es"),
                                                       new[] { new OptionalCultureCode("mi-ku"), new OptionalCultureCode(OptionalCultureCode.LanguageCode_English) }, null);

            result?.CultureCode.Should().Be(OptionalCultureCode.LanguageCode_English, "CultureCode");
        }
예제 #2
0
        public void GetDefaultLyrics_Original()
        {
            var result = LyricsHelper.GetDefaultLyrics(lyrics, new OptionalCultureCode("es"),
                                                       new[] { new OptionalCultureCode("mi-ku") }, new Lazy <IEnumerable <UserKnownLanguage> >(() => null));

            result?.CultureCode.Should().Be(OptionalCultureCode.LanguageCode_Japanese, "CultureCode");
        }
예제 #3
0
        public SongDetailsContract GetSongDetails(int songId, int albumId, string hostname, ContentLanguagePreference?languagePreference,
                                                  IEnumerable <OptionalCultureCode> userLanguages)
        {
            return(HandleQuery(session => {
                var lang = languagePreference ?? PermissionContext.LanguagePreference;
                var song = session.Load <Song>(songId);
                var contract = new SongDetailsContract(song, lang, GetSongPools(session, songId),
                                                       config.SpecialTags);
                var user = PermissionContext.LoggedUser;

                if (user != null)
                {
                    var rating = session.Query <FavoriteSongForUser>()
                                 .FirstOrDefault(s => s.Song.Id == songId && s.User.Id == user.Id);

                    contract.UserRating = (rating != null ? rating.Rating : SongVoteRating.Nothing);
                }

                contract.CommentCount = Comments(session).GetCount(songId);
                contract.LatestComments = session.Query <SongComment>()
                                          .Where(c => c.EntryForComment.Id == songId)
                                          .OrderByDescending(c => c.Created).Take(3).ToArray()
                                          .Select(c => new CommentForApiContract(c, userIconFactory)).ToArray();
                contract.Hits = session.Query <SongHit>().Count(h => h.Song.Id == songId);
                contract.ListCount = session.Query <SongInList>().Count(l => l.Song.Id == songId);
                contract.Suggestions = GetSongSuggestions(session, song).Select(s => new SongForApiContract(s, lang, SongOptionalFields.AdditionalNames | SongOptionalFields.ThumbUrl)).ToArray();

                contract.PreferredLyrics = LyricsHelper.GetDefaultLyrics(contract.LyricsFromParents, new OptionalCultureCode(CultureInfo.CurrentUICulture, true), userLanguages,
                                                                         new Lazy <IEnumerable <UserKnownLanguage> >(() => session.OfType <User>().GetLoggedUserOrNull(permissionContext)?.KnownLanguages, false));

                if (albumId != 0)
                {
                    var album = session.Load <Album>(albumId);

                    var track = album.Songs.FirstOrDefault(s => song.Equals(s.Song));

                    if (track != null)
                    {
                        contract.Album = new DataContracts.Albums.AlbumContract(album, lang);

                        contract.AlbumSong = new SongInAlbumContract(track, lang, false);

                        var previousIndex = album.PreviousTrackIndex(track.Index);
                        var previous = album.Songs.FirstOrDefault(s => s.Index == previousIndex);
                        contract.PreviousSong = previous != null && previous.Song != null ? new SongInAlbumContract(previous, lang, false) : null;

                        var nextIndex = album.NextTrackIndex(track.Index);
                        var next = album.Songs.FirstOrDefault(s => s.Index == nextIndex);
                        contract.NextSong = next != null && next.Song != null ? new SongInAlbumContract(next, lang, false) : null;
                    }
                }

                if (song.Deleted)
                {
                    var mergeEntry = GetMergeRecord(session, songId);
                    contract.MergedTo = (mergeEntry != null ? new SongContract(mergeEntry.Target, lang) : null);
                }

                AddSongHit(session, song, hostname);

                return contract;
            }));
        }
예제 #4
0
        public void GetDefaultLyrics_UiLanguage()
        {
            var result = LyricsHelper.GetDefaultLyrics(lyrics, new OptionalCultureCode(OptionalCultureCode.LanguageCode_English), null, null);

            Assert.AreEqual(OptionalCultureCode.LanguageCode_English, result?.CultureCode, "CultureCode");
        }