Esempio n. 1
0
        public WriteTopicView()
        {
            InitializeComponent();
            var controls = new List <Control> {
                Option, Send, Title, Body
            };
            var load = Observable.FromEventPattern <RoutedEventArgs>(WrittenPage, nameof(WrittenPage.Loaded))
                       .SelectMany(x => ApiClient.GetNodes())
                       .Retry(10)
                       .Subscribe(x => _nodes.AddRange(x));
            var wrriten = Observable.FromEventPattern <TappedRoutedEventArgs>(Send, nameof(Send.Tapped))
                          .Select(async x =>
            {
                if (Title.Text.Length == 0)
                {
                    return(WrritenStatus.TitleEmpty);
                }
                if (Title.Text.Length > 120)
                {
                    return(WrritenStatus.TitleLonger);
                }
                if (Body.Text.Length > 20000)
                {
                    return(WrritenStatus.BodyLonger);
                }
                if (!_nodes.Exists(node => node.Title.Contains(Option.Text)))
                {
                    return(WrritenStatus.NotExistNode);
                }
                var url   = $"https://www.v2ex.com/new/{Option.Text}";
                var html  = await ApiClient.OnlyGet(url);
                var once  = new HtmlParser().ParseDocument(html).QuerySelector("input[name='once']").GetAttribute("value");
                var param = new Dictionary <string, string>
                {
                    { "once", once },
                    { "content", Body.Text },
                    { "title", Title.Text }
                };
                await ApiClient.NewTopic(url, new FormUrlEncodedContent(param), Option.Text);
                return(WrritenStatus.Success);
            })
                          .ObserveOnCoreDispatcher()
                          .Subscribe(async x =>
            {
                controls.ForEach(y => y.IsEnabled = false);
                try
                {
                    switch (await x)
                    {
                    case WrritenStatus.NotExistNode:
                        Toast.ShowTips("节点不存在");
                        break;

                    case WrritenStatus.TitleEmpty:
                        Toast.ShowTips("标题字数不能为0");
                        break;

                    case WrritenStatus.TitleLonger:
                        Toast.ShowTips("标题字数不能超过120");
                        break;

                    case WrritenStatus.BodyLonger:
                        Toast.ShowTips("正文字数不能超过20000");
                        break;

                    case WrritenStatus.Success:
                        Toast.ShowTips("发表成功");
                        PageStack.Back();
                        break;
                    }
                }
                catch
                {
                    Toast.ShowTips("发表失败");
                }
            });
            var type = Observable
                       .FromEventPattern <AutoSuggestBoxTextChangedEventArgs>(Option, nameof(Option.TextChanged))
                       .Throttle(TimeSpan.FromMilliseconds(300))
                       .Select(x => _nodes.Where(node => node.Title.Contains(Option.Text)))
                       .ObserveOnCoreDispatcher()
                       .Subscribe(x =>
            {
                foreach (var node in x)
                {
                    Show.Add(node);
                }
            });
            var choose = Observable
                         .FromEventPattern <AutoSuggestBoxSuggestionChosenEventArgs>(Option, nameof(Option.SuggestionChosen))
                         .ObserveOnCoreDispatcher()
                         .Subscribe(x => Option.Text = (x.EventArgs.SelectedItem as NodeModel).Title);

            _events = new List <IDisposable> {
                load, wrriten, type, choose
            };
        }
Esempio n. 2
0
        public MainPage()
        {
            InitializeComponent();
            RightPart = RightFrame;
            LeftPart  = LeftPivot;
            PageStack.Next("Right", "Right", typeof(BlankPage), null);
            SystemNavigationManager.GetForCurrentView().BackRequested += (sender, el) =>
            {
                el.Handled = true;
                if (PageStack.CanGoBack)
                {
                    PageStack.Back();
                }
            };
            var leftChanged = Observable
                              .FromEventPattern <SizeChangedEventArgs>(LeftPivot, nameof(LeftPivot.SizeChanged))
                              .ObserveOnCoreDispatcher()
                              .Subscribe(x =>
            {
                var headerpanel      = FindVisualChildren <PivotHeaderPanel>(LeftPivot).ToList();
                var totalwidth       = LeftPivot.ActualWidth;
                headerpanel[0].Width = totalwidth;
                var items            = FindVisualChildren <PivotHeaderItem>(headerpanel[0]).ToList();
                for (var i = 0; i < items.Count; i++)
                {
                    items[i].Width = totalwidth / items.Count - 1;
                }
            });
            var rightChanged = Observable
                               .FromEventPattern <SizeChangedEventArgs>(RightFrame, nameof(RightFrame.SizeChanged))
                               .ObserveOnCoreDispatcher()
                               .Subscribe(x =>
            {
                if (RootGrid.ActualWidth > 600)
                {
                    LeftPivot.Width       = 500;
                    LeftPivot.Visibility  = Visibility.Visible;
                    RightFrame.Visibility = Visibility.Visible;
                    RightFrame.SetValue(RelativePanel.RightOfProperty, LeftPivot);
                    LeftPivot.SetValue(RelativePanel.AlignBottomWithPanelProperty, true);
                    LeftPivot.SetValue(RelativePanel.AlignTopWithPanelProperty, true);
                    LeftPivot.SetValue(RelativePanel.AlignLeftWithPanelProperty, true);
                    LeftPivot.SetValue(RelativePanel.AlignRightWithPanelProperty, false);
                    RightFrame.SetValue(RelativePanel.AlignBottomWithPanelProperty, true);
                    RightFrame.SetValue(RelativePanel.AlignTopWithPanelProperty, true);
                    RightFrame.SetValue(RelativePanel.AlignRightWithPanelProperty, true);
                    RightFrame.SetValue(RelativePanel.AlignLeftWithPanelProperty, false);
                }
                else
                {
                    LeftPivot.Width = double.NaN;
                    if (RightFrame.CanGoBack)
                    {
                        LeftPivot.Visibility  = Visibility.Visible;
                        RightFrame.Visibility = Visibility.Collapsed;
                    }
                    else
                    {
                        LeftPivot.Visibility  = Visibility.Collapsed;
                        RightFrame.Visibility = Visibility.Visible;
                    }

                    LeftPivot.SetValue(RelativePanel.AlignBottomWithPanelProperty, true);
                    LeftPivot.SetValue(RelativePanel.AlignTopWithPanelProperty, true);
                    LeftPivot.SetValue(RelativePanel.AlignLeftWithPanelProperty, true);
                    LeftPivot.SetValue(RelativePanel.AlignRightWithPanelProperty, true);
                    RightFrame.SetValue(RelativePanel.AlignBottomWithPanelProperty, true);
                    RightFrame.SetValue(RelativePanel.AlignTopWithPanelProperty, true);
                    RightFrame.SetValue(RelativePanel.AlignRightWithPanelProperty, true);
                    RightFrame.SetValue(RelativePanel.AlignLeftWithPanelProperty, true);
                }
            });

            _events = new List <IDisposable> {
                leftChanged, rightChanged
            };
        }