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();
}