コード例 #1
0
ファイル: HubblPlayer.cs プロジェクト: mesenev/hubbl
 private static int comparePlaylistEntries(PlaylistEntry e1, PlaylistEntry e2)
 {
     return Math.Abs(e1.Priority - e2.Priority) < 0.001
         ? e2.Id - e1.Id
         : e2.Priority < e1.Priority ? -1 : 1;
 }
コード例 #2
0
ファイル: HubblPlayer.cs プロジェクト: mesenev/hubbl
        public PlaylistEntry QueueTrack(HubblUser 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;
        }