private async void ButtonDump_Click(object sender, RoutedEventArgs e)
        {
            if (isRecording)
            {
                return;
            }

            if (string.IsNullOrWhiteSpace(user.videoPlayUrl))
            {
                SetStatus("[Error] Can't find the stream link");
                return;
            }

            LockInput(true);
            cardFind.Visibility   = Visibility.Collapsed;
            buttonDump.Visibility = Visibility.Collapsed;
            buttonStop.Visibility = Visibility.Visible;

            isRecording = true;
            var firsttime = true;
            var timestart = DateTime.Now;

            while (isRecording)
            {
                var dump      = false;
                var isPlaying = !App.CheckBeforeRecording;

                if (!firsttime && App.CheckBeforeRecording)
                {
                    SetStatus("Checking room...");
                    var room = await MangoApi.GetRoomInfo(user.rid);

                    if (room.errno == 0)
                    {
                        isPlaying       = room.data.isPlaying;
                        textViewer.Text = room.data.isPlaying ? "Online" : "Offline";
                        SetStatus(room.data.isPlaying ? "User Online" : "User Offline");
                    }
                    else
                    {
                        isPlaying       = true;
                        textViewer.Text = "Unknown";
                        SetStatus(room.msg);
                    }
                    labelViewer.Text = "LiveShow :";
                }

                if (isPlaying)
                {
                    dump = await DumpStream();
                }

                firsttime = false;

                if (dump)
                {
                    timestart = DateTime.Now;
                }

                if (!isRecording)
                {
                    SetStatus("Stopped by user");
                    break;
                }
                if (radioManual.IsChecked == false)
                {
                    if (radioImmediately.IsChecked == true)
                    {
                        SetStatus("Timeout!");
                        break;
                    }
                    if (radioCustomTimeout.IsChecked == true)
                    {
                        if (IsTimeout(timestart))
                        {
                            SetStatus("Timeout!");
                            break;
                        }

                        var to = Timeout(timestart);
                        SetStatus($"Timeout in {to.Minutes.ToString("00")}:{to.Seconds.ToString("00")}");
                    }
                }
                else
                {
                    SetStatus("Please wait... Retry in 10s");
                }

                await Task.Delay(10000);
            }

            isRecording = false;
            LockInput(false);
            buttonDump.Visibility = Visibility.Visible;
            buttonStop.Visibility = Visibility.Collapsed;
        }
        private async void ButtonFind_Click(object sender, RoutedEventArgs e)
        {
            var text = textInput.Text.Trim();

            if (string.IsNullOrWhiteSpace(text))
            {
                SetStatus("Input isn't valid!!!");
                return;
            }

            var id = text;

            if (text.StartsWith("rtmp") || text.StartsWith("http"))
            {
                Match regex = Regex.Match(text, @"live/(\d+)/?");
                if (regex.Success)
                {
                    id = regex.Groups[1].Value;
                }
            }

            Console.WriteLine("ID : " + id);
            if (Regex.IsMatch(id, @"^\d$"))
            {
                SetStatus("Input isn't valid!!!");
                return;
            }

            LockInput(true);
            LockButtonAndReset(true);

            SetStatus($"Get userid: {id}");

            var getUser = await MangoApi.GetUser(id);

            if (getUser.errno != 0)
            {
                SetStatus(getUser.msg);
                return;
            }
            var userInfo = getUser.data;

            // parse userInfo to user
            user = new User
            {
                rid          = userInfo.rid,
                mid          = userInfo.id,
                nickname     = userInfo.nickname,
                announcement = userInfo.signature,
                videoPlayUrl = userInfo.videoPlayUrl
            };

            LoadUserInfo(userInfo);

            var room = await MangoApi.GetRoomInfo(user.rid);

            if (room.errno == 0)
            {
                textViewer.Text = room.data.isPlaying ? "Online" : "Offline";
                if (room.data.isPlaying)
                {
                    cardFind.Visibility = Visibility.Collapsed;
                }
            }

            LockInput(false);
            LockButtonAndReset(false);

            SetStatus("Let's start the party");
        }