Beispiel #1
0
        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
            });
        }