Пример #1
0
        public void UpdateSongRating(int userId, int songId, SongVoteRating rating)
        {
            PermissionContext.VerifyPermission(PermissionToken.EditProfile);

            HandleTransaction(session => {
                var existing = session.Query <FavoriteSongForUser>().FirstOrDefault(f => f.User.Id == userId && f.Song.Id == songId);
                var user     = session.Load <User>(userId);
                var song     = session.Load <Song>(songId);
                var agent    = new AgentLoginData(user);

                if (existing != null)
                {
                    if (rating != SongVoteRating.Nothing)
                    {
                        existing.SetRating(rating);
                        session.Update(existing);
                    }
                    else
                    {
                        existing.Delete();
                        session.Delete(existing);
                    }
                }
                else if (rating != SongVoteRating.Nothing)
                {
                    var link = user.AddSongToFavorites(song, rating);
                    session.Save(link);
                }

                session.Update(song);

                AuditLog(string.Format("rating {0} as '{1}'.", EntryLinkFactory.CreateEntryLink(song), rating),
                         session, agent);
            }, string.Format("Unable to rate song with ID '{0}'.", songId));
        }
Пример #2
0
 public FavoriteSongForUser(User user, Song song, SongVoteRating rating)
     : this()
 {
     User   = user;
     Song   = song;
     Rating = rating;
 }
Пример #3
0
		public FavoriteSongForUser(User user, Song song, SongVoteRating rating) {

			User = user;
			Song = song;
			Rating = rating;

		}
		public SongWithPVAndVoteContract(Song song, SongVoteRating vote, ContentLanguagePreference languagePreference)
			: base(song, languagePreference) {

			PVs = song.PVs.Select(p => new PVContract(p)).ToArray();
			Vote = vote;

		}
Пример #5
0
 public FavoriteSongs(UserContract user, SongVoteRating rating, SongSortRule sort, bool groupByRating)
     : this()
 {
     GroupByRating = groupByRating;
     Rating        = rating;
     Sort          = sort;
     User          = user;
 }
Пример #6
0
 public FavoriteSongs(UserContract user, SongVoteRating rating, RatedSongForUserSortRule?sort, bool?groupByRating)
     : this()
 {
     GroupByRating = groupByRating;
     Rating        = rating;
     Sort          = sort;
     User          = user;
 }
		public static IQueryable<FavoriteSongForUser> WhereHasRating(this IQueryable<FavoriteSongForUser> query, SongVoteRating rating) {

			if (rating == SongVoteRating.Nothing)
				return query;

			return query.Where(q => q.Rating == rating);

		}
Пример #8
0
 public FavoriteSongs(UserContract user, SongVoteRating rating, SongSortRule? sort, bool? groupByRating)
     : this()
 {
     GroupByRating = groupByRating;
     Rating = rating;
     Sort = sort;
     User = user;
 }
Пример #9
0
        public ActionResult PostRating(int songId, SongVoteRating rating, string callback)
        {
            if (!LoginManager.IsLoggedIn) {
                return HttpStatusCodeResult(HttpStatusCode.Forbidden, "Error: Must be logged in.");
            }

            Service.UpdateSongRating(LoginManager.LoggedUserId, songId, rating);
            return Object("OK", DataFormat.Auto, callback);
        }
 public SongWithPVAndVoteContract(Song song, SongVoteRating vote, ContentLanguagePreference languagePreference, bool includePVs = true)
     : base(song, languagePreference)
 {
     if (includePVs)
     {
         PVs = song.PVs.Select(p => new PVContract(p)).ToArray();
     }
     Vote = vote;
 }
Пример #11
0
        public ActionResult PostRating(int songId, SongVoteRating rating, string callback)
        {
            if (!LoginManager.IsLoggedIn)
            {
                return(HttpStatusCodeResult(HttpStatusCode.Forbidden, "Error: Must be logged in."));
            }

            Service.UpdateSongRating(LoginManager.LoggedUserId, songId, rating);
            return(Object("OK", DataFormat.Auto, callback));
        }
Пример #12
0
        public FrontPageContract(IEnumerable <ActivityEntry> activityEntries,
                                 AlbumContract[] newAlbums, IEnumerable <EntryWithCommentsContract> recentComments, AlbumContract[] topAlbums, Song[] newSongs,
                                 SongVoteRating firstSongRating,
                                 ContentLanguagePreference languagePreference)
        {
            ActivityEntries = activityEntries.Select(e => new ActivityEntryContract(e, languagePreference)).ToArray();
            NewAlbums       = newAlbums;
            NewSongs        = newSongs.Select(s => new SongWithPVAndVoteContract(s, SongVoteRating.Nothing, languagePreference)).ToArray();
            RecentComments  = recentComments.ToArray();
            TopAlbums       = topAlbums;

            FirstSong = (newSongs.Any() ? new SongWithPVAndVoteContract(newSongs.First(), firstSongRating, languagePreference) : null);
        }
Пример #13
0
 public static int GetRatingScore(SongVoteRating rating)
 {
     switch (rating) {
         case SongVoteRating.Favorite:
             return 3;
         case SongVoteRating.Like:
             return 2;
         case SongVoteRating.Dislike:
             return -1;
         default:
             return 0;
     }
 }
Пример #14
0
        public FrontPageContract(IEnumerable<ActivityEntry> activityEntries, IEnumerable<NewsEntry> newsEntries,
            AlbumContract[] newAlbums, IEnumerable<UnifiedCommentContract> recentComments, IEnumerable<Album> topAlbums, Song[] newSongs,
            SongVoteRating firstSongRating,
            ContentLanguagePreference languagePreference)
        {
            ActivityEntries = activityEntries.Select(e => new ActivityEntryContract(e, languagePreference)).ToArray();
            NewAlbums = newAlbums;
            NewSongs = newSongs.Select(s => new SongWithPVAndVoteContract(s, SongVoteRating.Nothing, languagePreference)).ToArray();
            NewsEntries = newsEntries.Select(e => new NewsEntryContract(e)).ToArray();
            RecentComments = recentComments.ToArray();
            TopAlbums = topAlbums.Select(a => new AlbumWithAdditionalNamesContract(a, languagePreference)).ToArray();

            FirstSong = (newSongs.Any() ? new SongWithPVAndVoteContract(newSongs.First(), firstSongRating, languagePreference) : null);
        }
Пример #15
0
        public static int GetRatingScore(SongVoteRating rating)
        {
            switch (rating)
            {
            case SongVoteRating.Favorite:
                return(3);

            case SongVoteRating.Like:
                return(2);

            case SongVoteRating.Dislike:
                return(-1);

            default:
                return(0);
            }
        }
Пример #16
0
        public virtual FavoriteSongForUser AddSongToFavorites(Song song, SongVoteRating rating)
        {
            ParamIs.NotNull(() => song);

            var link = new FavoriteSongForUser(this, song, rating);

            FavoriteSongs.Add(link);
            song.UserFavorites.Add(link);

            if (rating == SongVoteRating.Favorite)
            {
                song.FavoritedTimes++;
            }

            song.RatingScore += FavoriteSongForUser.GetRatingScore(rating);

            return(link);
        }
Пример #17
0
        public FrontPageContract(IEnumerable <ActivityEntry> activityEntries,
                                 AlbumForApiContract[] newAlbums,
                                 ReleaseEventForApiContract[] newEvents,
                                 IEnumerable <EntryWithCommentsContract> recentComments,
                                 AlbumForApiContract[] topAlbums, Song[] newSongs,
                                 SongVoteRating firstSongRating,
                                 ContentLanguagePreference languagePreference, IUserIconFactory userIconFactory, IUserPermissionContext permissionContext,
                                 EntryForApiContractFactory entryForApiContractFactory)
        {
            ActivityEntries = activityEntries.Select(e => new ActivityEntryForApiContract(e,
                                                                                          entryForApiContractFactory.Create(e.EntryBase, EntryOptionalFields.AdditionalNames | EntryOptionalFields.MainPicture, languagePreference),
                                                                                          userIconFactory, permissionContext, ActivityEntryOptionalFields.None)).ToArray();
            NewAlbums      = newAlbums;
            NewSongs       = newSongs.Select(s => new SongWithPVAndVoteContract(s, SongVoteRating.Nothing, languagePreference)).ToArray();
            RecentComments = recentComments.ToArray();
            TopAlbums      = topAlbums;
            NewEvents      = newEvents;

            FirstSong = (newSongs.Any() ? new SongWithPVAndVoteContract(newSongs.First(), firstSongRating, languagePreference) : null);
        }
Пример #18
0
        public virtual void SetRating(SongVoteRating newRating)
        {
            if (Rating == newRating)
            {
                return;
            }

            if (newRating == SongVoteRating.Favorite)
            {
                song.FavoritedTimes++;
            }

            if (Rating == SongVoteRating.Favorite)
            {
                song.FavoritedTimes--;
            }

            song.RatingScore -= GetRatingScore(Rating);
            song.RatingScore += GetRatingScore(newRating);

            Rating = newRating;
        }
Пример #19
0
        public PartialFindResult<RatedSongForUserForApiContract> GetRatedSongs(
            int userId,
            string query = "",
            string tag = null,
            int? artistId = null,
            bool childVoicebanks = false,
            SongVoteRating? rating = null,
            int? songListId = null,
            bool groupByRating = true,
            int start = 0, int maxResults = defaultMax, bool getTotalCount = false,
            SongSortRule? sort = null,
            NameMatchMode nameMatchMode = NameMatchMode.Auto,
            SongOptionalFields fields = SongOptionalFields.None,
            ContentLanguagePreference lang = ContentLanguagePreference.Default)
        {
            maxResults = Math.Min(maxResults, absoluteMax);
            query = FindHelpers.GetMatchModeAndQueryForSearch(query, ref nameMatchMode);

            var queryParams = new RatedSongQueryParams(userId, new PagingProperties(start, maxResults, getTotalCount)) {
                Query = query,
                NameMatchMode = nameMatchMode,
                SortRule = sort ?? SongSortRule.Name,
                ArtistId = artistId ?? 0,
                ChildVoicebanks = childVoicebanks,
                FilterByRating = rating ?? SongVoteRating.Nothing,
                GroupByRating = groupByRating,
                SonglistId = songListId ?? 0,
                Tag = tag
            };

            var songs = queries.GetRatedSongs(queryParams, ratedSong => new RatedSongForUserForApiContract(ratedSong, lang, fields));
            return songs;
        }
Пример #20
0
        public virtual void SetRating(SongVoteRating newRating)
        {
            if (Rating == newRating)
                return;

            if (newRating == SongVoteRating.Favorite)
                song.FavoritedTimes++;

            if (Rating == SongVoteRating.Favorite)
                song.FavoritedTimes--;

            song.RatingScore -= GetRatingScore(Rating);
            song.RatingScore += GetRatingScore(newRating);

            Rating = newRating;
        }
Пример #21
0
 public string PostSongRating(int songId, SongVoteRating rating)
 {
     service.UpdateSongRating(permissionContext.LoggedUserId, songId, rating);
     return("OK");
 }
Пример #22
0
        public ActionResult FavoriteSongs(int id = invalidId, int? page = null, SongVoteRating? rating = null, SongSortRule? sort = null, bool? groupByRating = null)
        {
            if (id == invalidId)
                return NoId();

            return View(new FavoriteSongs(Service.GetUser(id), rating ?? SongVoteRating.Nothing, sort, groupByRating));
        }
Пример #23
0
 public static int GetRatingScore(SongVoteRating rating) => rating switch
 {
Пример #24
0
 public void AddSongToFavorites(int songId, SongVoteRating rating = SongVoteRating.Favorite)
 {
     Service.UpdateSongRating(LoggedUserId, songId, rating);
 }
Пример #25
0
 public void Value(int expected, SongVoteRating actual)
 {
     ((int)actual).Should().Be(expected);
 }
Пример #26
0
 public string PostSongRating(int songId, SongVoteRating rating)
 {
     service.UpdateSongRating(permissionContext.LoggedUserId, songId, rating);
     return "OK";
 }
Пример #27
0
        public ActionResult FavoriteSongsPaged(int id, int? page, SongVoteRating? rating = null, SongSortRule sort = SongSortRule.Name, bool groupByRating = true)
        {
            const int songsPerPage = 50;

            var pageIndex = (page - 1) ?? 0;
            var r = rating ?? SongVoteRating.Nothing;
            var queryParams = new RatedSongQueryParams(id, PagingProperties.CreateFromPage(pageIndex, songsPerPage, true)) { FilterByRating = r, SortRule = sort, GroupByRating = groupByRating };
            var result = Service.GetFavoriteSongs(queryParams);
            var data = new PagingData<FavoriteSongForUserContract>(result.Items.ToPagedList(pageIndex, songsPerPage, result.TotalCount), id, "FavoriteSongs", "ui-tabs-3");
            data.RouteValues = new RouteValueDictionary(new { action = "FavoriteSongs", id, rating, sort, groupByRating });

            return PartialView("FavoriteSongsPaged", data);
        }
Пример #28
0
 public ActionResult FavoriteSongs(int id, int? page, SongVoteRating? rating = null, SongSortRule sort = SongSortRule.Name, bool groupByRating = true)
 {
     if (Request.IsAjaxRequest()) {
         return FavoriteSongsPaged(id, page, rating, sort);
     } else {
         return View(new FavoriteSongs(Service.GetUser(id), rating ?? SongVoteRating.Nothing, sort, groupByRating));
     }
 }
Пример #29
0
 public RatingIconViewModel(SongVoteRating rating)
 {
     Rating = rating;
 }
Пример #30
0
 public void AddSongToFavorites(int songId, SongVoteRating rating = SongVoteRating.Favorite)
 {
     Service.UpdateSongRating(LoggedUserId, songId, rating);
 }
        public static IQueryable <FavoriteSongForUser> WhereHasRating(this IQueryable <FavoriteSongForUser> query, SongVoteRating rating)
        {
            if (rating == SongVoteRating.Nothing)
            {
                return(query);
            }

            return(query.Where(q => q.Rating == rating));
        }