Example #1
0
        public async Task <int> PlaySequenceNumber(string deviceKey, PlaylistPosition position)
        {
            var dr = GetDeviceRuntime(deviceKey);

            if (dr != null)
            {
                //var pli = GetPlaylistItemAtSequence(dr, sequenceNumber);
                var pli = GetPlaylistItemAtSequence(dr, position);
                if (pli != null)
                {
                    var pc = new PlayerCommand
                    {
                        Command   = PlayerCommands.Play, //.ClearThenPlay,
                        Volume    = dr.Status.Volume < 0.05f ? 0.3f : dr.Status.Volume,
                        DeviceKey = deviceKey,
                        StreamUrl = $"player/stream/{pli.MusicFileId}"
                    };
                    //dr.CurrentPlaylistSequenceNumber = pli.Sequence;
                    dr.CurrentPosition.Set(position);
                    return(await ExecuteCommand(dr, pc));
                }
                else
                {
                    log.Warning($"Device {dr.DisplayName} no playlist item at sequence {position}");
                    dr.CommandSequenceNumber = (dr.CommandSequenceNumber + 1) % 1024;
                }
            }
            return(dr.CommandSequenceNumber);// 0;
        }
Example #2
0
        private PlaylistItemRuntime GetPlaylistItemAtSequence(DeviceRuntime dr, PlaylistPosition position)
        {
            //var pli = dr.Playlist.Items.SingleOrDefault(x => x.Sequence == index);
            var pli = dr.Playlist.Items.SingleOrDefault(x => x.Sequence == position.Major);

            if (pli != null && pli.Type == PlaylistRuntimeItemType.MultipleItems)
            {
                if (position.Minor == 0)
                {
                    log.Error($"Cannot request a position with Minor == 0 when the playlist item is of type PlaylistRuntimeItemType.MultipleItems");
                    return(null);
                }
                else
                {
                    pli = pli.SubItems.SingleOrDefault(x => x.Sequence == position.Minor);
                }
            }
            return(pli);
        }
Example #3
0
 public DeviceRuntime()
 {
     CurrentPosition = new PlaylistPosition();
 }
Example #4
0
 public void Set(PlaylistPosition position)
 {
     this.Major = position.Major;
     this.Minor = position.Minor;
 }