123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- using System;
- using System.Diagnostics;
- using System.IO;
- using System.Reflection;
- using System.Threading.Tasks;
- using System.Windows;
- using AIPlatform.Protocol.Utilities;
- namespace aipdev
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- ServerProxy.Initialize();
- #region check client version and update
- var splashWindow = new SplashWindow();
- var errorMessage = string.Empty;
- var latestVersion = string.Empty;
- Task.Run(async () =>
- {
- try
- {
- latestVersion = await DeveloperManager.Shared.GetDeveloperClientVersionAsync();
- await Task.Delay(500);
- }
- catch (Exception ex)
- {
- errorMessage = ex.Translate();
- }
- finally
- {
- await Dispatcher.InvokeAsync(() =>
- {
- splashWindow.Close();
- });
- }
- });
- splashWindow.ShowDialog();
- if (string.IsNullOrEmpty(latestVersion))
- {
- MessageBox.Show($"获取系统版本信息失败,请尝试重新启动程序:{errorMessage}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
- Application.Current.Shutdown();
- return;
- }
- var currentVersion = Assembly.GetExecutingAssembly().GetName().Version;
- if (Version.TryParse(latestVersion, out var version))
- {
- if (version.Major > currentVersion.Major)
- {
- UpgradeClient(latestVersion);
- }
- else if (version.Major == currentVersion.Major)
- {
- if (version.Minor > currentVersion.Minor)
- {
- UpgradeClient(latestVersion);
- }
- else if (version.Minor == currentVersion.Minor)
- {
- if (version.Revision > currentVersion.Revision)
- {
- UpgradeClient(latestVersion);
- }
- else if (version.Revision == currentVersion.Revision)
- {
- if (version.Build > currentVersion.Build)
- {
- UpgradeClient(latestVersion);
- }
- }
- }
- }
- }
- #endregion check client version and update
- InitializeComponent();
- ContentManager.RegisterLoadingControl(Waiting);
- ContentManager.VisiblePageChanged += OnVisiblePageChanged;
- ContentManager.RegisterContentControl(CenterControl);
- ContentManager.RegisterContentPage(new StartPage());
- ContentManager.RegisterContentPage(new DeveloperCenter());
- ContentManager.RegisterContentPage(new FolderManagement());
- ContentManager.RegisterContentPage(new FolderImageBrowser());
- ContentManager.RegisterContentPage(new FolderQuestionedManagement());
- ContentManager.RegisterContentPage(new FolderQuestionedImageBrowser());
- ContentManager.RegisterContentPage(new ScriptManagement());
- ContentManager.RegisterContentPage(new TaskManagement());
- ContentManager.RegisterContentPage(new ScriptEditor());
- ContentManager.RegisterContentPage(new TaskViewer());
- ContentManager.RegisterContentPage(new TaskConflictImageBrowser());
- ContentManager.RegisterContentPage(new DeveloperImport());
- var loginWindow = new LoginWindow();
- loginWindow.ShowDialog();
- if (!DeveloperManager.Shared.HasLogon)
- {
- Application.Current.Shutdown();
- return;
- }
- Loaded += OnLoaded;
- }
- private async void OnLoaded(object sender, RoutedEventArgs e)
- {
- await Task.Delay(10);
- ContentManager.Show("StartPage");
- }
- private void OnVisiblePageChanged(object sender, EventArgs e)
- {
- if (ContentManager.CanBack)
- {
- BackBar.Visibility = Visibility.Visible;
- var pageName = string.Empty;
- switch (ContentManager.CurrentVisiblePage.PageName)
- {
- case "StartPage":
- pageName = "开始";
- break;
- case "DeveloperCenter":
- pageName = "个人中心";
- break;
- case "FolderManagement":
- pageName = "文件夹管理";
- break;
- case "FolderQuestionedManagement":
- pageName = "质疑文件管理";
- break;
- case "ScriptManagement":
- pageName = "脚本管理";
- break;
- case "TaskManagement":
- pageName = "任务管理";
- break;
- case "ScriptEditor":
- pageName = "脚本编辑器";
- break;
- case "FolderImageViewer":
- pageName = "图像浏览";
- break;
- case "FolderQuestionedImageViewer":
- pageName = "图像浏览";
- break;
- case "DeveloperImport":
- pageName = "标注导入";
- break;
- }
- CurrentPage.Text = pageName;
- }
- else
- {
- BackBar.Visibility = Visibility.Collapsed;
- }
- if (ContentManager.CurrentVisiblePage != null)
- {
- StartPageButton.IsEnabled = !ContentManager.CurrentVisiblePage.IsModalPage;
- DeveloperCenterButton.IsEnabled = !ContentManager.CurrentVisiblePage.IsModalPage;
- FolderManagementButton.IsEnabled = !ContentManager.CurrentVisiblePage.IsModalPage;
- ScriptManagementButton.IsEnabled = !ContentManager.CurrentVisiblePage.IsModalPage;
- TaskManagementButton.IsEnabled = !ContentManager.CurrentVisiblePage.IsModalPage;
- DeveloperImportButton.IsEnabled = !ContentManager.CurrentVisiblePage.IsModalPage;
- }
- else
- {
- StartPageButton.IsEnabled = true;
- DeveloperCenterButton.IsEnabled = true;
- FolderManagementButton.IsEnabled = true;
- ScriptManagementButton.IsEnabled = true;
- TaskManagementButton.IsEnabled = true;
- DeveloperImportButton.IsEnabled = true;
- }
- }
- private void OnScriptManagementClick(object sender, RoutedEventArgs e)
- {
- ContentManager.Show("ScriptManagement");
- }
- private void OnBackClick(object sender, RoutedEventArgs e)
- {
- ContentManager.Back();
- }
- private void OnTaskManagementClick(object sender, RoutedEventArgs e)
- {
- ContentManager.Show("TaskManagement");
- }
- private void OnFolderManagementClick(object sender, RoutedEventArgs e)
- {
- ContentManager.Show("FolderManagement");
- }
- private void OnFolderQuestionedManagementClick(object sender, RoutedEventArgs e)
- {
- ContentManager.Show("FolderQuestionedManagement");
- }
- private void DeveloperImportClick(object sender, RoutedEventArgs e)
- {
- ContentManager.Show("DeveloperImport");
- }
- private void OnDeveloperCenterClick(object sender, RoutedEventArgs e)
- {
- ContentManager.Show("DeveloperCenter");
- }
- private void OnStartPageClick(object sender, RoutedEventArgs e)
- {
- ContentManager.Show("StartPage");
- }
- private void OnAboutClick(object sender, RoutedEventArgs e)
- {
- AboutPopup.IsOpen = true;
- }
- private void UpgradeClient(string latestVersion)
- {
- //BlockSize = 100KB
- const int BlockSize = 102400;
- var folderName = Guid.NewGuid().ToString("N");
- var folder = Path.Combine(Path.GetTempPath(), folderName);
- if (!Directory.Exists(folder))
- {
- Directory.CreateDirectory(folder);
- }
- var clientFile = Path.Combine(folder, "setup.exe");
- var errorMessage = string.Empty;
- var success = false;
- var upgradeWindow = new UpgradeWindow();
- Task.Run(async () =>
- {
- await Task.Delay(500);
- try
- {
- var clientSize = await DeveloperManager.Shared.GetDeveloperClientSizeAsync(latestVersion);
- var blockCount = clientSize / BlockSize;
- if (clientSize % BlockSize != 0)
- {
- blockCount += 1;
- }
- await using (var clientStream = new MemoryStream())
- {
- for (var i = 0; i < blockCount; i++)
- {
- var clientData = await DeveloperManager.Shared.GetDeveloperClientAsync(latestVersion, i, BlockSize);
- await clientStream.WriteAsync(clientData);
- var progress = (int)((double)(i + 1) / blockCount * 100);
- await upgradeWindow.SetProcessAsync(progress);
- }
- await File.WriteAllBytesAsync(clientFile, clientStream.ToArray());
- }
- success = true;
- await Dispatcher.InvokeAsync(() => upgradeWindow.Close());
- }
- catch (Exception ex)
- {
- errorMessage = ex.Translate();
- }
- });
- upgradeWindow.ShowDialog();
- if (success)
- {
- #region 关于Process.Start的System.ComponentModel.Win32Exception异常的解决方案
- var p = new Process();
- p.StartInfo = new ProcessStartInfo(clientFile)
- {
- UseShellExecute = true
- };
- p.Start();
- //Process.Start(clientFile);
- #endregion
- }
- else
- {
- MessageBox.Show($"下载系统更新包失败,请尝试重新启动程序:{errorMessage}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
- }
- Process.GetCurrentProcess().Kill();
- }
- }
- }
|