private async Task RefreshList() { var list = await BaiduYun.SharedFiles(); if (list != null) { UpdateItems(list); } }
private async void SendVCode(object sender, RoutedEventArgs e) { clock = 60; if (!await BaiduYun.SendEmailVCode(authtoken)) { this.Hide(); } SendButton.Visibility = Visibility.Collapsed; Countdown.Visibility = Visibility.Visible; timer.Start(); }
private async void RefreshCaptcha(object sender, RoutedEventArgs args) { var obj = await BaiduYun.RefreshCaptcha(token, vcodetype); if (obj == null || obj.errInfo.no != 0) { return; } codestring = obj.data.verifyStr; UpdateCaptcha(codestring); }
private async void UpdateQuota() { var quota = await BaiduYun.GetQuota(); if (quota == null) { return; } QuotaInfo.Value = ((double)quota.used) / quota.total; ToolTipService.SetToolTip(QuotaInfo, new ToolTip() { Content = Utils.FormattedSize(quota.used) + '/' + Utils.FormattedSize(quota.total), }); }
private async void DisableShare(object sender, RoutedEventArgs e) { var item = (sender as FrameworkElement).DataContext as SharedFileAdapter; var list = ShareList.SelectedItems.Count == 0 ? new List <SharedFile>() { item.File } : ShareList.SelectedItems.Select(file => (file as SharedFileAdapter).File).ToList(); if (await BaiduYun.DisableShare(list)) { UpdateItems(shares.Select(share => share.File).Except(list)); } }
private async Task BrowsePath(YunFileAdapter folder) { if (folder.Children == null) { var list = await BaiduYun.GetFileList(folder.File.path); if (list == null) { return; } folder.Children = list.Select((item) => new YunFileAdapter(item)).ToList(); } navigator.Add(folder); UpdateItems(folder.Children); }
public async Task <bool> VCodeAsync() { var ButtonClicked = await ShowAsync(); if (ButtonClicked == ContentDialogResult.Primary) { if (clock <= 0) { return(false); } return(await BaiduYun.VerifyEmailVCode(authtoken, VCodeBox.Text)); } else { return(false); } }
private async void CreateShare(object sender, RoutedEventArgs e) { var item = (sender as FrameworkElement).DataContext as YunFileAdapter; var list = FileList.SelectedItems.Count == 0 ? new List <YunFile>() { item.File } : FileList.SelectedItems.Select(file => (file as YunFileAdapter).File).ToList(); var password = await UWPUtils.InputDialog("设置分享密码", "", "空值为无密码"); if (await BaiduYun.CreateShare(list, password)) { Share.ListRefreshed = false; FileList.SelectedItems.Clear(); } }
private async void RenameTo(object sender, RoutedEventArgs e) { var context = (sender as FrameworkElement).DataContext as YunFileAdapter; var file = context.File; var newname = await UWPUtils.InputDialog("重命名为:", file.server_filename); if (newname != null && await BaiduYun.RenameFile(file.path, newname)) { var oldpath = file.path; var newpath = oldpath.Replace(file.server_filename, newname); file.server_filename = newname; file.path = newpath; if (file.isdir == 1) { context.Children = null; } UpdateItems(current); } }
private async void MoveToTrash(object sender, RoutedEventArgs e) { var item = ((sender as FrameworkElement).DataContext as YunFileAdapter).File; var list = FileList.SelectedItems.Count == 0 ? new List <YunFile>() { item } : FileList.SelectedItems.Select((file) => (file as YunFileAdapter).File).ToList(); if (await BaiduYun.MoveToTrash(list)) { // TODO: improve performance of remove action foreach (var file in list) { current.RemoveAll((adapter) => adapter.File == file); } FileList.ItemsSource = new List <YunFileAdapter>(current); } }
private async void ItemTapped(object sender, TappedRoutedEventArgs e) { var item = (sender as FrameworkElement).DataContext as YunFileAdapter; switch (item.Type) { case FileType.Folder: await BrowsePath(item); break; case FileType.Image: var thumbs = item.File.thumbs; var url = thumbs?.url1 ?? thumbs?.url2 ?? thumbs?.url3; if (url == null) { return; } await UWPUtils.ImageDialog(item.File.server_filename, url); FileList.SelectedItems.Clear(); break; case FileType.Audio: case FileType.Video: var media = await BaiduYun.GetFileDownloadLink(item.File); if (media == null) { return; } await UWPUtils.MediaDialog(item.File.server_filename, media); FileList.SelectedItems.Clear(); break; default: break; } }
private async void UpdateCaptcha(string codestring) { var buffer = await BaiduYun.CaptchaImage(codestring); CaptchaImage.Source = await UWPUtils.ImageFromBuffer(buffer); }
private async void LoginButtonClicked(object sender, RoutedEventArgs e) { var mainPage = (App.Current as App).MainPage; string username = NameBox.Text, password = PasswordBox.Password; Logging = true; LoggingStep = "测试网络连接……"; ErrorReason = ""; if (!await BaiduYun.Init()) { Logging = false; ErrorReason = "无法与百度获取联系"; return; } var gid = Utils.GIDGenerator(); LoggingStep = "获取登录 token……"; var token = await BaiduYun.GetToken(gid); if (token == null) { Logging = false; return; } LoggingStep = "获取 RSA 密钥……"; var rsa = await BaiduYun.GetRSA(token); if (rsa == null || rsa.errno != 0) { Logging = false; ErrorReason = "获取 RSA 密钥失败"; return; } //LoggingStep = "获取账户状态……"; //var status = await BaiduYun.CheckAccountState(token, username); //if (status == null || status.errInfo.no != 0) { // Logging = false; // ErrorReason = "账户异常" + (status == null ? "" : String.Format("-异常代码:{0}", status.errInfo.no)); // return; //} string codestring = null, vcodetype = null, verifycode = null; LoggingStep = "正在登录……"; for (;;) { if (!String.IsNullOrWhiteSpace(codestring)) { var dialog = new Pages.CaptchaDialog(token, codestring, vcodetype); Tuple <string, string> tuple = await dialog.CaptchaAsync(); verifycode = tuple.Item1; codestring = tuple.Item2; if (String.IsNullOrWhiteSpace(verifycode)) { Logging = false; ErrorReason = "您中止了验证码输入"; return; } if (!await BaiduYun.CheckCaptcha(token, codestring, verifycode)) { Logging = false; ErrorReason = "验证码错误"; return; } } var result = await BaiduYun.Login(token, rsa, username, password, codestring, verifycode, gid); if (String.IsNullOrEmpty(result)) { Logging = false; ErrorReason = "网络异常,无法继续登录"; return; } var query = Utils.ParseQueryString(result); int error = Int32.Parse(query["err_no"]); switch (error) { case Errors.OK: goto OK; case Errors.CAPTCHA_REQUIRED: case Errors.CAPTCHA: codestring = query["codeString"]; vcodetype = query["vcodetype"]; continue; case Errors.EXTERNAL_VERIFICATION_REQUIRED: var auth_token = query["authtoken"]; var lstr = query["lstr"]; var ltoken = query["ltoken"]; var dialog = new Pages.EmailVerifyDialog(auth_token); if (!await dialog.VCodeAsync()) { Logging = false; ErrorReason = "邮箱验证失败"; return; } if (!await BaiduYun.ReVerifyLogin(lstr, ltoken)) { Logging = false; ErrorReason = "登录失败"; return; } goto OK; default: Logging = false; ErrorReason = String.Format("登录异常,错误码{0}", error); return; } } OK: LoggingStep = "正在获取 BDSToken……"; var bdstoken = await BaiduYun.GetBDSToken(); var uk = await BaiduYun.GetUserUK(); if (bdstoken == null || uk == null) { Logging = false; ErrorReason = "网络异常"; return; } LoggingStep = "正在获取用户名……"; var realun = await BaiduYun.GetUserName(); // real username if (realun == null) { Logging = false; ErrorReason = "网络异常"; return; } var json = Globals.everything; var user = await BaiduYun.GetUserInfo(uk); if (user == null || user.errno != 0) { Logging = false; ErrorReason = "无法获取账户信息"; return; } var userinfo = user.user_info; json.SetNamedValue("currentUser", JsonValue.CreateStringValue(userinfo.uname)); var u = new User() { UserName = realun, AvatarUrl = userinfo.avatar_url, UK = uk, SavePassword = SavePassword.IsChecked ?? false, AutoLogin = (SavePassword.IsChecked ?? false) && (AutoLogin.IsChecked ?? false), }; LocalUtils.AddUser(u, password); Globals.bdstoken = bdstoken; Logging = false; mainPage.SetAsOnline(u); mainPage.RootFrame.Navigate(typeof(Files), u); mainPage.RootFrame.BackStack.Clear(); }