using PdmSwPlugin.Commmon.Util.UI;
using PdmSwPlugin.Common.Entity.System;
using PdmSwPlugin.Common.Util.Http;
using PdmSwPlugin.Common.Util;
using System;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.IO;
using PdmSwPlugin.Common.Interface;
using SolidWorks.Interop.sldworks;
using log4net;
using PdmSwPlugin.Common.Setting;
namespace PdmSwPlugin.Main
{
///
/// LoginControl.xaml 的交互逻辑
///
public partial class LoginControl : UserControl, ISwAppSetter
{
private static readonly Encryptor encryptor = new Encryptor("aB3dE5fG7hI9jjK1lMnOpQrS2tUvWxYz",
"8Wq9RsT4vYx6ZuB1");
private SldWorks swApp;
public SldWorks SwApp => swApp;
private ILog Logger = LogManager.GetLogger("Main");
private PluginSetting GlobalConfig = PluginSetting.Instance;
private Action successCallback;
public LoginControl(Action successCallback)
{
this.successCallback = successCallback;
InitializeComponent();
}
///
/// 自动登录
///
///
///
private void AutoLogin(Action callback, Action reject)
{
MaskAdorner.ShowMask(mainGrid, "登陆中...");
Task.Run(() =>
{
try
{
if (GlobalConfig.ClassicLogin)
{
string binPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "HengXin", "PdmSwPlugin", "bin");
if (!File.Exists(binPath))
{
callback(null);
return;
}
string content = null;
if (!BinUtil.LoadStrFromBin(ref content, binPath))
{
callback(null);
return;
}
try
{
PdmUser param = JsonUtil.Deserialize(encryptor.Decrypt(content));
Result res = HttpClientCreator.PostSyncAction("openApi/wpf/login", new PdmUser
{
appId = PluginConst.AppId,
pluginVersion = PluginConst.Version,
username = param.username,
password = param.password
});
PdmUser user = res.HandleResult();
user.appId = PluginConst.AppId;
user.pluginVersion = PluginConst.Version;
user.password = param.password;
callback(user);
}
catch (Exception ex)
{
Logger.Error("Remember Me Login Failed!", ex);
callback(null);
}
}
else
{
Result res = HttpClientCreator.GetSyncAction("openApi/wpf/simpleLogin", new PdmUser
{
username = System.Environment.UserName,
appId = PluginConst.AppId,
pluginVersion = PluginConst.Version
});
PdmUser user = res.HandleResult();
user.appId = PluginConst.AppId;
user.pluginVersion = PluginConst.Version;
callback(user);
}
}
catch (Exception e)
{
reject(e);
}
finally
{
MaskAdorner.HideMask(mainGrid);
}
});
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
AutoLogin(
(user) =>
{
if (user != null)
{
Dispatcher.Invoke(() =>
{
PdmUser.SetLoginUser(user);
if (PdmUser.HasLogin())
{
LoginSuccess();
}
});
}
},
(ex) =>
{
Logger.Error("登陆失败!", ex);
this.Error($"登陆失败! {ex.Message}");
});
}
///
/// 加载插件主Tab
///
public void LoginSuccess()
{
if (rememberMeInput.IsChecked == true)
{
// 勾选自动登录的处理
string userInfo = JsonUtil.Stringfiy(PdmUser.LoginUser);
string binDir = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "HengXin", "PdmSwPlugin");
if (!Directory.Exists(binDir))
{
Directory.CreateDirectory(binDir);
}
string binPath = Path.Combine(binDir, "bin");
BinUtil.SaveStrToBin(encryptor.Encrypt(userInfo), binPath);
}
successCallback();
}
///
/// 登陆点击事件
///
///
///
private void Button_Click(object sender, RoutedEventArgs e)
{
MaskAdorner.ShowMask(mainGrid, "登陆中...");
PdmUser param = new PdmUser
{
username = usernameTextBlock.Text,
password = passwordTextBlock.Password,
appId = PluginConst.AppId,
pluginVersion = PluginConst.Version
};
Task.Run(() =>
{
try
{
Result res = HttpClientCreator.PostSyncAction("openApi/wpf/login", param);
PdmUser user = res.HandleResult();
user.appId = PluginConst.AppId;
user.pluginVersion = PluginConst.Version;
user.password = param.password;
Dispatcher.Invoke(() =>
{
PdmUser.SetLoginUser(user);
if (PdmUser.HasLogin())
{
LoginSuccess();
}
});
}
catch (Exception ex)
{
Logger.Error("登陆失败!", ex);
this.Error($"登陆失败! {ex.Message}");
}
finally
{
MaskAdorner.HideMask(mainGrid);
}
});
}
public void SetSwApp(SldWorks SwApp)
{
this.swApp = SwApp;
}
}
}