JLChen
2021-01-11 5a5a2b696866f947b6025d26c3302e8ffef46435
Crabtree/SmartHome/UI/SimpleControl/Phone/Register/Databackup.cs
@@ -73,7 +73,7 @@
                    var btnPoint = new Button () {
                        Width = Application.GetRealWidth (10),
                        Height = Application.GetRealHeight (10),
                        Height = Application.GetRealWidth (10),
                        X = Application.GetRealWidth (50),
                        Gravity = Gravity.CenterVertical,
                        UnSelectedImagePath = "Item/Point.png",
@@ -184,8 +184,8 @@
                };
                dialog.AddChidren (dialogBodyView);
                Button btnTitle = new Button () {
                    Height = Application.GetRealHeight(80),
                Button btnTitle = new Button () {
                    Height = Application.GetRealHeight (80),
                    BackgroundColor = SkinStyle.Current.DialogTitle,
                    TextAlignment = TextAlignment.Center,
                    TextID = R.MyInternationalizationString.Backup,
@@ -206,7 +206,7 @@
                EditText etBackupRemark = new EditText () {
                    Gravity = Gravity.CenterHorizontal,
                    Y = btnackupRemark.Bottom ,
                    Y = btnackupRemark.Bottom,
                    Width = Application.GetRealWidth (400),
                    Height = Application.GetRealHeight (80),
                    TextAlignment = TextAlignment.Center,
@@ -219,10 +219,10 @@
                etBackupRemark.EditorEnterAction += (obj) => {
                    Application.HideSoftInput ();
                };
                FrameLayout bottomView = new FrameLayout () {
                    Y = Application.GetRealHeight(420),
                    Height = Application.GetRealHeight(85),
                FrameLayout bottomView = new FrameLayout () {
                    Y = Application.GetRealHeight (420),
                    Height = Application.GetRealHeight (85),
                    BackgroundColor = SkinStyle.Current.DialogTitle
                };
                dialogBodyView.AddChidren (bottomView);
@@ -237,16 +237,16 @@
                    dialog.Close ();
                };
                Button btnBottomLine = new Button () {
                Button btnBottomLine = new Button () {
                    X = btnClose.Right,
                    Width =1,
                    Width = 1,
                    BackgroundColor = SkinStyle.Current.Black50Transparent,
                };
                bottomView.AddChidren (btnBottomLine);
                Button btnSave = new Button () {
                Button btnSave = new Button () {
                    X = btnBottomLine.Right,
                    Width = Application.GetRealWidth(249),
                    Width = Application.GetRealWidth (249),
                    TextID = R.MyInternationalizationString.SAVE,
                    TextAlignment = TextAlignment.Center
                };
@@ -311,7 +311,7 @@
                    //GetUserFolderObj requestObj = new GetUserFolderObj () { LevelID = UserConfig.Instance.CurrentRegion.Id };
                    var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
                    var revertObj = MainPage.RequestHttps (API.GetHomeDataBackupPagger, requestJson, urlHead);
                    if (revertObj.StateCode.ToUpper () == "SUCCESS") {
                    if (revertObj.StateCode.ToUpper () == StateCode.SUCCESS) {
                        var data = Newtonsoft.Json.JsonConvert.DeserializeObject<GetBackupListResult> (revertObj.ResponseData.ToString ());
                        //var list = new List<BackupListNameInfo> ();
                        //foreach (var data2 in data.PageData) {
@@ -352,7 +352,7 @@
                    //});
                } catch {
                    Application.RunOnMainThread (() => {
                        new Alert ("", Language.StringByID (R.MyInternationalizationString.CheckInternet),Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                        new Alert ("", Language.StringByID (R.MyInternationalizationString.CheckInternet), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                    });
                } finally {
                    Application.RunOnMainThread (() => {
@@ -382,7 +382,7 @@
            };
            btnDelFile.MouseUpEventHandler += (sender, e) => {
                Alert alert = new Alert ("", Language.StringByID (R.MyInternationalizationString.AreYouSureToDeleteFile), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim));
                alert.ResultEventHandler += ( sender2,  e2) => {
                alert.ResultEventHandler += (sender2, e2) => {
                    if (e2) {
                        DeleteFolderData (folderID);
                    }
@@ -390,13 +390,18 @@
                alert.Show ();
            };
            if (MainPage.LoginUser.AccountType != 1) {
            //if (MainPage.LoginUser.AccountType != 1) {
            //    rowView.AddRightView (btnDelFile);
            //}
            //2020-07-01 当前住宅属于自己的 允许删除备份
            if (!MainPage.IsAdministrator) {
                rowView.AddRightView (btnDelFile);
            }
            var btnPoint = new Button () {
                Width = Application.GetRealWidth (10),
                Height = Application.GetRealHeight (10),
                Height = Application.GetRealWidth (10),
                X = Application.GetRealWidth (25),
                Gravity = Gravity.CenterVertical,
                UnSelectedImagePath = "Item/Point.png",
@@ -416,7 +421,7 @@
            btnName.MouseLongEventHandler += (sender, e) => {
                Alert alert = new Alert ("", Language.StringByID (R.MyInternationalizationString.AreYouSureToDeleteFile), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim));
                alert.ResultEventHandler += ( sender2,  e2) => {
                alert.ResultEventHandler += (sender2, e2) => {
                    if (e2) {
                        DeleteFolderData (folderID);
                    }
@@ -434,8 +439,8 @@
            rowView.AddChidren (backupIcon);
            var Backup_restores = new Button () {
                Width = Application.GetRealWidth (56),
                Height = Application.GetRealHeight (57),
                Width = Application.GetMinRealAverage (56),
                Height = Application.GetMinRealAverage (57),
                X = backupIcon.Right + Application.GetRealWidth (20),
                UnSelectedImagePath = "Register/Backup_ restores.png",
                SelectedImagePath = "Register/Backup_ restores_on.png",
@@ -474,7 +479,7 @@
                    //DeleteFolderDataObj requestObj = new DeleteFolderDataObj () { Id = folderID };
                    var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
                    var revertObj = MainPage.RequestHttps (API.DelHomeAppGatewayName, requestJson, urlHead);
                    if (revertObj.StateCode.ToUpper () == "SUCCESS") {
                    if (revertObj.StateCode.ToUpper () == StateCode.SUCCESS) {
                        Application.RunOnMainThread (() => {
                            DatabackupShow ();
                        });
@@ -500,7 +505,7 @@
            Application.RunOnMainThread (() => {
                MainPage.Loading.Start ("Please wait...");
            });
            try {
                var requestObj = new DelHomeAppGatewayNameObj () {
@@ -517,7 +522,7 @@
                //DeleteFolderDataObj requestObj = new DeleteFolderDataObj () { Id = folderID };
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
                var revertObj = MainPage.RequestHttps (API.DelHomeAppGatewayName, requestJson, urlHead);
                if (revertObj.StateCode.ToUpper () == "SUCCESS") {
                if (revertObj.StateCode.ToUpper () == StateCode.SUCCESS) {
                    //删除成功
                } else {
                    //删除失败
@@ -584,7 +589,7 @@
                    //if (string.IsNullOrEmpty (UserConfig.Instance.GatewayMAC)) return;
                    //2020-01-11 没绑定MAC不允许上传备份
                    if (!UserConfig.Instance.CheckHomeGateways () || string.IsNullOrEmpty (UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId)) {
                    if (!UserConfig.Instance.CheckHomeGatewaysNotEmpty()) {
                        MainPage.ShowAlertOnMainThread (ErrorCode.BindGatewayFirst);
                        return;
                    }
@@ -599,15 +604,16 @@
                    if (requestObj.IsOtherAccountCtrl) {
                        urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
                        requestObj.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
                    }
                    }
                    //AddFolderObj requestObj = new AddFolderObj () { LevelID = UserConfig.Instance.CurrentRegion.Id ,Name = groupName };
                    var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
                    var revertObj = MainPage.RequestHttps (API.AddHomeAppGatewayName, requestJson, urlHead);
                    if (revertObj.StateCode.ToUpper () == "SUCCESS") {
                        var DATA = Newtonsoft.Json.JsonConvert.DeserializeObject<AddBackupNameResult> (revertObj.ResponseData.ToString());
                    if (revertObj.StateCode.ToUpper () == StateCode.SUCCESS) {
                        var DATA = Newtonsoft.Json.JsonConvert.DeserializeObject<AddBackupNameResult> (revertObj.ResponseData.ToString ());
                        var addFolderID = DATA.BackupClassId;
                        UpLoadBackupFileToDB (addFolderID);
                        //UpLoadBackupFileToDB (addFolderID);
                        UpLoadBackupFileToDBNew (addFolderID);
                    } else {
@@ -670,75 +676,75 @@
        }
        /// <summary>
        /// 上传备份文件
        /// </summary>
        /// <param name="mBackupClassId"></param>
        void UpLoadBackupFileToDB (string mBackupClassId)
        {
        ///// <summary>
        ///// 上传备份文件
        ///// </summary>
        ///// <param name="mBackupClassId"></param>
        //void UpLoadBackupFileToDB (string mBackupClassId)
        //{
            var backuplist = IO.FileUtils.ReadFiles ();
            int index = 0;
            foreach (var fileName in backuplist) {
                index++;
                /// <summary>
                /// 如果是特殊的注册登陆文件,则不需要备份到服务器
                /// </summary>
                if (fileName == UserInfo.GlobalRegisterFile) {
                    continue;
                }
                //整理数据
                var datainfo = new FileInfoData ();
                datainfo.BackupFileName = fileName;
                datainfo.BackupFileContent = Shared.IO.FileUtils.ReadFile (fileName);
        //    var backuplist = IO.FileUtils.ReadFiles ();
        //    int index = 0;
        //    foreach (var fileName in backuplist) {
        //        index++;
        //        /// <summary>
        //        /// 如果是特殊的注册登陆文件,则不需要备份到服务器
        //        /// </summary>
        //        if (fileName == UserInfo.GlobalRegisterFile) {
        //            continue;
        //        }
        //        //整理数据
        //        var datainfo = new FileInfoData ();
        //        datainfo.BackupFileName = fileName;
        //        datainfo.BackupFileContent = Shared.IO.FileUtils.ReadFile (fileName);
                var list = new List<FileInfoData> ();
                list.Add (datainfo);
        //        var list = new List<FileInfoData> ();
        //        list.Add (datainfo);
                var upData = new UploadHomeAppGatewaySubFilesObj ();
                upData.HomeId = UserConfig.Instance.CurrentRegion.Id;
                upData.BackupClassId = mBackupClassId;
                upData.UploadSubFileLists = list;
                //获取控制主人账号的Token
                upData.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
                string urlHead = MainPage.RequestHttpsHost;
                if (upData.IsOtherAccountCtrl) {
                    urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
                    upData.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
                }
        //        var upData = new UploadHomeAppGatewaySubFilesObj ();
        //        upData.HomeId = UserConfig.Instance.CurrentRegion.Id;
        //        upData.BackupClassId = mBackupClassId;
        //        upData.UploadSubFileLists = list;
        //        //获取控制主人账号的Token
        //        upData.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
        //        string urlHead = MainPage.RequestHttpsHost;
        //        if (upData.IsOtherAccountCtrl) {
        //            urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
        //            upData.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
        //        }
                //AddUserBackupObj requestObj2 = new AddUserBackupObj () { LevelID = Convert.ToInt32 (revertObj.ResponseData), Name = fileName, DetailByte = IO.FileUtils.ReadFile (fileName) };
                var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (upData);
                var revertObj2 = MainPage.RequestHttps (API.UploadHomeAppGatewaySubFiles, requestJson2, urlHead);
                if (revertObj2.StateCode.ToUpper () == "SUCCESS") {
                    //index++;
                    Application.RunOnMainThread (() => {
                        int pro = (int)(index * 1.0 / backuplist.Count * 100);
                        MainPage.Loading.Text = pro.ToString () + "%";
                    });
                } else {
                    //提示错误
                    break;
                }
            }
            if (index != backuplist.Count) {
                //2020-01-11
                DeleteFolderDataAfterUploadFailed (mBackupClassId);
                Shared.Application.RunOnMainThread (() => {
                    new Alert ("", "Upload failed!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                    MainPage.Loading.Hide ();
                });
        //        //AddUserBackupObj requestObj2 = new AddUserBackupObj () { LevelID = Convert.ToInt32 (revertObj.ResponseData), Name = fileName, DetailByte = IO.FileUtils.ReadFile (fileName) };
        //        var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (upData);
        //        var revertObj2 = MainPage.RequestHttps (API.UploadHomeAppGatewaySubFiles, requestJson2, urlHead);
        //        if (revertObj2.StateCode.ToUpper () == StateCode.SUCCESS) {
        //            //index++;
        //            Application.RunOnMainThread (() => {
        //                int pro = (int)(index * 1.0 / backuplist.Count * 100);
        //                MainPage.Loading.Text = pro.ToString () + "%";
        //            });
        //        } else {
        //            //提示错误
        //            break;
        //        }
        //    }
        //    if (index != backuplist.Count) {
        //        //2020-01-11
        //        DeleteFolderDataAfterUploadFailed (mBackupClassId);
        //        Shared.Application.RunOnMainThread (() => {
        //            new Alert ("", "Upload failed!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //            MainPage.Loading.Hide ();
        //        });
            }
        //    }
            //Shared.Application.RunOnMainThread (() => {
            //    if (index == 0) {
            //        new Alert ("", "Upload failed!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
            //    }
        //    //Shared.Application.RunOnMainThread (() => {
        //    //    if (index == 0) {
        //    //        new Alert ("", "Upload failed!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
        //    //    }
            //    MainPage.Loading.Hide ();
            //});
        }
        //    //    MainPage.Loading.Hide ();
        //    //});
        //}
@@ -750,7 +756,7 @@
        {
            //是否确定恢复该文件数据信息
            Alert alert = new Alert ("", Language.StringByID (R.MyInternationalizationString.SureToRestoreFileInformation), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim));
            alert.ResultEventHandler += ( sender2,  e2) => {
            alert.ResultEventHandler += (sender2, e2) => {
                if (e2) {
                    MainPage.Loading.Start ("Download...");
                    System.Threading.Tasks.Task.Run (() => {
@@ -780,7 +786,7 @@
                            //var requestObj2 = new UserBackupListObj () { LevelID = folderID };
                            var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj2);
                            var revertObj2 = MainPage.RequestHttps (API.GetHomeDataBackupUploadListPagger, requestJson2, urlHead);
                            if (revertObj2.StateCode.ToUpper() == "SUCCESS") {
                            if (revertObj2.StateCode.ToUpper () == StateCode.SUCCESS) {
                                var fileListData = Newtonsoft.Json.JsonConvert.DeserializeObject<LoadBackInfoResult> (revertObj2.ResponseData.ToString ());
                                var responseDataObj = fileListData.PageData;
                                ////获取文件名字
@@ -801,8 +807,13 @@
                                    mDownLoad.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
                                }
                                int index = 0;
                                MultiThreadDownload (responseDataObj, mDownLoad, mUrlHead);
                                //int index = 0;
                                //foreach (var file in responseDataObj) {
                                //    index++;
                                //    if (file.BackupFileName == "null" || "UserConfig" == file.BackupFileName) {
                                //        continue;
                                //    }
@@ -811,100 +822,56 @@
                                //    var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject (mDownLoad);
                                //    var revertObj3 = MainPage.RequestHttpsReturnByte (API.DownloadSomeDataBackup, requestJson3, false, mUrlHead);
                                //    if (revertObj3 != null) {
                                //        index++;
                                //        IO.FileUtils.WriteFileByBytes (file.BackupFileName, revertObj3);
                                //        Application.RunOnMainThread (() => {
                                //            int pro = (int)(index * 1.0 / responseDataObj.Count * 100);
                                //            MainPage.Loading.Text = pro.ToString () + "%";
                                //        });
                                //    } else {
                                //        break;
                                //    }
                                //    //if (revertObj3.StateCode.ToUpper() == "SUCCESS") {
                                //    //    var jsonBytes = Newtonsoft.Json.JsonConvert.SerializeObject (revertObj3.ResponseData);
                                //    //    var byresss = Newtonsoft.Json.JsonConvert.DeserializeObject<byte[]> (jsonBytes);
                                //    //    index++;
                                //    //    //新增加了住宅区域,旧的备份数据没有区域属性,当获取到这个文件时,把当前到住宅信息更到当前备份到数据里面
                                //    //    if ("UserConfig" == file.BackupFileName){
                                //    //        //var regionTemp = UserConfig.Instance.CurrentRegion;
                                //    //        //UserConfig.Instance.RefreshUserConfig ();
                                //    //        //UserConfig.Instance.CurrentRegion = regionTemp;
                                //    //        //UserConfig.Instance.SaveUserConfig ();
                                //    //        ////UserConfig.Instance.GatewayList
                                //    //        continue;
                                //    //    }
                                //    //    IO.FileUtils.WriteFileByBytes (file.BackupFileName, byresss);
                                //    //    Application.RunOnMainThread (() => {
                                //    //        int pro = (int)(index * 1.0 / responseDataObj.Count * 100);
                                //    //        MainPage.Loading.Text = pro.ToString () + "%";
                                //    //    });
                                //    //} else {
                                //    //    //错误提示
                                //    //}
                                //}
                                foreach (var file in responseDataObj) {
                                    index++;
                                    if (file.BackupFileName == "null" || "UserConfig" == file.BackupFileName) {
                                        continue;
                                    }
                                    mDownLoad.BackupFileName = file.BackupFileName;
                                    //var requestObj3 = new BackupDetailObj () { Id = file.Id };
                                    var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject (mDownLoad);
                                    var revertObj3 = MainPage.RequestHttpsReturnByte (API.DownloadSomeDataBackup, requestJson3, false, mUrlHead);
                                    if (revertObj3 != null) {
                                        IO.FileUtils.WriteFileByBytes (file.BackupFileName, revertObj3);
                                        Application.RunOnMainThread (() => {
                                            int pro = (int)(index * 1.0 / responseDataObj.Count * 100);
                                            MainPage.Loading.Text = pro.ToString () + "%";
                                        });
                                    } else {
                                        break;
                                    }
                                }
                                if (index != responseDataObj.Count) {
                                    //删除已经下载的文件个数错误
                                    var fileNames2 = IO.FileUtils.ReadFiles ();
                                    foreach (var fileName in fileNames2) {
                                        if (fileName == UserInfo.GlobalRegisterFile) {
                                            continue;
                                        }
                                        IO.FileUtils.DeleteFile (fileName);
                                    }
                                //if (index != responseDataObj.Count) {
                                //    //删除已经下载的文件个数错误
                                //    var fileNames2 = IO.FileUtils.ReadFiles ();
                                //    foreach (var fileName in fileNames2) {
                                //        if (fileName == UserInfo.GlobalRegisterFile) {
                                //            continue;
                                //        }
                                //        IO.FileUtils.DeleteFile (fileName);
                                //    }
                                    MainPage.ShowAlertOnMainThread ("Download failed!");
                                //    MainPage.ShowAlertOnMainThread ("Download failed!");
                                    return;
                                }
                                //    return;
                                //}
                                MainPage.LoginUser.SaveUserInfo ();
                                Room.InitAllRoom ();
                                Application.RunOnMainThread (() => {
                                    this.RemoveFromParent ();
                                    CommonPage.IsRemote = false;
                                    UserMiddle.Init ();
                                    EquipmentPublicClass.CheckLinkRemote (UserConfig.Instance.internetStatus);
                                    new Alert ("", Language.StringByID (R.MyInternationalizationString.RestoreFileIsSuccessfull),
                                   Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                                });
                                MainPage.LoginUser = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInfo> (System.Text.Encoding.UTF8.GetString (Shared.IO.FileUtils.ReadFile (UserInfo.GlobalRegisterFile)));
                                if (MainPage.LoginUser != null) {
                                    MainPage.LoginUser.LastTime = System.DateTime.Now;
                                    MainPage.LoginUser.SaveUserInfo ();
                                }
                                //MainPage.LoginUser.SaveUserInfo ();
                                //Room.InitAllRoom ();
                                //Application.RunOnMainThread (() => {
                                //    this.RemoveFromParent ();
                                //    CommonPage.IsRemote = false;
                                //    UserMiddle.Init ();
                                //    EquipmentPublicClass.CheckLinkRemote (UserConfig.Instance.internetStatus);
                                //    new Alert ("", Language.StringByID (R.MyInternationalizationString.RestoreFileIsSuccessfull),
                                //   Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                                //});
                                //MainPage.LoginUser = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInfo> (System.Text.Encoding.UTF8.GetString (Shared.IO.FileUtils.ReadFile (UserInfo.GlobalRegisterFile)));
                                //if (MainPage.LoginUser != null) {
                                //    MainPage.LoginUser.LastTime = System.DateTime.Now;
                                //    MainPage.LoginUser.SaveUserInfo ();
                                //}
                            }
                        } catch (Exception ex) {
                            Shared.Application.RunOnMainThread (() => {
                                new Alert ("", Language.StringByID (R.MyInternationalizationString.CheckInternet),
                                           Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                            });
                            Utlis.WriteLine (ex.ToString());
                            Utlis.WriteLine (ex.ToString ());
                        } finally {
                            Shared.Application.RunOnMainThread (() => {
                                MainPage.Loading.Hide ();
@@ -915,5 +882,344 @@
            };
            alert.Show ();
        }
        bool DownloadSomeDataBackup (DownloadSomeDataBackupObj mmDownLoad, string mUrlHead, LoadBackupFileNameInfo file)
        {
            DownloadSomeDataBackupObj mDownLoad = mmDownLoad;
            mDownLoad.BackupFileName = file.BackupFileName;
            //var requestObj3 = new BackupDetailObj () { Id = file.Id };
            var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject (mDownLoad);
            var revertObj3 = MainPage.RequestHttpsReturnByteNew (API.DownloadSomeDataBackup, requestJson3, mUrlHead);
            if (revertObj3 != null) {
                IO.FileUtils.WriteFileByBytes (file.BackupFileName, revertObj3);
                return true;
            } else {
                return false;
            }
        }
        /// <summary>
        /// 删除本地文件
        /// </summary>
        void ReadFilesAndDelete ()
        {
            var fileNames = IO.FileUtils.ReadFiles ();
            foreach (var fileName in fileNames) {
                if (fileName == UserInfo.GlobalRegisterFile || fileName == UserConfig.configFile) {
                    continue;
                }
                IO.FileUtils.DeleteFile (fileName);
            }
        }
        private readonly object SendLocker = new object ();
        private readonly object DownloadLocker = new object ();
        /// <summary>
        /// 多线程下载
        /// </summary>
        void MultiThreadDownload (List<LoadBackupFileNameInfo> dataList, DownloadSomeDataBackupObj mDownLoad, string mUrlHead, int maxThreads = 5)
        {
            int index = 0;
            int indexCount = 0;
            var mFileList = dataList.FindAll ((obj) => obj.BackupFileName != "null" && obj.BackupFileName != UserConfig.configFile && obj.BackupFileName != UserInfo.GlobalRegisterFile && obj.BackupFileName != "AccountListDB" && obj.BackupFileName != CommonConfig.ConfigFile);
            if (maxThreads > mFileList.Count) {
                maxThreads = mFileList.Count;
            }
            if (mFileList.Count <= 0) return;
            int resultCount = mFileList.Count / maxThreads;
            //int residue = mFileList.Count % maxThreads;
            /*开启若干线程,分别下载对应的资源*/
            for (int i = 1; i <= maxThreads; i++) {
                int startIndex = ((i - 1) * resultCount + 0);
                int endIndex = resultCount * i - 1;
                if (i == maxThreads) {
                    /*
                     * 最后一个线程
                     * */
                    endIndex = mFileList.Count - 1;
                }
                var id = i;
                var startIndex1 = startIndex;
                var endIndex1 = endIndex;
                //Utlis.WriteLine ($"下载线程:{id} startIndex1:{startIndex1}  endIndex1:{endIndex1}");
                new System.Threading.Thread (() => {
                    for (var j = startIndex1; j <= endIndex1; j++) {
                        try {
                            //如果失败重新下载,重复3次
                            int errorCount = 0;
                            while (errorCount < 3) {
                                var result = DownloadSomeDataBackup (mDownLoad, mUrlHead, mFileList [j]);
                                if (result) {
                                    lock (DownloadLocker) {
                                        index++;
                                    }
                                    Application.RunOnMainThread (() => {
                                        int pro = (int)(index * 1.0 / mFileList.Count * 100);
                                        MainPage.Loading.Text = pro.ToString () + "%";
                                    });
                                    errorCount = 3;
                                } else {
                                    errorCount++;
                                    Utlis.WriteLine ($"下载失败: {mFileList [j].BackupFileName} 次数:{errorCount}");
                                }
                            }
                        } catch { } finally {
                            lock (SendLocker) {
                                indexCount++;
                            }
                        }
                        //var t1 = DateTime.Now.Second;
                        //var result = DownloadSomeDataBackup (mDownLoad, mUrlHead, mFileList [j]);
                        //if (result) {
                        //    index++;
                        //    Application.RunOnMainThread (() => {
                        //        int pro = (int)(index * 1.0 / mFileList.Count * 100);
                        //        MainPage.Loading.Text = pro.ToString () + "%";
                        //    });
                        //} else {
                        //    Utlis.WriteLine ($"下载失败: {mFileList [j].BackupFileName} 时间:{DateTime.Now.Second - t1}S");
                        //}
                        //indexCount++;
                        //Utlis.WriteLine ($"下载线程:{id}  完成index:{j}  indexCount: {indexCount}");
                    }
                }) { IsBackground = true }.Start ();
                System.Threading.Thread.Sleep (100);
            }
            while (indexCount < mFileList.Count) {
                System.Threading.Thread.Sleep (200);
            }
            Utlis.WriteLine ($"下载完成");
            if (index != mFileList.Count) {
                //删除已经下载的文件个数错误
                ReadFilesAndDelete ();
                Application.RunOnMainThread (() => {
                    new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.DownloadFailed),
                               Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                });
                return;
            }
            MainPage.LoginUser.SaveUserInfo ();
            Room.InitAllRoom ();
            Application.RunOnMainThread (() => {
                this.RemoveFromParent ();
                //CommonPage.IsRemote = false;
                UserMiddle.Init ();
                EquipmentPublicClass.CheckLinkRemote (UserConfig.Instance.internetStatus);
                new Alert ("", Language.StringByID (R.MyInternationalizationString.RestoreFileIsSuccessfull),
               Language.StringByID (R.MyInternationalizationString.Close)).Show ();
            });
            MainPage.LoginUser = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInfo> (System.Text.Encoding.UTF8.GetString (Shared.IO.FileUtils.ReadFile (UserInfo.GlobalRegisterFile)));
            if (MainPage.LoginUser != null) {
                MainPage.LoginUser.LastTime = System.DateTime.Now;
                MainPage.LoginUser.SaveUserInfo ();
            }
        }
        bool UploadDataBackup (UploadHomeAppGatewaySubFilesObj upData, string mUrlHead, List<string> fileList, int startIndex1, int endIndex1)
        {
            try {
                var list = new List<FileInfoData> ();
                for (var j = startIndex1; j <= endIndex1; j++) {
                    var datainfo = new FileInfoData ();
                    datainfo.BackupFileName = fileList [j];
                    datainfo.BackupFileContent = Shared.IO.FileUtils.ReadFile (fileList [j]);
                    list.Add (datainfo);
                }
                //整理数据
                UploadHomeAppGatewaySubFilesObj mUpData = upData;
                mUpData.UploadSubFileLists = list;
                var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (mUpData);
                var revertObj2 = MainPage.RequestHttps (API.UploadHomeAppGatewaySubFiles, requestJson2, mUrlHead);
                if (revertObj2.StateCode.ToUpper () == StateCode.SUCCESS) {
                    return true;
                } else {
                    //提示错误
                    return false;
                }
            } catch {
                return false;
            }
        }
        /// <summary>
        /// 上传备份文件
        /// 多次上传多个文件
        /// </summary>
        /// <param name="mBackupClassId"></param>
        void UpLoadBackupFileToDBNew (string mBackupClassId, int maxThreads = 20)
        {
            var backuplist = IO.FileUtils.ReadFiles ();
            var mFileList = backuplist.FindAll ((obj) => obj != "null" && obj != UserConfig.configFile && obj != UserInfo.GlobalRegisterFile && obj != "AccountListDB" && obj != CommonConfig.ConfigFile);
            if (mFileList.Count <= 0) return;
            if (maxThreads > mFileList.Count) {
                maxThreads = mFileList.Count;
            }
            int index = 0;
            int indexCount = 0;
            int resultCount = mFileList.Count / maxThreads;
            var upData = new UploadHomeAppGatewaySubFilesObj ();
            upData.HomeId = UserConfig.Instance.CurrentRegion.Id;
            upData.BackupClassId = mBackupClassId;
            //获取控制主人账号的Token
            upData.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
            string urlHead = MainPage.RequestHttpsHost;
            if (upData.IsOtherAccountCtrl) {
                urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
                upData.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
            }
            for (int i = 1; i <= resultCount; i++) {
                int startIndex = ((i - 1) * maxThreads + 0);
                int endIndex = maxThreads * i - 1;
                if (i == resultCount) {
                    /*最后一个线程* */
                    endIndex = mFileList.Count - 1;
                }
                var id = i;
                var startIndex1 = startIndex;
                var endIndex1 = endIndex;
                //2020-06-10 修改大图片大文件处理
                var result = UploadDataBackupNew (upData, urlHead, mFileList, startIndex1, endIndex1);
                if (result) {
                    index++;
                    Application.RunOnMainThread (() => {
                        int pro = (int)(index * 1.0 / resultCount * 100);
                        MainPage.Loading.Text = pro.ToString () + "%";
                    });
                }
                indexCount++;
            }
            Utlis.WriteLine ($"上传完成");
            if (index != resultCount) {
                //2020-01-11 备份失败
                DeleteFolderDataAfterUploadFailed (mBackupClassId);
                Shared.Application.RunOnMainThread (() => {
                    new Alert ("", Language.StringByID (R.MyInternationalizationString.FailedToBackupFile), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                    MainPage.Loading.Hide ();
                });
                return;
            }
            Application.RunOnMainThread (() => {
                //MainPage.Loading.Text = "100%";
                new Alert ("", Language.StringByID (R.MyInternationalizationString.BackupFileIsSuccessful), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
            });
        }
        /// <summary>
        /// 2020-06-05 需要等待云端增加接口
        /// 处理大文件和图片上传
        ///
        /// </summary>
        /// <param name="upData"></param>
        /// <param name="mUrlHead"></param>
        /// <param name="fileList"></param>
        /// <param name="startIndex1"></param>
        /// <param name="endIndex1"></param>
        /// <returns></returns>
        bool UploadDataBackupNew (UploadHomeAppGatewaySubFilesObj upData, string mUrlHead, List<string> fileList, int startIndex1, int endIndex1)
        {
            try {
                var list = new List<FileInfoData> ();
                for (var j = startIndex1; j <= endIndex1; j++) {
                    var datainfo = new FileInfoData ();
                    datainfo.BackupFileName = fileList [j];
                    datainfo.BackupFileContent = Shared.IO.FileUtils.ReadFile (fileList [j]);
                    if (datainfo.BackupFileContent.Length > 1024 * 10) {
                        var upDataBig = new UploadHomeAppGatewaySubFilesBigObj ();
                        upDataBig.RequestVersion = upData.RequestVersion;
                        upDataBig.HomeId = upData.HomeId;
                        upDataBig.BackupClassId = upData.BackupClassId;
                        upDataBig.FileName = fileList [j];
                        upDataBig.IsOtherAccountCtrl = upData.IsOtherAccountCtrl;
                        var revertObj5 = MainPage.RequestHttpsNewBig (API.UploadHomeAppGatewaySingleSubFile, datainfo.BackupFileContent, upDataBig, mUrlHead);
                    } else {
                        list.Add (datainfo);
                    }
                }
                //整理数据
                UploadHomeAppGatewaySubFilesObj mUpData = upData;
                mUpData.UploadSubFileLists = list;
                //var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (mUpData);
                //var revertObj2 = MainPage.RequestHttps (API.UploadHomeAppGatewaySubFiles, requestJson2, mUrlHead);
                //if (revertObj2.StateCode.ToUpper () == StateCode.SUCCESS) {
                //    return true;
                //} else {
                //    //提示错误
                //    return false;
                //}
                //2020-11-16 如果失败重新上传,重复3次
                int errorCount = 0;
                var result = false;
                while (errorCount < 3) {
                    var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (mUpData);
                    var revertObj2 = MainPage.RequestHttps (API.UploadHomeAppGatewaySubFiles, requestJson2, mUrlHead, MainPage.TIME_OUT_20);
                    if (revertObj2.StateCode.ToUpper () == StateCode.SUCCESS) {
                        result = true;
                        errorCount = 3;
                    } else {
                        errorCount++;
                        //Utlis.WriteLine ($"上传失败({startIndex1}-{endIndex1}),次数:{errorCount}");
                    }
                }
                return result;
            } catch {
                return false;
            }
        }
    }
}