Beispiel #1
0
        private async void Updated(PTTClient sender, LiPttEventArgs e)
        {
            switch (e.State)
            {
            case PttState.MainPage:
                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
                    if (pivot_index != pivot.SelectedIndex)
                    {
                        MainFuncFrame.Navigate(typeof(MainFunctionPage));
                    }
                });

                break;

            case PttState.Favorite:
                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
                    if (pivot_index != pivot.SelectedIndex)
                    {
                        FavoriteFrame.Navigate(typeof(FavoritePage));
                    }
                });

                break;
            }
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
                pivot_index = pivot.SelectedIndex;
            });
        }
Beispiel #2
0
 private void BrowseArticle(PTTClient sender, LiPttEventArgs e)
 {
     switch (e.State)
     {
     case PttState.Article:
         LiPTT.PttEventEchoed -= BrowseArticle;
         LoadArticle();
         break;
     }
 }
        private void DialogOpen_PttEventEchoed(PTTClient sender, LiPttEventArgs e)
        {
            var x = LiPTT.Screen.ToStringArray();

            if (e.State == PttState.EchoType)
            {
                LiPTT.PttEventEchoed -= DialogOpen_PttEventEchoed;
                LiPTT.Send(new byte[] { 0x0D, 0x0D });
            }
        }
Beispiel #4
0
 private void InitBoard(PTTClient sender, LiPttEventArgs e)
 {
     if (e.State == PttState.Board)
     {
         LiPTT.PttEventEchoed -= InitBoard;
         var action = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
         {
             ContentCollection.BeginLoad();
         });
     }
 }
Beispiel #5
0
        private void PttUpdated(PTTClient sender, LiPttEventArgs e)
        {
            LiPTT.PttEventEchoed -= PttUpdated;

            if (e.State == PttState.Board)
            {
                var action = LiPTT.RunInUIThread(() =>
                {
                    Parse();
                    sem.Release();
                });
            }
        }
Beispiel #6
0
 private void Exit_echoed(PTTClient sender, LiPttEventArgs e)
 {
     if (e.State == PttState.Exit)
     {
         LiPTT.SendMessage('y', 0x0D);
     }
     else if (e.State == PttState.PressAny)
     {
         LiPTT.PttEventEchoed -= Exit_echoed;
         LiPTT.RemoveHandlerStateChecker();
         LiPTT.PressAnyKey();
         LiPTT.Client.Disconnected += GoToLogin;
     }
 }
Beispiel #7
0
        private void PttEventEchoed_UpdateArticleTag(PTTClient client, LiPttEventArgs e)
        {
            if (e.State == PttState.Board)
            {
                LiPTT.PttEventEchoed -= PttEventEchoed_UpdateArticleTag;

                ReLoadArticleTag(client.Screen);
                LiPTT.PageEnd();
                //LiPTT.SendMessage(LiPTT.ArticleCollection.CurrentIndex.ToString(), 0x0D);
                var action = LiPTT.RunInUIThread(() =>
                {
                    LiPTT.Frame.Navigate(typeof(BoardPage));
                });
            }
        }
Beispiel #8
0
 private void ReadAIDandExtra(PTTClient client, LiPttEventArgs e)
 {
     if (e.State == PttState.Article && !LoadingExtraData)
     {
         LoadingExtraData = true;
         LiPTT.SendMessage('Q');
     }
     else if (!pressAny && e.State == PttState.AID && LoadingExtraData)
     {
         pressAny = true;
         ReadExtraData(client.Screen, (int)e.Others);
         LiPTT.PressAnyKey();
     }
     else if (e.State == PttState.Board && LoadingExtraData)
     {
         LiPTT.PttEventEchoed -= ReadAIDandExtra;
         LiPTT.PttEventEchoed += BrowseArticle;
         LiPTT.Right();
     }
 }
Beispiel #9
0
        private void GoToBoard(PTTClient sender, LiPttEventArgs e)
        {
            switch (e.State)
            {
            case PttState.PressAny:
                if (!pressAny)
                {
                    pressAny = true;
                    LiPTT.PressAnyKey();
                }

                break;

            case PttState.Board:
                LiPTT.PageEnd();
                LiPTT.PttEventEchoed -= GoToBoard;
                var t = LiPTT.RunInUIThread(() => {
                    LiPTT.Frame.Navigate(typeof(BoardPage));
                });
                break;
            }
        }
Beispiel #10
0
        private void LiPTT_PttEventEchoed(PTTClient sender, LiPttEventArgs e)
        {
            switch (e.State)
            {
            case PttState.Disconnected:
                if (!LiPTT.Client.PTTWrongResponse)
                {
                    State = "未連線";
                }
                break;

            case PttState.Connecting:
                State = "連線中...";
                break;

            case PttState.ConnectFailedTCP:
                State = "TCP 連線失敗";
                break;

            case PttState.ConnectFailedWebSocket:
                State = "WebSocket 連線失敗";
                break;

            case PttState.Board:
                State = "看板";
                break;

            case PttState.SearchBoard:
                State = "搜尋看板";
                break;

            case PttState.Disconnecting:
                if (!LiPTT.Client.PTTWrongResponse)
                {
                    State = "斷線中...";
                }
                break;

            case PttState.Login:
                State = "(請輸入帳號)";
                break;

            case PttState.Password:
                State = "(請輸入密碼)";
                break;

            case PttState.Loginning:
                State = "登入中...";
                break;

            case PttState.Synchronizing:
                State = "更新與同步個人資訊中...";
                break;

            case PttState.Accept:
                State = "密碼正確";
                break;

            case PttState.AlreadyLogin:
                State = "有重複登入,踢掉中...";
                break;

            case PttState.OverLoading:
                State = "PTT被你玩壞惹?";
                break;

            case PttState.LoginSoMany:
                State = "登入太頻繁 請稍後在試";
                break;

            case PttState.Kicked:
                State = "誰踢我";
                break;

            case PttState.WrongPassword:
                State = "密碼不對或無此帳號";
                break;

            case PttState.Angel:
                State = "小天使?";
                break;

            case PttState.WrongLog:
                State = "要刪除登入錯誤資訊嗎?";
                break;

            case PttState.MainPage:
                State = "主功能表";
                break;

            case PttState.PressAny:
                State = "(請按任意鍵繼續...)";
                break;

            default:
                State = "未定義狀態";
                break;
            }
        }
Beispiel #11
0
        private void EnterAccount(PTTClient sender, LiPttEventArgs e)
        {
            switch (e.State)
            {
            case PttState.Login:
                if (!enteruser)
                {
                    enteruser = true;
                    var action = LiPTT.RunInUIThread(() =>
                    {
                        LiPTT.UserName = UserText.Text;
                        LiPTT.EnterUserName();
                    });
                }
                break;

            case PttState.Password:
                if (!enterpswd)
                {
                    enterpswd = true;
                    var action = LiPTT.RunInUIThread(() =>
                    {
                        LiPTT.Password = PasswordText.Password;
                        LiPTT.EnterPassword();
                    });
                }

                break;

            case PttState.WrongPassword:
            {
                LiPTT.Client.Dispose();

                var action = LiPTT.RunInUIThread(() => {
                        UserText.IsEnabled     = true;
                        PasswordText.IsEnabled = true;
                        MemoAcount.IsEnabled   = true;
                        AutoLogin.IsEnabled    = true;
                    });
            }
            break;

            case PttState.AlreadyLogin:
                if (!enterAlreadyLogin)
                {
                    enterAlreadyLogin = true;
                    LiPTT.Yes();
                }
                break;

            case PttState.WrongLog:
                if (!enterWrongLog)
                {
                    enterWrongLog = true;
                    LiPTT.Yes();
                }
                break;

            case PttState.Accept:
            {
                LiPTT.Logined = true;
            }
            break;

            case PttState.Loginning:
                break;

            case PttState.Synchronizing:
                break;

            case PttState.LoginSoMany:
            {
                LiPTT.Client.Dispose();

                var action = LiPTT.RunInUIThread(() => {
                        UserText.IsEnabled     = true;
                        PasswordText.IsEnabled = true;
                        MemoAcount.IsEnabled   = true;
                        AutoLogin.IsEnabled    = true;
                    });
            }
            break;

            case PttState.OverLoading:
            {
                LiPTT.Client.Dispose();

                var action = LiPTT.RunInUIThread(() => {
                        UserText.IsEnabled     = true;
                        PasswordText.IsEnabled = true;
                        MemoAcount.IsEnabled   = true;
                        AutoLogin.IsEnabled    = true;
                    });
            }
            break;

            case PttState.ConnectFailedTCP:
            case PttState.ConnectFailedWebSocket:
            {
                var action = LiPTT.RunInUIThread(() => {
                        UserText.IsEnabled     = true;
                        PasswordText.IsEnabled = true;
                        MemoAcount.IsEnabled   = true;
                        AutoLogin.IsEnabled    = true;
                    });
            }
            break;

            case PttState.PressAny:
                LiPTT.PressAnyKey();
                break;

            case PttState.MainPage:
                LiPTT.PttEventEchoed -= EnterAccount;
                {
                    var action = LiPTT.RunInUIThread(() =>
                    {
                        LiPTT.Frame.Navigate(typeof(PTTPage));
                    });

                    action.AsTask().Wait();
                }
                break;
            }
        }
Beispiel #12
0
        private void ReadBoardInfo(PTTClient client, LiPttEventArgs e)
        {
            ScreenBuffer screen = client.Screen;

            if (e.State == PttState.BoardInfomation)
            {
                LiPTT.PttEventEchoed -= ReadBoardInfo;

                var action = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    var Board = CurrentBoard;

                    //看板名稱
                    string str  = screen.ToString(3);
                    Match match = new Regex(LiPTT.bracket_regex).Match(str);
                    if (match.Success)
                    {
                        Board.Name = str.Substring(match.Index + 1, match.Length - 2);
                        Board.Nick = LiPTT.GetBoardNick(Board.Name);
                    }

                    //看板分類 中文敘述
                    Board.Category    = screen.ToString(5, 15, 4);
                    Board.Description = client.Screen.ToString(5, 22, screen.Width - 22).Replace('\0', ' ').Trim();

                    //版主名單
                    str = screen.ToString(6, 15, screen.Width - 15).Replace('\0', ' ').Trim();
                    if (!new Regex(LiPTT.bound_regex).Match(str).Success) //(無)
                    {
                        Board.Leaders = str.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
                    }

                    if (screen.ToString(7, 25, 4) == "公開")
                    {
                        Board.公開 = true;
                    }

                    if (screen.ToString(8, 12, 4) == "可以")
                    {
                        Board.可進入十大排行榜 = true;
                    }

                    if (screen.ToString(9, 5, 4) == "開放")
                    {
                        Board.開放非看板會員發文 = true;
                    }

                    if (screen.ToString(10, 5, 4) == "開放")
                    {
                        Board.開放回文 = true;
                    }

                    if (screen.ToString(11, 5, 4) == "開放")
                    {
                        Board.開放自刪 = true;
                    }

                    if (screen.ToString(12, 5, 4) == "開放")
                    {
                        Board.開放推文 = true;
                    }

                    if (screen.ToString(13, 5, 4) == "開放")
                    {
                        Board.開放噓文 = true;
                    }

                    if (screen.ToString(14, 5, 4) == "開放")
                    {
                        Board.開放快速連推 = true;
                    }

                    if (screen.ToString(15, 12, 4) == "自動")
                    {
                        Board.IPVisible = true;
                    }

                    if (screen.ToString(16, 12, 4) == "對齊")
                    {
                        Board.自動對齊 = true;
                    }

                    if (screen.ToString(17, 10, 2) == "可")
                    {
                        Board.板主可刪除違規文字 = true;
                    }

                    if (screen.ToString(18, 14, 2) == "會")
                    {
                        Board.轉文自動記錄 = true;
                    }

                    if (screen.ToString(19, 5, 2) == "已")
                    {
                        Board.冷靜模式 = true;
                    }

                    if (screen.ToString(20, 5, 4) == "允許")
                    {
                        Board.允許十八歲進入 = true;
                    }

                    //發文限制 - 登入次數
                    str   = screen.ToString(12);
                    match = new Regex(@"\d+").Match(str);
                    if (match.Success)
                    {
                        try
                        {
                            Board.LimitLogin = Convert.ToInt32(str.Substring(match.Index, match.Length));
                        }
                        catch { Debug.WriteLine(str.Substring(match.Index, match.Length)); }
                    }

                    //發文限制 - 退文篇數
                    str   = screen.ToString(13);
                    match = new Regex(@"\d+").Match(str);
                    if (match.Success)
                    {
                        try
                        {
                            Board.LimitReject = Convert.ToInt32(str.Substring(match.Index, match.Length));
                        }
                        catch { Debug.WriteLine(str.Substring(match.Index, match.Length)); }
                    }

                    if (LiPTT.CacheBoard)
                    {
                        ControlVisible = true;
                        Window.Current.CoreWindow.KeyDown        += CoreWindow_KeyDown;
                        Window.Current.CoreWindow.PointerPressed += Board_PointerPressed;
                    }
                    else
                    {
                        ContentCollection.Clear();
                        LiPTT.PttEventEchoed += InitBoard;
                    }

                    LiPTT.PressAnyKey();
                });
            }
        }
Beispiel #13
0
        private void SearchBoard(PTTClient sender, LiPttEventArgs e)
        {
            Regex        regex = new Regex(@"([\w-_]+)");
            Match        match;
            ScreenBuffer screen = sender.Screen;

            switch (e.State)
            {
            case PttState.SearchBoard:
                LiPTT.PttEventEchoed -= SearchBoard;
                var msg = screen.ToString(1, 34, 20).Trim();

                match = regex.Match(msg);

                if (match.Success)
                {
                    string suggestion = msg.Substring(match.Index, match.Length);

                    var action = LiPTT.RunInUIThread(() =>
                    {
                        if (BoardAutoSuggestBox.Text.Length <= suggestion.Length)
                        {
                            RelatedTable.Add(suggestion);
                        }
                    });
                }

                ClearSearch();

                var a = LiPTT.RunInUIThread(() =>
                {
                    BoardAutoSuggestBox.ItemsSource = RelatedTable;
                });

                break;

            case PttState.RelatedBoard:

                for (int i = 3; i < 23; i++)
                {
                    string k = screen.ToString(i).Replace('\0', ' ');

                    match = regex.Match(k, 0);
                    if (match.Success)
                    {
                        RelatedTable.Add(k.Substring(match.Index, match.Length));
                    }

                    match = regex.Match(k, 22);
                    if (match.Success)
                    {
                        RelatedTable.Add(k.Substring(match.Index, match.Length));
                    }

                    match = regex.Match(k, 44);
                    if (match.Success)
                    {
                        RelatedTable.Add(k.Substring(match.Index, match.Length));
                    }
                }

                if (new Regex("按空白鍵可列出更多項目").Match(screen.ToString(23)).Success)
                {
                    LiPTT.PressSpace();
                }
                else
                {
                    LiPTT.PttEventEchoed -= SearchBoard;

                    RelatedTable.Sort();
                    ClearSearch();

                    var t = LiPTT.RunInUIThread(() =>
                    {
                        BoardAutoSuggestBox.ItemsSource = RelatedTable;
                    });
                }
                break;
            }
        }