陈嘉乐
2020-01-08 bbc74a6dae2e90a811b2507c5896fe89aa29ccc0
Crabtree/SmartHome/UI/SimpleControl/Phone/Register/Databackup.cs
@@ -32,7 +32,7 @@
                X = Application.GetRealWidth (90),
                Width = Application.GetRealWidth (640 - 180),
                TextAlignment = TextAlignment.Center,
                Text = UserConfig.Instance.CurrentRegion.RegionName + " " + Language.StringByID (R.MyInternationalizationString.Backup),
                Text = UserConfig.Instance.CurrentRegion.Name + " " + Language.StringByID (R.MyInternationalizationString.Backup),
                TextSize = 19,
                TextColor = SkinStyle.Current.TextColor1,
            };
@@ -78,20 +78,20 @@
                        Gravity = Gravity.CenterVertical,
                        UnSelectedImagePath = "Item/Point.png",
                        SelectedImagePath = "Item/Point.png",
                        Visible = homeTemp.RegionID != UserConfig.Instance.CurrentRegion.RegionID
                        Visible = homeTemp.Id != UserConfig.Instance.CurrentRegion.Id
                    };
                    rowView.AddChidren (btnPoint);
                    var btnName = new Button () {
                        Width = Application.GetRealWidth (550),
                        Text = homeTemp.RegionName,
                        Text = homeTemp.Name,
                        TextAlignment = TextAlignment.CenterLeft,
                        X = Application.GetRealWidth (90),
                        TextColor = SkinStyle.Current.TextColor1,
                    };
                    rowView.AddChidren (btnName);
                    if (homeTemp.RegionID == UserConfig.Instance.CurrentRegion.RegionID) {
                    if (homeTemp.Id == UserConfig.Instance.CurrentRegion.Id) {
                        Button btnCheck = new Button () {
                            X = Application.GetRealWidth (20),
                            Y = Application.GetRealHeight (25),
@@ -112,7 +112,7 @@
                            try {
                                var backuplist = IO.FileUtils.ReadFiles ();
                                int index = 0;
                                string oldRegionRootPath = IO.FileUtils.CreateRegionBackup (UserConfig.Instance.CurrentRegion.RegionName);
                                string oldRegionRootPath = IO.FileUtils.CreateRegionBackup (UserConfig.Instance.CurrentRegion.Name);
                                IO.FileUtils.DeleteRegionFiles (oldRegionRootPath);
                                foreach (var fileName in backuplist) {
                                    System.IO.FileInfo fileInfo = new System.IO.FileInfo (IO.FileUtils.RootPath + fileName);
@@ -127,7 +127,7 @@
                                    });
                                }
                                IO.FileUtils.DeleteAllFile ();
                                string newRegionRootPath = IO.FileUtils.CreateRegionBackup (homeTemp.RegionName);
                                string newRegionRootPath = IO.FileUtils.CreateRegionBackup (homeTemp.Name);
                                IO.FileUtils.RestoreRegionFiles (newRegionRootPath);
                                UserConfig.Instance.RefreshUserConfig ();
                                UserConfig.Instance.CurrentRegion = homeTemp;
@@ -298,15 +298,35 @@
                    Application.RunOnMainThread (() => {
                        MainPage.Loading.Start ("Please wait...");
                    });
                    GetUserFolderObj requestObj = new GetUserFolderObj () { LevelID = UserConfig.Instance.CurrentRegion.RegionID };
                    var requestObj = new GetHomeDataBackupPaggerObj () {
                        HomeId = UserConfig.Instance.CurrentRegion.Id,
                        LoginAccessToken = MainPage.LoginUser.LoginTokenString
                    };
                    //GetUserFolderObj requestObj = new GetUserFolderObj () { LevelID = UserConfig.Instance.CurrentRegion.Id };
                    var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
                    var revertObj = MainPage.RequestHttps ("GetUserFolder", requestJson,true,false);
                    if (revertObj.StateCode == "SUCCESS") {
                        var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<FolderRes>> (revertObj.ResponseData.ToString ());
                    var revertObj = MainPage.RequestHttps (API.GetHomeDataBackupPagger, requestJson);
                    if (revertObj.StateCode.ToUpper() == "SUCCESS") {
                        var data = Newtonsoft.Json.JsonConvert.DeserializeObject<GetBackupListResult> (revertObj.ResponseData.ToString ());
                        //var list = new List<BackupListNameInfo> ();
                        //foreach (var data2 in data.PageData) {
                        //    if (ZigbeeUniqueId != null && data2.GatewayUniqueId != ZigbeeUniqueId) {
                        //        continue;
                        //    }
                        //    if (getLogBackup == false && data2.BackupName == LogBackupName) {
                        //        //不获取Log备份
                        //        continue;
                        //    }
                        //    list.Add (data2);
                        //}
                        //var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<FolderRes>> (revertObj.ResponseData.ToString ());
                        if (data == null) return;
                        Application.RunOnMainThread (() => {
                            foreach(var folder in responseDataObj)
                            foreach(var folder in data.PageData)
                            {
                                addRow (folder.FolderName,folder.FolderID);
                                addRow (folder.BackupName, folder.Id);
                            }
                        });
                    }
@@ -328,7 +348,7 @@
            });
        }
        void addRow (string groupName,int folderID)
        void addRow (string groupName, string folderID)
        {
            var rowView = new RowLayout () {
                Height = Application.GetRealHeight (110),
@@ -350,23 +370,7 @@
                Alert alert = new Alert ("", Language.StringByID (R.MyInternationalizationString.AreYouSureToDeleteFile), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim));
                alert.ResultEventHandler += ( sender2,  e2) => {
                    if (e2) {
                        MainPage.Loading.Start ("Please wait...");
                        System.Threading.Tasks.Task.Run (() => {
                            try {
                                DeleteFolderDataObj requestObj = new DeleteFolderDataObj () { Id = folderID };
                                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
                                var revertObj = MainPage.RequestHttps ("DeleteFolderData", requestJson);
                                if (revertObj.StateCode == "SUCCESS") {
                                    Application.RunOnMainThread (() => {
                                        DatabackupShow ();
                                    });
                                }
                            } catch { } finally {
                                Application.RunOnMainThread (() => {
                                    MainPage.Loading.Hide ();
                                });
                            }
                        });
                        DeleteFolderData (folderID);
                    }
                };
                alert.Show ();
@@ -400,23 +404,7 @@
                Alert alert = new Alert ("", Language.StringByID (R.MyInternationalizationString.AreYouSureToDeleteFile), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim));
                alert.ResultEventHandler += ( sender2,  e2) => {
                    if (e2) {
                        MainPage.Loading.Start ("Please wait...");
                        System.Threading.Tasks.Task.Run (() => {
                            try {
                                DeleteFolderDataObj requestObj = new DeleteFolderDataObj () { Id = folderID };
                                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
                                var revertObj = MainPage.RequestHttps ("DeleteFolderData", requestJson);
                                if (revertObj.StateCode == "SUCCESS") {
                                    Application.RunOnMainThread (() => {
                                        DatabackupShow ();
                                    });
                                }
                            } catch { } finally {
                                Application.RunOnMainThread (() => {
                                    MainPage.Loading.Hide ();
                                });
                            }
                        });
                        DeleteFolderData (folderID);
                    }
                };
                alert.Show ();
@@ -450,6 +438,75 @@
        }
        /// <summary>
        /// 删除某个备份
        /// </summary>
        /// <param name="folderID"></param>
        void DeleteFolderData (string folderID)
        {
            MainPage.Loading.Start ("Please wait...");
            System.Threading.Tasks.Task.Run (() => {
                try {
                    var requestObj = new DelHomeAppGatewayNameObj () {
                        BackupClassId = folderID,
                        HomeId = UserConfig.Instance.CurrentRegion.Id,
                        LoginAccessToken = MainPage.LoginUser.LoginTokenString
                    };
                    //DeleteFolderDataObj requestObj = new DeleteFolderDataObj () { Id = folderID };
                    var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
                    var revertObj = MainPage.RequestHttps (API.DelHomeAppGatewayName, requestJson);
                    if (revertObj.StateCode.ToUpper () == "SUCCESS") {
                        Application.RunOnMainThread (() => {
                            DatabackupShow ();
                        });
                    } else {
                        ShowDelErrorInfo (revertObj.StateCode);
                    }
                } catch { } finally {
                    Application.RunOnMainThread (() => {
                        MainPage.Loading.Hide ();
                    });
                }
            });
        }
        /// <summary>
        /// (2)ParameterOrEmpty,则响应字段中[ErrorInfo]为错误信息,ResponseData则为null
        //3)NoLogin,则响应字段中 [ErrorInfo] 为错误信息为 [无效登录Token!]
        //(5)NoRecord,则响应字段中 [ErrorInfo] 为错误信息为 [确保您所提交 [项目 (住宅)Id不存在!]
        //(6)BackupClassIdNoIsYou, 则响应字段中 [ErrorInfo]为错误信息为 [您所备注名主键 = XXXX并不属于您当前住宅:XXXX]
        //(7)NoPermission, 则响应字段中 [ErrorInfo]为错误信息为 [您并不具有此分享者此住宅的权限!]
        //(8)InsufficientAuthority, 则响应字段中 [ErrorInfo]为错误信息为 [您并不具有此分享者此住宅的完全控制权限!]
        //(9)HomeIdAndTokenNoConsistent, 则响应字段中 [ErrorInfo]为错误信息为 [您当前Token与你当前控制的HomeId不一致!]
        //(10)DeliveryBackNoUpdateDel, 则响应字段中 [ErrorInfo]为错误信息为 [此前提交文件夹Id是属于交付备份, 不能进行更新删除!]
        /// </summary>
        /// <param name="stateCodeStr"></param>
        void ShowDelErrorInfo (string stateCodeStr)
        {
            string mes = "";
            if (stateCodeStr == "HomeIdAndTokenNoConsistent") {
                //Token 验证失败
                mes = ErrorCode.HomeIdAndTokenNoConsistent;
            } else if (stateCodeStr == "DeliveryBackNoUpdateDel") {
                //交付备份, 不能删除!
                mes = ErrorCode.DeliveryBackNoUpdateDel;
            } else if (stateCodeStr == ErrorCode.NetworkError) {
                mes = ErrorCode.NetworkError;
            } else {
                mes = ErrorCode.OperationFailed + ErrorCode.Reason + stateCodeStr;
            }
            if (!string.IsNullOrEmpty (mes)) {
                Application.RunOnMainThread (() => {
                    new Alert ("", mes, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                });
            }
        }
        /// <summary>
        /// 用户备份文件
        /// </summary>
        void userBakeupFile (string groupName)
@@ -463,31 +520,29 @@
                    System.Threading.Tasks.Task.Run (() => {
                        try {
                            AddFolderObj requestObj = new AddFolderObj () { LevelID = UserConfig.Instance.CurrentRegion.RegionID ,Name = groupName };
                    //if (string.IsNullOrEmpty (UserConfig.Instance.GatewayMAC)) return;
                    if (!UserConfig.Instance.CheckHomeGateways () || string.IsNullOrEmpty (UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId)) return;
                    var requestObj = new AddHomeAppGatewayNameObj () {
                        HomeId = UserConfig.Instance.CurrentRegion.Id,
                        BackupName = groupName,
                        LoginAccessToken = MainPage.LoginUser.LoginTokenString,
                        GatewayUniqueId = UserConfig.Instance.GatewayMAC
                    };
                    //AddFolderObj requestObj = new AddFolderObj () { LevelID = UserConfig.Instance.CurrentRegion.Id ,Name = groupName };
                            var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
                            var revertObj = MainPage.RequestHttps ("AddFolder", requestJson);
                            if (revertObj.StateCode == "SUCCESS") {
                                var addFolderID = Convert.ToInt32 (revertObj.ResponseData);
                                var backuplist = IO.FileUtils.ReadFiles ();
                                int index = 0;
                                foreach (var fileName in backuplist) {
                                    index++;
                                    /// <summary>
                                    /// 如果是特殊的注册登陆文件,则不需要备份到服务器
                                    /// </summary>
                                    if (fileName == UserInfo.GlobalRegisterFile) {
                                        continue;
                                    }
                                    AddUserBackupObj requestObj2 = new AddUserBackupObj () { LevelID = Convert.ToInt32(revertObj.ResponseData), Name = fileName, DetailByte = IO.FileUtils.ReadFile (fileName) };
                                    var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj2);
                                    var revertObj2 = MainPage.RequestHttps ("AddUserBackup", requestJson2);
                                    if (revertObj2.StateCode == "SUCCESS") {
                                        Application.RunOnMainThread (() => {
                                            int pro = (int)(index * 1.0 / backuplist.Count * 100);
                                            MainPage.Loading.Text = pro.ToString () + "%";
                                        });
                                    }
                                }
                    var revertObj = MainPage.RequestHttps (API.AddHomeAppGatewayName, requestJson);
                    if (revertObj.StateCode.ToUpper () == "SUCCESS") {
                        var DATA = Newtonsoft.Json.JsonConvert.DeserializeObject<AddBackupNameResult> (revertObj.ResponseData.ToString());
                        var addFolderID = DATA.BackupClassId;
                        UpLoadBackupFileToDB (addFolderID);
                    } else {
                        ShowAddHomeAppGatewayNameErrorInfo (revertObj.StateCode);
                            }
                        } catch (Exception ex) {
@@ -509,9 +564,97 @@
        }
        /// <summary>
        /// (1)Success 则[调用此接口操作成功],ResponseData则为null
        //        (2)ParameterOrEmpty,则响应字段中 [ErrorInfo] 为错误信息, ResponseData则为null
        //        (3)NoLogin,则响应字段中 [ErrorInfo] 为错误信息为 [无效登录Token!]
        //(4)NoRecord,则响应字段中 [ErrorInfo] 为错误信息为 [确保您所提交 [项目 (住宅)Id不存在!]
        //(5)Exist, 则响应字段中 [ErrorInfo]为错误信息为 [您在住宅: XXX, 当前备份名: XXXX已存在, 请换个备份再提交!]
        //(6)NoBind, 则响应字段中 [ErrorInfo]为错误信息为 [网关的唯一Id = XXX,与住宅: XXXX并不存在绑定关系!]
        //(7)NoPermission, 则响应字段中 [ErrorInfo]为错误信息为 [您并不具有此分享者此住宅的权限!]
        //(8)InsufficientAuthority, 则响应字段中 [ErrorInfo]为错误信息为 [您并不具有此分享者此住宅的完全控制权限!]
        //(9)HomeIdAndTokenNoConsistent, 则响应字段中 [ErrorInfo]为错误信息为 [您当前Token与你当前控制的HomeId不一致!]
        /// </summary>
        /// <param name="stateCodeStr"></param>
        void ShowAddHomeAppGatewayNameErrorInfo (string stateCodeStr)
        {
            string mes = "";
            if (stateCodeStr == "Exist") {
                //备份名已存在
                mes = ErrorCode.NameExist;
            } else if (stateCodeStr == "HomeIdAndTokenNoConsistent") {
                //Token 验证失败
                mes = ErrorCode.HomeIdAndTokenNoConsistent;
            } else if (stateCodeStr == ErrorCode.NetworkError) {
                mes = ErrorCode.NetworkError;
            } else {
                mes = ErrorCode.OperationFailed + ErrorCode.Reason + stateCodeStr;
            }
            if (!string.IsNullOrEmpty (mes)) {
                Application.RunOnMainThread (() => {
                    new Alert ("", mes, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
                });
            }
        }
      /// <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 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;
                //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);
                if (revertObj2.StateCode.ToUpper () == "SUCCESS") {
                    Application.RunOnMainThread (() => {
                        int pro = (int)(index * 1.0 / backuplist.Count * 100);
                        MainPage.Loading.Text = pro.ToString () + "%";
                    });
                } else {
                    //提示错误
                }
            }
        }
        /// <summary>
        /// 用户恢复文件
        /// </summary>
        public void UserBakeupFileDetailedInformation (int folderID)
        public void UserBakeupFileDetailedInformation (string BackupClassId)
        {
            //是否确定恢复该文件数据信息
            Alert alert = new Alert ("", Language.StringByID (R.MyInternationalizationString.SureToRestoreFileInformation), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim));
@@ -527,40 +670,76 @@
                                }
                                IO.FileUtils.DeleteFile (fileName);
                            }
                            var requestObj2 = new GetHomeDataBackupUploadListPaggerObj ();
                            requestObj2.HomeId = UserConfig.Instance.CurrentRegion.Id;
                            requestObj2.BackupClassId = BackupClassId;
                            requestObj2.PageSetting.PageSize = 999999;
                            requestObj2.PageSetting.Page = 1;
                            //获取控制主人账号的Token
                            requestObj2.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
                            //获取所有文件组名
                            var requestObj2 = new UserBackupListObj () { LevelID = folderID };
                            //var requestObj2 = new UserBackupListObj () { LevelID = folderID };
                            var requestJson2 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj2);
                            var revertObj2 = MainPage.RequestHttps ("UserBackupList", requestJson2);
                            if (revertObj2.StateCode == "SUCCESS") {
                                var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<BackupInfoRes>> (revertObj2.ResponseData.ToString ());
                            var revertObj2 = MainPage.RequestHttps (API.GetHomeDataBackupUploadListPagger, requestJson2);
                            if (revertObj2.StateCode.ToUpper() == "SUCCESS") {
                                var fileListData = Newtonsoft.Json.JsonConvert.DeserializeObject<LoadBackInfoResult> (revertObj2.ResponseData.ToString ());
                                var responseDataObj = fileListData.PageData;
                                ////获取文件名字
                                //List<string> listFileName = new List<string> ();
                                //foreach (LoadBackupFileNameInfo file in fileListData.PageData) {
                                //    listFileName.Add (file.BackupFileName);
                                //}
                                //var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<BackupInfoRes>> (revertObj2.ResponseData.ToString ());
                                var mDownLoad = new DownloadSomeDataBackupObj ();
                                mDownLoad.HomeId = UserConfig.Instance.CurrentRegion.Id;
                                mDownLoad.BackupClassId = BackupClassId;
                                //获取控制主人账号的Token
                                mDownLoad.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
                                int index = 0;
                                foreach (var file in responseDataObj) {
                                    if (file.FileName == "null" || "UserConfig" == file.FileName) {
                                    if (file.BackupFileName == "null" || "UserConfig" == file.BackupFileName) {
                                        continue;
                                    }
                                    var requestObj3 = new BackupDetailObj () { Id = file.Id };
                                    var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj3);
                                    var revertObj3 = MainPage.RequestHttps ("BackupDetail", requestJson3);
                                    if (revertObj3.StateCode == "SUCCESS") {
                                        var jsonBytes = Newtonsoft.Json.JsonConvert.SerializeObject (revertObj3.ResponseData);
                                        var byresss = Newtonsoft.Json.JsonConvert.DeserializeObject<byte[]> (jsonBytes);
                                    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);
                                    if (revertObj3 != null) {
                                        index++;
                                        //新增加了住宅区域,旧的备份数据没有区域属性,当获取到这个文件时,把当前到住宅信息更到当前备份到数据里面
                                        if ("UserConfig" == file.FileName){
                                            //var regionTemp = UserConfig.Instance.CurrentRegion;
                                            //UserConfig.Instance.RefreshUserConfig ();
                                            //UserConfig.Instance.CurrentRegion = regionTemp;
                                            //UserConfig.Instance.SaveUserConfig ();
                                            ////UserConfig.Instance.GatewayList
                                            continue;
                                        }
                                        IO.FileUtils.WriteFileByBytes (file.FileName, byresss);
                                        IO.FileUtils.WriteFileByBytes (file.BackupFileName, revertObj3);
                                        Application.RunOnMainThread (() => {
                                            int pro = (int)(index * 1.0 / responseDataObj.Count * 100);
                                            MainPage.Loading.Text = pro.ToString () + "%";
                                        });
                                    }
                                    //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 {
                                    //    //错误提示
                                    //}
                                }
                                MainPage.LoginUser.SaveUserInfo ();
                                Room.InitAllRoom ();