Exemplo n.º 1
0
        private async Task RefreshList()
        {
            var list = await BaiduYun.SharedFiles();

            if (list != null)
            {
                UpdateItems(list);
            }
        }
Exemplo n.º 2
0
 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();
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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),
            });
        }
Exemplo n.º 5
0
        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));
            }
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        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();
            }
        }
Exemplo n.º 9
0
        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);
            }
        }
Exemplo n.º 10
0
        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);
            }
        }
Exemplo n.º 11
0
        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;
            }
        }
Exemplo n.º 12
0
        private async void UpdateCaptcha(string codestring)
        {
            var buffer = await BaiduYun.CaptchaImage(codestring);

            CaptchaImage.Source = await UWPUtils.ImageFromBuffer(buffer);
        }
Exemplo n.º 13
0
        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();
        }