From f9cddb66b908e1237cbca10cc08770f5e682ca3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=89=E9=B8=AD=E8=9B=8B?= Date: Tue, 7 Jan 2025 23:57:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BetterGenshinImpact.csproj | 15 ++ .../Service/Singletons/StartEndSingleton.cs | 4 + .../View/Windows/UploadDialog.xaml | 72 ++++++ .../View/Windows/UploadDialog.xaml.cs | 209 ++++++++++++++++++ .../Pages/KeyMouseRecordPageViewModel.cs | 38 +--- 5 files changed, 302 insertions(+), 36 deletions(-) create mode 100644 BetterGenshinImpact/View/Windows/UploadDialog.xaml create mode 100644 BetterGenshinImpact/View/Windows/UploadDialog.xaml.cs diff --git a/BetterGenshinImpact/BetterGenshinImpact.csproj b/BetterGenshinImpact/BetterGenshinImpact.csproj index cb5e21e3..f4a015a6 100644 --- a/BetterGenshinImpact/BetterGenshinImpact.csproj +++ b/BetterGenshinImpact/BetterGenshinImpact.csproj @@ -154,4 +154,19 @@ + + + MSBuild:Compile + Wpf + Designer + + + + + + Code + UploadDialog.xaml + + + \ No newline at end of file diff --git a/BetterGenshinImpact/Service/Singletons/StartEndSingleton.cs b/BetterGenshinImpact/Service/Singletons/StartEndSingleton.cs index 01f80717..2d05e740 100644 --- a/BetterGenshinImpact/Service/Singletons/StartEndSingleton.cs +++ b/BetterGenshinImpact/Service/Singletons/StartEndSingleton.cs @@ -67,6 +67,10 @@ public class StartEndSingleton : Singleton // Environment.Exit(0); // } // TosClientHelper.Instance.Test(Global.Absolute(@$"User/config.json")); + + + // var tosClient = new TosClientHelper(); + // tosClient.ListObjects(); } diff --git a/BetterGenshinImpact/View/Windows/UploadDialog.xaml b/BetterGenshinImpact/View/Windows/UploadDialog.xaml new file mode 100644 index 00000000..1a5429b6 --- /dev/null +++ b/BetterGenshinImpact/View/Windows/UploadDialog.xaml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BetterGenshinImpact/View/Windows/UploadDialog.xaml.cs b/BetterGenshinImpact/View/Windows/UploadDialog.xaml.cs new file mode 100644 index 00000000..c9b24980 --- /dev/null +++ b/BetterGenshinImpact/View/Windows/UploadDialog.xaml.cs @@ -0,0 +1,209 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using BetterGenshinImpact.Core.Config; +using BetterGenshinImpact.GameTask; +using BetterGenshinImpact.GameTask.Common; +using BetterGenshinImpact.Helpers; +using BetterGenshinImpact.Helpers.Upload; +using Microsoft.Extensions.Logging; +using Wpf.Ui.Violeta.Controls; + +namespace BetterGenshinImpact.View.Windows; + +public partial class UploadDialog +{ + private readonly string scriptPath = Global.Absolute(@"User\KeyMouseScript"); + + private readonly string path; + private bool _isUploading; + + public UploadDialog(string path) + { + InitializeComponent(); + this.path = path; + this.Loaded += UploadDialogLoaded; + this.Closing += UploadDialog_Closing; + } + + private void UploadDialogLoaded(object sender, RoutedEventArgs e) + { + } + + private void UploadDialog_Closing(object sender, System.ComponentModel.CancelEventArgs e) + { + if (_isUploading) + { + e.Cancel = true; + LogTextBox.AppendText("正在上传中,请等待上传完成...\n"); + } + } + + private async void BtnOkClick(object sender, RoutedEventArgs e) + { + try + { + _isUploading = true; + var dirName = new DirectoryInfo(path).Name; + + BtnOk.IsEnabled = false; + BtnDelete.IsEnabled = false; + BtnCancel.IsEnabled = false; + UploadProgressBar.Value = 0; + LogTextBox.AppendText($"{dirName} 开始上传...请不要关闭此窗口!\n"); + + var userName = TaskContext.Instance().Config.CommonConfig.UserName; + var uid = TaskContext.Instance().Config.CommonConfig.Uid; + + await Task.Run(() => + { + + // 上传 + try + { + var tosClient = new TosClientHelper(); + + // 循环 path 下的所有文件 + var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories); + foreach (var file in files) + { + var relativePath = file.Replace(scriptPath, "").TrimStart('\\'); + var needUploadFileName = Path.GetFileName(file); + var remotePath = $"{DateTime.Now:yyyy_MM_dd}_{userName}_{uid}/{relativePath}"; + remotePath = remotePath.Replace(@"\", "/"); + + if (needUploadFileName == "video.mkv" || needUploadFileName == "video.mp4") + { + tosClient.UploadLargeFile(file, remotePath, 20 * 1024 * 1024, (bytes, totalBytes, percentage) => + { + UIDispatcherHelper.Invoke(() => + { + UploadProgressBar.Value = percentage; + LogTextBox.AppendText($"上传进度: {percentage}%\n"); + }); + }); + } + else + { + tosClient.UploadFile(file, remotePath); + } + + + } + + UIDispatcherHelper.Invoke(() => + { + UploadProgressBar.Value = 100; + LogTextBox.AppendText($"{dirName} 上传完成\n"); + }); + } + catch (Exception ex) + { + MessageBox.Show($"上传过程中发生错误:{ex.Message}"); + } + }); + + } + catch (Exception ex) + { + LogTextBox.AppendText($"上传出错: {ex.Message}\n"); + TaskControl.Logger.LogDebug( "上传出错" + ex.Source + "\r\n--" + Environment.NewLine + ex.StackTrace + "\r\n---" + Environment.NewLine + ex.Message); + } + finally + { + BtnOk.IsEnabled = true; + BtnDelete.IsEnabled = true; + BtnCancel.IsEnabled = true; + _isUploading = false; + } + } + + private async void BtnDeleteClick(object sender, RoutedEventArgs e) + { + try + { + var dirName = new DirectoryInfo(path).Name; + var result = MessageBox.Show($"确定要删除已上传的 {dirName} 吗?", "确认删除", MessageBoxButton.YesNo, MessageBoxImage.Question); + + if (result != MessageBoxResult.Yes) + { + return; + } + + BtnOk.IsEnabled = false; + BtnDelete.IsEnabled = false; + BtnCancel.IsEnabled = false; + UploadProgressBar.Value = 0; + LogTextBox.AppendText($"开始删除 {dirName} ...\n"); + + var userName = TaskContext.Instance().Config.CommonConfig.UserName; + var uid = TaskContext.Instance().Config.CommonConfig.Uid; + + await Task.Run(() => + { + try + { + var tosClient = new TosClientHelper(); + var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories); + var totalFiles = files.Length; + var currentFile = 0; + + foreach (var file in files) + { + var relativePath = file.Replace(scriptPath, "").TrimStart('\\'); + var remotePath = $"{DateTime.Now:yyyy_MM_dd}_{userName}_{uid}/{relativePath}"; + remotePath = remotePath.Replace(@"\", "/"); + + tosClient.DeleteObject(remotePath); + currentFile++; + + var percentage = (int)((double)currentFile / totalFiles * 100); + UIDispatcherHelper.Invoke(() => + { + UploadProgressBar.Value = percentage; + LogTextBox.AppendText($"删除进度: {percentage}%\n"); + }); + } + + UIDispatcherHelper.Invoke(() => + { + UploadProgressBar.Value = 100; + LogTextBox.AppendText($"{dirName} 删除完成\n"); + }); + } + catch (Exception ex) + { + UIDispatcherHelper.Invoke(() => + { + MessageBox.Show($"删除过程中发生错误:{ex.Message}"); + }); + } + }); + } + catch (Exception ex) + { + LogTextBox.AppendText($"删除出错: {ex.Message}\n"); + TaskControl.Logger.LogDebug("删除出错" + ex.Source + "\r\n--" + Environment.NewLine + ex.StackTrace + "\r\n---" + Environment.NewLine + ex.Message); + } + finally + { + BtnOk.IsEnabled = true; + BtnDelete.IsEnabled = true; + BtnCancel.IsEnabled = true; + } + } + + private void BtnCancelClick(object sender, RoutedEventArgs e) + { + if (!_isUploading) + { + Close(); + } + else + { + LogTextBox.AppendText("正在上传中,请不要关闭窗口!\n"); + } + } +} diff --git a/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs index 2cbddca4..83d8b7e3 100644 --- a/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs @@ -426,42 +426,8 @@ public partial class KeyMouseRecordPageViewModel : ObservableObject, INavigation return; } - - await Task.Run(() => - { - - // 上传 - try - { - var tosClient = new TosClientHelper(); - - // 循环 path 下的所有文件 - var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories); - foreach (var file in files) - { - var relativePath = file.Replace(scriptPath, "").TrimStart('\\'); - var needUploadFileName = Path.GetFileName(file); - var remotePath = $"{DateTime.Now:yyyy_MM_dd}_{userName}_{uid}/{relativePath}"; - remotePath = remotePath.Replace(@"\", "/"); - - if (needUploadFileName == "video.mkv" || needUploadFileName == "video.mp4") - { - tosClient.UploadLargeFile(file, remotePath); - } - else - { - tosClient.UploadFile(file, remotePath); - } - - - } - UIDispatcherHelper.Invoke(() => { Toast.Success($"文件夹{new DirectoryInfo(path).Name}上传成功!"); }); - } - catch (Exception ex) - { - MessageBox.Show($"上传过程中发生错误:{ex.Message}"); - } - }); + UploadDialog dialog = new UploadDialog(path); + dialog.ShowDialog(); }