/// <summary> /// if login failed, re-navigate to the target Uri, otherwise, show status detail of you. /// </summary> /// <param name="htmlContent">html of websites</param> private void CheckIfLoginSucceed(string htmlBodyContent) { var doc = new HtmlDocument(); doc.LoadHtml(@"<html> <head> <title>......</title > <link href='style.css' rel='stylesheet' type='text/css'> <script language='JavaScript1.2' src='nocache.js'></script > </head><body>" + htmlBodyContent + "</body></html>"); var rootNode = doc.DocumentNode; var pcCheck = rootNode.SelectSingleNode("//div[@class='top-nav-info']"); var mobileCheck = rootNode.SelectSingleNode("//div[@id='people-profile']"); if (pcCheck == null && mobileCheck == null) // login failed. { ReportHelper.ReportAttentionAsync(GetUIString("LoginFailed")); } else { // login successful... MainLoginPopup.IsOpen = false; try { MainPage.SetUserStatus(doc); NavigateToBase?.Invoke( null, null, GetFrameInstance(FrameType.UserInfos), GetPageType(NavigateType.UserInfo)); } catch { /* Ignore. */ } } }
private void HamburgerListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { baseListRing.IsActive = false; NavigationSplit.IsPaneOpen = false; var model = e.AddedItems.FirstOrDefault() as NavigationBarModel; if (model == null) { return; } ChangeTitlePath(2, (sender as ListBox).SelectedIndex == 0 ? null : model.Title); NavigateType type = model.Title.ToString() == GetUIString("Gallery") ? NavigateType.ImageNaviBar : NavigateType.NaviBar; if (IfContainsPageInstance(NaviPathTitle.RoutePath)) { GetFrameInstance(type).Content = GetPageInstance(NaviPathTitle.RoutePath); } else { NavigateToBase?.Invoke( sender, new NavigateParameter { PathUri = model.PathUri, Items = model.Items, }, GetFrameInstance(type), GetPageType(type)); } }
private void HamburgerListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { var item = (sender as ListBox).SelectedItem as NavigationBar; if (item == null) { return; } navigateTitlePath.Text = item.Title; if (item.NaviType == NavigateType.FM || item.NaviType == NavigateType.FM_Extensions) { // TO DO WORK FOR STORE EXTENSIONS if (IsLogined && HasFMExtensions) { item.NaviType = NavigateType.FM_Extensions; } else { item.NaviType = NavigateType.FM; } } NavigateToBase?.Invoke( sender, new NavigateParameter { ToUri = item?.PathUri }, GetFrameInstance(item.FrameType), GetPageType(item.NaviType)); NavigationSplit.IsPaneOpen = false; }
private void Grid_Loaded(object sender, RoutedEventArgs e) { if (VisibleWidth > FormatNumber && IsDivideScreen) { MetroFrame.Navigate(typeof(MetroPage)); } if (toastUri != null) { var decode = JsonHelper.FromJson <ToastParameters>(toastUri); if (decode != null) { NavigateToBase?.Invoke( null, new NavigateParameter { ToUri = new Uri(decode.Uri), Title = decode.Title, IsFromInfoClick = true, IsNative = true, FrameType = FrameType.Content }, GetFrameInstance(FrameType.Content), GetPageType(NavigateType.ItemClickNative)); } } }
private void HamburgerListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { baseListRing.IsActive = false; var model = e.AddedItems.FirstOrDefault() as NavigationBar; NavigationSplit.IsPaneOpen = false; if (model == null) { return; } if (model.NaviType != NavigateType.Content && model.NaviType != NavigateType.Webview) { ChangeTitlePath(2, (sender as ListBox).SelectedIndex == 0 ? null : model.Title); } if (IfContainsPageInstance(NaviPathTitle.RoutePath)) { GetFrameInstance(model.NaviType).Content = GetPageInstance(NaviPathTitle.RoutePath); return; } NavigateToBase?.Invoke( sender, new NavigateParameter { ToUri = model.PathUri, MessageBag = model.Title, ToFetchType = model.FetchType, NaviType = NavigateType.Webview }, GetFrameInstance(model.NaviType), GetPageType(model.NaviType)); }
private void FreeTryBtn_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) { NavigateToBase?.Invoke( sender, null, GetFrameInstance(FrameType.LeftPart), GetPageType(NavigateType.FM_Extensions)); }
/// <summary> /// if login failed, re-navigate to the target Uri, otherwise, show status detail of you. /// </summary> /// <param name="htmlContent">html of websites</param> private async void CheckIfLoginSucceedAsync(string htmlBodyContent) { var doc = new HtmlDocument(); doc.LoadHtml(@"<html> <head> <title>......</title > <link href='style.css' rel='stylesheet' type='text/css'> <script language='JavaScript1.2' src='nocache.js'></script > </head><body>" + htmlBodyContent + "</body></html>"); if (htmlBodyContent.Contains("验证码")) // login failed. { ReportHelper.ReportAttentionAsync(GetUIString("LoginFailed")); } else { // login successful... MainLoginPopup.IsOpen = false; try { string result = await BeansproutRequestHelper.AccessOauth2Token(EmailBox.Text, PasswordBox.Password); var tokenReturn = default(APITokenReturn); try { JObject jo = JObject.Parse(result); tokenReturn = new APITokenReturn { AccessToken = jo["access_token"].Value <string>(), RefreshToken = jo["refresh_token"].Value <string>(), ExpiresIn = jo["expires_in"].Value <string>(), UserId = jo["douban_user_id"].Value <string>(), UserName = jo["douban_user_name"].Value <string>(), }; MainLoginPopup.IsOpen = false; SettingsHelper.SaveSettingsValue(SettingsSelect.UserID, UserID = tokenReturn.UserId); SettingsHelper.SaveSettingsValue(SettingsSelect.AccessToken, AccessToken = tokenReturn.AccessToken); SettingsHelper.SaveSettingsValue(SettingsSelect.RefreshToken, RefreshToken = tokenReturn.RefreshToken); try { await MainPage.SetUserStatusAsync(tokenReturn.UserId); } catch { /* Ignore */ } IsLogined = true; NavigateToBase?.Invoke( null, null, GetFrameInstance(FrameType.UserInfos), GetPageType(NavigateType.UserInfo)); } catch { /* Ignore. */ } } catch { try { MainPage.SetUserStatus(doc); } catch (Exception e) { Debug.WriteLine(e.Message + "\n" + e.StackTrace); } } NavigateToBase?.Invoke( null, null, GetFrameInstance(FrameType.UserInfos), GetPageType(NavigateType.UserInfo)); } }
private void FullContentBtn_Click(object sender, RoutedEventArgs e) { NavigateToBase?.Invoke( null, new NavigateParameter { FrameType = FrameType.UpContent, ToUri = currentUri, Title = GetUIString("LinkContent") }, GetFrameInstance(FrameType.UpContent), GetPageType(NavigateType.Undefined)); }
private void SearchButton_Click(object sender, RoutedEventArgs e) { NavigateToBase?.Invoke( null, new NavigateParameter { Title = GetUIString("SEARCH"), ToUri = new Uri("https://m.douban.com/search/"), IsNative = true }, GetFrameInstance(FrameType.Content), GetPageType(NavigateType.Search)); }
/// <summary> /// if need, run this method for auto-login. /// </summary> /// <returns></returns> private async void ClickSubmitButtonIfAutoAsync() { Submit.IsEnabled = false; SubitRing.IsActive = true; var user = EmailBox.Text; var pass = PasswordBox.Password; PasswordAndUserEncryption(user, pass); // set the abort button with keybord-focus, so that the vitual keyboad in the mobile device with disappear. Abort.Focus(FocusState.Keyboard); var result = await DoubanWebProcess.PostDoubanResponseAsync( path : "https://frodo.douban.com/service/auth2/token", host : "frodo.douban.com", reffer : null, content : new HttpFormUrlEncodedContent(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("client_id", "0dad551ec0f84ed02907ff5c42e8ec70"), new KeyValuePair <string, string>("client_secret", "9e8bb54dc3288cdf"), new KeyValuePair <string, string>("redirect_uri", "frodo://app/oauth/callback/"), new KeyValuePair <string, string>("grant_type", "password"), new KeyValuePair <string, string>("username", user), new KeyValuePair <string, string>("password", pass), //new KeyValuePair<string, string>("apiKey","0dad551ec0f84ed02907ff5c42e8ec70"), new KeyValuePair <string, string>("os_rom", "android"), }), isMobileDevice : true); var tokenReturn = default(APITokenReturn); try { JObject jo = JObject.Parse(result); tokenReturn = new APITokenReturn { AccessToken = jo["access_token"].Value <string>(), RefreshToken = jo["refresh_token"].Value <string>(), ExpiresIn = jo["expires_in"].Value <string>(), UserId = jo["douban_user_id"].Value <string>(), UserName = jo["douban_user_name"].Value <string>(), }; MainLoginPopup.IsOpen = false; try { await MainPage.SetUserStatusAsync(tokenReturn.UserId); //await MainPage.SetUserStatusAsync("155845973"); NavigateToBase?.Invoke( null, null, GetFrameInstance(FrameType.UserInfos), GetPageType(NavigateType.UserInfo)); } catch { /* Ignore. */ } } catch { ReportHelper.ReportAttentionAsync(GetUIString("LoginFailed")); } }
private void SettingsButton_Click(object sender, RoutedEventArgs e) { NavigationSplit.IsPaneOpen = false; navigateTitlePath.Text = GetUIString("Settings"); NavigateToBase?.Invoke( sender, null, GetFrameInstance(FrameType.LeftPart), GetPageType(NavigateType.Settings)); HamburgerListBox.SelectedIndex = -1; }
private void SettingsButton_Click(object sender, RoutedEventArgs e) { CloseContentFrameIfNeed(); HamburgerBox.SelectedIndex = -1; NavigateTitleBlock.Text = GetUIString("Settings"); NavigateToBase?.Invoke( sender, null, GetFrameInstance(FrameType.LeftPart), GetPageType(NavigateType.Settings)); }
/// <summary> /// redirect to login when login-error throws. /// </summary> private void RedirectToLoginAgain() { NavigateToBase?.Invoke( this, new NavigateParameter { ToFetchType = DataFetchType.Index_ReLogin, MessageBag = GetUIString("LNU_Index_LS"), ToUri = new Uri(LoginPath), NaviType = NavigateType.ReLogin }, GetFrameInstance(NavigateType.ReLogin), typeof(LoginPage)); }
private void WebView_ScriptNotify(object sender, NotifyEventArgs e) { var callBack = JsonHelper.FromJson <string>(e.Value); System.Diagnostics.Debug.WriteLine("Notify CallBack ----> : " + e.Value); var movie_mess = new Regex(@"/movie/subject/(?<movie_id>.+)/").Match(e.Value).Groups["movie_id"].Value; if (movie_mess != "") { var target_path = "https://m.douban.com/movie/subject/" + movie_mess; var succeed = Uri.TryCreate(target_path, UriKind.Absolute, out var uri); if (!succeed) { return; } NavigateToBase?.Invoke( null, new NavigateParameter { ToUri = uri, Title = "", IsNative = true, SpecialParameter = movie_mess, FrameType = FrameType.UpContent }, GetFrameInstance(FrameType.UpContent), GetPageType(NavigateType.MovieContent)); } else { var content_mess = new Regex(@"actionlink:(?<content>.+/)").Match(e.Value).Groups["content"].Value; if (content_mess == "") { return; } var target_path = "https://m.douban.com" + content_mess; var succeed = Uri.TryCreate(target_path, UriKind.Absolute, out var uri); if (!succeed) { return; } NavigateToBase?.Invoke( null, new NavigateParameter { Title = "LINK CONTENT", ToUri = uri, FrameType = FrameType.UpContent }, GetFrameInstance(FrameType.UpContent), GetPageType(NavigateType.Undefined)); } }
private void SetWrapPanelResources(string webResult) { if (webResult == null) { return; } var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(webResult); var wrapList = new List <ItemGroup <MovieItem> >(); var lis = doc.DocumentNode .SelectSingleNode("//section[@class='interests']") .SelectSingleNode("div[@class='section-content']") .SelectSingleNode("ul") .SelectNodes("li"); lis.ToList().ForEach(singleton => { var actionL = singleton.SelectSingleNode("a"); if (actionL != null) { wrapList.Add(new ItemGroup <MovieItem> { GroupName = actionL.InnerText, GroupPathUrl = actionL.Attributes["href"].Value, }); } }); var randomer = new Random(); wrapList.ForEach(i => { var color = GlobalHelpers.GetColorRandom((randomer.Next()) % 15); var button = new Button { Content = i.GroupName, Background = new SolidColorBrush(Colors.Transparent), Foreground = color }; button.Click += (obj, args) => NavigateToBase?.Invoke( null, new NavigateParameter { ToUri = new Uri(i.GroupPathUrl), Title = i.GroupName }, GetFrameInstance(FrameType.Content), GetPageType(NavigateType.DouList)); WrapPanel.Children.Add(new Border { CornerRadius = new CornerRadius(3), BorderBrush = color, BorderThickness = new Thickness(1), Margin = new Thickness(3), Child = button }); }); }
private void GridView_ItemClick(object sender, ItemClickEventArgs e) { var item = e.ClickedItem as FMListProgramme; if (item == null) { return; } NavigateToBase?.Invoke( null, new NavigateParameter { IsDailyList = item.Title.Contains("每日私人歌单"), ID = item.ID, FrameType = FrameType.Content }, GetFrameInstance(FrameType.Content), GetPageType(NavigateType.FM_MHzSongList)); }
private void ItemsGridView_ItemClick(object sender, ItemClickEventArgs e) { var item = e.ClickedItem as BookItem; if (item == null || item.PathUrl == null) { return; } NavigateToBase?.Invoke( null, new NavigateParameter { ToUri = new Uri(item.PathUrl), Title = item.Title, FrameType = FrameType.UpContent }, GetFrameInstance(FrameType.UpContent), GetPageType(NavigateType.BookContent)); }
private void ContentList_ItemClick(object sender, ItemClickEventArgs e) { var iten = e.ClickedItem as LifeStreamItem; if (iten == null) { return; } Uri.TryCreate(iten.PathUrl, UriKind.RelativeOrAbsolute, out var uri); NavigateToBase?.Invoke( null, new NavigateParameter { Title = iten.Content?.Title, ToUri = uri, IsFromInfoClick = true }, DetailsFrame, GetPageType(NavigateType.InfoItemClick)); }
private async Task TryLoginAsync(bool isInit = false) { try { if (isInit) { var userId = SettingsHelper.ReadSettingsValue(SettingsSelect.UserID) as string; if (userId == null || userId == "LOGOUT") { return; } LoginResult = await DoubanWebProcess.GetDoubanResponseAsync("https://douban.com/mine/", false); if (LoginResult == null) { ReportHelper.ReportAttentionAsync(GetUIString("WebActionError")); return; } var doc = new HtmlDocument(); doc.LoadHtml(LoginResult); if (doc.DocumentNode.SelectSingleNode("//div[@class='top-nav-info']") == null) { SettingsHelper.SaveSettingsValue(SettingsSelect.UserID, "LOGOUT"); return; } try { if (!IsLogined) { await MainPage.SetUserStatusAsync(userId); } SetUserStatus(); } catch { /* Ignore. */ } } else { if (!IsLogined) { NavigateToBase?.Invoke(null, null, GetFrameInstance(FrameType.Login), GetPageType(NavigateType.Login)); MainPage.OpenLoginPopup(); } else { NavigateToBase?.Invoke(null, null, GetFrameInstance(FrameType.UserInfos), GetPageType(NavigateType.UserInfo)); } } } catch { ReportHelper.ReportAttentionAsync(GetUIString("WebActionError")); } }
private void ContentList_ItemClick(object sender, ItemClickEventArgs e) { var iten = e.ClickedItem as DiaryItem; if (iten == null) { return; } Uri.TryCreate(string.Format(NavigateUrlFormat, iten.ID), UriKind.RelativeOrAbsolute, out var uri); NavigateToBase?.Invoke( null, new NavigateParameter { Title = iten.Title, ToUri = uri, IsFromInfoClick = true }, UserInfoDetails, GetPageType(NavigateType.InfoItemClick)); UserInfoPopup.IsOpen = false; }
private void GridView_ItemClick(object sender, ItemClickEventArgs e) { var item = e.ClickedItem as MovieItem; if (item == null || item.PathUrl == null) { return; } NavigateToBase?.Invoke( null, new NavigateParameter { ToUri = new Uri(UriDecoder.GetUrlFromUri(item.PathInnerUri, UriCastEnum.Movie)), IsNative = true, Title = item.Title, }, GetFrameInstance(FrameType.Content), GetPageType(NavigateType.MovieContent)); }
private void MoreButton_Click(object sender, RoutedEventArgs e) { var path = (sender as Button).CommandParameter as string; if (path == null) { return; } var keyword = $"subject_collection/{path}/"; NavigateToBase?.Invoke( // change loc_id to adjust location. null, new NavigateParameter { ToUri = null, ApiHeadString = keyword, Title = GetUIString("DB_MORE") }, GetFrameInstance(FrameType.Content), GetPageType(NavigateType.TVFilter)); }
private async void ListView_ItemClickAsync(object sender, ItemClickEventArgs e) { var item = e.ClickedItem as ChannelsItem; if (item == null) { return; } var succeed = Service.ChangeServiceChoice(MusicServiceType.MHz); if (!succeed) { return; } Service.MHzChannelID = item.Id; Service.ActionForMHz = GetNewMHzEachTurnAsync; var song = await InsertSongsToMHzListAsync(); if (song == null) { return; } if (MainUpContentFrame.Content != null) { (MainUpContentFrame.Content as FM_SongBoardPage)?.UnregisterServiceEvents(); } Service.MoveToAnyway(song); Service.PlayAnyway(); NavigateToBase?.Invoke( null, new MusicBoardParameter { SID = song.SID, SSID = song.SSID, AID = song.AID, SHA256 = song.SHA256, Url = song.Url, Song = song, FrameType = FrameType.UpContent }, GetFrameInstance(FrameType.UpContent), GetPageType(NavigateType.MusicBoard)); }
private void IndexList_ItemClick(object sender, ItemClickEventArgs e) { var item = e.ClickedItem as IndexItem; if (item == null || item.Type == IndexItem.ItemType.DateBlock) { return; } NavigateToBase?.Invoke( sender, new Core.Models.NavigateParameter { ToUri = item.PathUrl != null ? new Uri(UriDecoder.GetUrlFromUri(item.PathUrl)) : null, Title = item.Title, IsNative = true }, GetFrameInstance(Core.Models.FrameType.Content), GetPageType(Core.Models.NavigateType.ItemClickNative)); }
private async void PlayAllBtn_ClickAsync(object sender, RoutedEventArgs e) { if (inner_list == null) { return; } var item = inner_list[0]; var succeedss = Service.ChangeServiceChoice(MusicServiceType.SongList); if (!succeedss) { return; } var succeed = false; succeed = await Service.InsertItemAsync(item); if (!succeed) { return; } inner_list.ToList().ForEach(async i => succeed = await Service.InsertItemAsync(i)); if (MainUpContentFrame.Content != null) { (MainUpContentFrame.Content as FM_SongBoardPage)?.UnregisterServiceEvents(); } Service.SongListMoveTo(item); NavigateToBase?.Invoke( null, new MusicBoardParameter { SID = item.SID, SSID = item.SSID, AID = item.AID, SHA256 = item.SHA256, Url = item.Url, Song = item, FrameType = FrameType.UpContent }, GetFrameInstance(FrameType.UpContent), GetPageType(NavigateType.MusicBoard)); }
private void MoreButton_Click(object sender, RoutedEventArgs e) { var path = (sender as Button).CommandParameter as string; if (path == null) { return; } var is_not_native = path.Contains("https:"); var keyword = is_not_native ? path : $"subject_collection/{path}/"; NavigateToBase?.Invoke( // change loc_id to adjust location. null, new NavigateParameter { ToUri = is_not_native ? new Uri(path + $"?loc_id=108288") : null, ApiHeadString = keyword, Title = GetUIString("DB_BOOK") }, GetFrameInstance(FrameType.Content), GetPageType(is_not_native ? NavigateType.Undefined : NavigateType.BookFilter)); }
private async void IndexList_ItemClickAsync(object sender, ItemClickEventArgs e) { var item = e.ClickedItem as SongBase; if (item == null) { return; } var succeedss = Service.ChangeServiceChoice(MusicServiceType.SongList); if (!succeedss) { return; } var song = new MHzSongBase(item); var succeed = await Service.InsertItemAsync(song); if (!succeed) { return; } if (MainUpContentFrame.Content != null) { (MainUpContentFrame.Content as FM_SongBoardPage)?.UnregisterServiceEvents(); } Service.SongListMoveTo(); NavigateToBase?.Invoke( null, new MusicBoardParameter { SID = item.SID, SSID = item.SSID, AID = item.AID, SHA256 = item.SHA256, Url = item.Url, Song = song, FrameType = FrameType.UpContent }, GetFrameInstance(FrameType.UpContent), GetPageType(NavigateType.MusicBoard)); }
private void FilterGridView_ItemClick(object sender, ItemClickEventArgs e) { var item = e.ClickedItem as ItemGroup <MovieItem>; if (item == null || item.GroupPathUrl == null) { return; } var keyword = new Regex(@"/tv/(?<key_word>.+)").Match(item.GroupPathUrl).Groups["key_word"].Value; if (keyword != "") { keyword = UriDecoder.EditKeyWordsForTVFilter(keyword, "tv"); } NavigateToBase?.Invoke( null, new NavigateParameter { ToUri = new Uri(item.GroupPathUrl), ApiHeadString = keyword, Title = item.GroupName }, GetFrameInstance(FrameType.Content), GetPageType(NavigateType.TVFilter)); }
private void SetActionLink(string callBack) { var actionMatch = new Regex(@"actionlink:.+").Match(callBack); if (actionMatch.Value == "") { return; } var formatStr = actionMatch.Value.Substring(11); Uri.TryCreate(formatStr, UriKind.Absolute, out var uri); if (uri != null) { NavigateToBase?.Invoke( null, new NavigateParameter { FrameType = FrameType.UpContent, Title = GetUIString("LinkContent"), ToUri = uri }, GetFrameInstance(FrameType.UpContent), GetPageType(NavigateType.Undefined)); } }
private void ReviewsListView_ItemClick(object sender, ItemClickEventArgs e) { var item = e.ClickedItem as MovieContentReview; if (item == null) { return; } NavigateToBase?.Invoke(null, new NavigateParameter { ToUri = new Uri(item.PathUrl), FrameType = frameType == FrameType.Content ? FrameType.UpContent : FrameType.UserInfos, Title = item.Title }, GetFrameInstance(frameType == FrameType.Content ? FrameType.UpContent : FrameType.UserInfos), GetPageType(NavigateType.MovieContentQuestion)); }