public async Task <string> Load([NotNull] JObject obj) { var k = (PlayCommandHelper.GetPlayOrigin(obj) as JObject); ConnectState.PlayOrigin = ProtoUtils.JsonToPlayOrigin(k !); ConnectState.Options = ProtoUtils.JsonToPlayerOptions((JObject)PlayCommandHelper.GetPlayerOptionsOverride(obj), ConnectState.Options); var sessionId = SetContext(ProtoUtils.JsonToContext((JObject)PlayCommandHelper.GetContext(obj))); var trackUid = PlayCommandHelper.GetSkipToUid(obj); var trackUri = PlayCommandHelper.GetSkipToUri(obj); var trackIndex = PlayCommandHelper.GetSkipToIndex(obj); if (trackUri != null) { TracksKeeper.InitializeFrom(list => list.FindIndex(z => z.Uri == trackUri), null, null); } else if (trackUid != null) { TracksKeeper.InitializeFrom(list => list.FindIndex(z => z.Uid == trackUid), null, null); } else if (trackIndex != null) { TracksKeeper.InitializeFrom(list => { if (trackIndex < list.Count) { return((int)trackIndex); } return(-1); }, null, null); } else { TracksKeeper.InitializeStart(); } var seekTo = PlayCommandHelper.GetSeekTo(obj); if (seekTo != null) { SetPosition((long)seekTo); } else { SetPosition(0); } await LoadTransforming(); return(sessionId); }