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; }
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); }
public DeviceRuntime() { CurrentPosition = new PlaylistPosition(); }
public void Set(PlaylistPosition position) { this.Major = position.Major; this.Minor = position.Minor; }