public void DislikeTrack(User user, int entryId) { foreach (var userMarkedId in _usersMarkedByEntryId [entryId]) if (userMarkedId == user.Id) return; _usersMarkedByEntryId [entryId].Add (user.Id); UpdateUserPriorities (); if (!_usersActivities.ContainsKey (user.Id)) { var newActivity = new UserActivitiesRecord () { basePriority = 1.0, activitiesCount = 0, lastActivityTime = DateTime.Now }; _usersActivities.Add (user.Id, newActivity); } var activitiesRecord = _usersActivities [user.Id]; if (activitiesRecord.activitiesCount++ == 0) ++_activeUsersCount; var entry = _playlistEntries [entryId]; ++entry.DislikesNum; entry.Priority *= (double)(_activeUsersCount - 1.0) / _activeUsersCount; Playlist.Sort (comparePlaylistEntries); }
public PlaylistEntry QueueTrack(User user, Track track) { UpdateUserPriorities (); if (!_usersActivities.ContainsKey (user.Id)) { var newActivity = new UserActivitiesRecord () { basePriority = 1.0, activitiesCount = 0, lastActivityTime = DateTime.Now }; _usersActivities.Add (user.Id, newActivity); } var activitiesRecord = _usersActivities [user.Id]; if (activitiesRecord.activitiesCount++ == 0) ++_activeUsersCount; var entry = new PlaylistEntry () { User = user, Track = track, Id = _freeEntryId++, LikesNum = 0, DislikesNum = 0, Priority = activitiesRecord.basePriority }; activitiesRecord.basePriority *= Math.Pow (0.5, track.Duration.TotalMilliseconds / AVG_TRACK_LENGTH_MS); _usersMarkedByEntryId.Add (entry.Id, new List<string> ()); _usersMarkedByEntryId [entry.Id].Add (user.Id); Playlist.Add (entry); Playlist.Sort (comparePlaylistEntries); _playlistEntries.Add (entry); if (!_playing) Play (); return entry; }