private void RefreshChannelState(IChannel s)
        {
            var model = CoreData.GetLocal <ChannelModel>(s);

            if (model == null)
            {
                return;
            }

            if (s.IsOn && !CoreData.Settings.StreamingToCloudStarted)
            {
                model.State.Value     = ChannelModelState.WaitingForStreamToCloud;
                model.Bitrate.Value   = "";
                model.TextState.Value = "Waiting for a stream to cloud...";
            }
            else if ((s.IsOn == false) != (s.State == ChannelState.Idle))
            {
                model.State.Value      = ChannelModelState.InProgress;
                model.TextState.Value  = s.IsOn ? "Connecting..." : "Disconnecting...";
                model.TimerState.Value = null;
            }
            else
            {
                switch (s.State)
                {
                case ChannelState.Idle:
                    model.State.Value     = ChannelModelState.Idle;
                    model.TextState.Value = "";
                    model.Bitrate.Value   = "";
                    break;

                case ChannelState.RunningOk:
                    model.State.Value     = ChannelModelState.RunningOk;
                    model.TextState.Value = "Connected";
                    model.Bitrate.Value   = $"{s.Bitrate} Kb/s";
                    break;

                case ChannelState.RunningConnectError:
                    model.State.Value     = ChannelModelState.RunningConnectError;
                    model.TextState.Value = "Failed. Check your stream Key";
                    model.Bitrate.Value   = $"{s.Bitrate} Kb/s";
                    break;

                case ChannelState.RunningInitError:
                    model.State.Value     = ChannelModelState.RunningInitError;
                    model.TextState.Value = "Failed. Url or Key is not set";
                    model.Bitrate.Value   = $"{s.Bitrate} Kb/s";
                    break;
                }

                model.TimerState.Value = s.Timer;
            }

            string name = s.Name == null ? model.Target.Name : s.Name;

            model.Name.SilentValue = name;

            string webUrl = s.WebUrl == null ? model.Target.WebUrl : s.WebUrl;

            model.WebUrl.SilentValue = webUrl;

            string rtmpUrl = s.RtmpUrl == null ? model.Target.DefaultRtmpUrl : s.RtmpUrl;

            model.RtmpUrl.SilentValue = rtmpUrl;

            model.IsTranscoded.SilentValue = Transcoding.IsTranscoded(s);
        }