using System;
using System.Collections.Generic;
namespace Shared.SimpleControl.Phone
{
public class Databackup : FrameLayout
{
//WebServiceBackup service_backup = new WebServiceBackup ();
VerticalScrolViewLayout VerticalScrolViewMiddle;
///
/// 构造函数
///
public Databackup ()
{
BackgroundColor = SkinStyle.Current.MainColor;
}
public void DatabackupShow ()
{
this.RemoveAll ();
#region 标题
var topView = new FrameLayout () {
Y = Application.GetRealHeight (36),
Height = Application.GetRealHeight (90),
BackgroundColor = SkinStyle.Current.MainColor
};
AddChidren (topView);
var title = new Button () {
X = Application.GetRealWidth (90),
Width = Application.GetRealWidth (640 - 180),
TextAlignment = TextAlignment.Center,
Text = UserConfig.Instance.CurrentRegion.Name + " " + Language.StringByID (R.MyInternationalizationString.Backup),
TextSize = 19,
TextColor = SkinStyle.Current.TextColor1,
};
topView.AddChidren (title);
title.MouseUpEventHandler += (sdf, asf) => {
Dialog dialog = new Dialog ();
FrameLayout bodyView = new FrameLayout ();
dialog.AddChidren (bodyView);
bodyView.MouseUpEventHandler += (lkj, oiu) => {
dialog.Close ();
};
VerticalScrolViewLayout dialogBodyView = new VerticalScrolViewLayout () {
Y = Application.GetRealHeight (126),
Gravity = Gravity.CenterHorizontal,
Width = Application.GetRealWidth (500),
Height = Application.GetRealHeight (360),
BackgroundColor = SkinStyle.Current.MainColor,
Radius = 5,
BorderColor = SkinStyle.Current.Transparent,
BorderWidth = 0
};
bodyView.AddChidren (dialogBodyView);
foreach (var homeTemp in UserConfig.Instance.HomeLists) {
var rowView = new RowLayout () {
Height = Application.GetRealHeight (110),
};
dialogBodyView.AddChidren (rowView);
Button btnRowLine = new Button () {
Y = Application.GetRealHeight (107),
Height = Application.GetRealHeight (3),
BackgroundColor = SkinStyle.Current.Black50Transparent
};
rowView.AddChidren (btnRowLine);
var btnPoint = new Button () {
Width = Application.GetRealWidth (10),
Height = Application.GetRealWidth (10),
X = Application.GetRealWidth (50),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Item/Point.png",
SelectedImagePath = "Item/Point.png",
Visible = homeTemp.Id != UserConfig.Instance.CurrentRegion.Id
};
rowView.AddChidren (btnPoint);
var btnName = new Button () {
Width = Application.GetRealWidth (550),
Text = homeTemp.Name,
TextAlignment = TextAlignment.CenterLeft,
X = Application.GetRealWidth (90),
TextColor = SkinStyle.Current.TextColor1,
};
rowView.AddChidren (btnName);
if (homeTemp.Id == UserConfig.Instance.CurrentRegion.Id) {
Button btnCheck = new Button () {
X = Application.GetRealWidth (20),
Y = Application.GetRealHeight (25),
Width = Application.GetRealWidth (72),
Height = Application.GetRealHeight (61),
UnSelectedImagePath = "Skin/Check.png",
};
rowView.AddChidren (btnCheck);
}
btnName.MouseUpEventHandler += (ss, ee) => {
if (UserConfig.Instance.CurrentRegion == homeTemp) {
dialog.Close ();
return;
}
MainPage.Loading.Start ("Please wait...");
System.Threading.Tasks.Task.Run (() => {
try {
var backuplist = IO.FileUtils.ReadFiles ();
int index = 0;
string oldRegionRootPath = IO.FileUtils.CreateRegionBackup (UserConfig.Instance.CurrentRegion.Id);
IO.FileUtils.DeleteRegionFiles (oldRegionRootPath);
foreach (var fileName in backuplist) {
System.IO.FileInfo fileInfo = new System.IO.FileInfo (IO.FileUtils.RootPath + fileName);
if (fileInfo.Exists) {
fileInfo.MoveTo (oldRegionRootPath + fileName);
Utlis.WriteLine ("move file : " + fileName);
}
index++;
Application.RunOnMainThread (() => {
int pro = (int)(index * 1.0 / backuplist.Count * 50);
MainPage.Loading.Text = pro.ToString () + "%";
});
}
IO.FileUtils.DeleteAllFile ();
string newRegionRootPath = IO.FileUtils.CreateRegionBackup (homeTemp.Id);
IO.FileUtils.RestoreRegionFiles (newRegionRootPath);
UserConfig.Instance.RefreshUserConfig ();
UserConfig.Instance.CurrentRegion = homeTemp;
UserConfig.Instance.SaveUserConfig ();
Room.InitAllRoom ();
//UserConfig.Instance.RefreshUserConfig ();
//MainPage.LoginUser.SaveUserInfo ();
Application.RunOnMainThread (() => {
new Alert ("", Language.StringByID (R.MyInternationalizationString.SwitchRegionSuccessfully),
Language.StringByID (R.MyInternationalizationString.Close)).Show ();
this.DatabackupShow ();
EquipmentPublicClass.CheckLinkRemote (UserConfig.Instance.internetStatus);
});
} catch (Exception ex) {
Application.RunOnMainThread (() => {
new Alert ("", Language.StringByID (R.MyInternationalizationString.CheckInternet),
Language.StringByID (R.MyInternationalizationString.Close)).Show ();
});
Utlis.WriteLine (ex.Message);
} finally {
Application.RunOnMainThread (() => {
MainPage.Loading.Hide ();
dialog.Close ();
});
}
});
};
}
dialog.Show ();
};
Button ItemButton = new Button () {
Width = Application.GetRealWidth (55),
Height = Application.GetRealHeight (55),
UnSelectedImagePath = "Item/+.png",
SelectedImagePath = "Item/+.png",
Y = Application.GetRealHeight (15),
X = Application.GetRealWidth (640 - 80),
};
topView.AddChidren (ItemButton);
ItemButton.MouseUpEventHandler += (sender, e) => {
Dialog dialog = new Dialog ();
FrameLayout dialogBodyView = new FrameLayout () {
Gravity = Gravity.Center,
Width = Application.GetRealWidth (500),
Height = Application.GetRealHeight (500),
BackgroundColor = SkinStyle.Current.DialogColor,
Radius = 5,
BorderColor = SkinStyle.Current.Transparent,
BorderWidth = 0,
};
dialog.AddChidren (dialogBodyView);
Button btnTitle = new Button () {
Height = Application.GetRealHeight (80),
BackgroundColor = SkinStyle.Current.DialogTitle,
TextAlignment = TextAlignment.Center,
TextID = R.MyInternationalizationString.Backup,
TextColor = SkinStyle.Current.DialogTextColor
};
dialogBodyView.AddChidren (btnTitle);
Button btnackupRemark = new Button () {
Gravity = Gravity.CenterHorizontal,
Y = Application.GetRealHeight (100),
Width = Application.GetRealWidth (400),
Height = Application.GetRealHeight (80),
TextID = R.MyInternationalizationString.Remark,
TextAlignment = TextAlignment.CenterLeft,
TextColor = SkinStyle.Current.TextColor,
};
dialogBodyView.AddChidren (btnackupRemark);
EditText etBackupRemark = new EditText () {
Gravity = Gravity.CenterHorizontal,
Y = btnackupRemark.Bottom,
Width = Application.GetRealWidth (400),
Height = Application.GetRealHeight (80),
TextAlignment = TextAlignment.Center,
Radius = 5,
BorderColor = SkinStyle.Current.BorderColor,
BorderWidth = 1,
TextColor = SkinStyle.Current.TextColor,
};
dialogBodyView.AddChidren (etBackupRemark);
etBackupRemark.EditorEnterAction += (obj) => {
Application.HideSoftInput ();
};
FrameLayout bottomView = new FrameLayout () {
Y = Application.GetRealHeight (420),
Height = Application.GetRealHeight (85),
BackgroundColor = SkinStyle.Current.DialogTitle
};
dialogBodyView.AddChidren (bottomView);
Button btnClose = new Button () {
Width = Application.GetRealWidth (249),
TextID = R.MyInternationalizationString.Close,
TextAlignment = TextAlignment.Center
};
bottomView.AddChidren (btnClose);
btnClose.MouseUpEventHandler += (send2er, e2) => {
dialog.Close ();
};
Button btnBottomLine = new Button () {
X = btnClose.Right,
Width = 1,
BackgroundColor = SkinStyle.Current.Black50Transparent,
};
bottomView.AddChidren (btnBottomLine);
Button btnSave = new Button () {
X = btnBottomLine.Right,
Width = Application.GetRealWidth (249),
TextID = R.MyInternationalizationString.SAVE,
TextAlignment = TextAlignment.Center
};
bottomView.AddChidren (btnSave);
btnSave.MouseUpEventHandler += (sender2, e2) => {
if (etBackupRemark.Text.Trim () == "") {
new Alert ("", Language.StringByID (R.MyInternationalizationString.InputNewBakeUpFilesName),
Language.StringByID (R.MyInternationalizationString.Close)).Show ();
return;
}
if (MainPage.LoginUser == null) {
new Alert ("", Language.StringByID (R.MyInternationalizationString.PleaseLoginSystem),
Language.StringByID (R.MyInternationalizationString.Close)).Show ();
return;
}
userBakeupFile (etBackupRemark.Text.Trim ());
dialog.Close ();
};
dialog.Show ();
};
var back = new Button () {
Height = Application.GetRealHeight (90),
Width = Application.GetRealWidth (85),
UnSelectedImagePath = "Item/Back.png",
Gravity = Gravity.CenterVertical,
};
topView.AddChidren (back);
back.MouseUpEventHandler += (sender, e) => {
(Parent as PageLayout).PageIndex -= 1;
};
#endregion
var FrameLayoutView = new FrameLayout () {
Width = LayoutParams.MatchParent,
Height = Application.GetRealHeight (1136 - 126),
Y = topView.Bottom,
BackgroundColor = SkinStyle.Current.ViewColor,
};
AddChidren (FrameLayoutView);
VerticalScrolViewMiddle = new VerticalScrolViewLayout ();
VerticalScrolViewMiddle.RemoveAll ();
FrameLayoutView.AddChidren (VerticalScrolViewMiddle);
System.Threading.Tasks.Task.Run (() => {
try {
Application.RunOnMainThread (() => {
MainPage.Loading.Start ("Please wait...");
});
var requestObj = new GetHomeDataBackupPaggerObj () {
HomeId = UserConfig.Instance.CurrentRegion.Id,
LoginAccessToken = MainPage.LoginUser.LoginTokenString
};
string urlHead = MainPage.RequestHttpsHost;
if (requestObj.IsOtherAccountCtrl) {
urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
requestObj.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
}
//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 () == StateCode.SUCCESS) {
var data = Newtonsoft.Json.JsonConvert.DeserializeObject (revertObj.ResponseData.ToString ());
//var list = new List ();
//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> (revertObj.ResponseData.ToString ());
if (data == null) return;
Application.RunOnMainThread (() => {
foreach (var folder in data.PageData) {
addRow (folder.BackupName, folder.Id);
}
});
} else {
//2020-01-11 刷新一次MasterToken
if (requestObj.IsOtherAccountCtrl) {
//if (revertObj.StateCode == "ParameterOrEmpty" || revertObj.StateCode == "NoLogin" || revertObj.StateCode == "HomeIdAndTokenNoConsistent") {
if (revertObj.StateCode != ErrorCode.NetworkError) {
UserConfig.Instance.CheckIfNeedGetMasterAccountToken ();
}
}
MainPage.ShowAlertOnMainThread ("Failed to get backup data list!");
}
//var groupNames = service_backup.GetUserGroup (MainPage.LoginUser.MasterID, 0);
//Application.RunOnMainThread (() => {
// foreach (UserBackup groupName in groupNames) {
// addRow (groupName.UserGroup);
// }
//});
} catch {
Application.RunOnMainThread (() => {
new Alert ("", Language.StringByID (R.MyInternationalizationString.CheckInternet), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
});
} finally {
Application.RunOnMainThread (() => {
MainPage.Loading.Hide ();
});
}
});
}
void addRow (string groupName, string folderID)
{
var rowView = new RowLayout () {
Height = Application.GetRealHeight (110),
};
VerticalScrolViewMiddle.AddChidren (rowView);
Button btnRowLine = new Button () {
Y = Application.GetRealHeight (107),
Height = Application.GetRealHeight (3),
BackgroundColor = SkinStyle.Current.Black50Transparent
};
rowView.AddChidren (btnRowLine);
var btnDelFile = new Button () {
TextID = R.MyInternationalizationString.Del,
BackgroundColor = SkinStyle.Current.DelColor
};
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) => {
if (e2) {
DeleteFolderData (folderID);
}
};
alert.Show ();
};
//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.GetRealWidth (10),
X = Application.GetRealWidth (25),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Item/Point.png",
SelectedImagePath = "Item/Point.png",
};
rowView.AddChidren (btnPoint);
var btnName = new Button () {
Width = Application.GetRealWidth (342),
Height = LayoutParams.MatchParent,
Text = groupName.Trim (),
TextAlignment = TextAlignment.CenterLeft,
X = Application.GetRealWidth (50),
TextColor = SkinStyle.Current.TextColor1,
};
rowView.AddChidren (btnName);
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) => {
if (e2) {
DeleteFolderData (folderID);
}
};
alert.Show ();
};
var backupIcon = new Button () {
Width = Application.GetRealWidth (72),
Height = Application.GetRealHeight (57),
X = Application.GetRealWidth (452),
};
rowView.AddChidren (backupIcon);
var Backup_restores = new Button () {
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",
Gravity = Gravity.CenterVertical,
};
rowView.AddChidren (Backup_restores);
Backup_restores.MouseDownEventHandler += (sender, e) => {
Backup_restores.IsSelected = true;
};
Backup_restores.MouseUpEventHandler += (sender, e) => {
Backup_restores.IsSelected = false;
UserBakeupFileDetailedInformation (folderID);
};
}
///
/// 删除某个备份
///
///
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
};
string urlHead = MainPage.RequestHttpsHost;
if (requestObj.IsOtherAccountCtrl) {
urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
requestObj.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
}
//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 () == StateCode.SUCCESS) {
Application.RunOnMainThread (() => {
DatabackupShow ();
});
} else {
ShowDelErrorInfo (revertObj.StateCode);
}
} catch { } finally {
Application.RunOnMainThread (() => {
MainPage.Loading.Hide ();
});
}
});
}
//2020-01-11
///
/// 删除某个备份
///
///
void DeleteFolderDataAfterUploadFailed (string folderID)
{
Application.RunOnMainThread (() => {
MainPage.Loading.Start ("Please wait...");
});
try {
var requestObj = new DelHomeAppGatewayNameObj () {
BackupClassId = folderID,
HomeId = UserConfig.Instance.CurrentRegion.Id,
LoginAccessToken = MainPage.LoginUser.LoginTokenString
};
string urlHead = MainPage.RequestHttpsHost;
if (requestObj.IsOtherAccountCtrl) {
urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
requestObj.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
}
//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 () == StateCode.SUCCESS) {
//删除成功
} else {
//删除失败
}
} catch { } finally {
Application.RunOnMainThread (() => {
MainPage.Loading.Hide ();
});
}
}
///
/// (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是属于交付备份, 不能进行更新删除!]
///
///
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 ();
});
}
}
///
/// 用户备份文件
///
void userBakeupFile (string groupName)
{
//确定要备份该文件的数据
//Alert alert = new Alert ("", Language.StringByID (R.MyInternationalizationString.SureToBackupYourthisFile), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim));
//alert.ResultEventHandler += (object sender2, bool e2) => {
//if (e2) {
MainPage.Loading.Start ("Upload...");
System.Threading.Tasks.Task.Run (() => {
try {
//if (string.IsNullOrEmpty (UserConfig.Instance.GatewayMAC)) return;
//2020-01-11 没绑定MAC不允许上传备份
if (!UserConfig.Instance.CheckHomeGatewaysNotEmpty()) {
MainPage.ShowAlertOnMainThread (ErrorCode.BindGatewayFirst);
return;
}
var requestObj = new AddHomeAppGatewayNameObj () {
HomeId = UserConfig.Instance.CurrentRegion.Id,
BackupName = groupName,
LoginAccessToken = MainPage.LoginUser.LoginTokenString,
GatewayUniqueId = UserConfig.Instance.GatewayMAC
};
string urlHead = MainPage.RequestHttpsHost;
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 () == StateCode.SUCCESS) {
var DATA = Newtonsoft.Json.JsonConvert.DeserializeObject (revertObj.ResponseData.ToString ());
var addFolderID = DATA.BackupClassId;
//UpLoadBackupFileToDB (addFolderID);
UpLoadBackupFileToDBNew (addFolderID);
} else {
ShowAddHomeAppGatewayNameErrorInfo (revertObj.StateCode);
}
} catch (Exception ex) {
Shared.Application.RunOnMainThread (() => {
new Alert ("", Language.StringByID (R.MyInternationalizationString.CheckInternet),
Language.StringByID (R.MyInternationalizationString.Close)).Show ();
Utlis.WriteLine (ex.Message);
});
} finally {
Shared.Application.RunOnMainThread (() => {
MainPage.Loading.Hide ();
DatabackupShow ();
});
}
});
// }
//};
//alert.Show ();
}
///
///(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不一致!]
///
///
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 ();
});
}
}
/////
///// 上传备份文件
/////
/////
//void UpLoadBackupFileToDB (string mBackupClassId)
//{
// var backuplist = IO.FileUtils.ReadFiles ();
// int index = 0;
// foreach (var fileName in backuplist) {
// index++;
// ///
// /// 如果是特殊的注册登陆文件,则不需要备份到服务器
// ///
// if (fileName == UserInfo.GlobalRegisterFile) {
// continue;
// }
// //整理数据
// var datainfo = new FileInfoData ();
// datainfo.BackupFileName = fileName;
// datainfo.BackupFileContent = Shared.IO.FileUtils.ReadFile (fileName);
// var list = new List ();
// 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;
// }
// //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 ();
// // }
// // MainPage.Loading.Hide ();
// //});
//}
///
/// 用户恢复文件
///
public void UserBakeupFileDetailedInformation (string BackupClassId)
{
//是否确定恢复该文件数据信息
Alert alert = new Alert ("", Language.StringByID (R.MyInternationalizationString.SureToRestoreFileInformation), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim));
alert.ResultEventHandler += (sender2, e2) => {
if (e2) {
MainPage.Loading.Start ("Download...");
System.Threading.Tasks.Task.Run (() => {
try {
var fileNames = IO.FileUtils.ReadFiles ();
foreach (var fileName in fileNames) {
if (fileName == UserInfo.GlobalRegisterFile) {
continue;
}
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;
string urlHead = MainPage.RequestHttpsHost;
if (requestObj2.IsOtherAccountCtrl) {
urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
requestObj2.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
}
//获取所有文件组名
//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 () == StateCode.SUCCESS) {
var fileListData = Newtonsoft.Json.JsonConvert.DeserializeObject (revertObj2.ResponseData.ToString ());
var responseDataObj = fileListData.PageData;
////获取文件名字
//List listFileName = new List ();
//foreach (LoadBackupFileNameInfo file in fileListData.PageData) {
// listFileName.Add (file.BackupFileName);
//}
//var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject> (revertObj2.ResponseData.ToString ());
var mDownLoad = new DownloadSomeDataBackupObj ();
mDownLoad.HomeId = UserConfig.Instance.CurrentRegion.Id;
mDownLoad.BackupClassId = BackupClassId;
//获取控制主人账号的Token
mDownLoad.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
string mUrlHead = MainPage.RequestHttpsHost;
if (mDownLoad.IsOtherAccountCtrl) {
urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
mDownLoad.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
}
MultiThreadDownload (responseDataObj, mDownLoad, mUrlHead);
//int index = 0;
//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);
// }
// MainPage.ShowAlertOnMainThread ("Download failed!");
// 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 (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 ());
} finally {
Shared.Application.RunOnMainThread (() => {
MainPage.Loading.Hide ();
});
}
});
}
};
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;
}
}
///
/// 删除本地文件
///
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 ();
///
/// 多线程下载
///
void MultiThreadDownload (List 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 (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 fileList, int startIndex1, int endIndex1)
{
try {
var list = new List ();
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;
}
}
///
/// 上传备份文件
/// 多次上传多个文件
///
///
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 ();
});
}
///
/// 2020-06-05 需要等待云端增加接口
/// 处理大文件和图片上传
///
///
///
///
///
///
///
///
bool UploadDataBackupNew (UploadHomeAppGatewaySubFilesObj upData, string mUrlHead, List fileList, int startIndex1, int endIndex1)
{
try {
var list = new List ();
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;
}
}
}
}