public async Task <LiveTvServiceStatusInfo> GetStatusInfoAsync(CancellationToken cancellationToken) { EnsureSetup(); bool upgradeAvailable = false; string serverVersion = string.Empty; var conInfoTask = _httpClient.Get(GetOptions(cancellationToken, "/Myth/GetConnectionInfo")).ConfigureAwait(false); var tunersTask = _httpClient.Get(GetOptions(cancellationToken, "/Dvr/GetEncoderList")).ConfigureAwait(false); var encodersTask = _httpClient.Get(GetOptions(cancellationToken, "/Capture/GetCaptureCardList")).ConfigureAwait(false); EncoderList tuners = null; CaptureCardList encoders = null; using (var stream = await tunersTask) { tuners = DvrResponse.ParseEncoderList(stream, _jsonSerializer, _logger); } using (var stream = await encodersTask) { encoders = CaptureResponse.ParseCaptureCardList(stream, _jsonSerializer, _logger); } using (var stream = await conInfoTask) { var conInfo = UtilityResponse.GetConnectionInfo(stream, _jsonSerializer, _logger); serverVersion = conInfo.Version.Ver; } //Tuner information List <LiveTvTunerInfo> tvTunerInfos = new List <LiveTvTunerInfo>(); foreach (var tuner in tuners.Encoders) { LiveTvTunerInfo info = new LiveTvTunerInfo() { Id = tuner.Id.ToString(), Status = (LiveTvTunerStatus)tuner.State }; switch (tuner.State) { case 0: info.Status = LiveTvTunerStatus.Available; break; case 7: info.Status = LiveTvTunerStatus.RecordingTv; break; } if (!string.IsNullOrWhiteSpace(tuner.Recording.Title)) { info.RecordingId = tuner.Recording.ProgramId; info.ProgramName = string.Format("{0} : {1}", tuner.Recording.Title, tuner.Recording.SubTitle); } foreach (var enc in encoders.CaptureCards) { if (enc.CardId == tuner.Id) { info.Name = string.Format("{0} {1}", enc.CardType, enc.VideoDevice); info.SourceType = enc.CardType; break; } } tvTunerInfos.Add(info); } return(new LiveTvServiceStatusInfo { HasUpdateAvailable = upgradeAvailable, Version = serverVersion, Tuners = tvTunerInfos }); }