diff --git a/BetterGenshinImpact/Model/KeyMouseScriptItem.cs b/BetterGenshinImpact/Model/KeyMouseScriptItem.cs
index 6567c24b..13319abc 100644
--- a/BetterGenshinImpact/Model/KeyMouseScriptItem.cs
+++ b/BetterGenshinImpact/Model/KeyMouseScriptItem.cs
@@ -35,6 +35,9 @@ public partial class KeyMouseScriptItem : ObservableObject
private readonly string _scriptPath = Global.Absolute(@"User\KeyMouseScript");
private readonly ILogger _logger = TaskControl.Logger;
+ [ObservableProperty]
+ private bool _isUploadSuccess;
+
[RelayCommand]
private async Task Upload()
{
@@ -42,10 +45,11 @@ public partial class KeyMouseScriptItem : ObservableObject
{
_uploadCts = new CancellationTokenSource();
IsUploading = true;
+ IsUploadSuccess = false;
UploadProgress = 0;
var dirName = new DirectoryInfo(Path).Name;
- _logger.LogInformation($"{dirName} 开始上传...");
+ _logger.LogDebug($"{dirName} 开始上传...");
var userName = TaskContext.Instance().Config.CommonConfig.UserName;
var uid = TaskContext.Instance().Config.CommonConfig.Uid;
@@ -57,6 +61,14 @@ public partial class KeyMouseScriptItem : ObservableObject
var tosClient = new TosClientHelper();
var files = Directory.GetFiles(Path, "*.*", SearchOption.AllDirectories);
+ // 计算所有文件的总大小
+ long totalSize = 0;
+ long uploadedSize = 0;
+ foreach (var file in files)
+ {
+ totalSize += new FileInfo(file).Length;
+ }
+
foreach (var file in files)
{
if (_uploadCts.Token.IsCancellationRequested)
@@ -66,43 +78,57 @@ public partial class KeyMouseScriptItem : ObservableObject
var needUploadFileName = System.IO.Path.GetFileName(file);
var remotePath = $"{dirName[..10]}_{userName}_{uid}/{relativePath}";
remotePath = remotePath.Replace(@"\", "/");
+ var fileSize = new FileInfo(file).Length;
if (needUploadFileName == "video.mkv" || needUploadFileName == "video.mp4")
{
tosClient.UploadLargeFile(file, remotePath, 20 * 1024 * 1024, (bytes, totalBytes, percentage) =>
{
- UploadProgress = percentage;
- _logger.LogInformation($"上传进度: {percentage:F}%");
+ var currentFileProgress = bytes;
+ var overallProgress = ((double)(uploadedSize + currentFileProgress) / totalSize) * 100;
+ UploadProgress = Math.Min(overallProgress, 99.9); // 保留最后0.1%给上传完成时
+ _logger.LogDebug($"上传进度: {overallProgress:F}%");
});
}
else
{
tosClient.UploadFile(file, remotePath);
}
+
+ uploadedSize += fileSize;
+ var progress = ((double)uploadedSize / totalSize) * 100;
+ UploadProgress = Math.Min(progress, 99.9);
}
UploadProgress = 100;
- _logger.LogInformation($"{dirName} 上传完成");
+ IsUploadSuccess = true;
+ _logger.LogDebug($"{dirName} 上传完成");
}
catch (Exception ex)
{
_logger.LogError($"上传过程中发生错误:{ex.Message}");
+ IsUploadSuccess = false;
throw;
}
}, _uploadCts.Token);
}
catch (OperationCanceledException)
{
- _logger.LogInformation("上传已取消");
+ _logger.LogDebug("上传已取消");
+ IsUploadSuccess = false;
}
catch (Exception ex)
{
_logger.LogError(ex, "上传出错");
+ IsUploadSuccess = false;
}
finally
{
IsUploading = false;
- UploadProgress = 0;
+ if (!IsUploadSuccess)
+ {
+ UploadProgress = 0;
+ }
_uploadCts?.Dispose();
_uploadCts = null;
}
diff --git a/BetterGenshinImpact/View/Pages/KeyMouseRecordPage.xaml b/BetterGenshinImpact/View/Pages/KeyMouseRecordPage.xaml
index ac298f75..2aab6514 100644
--- a/BetterGenshinImpact/View/Pages/KeyMouseRecordPage.xaml
+++ b/BetterGenshinImpact/View/Pages/KeyMouseRecordPage.xaml
@@ -108,24 +108,33 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs
index 14632905..3607a35c 100644
--- a/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs
+++ b/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs
@@ -60,19 +60,41 @@ public partial class KeyMouseRecordPageViewModel : ObservableObject, INavigation
private void InitScriptListViewData()
{
- _scriptItems.Clear();
var directoryInfos = LoadScriptDirectories(scriptPath)
.OrderByDescending(d => d.CreationTime)
.ToList();
+
+ // 创建一个新的列表来存储更新后的项目
+ var updatedItems = new List();
+
foreach (var d in directoryInfos)
{
- _scriptItems.Add(new KeyMouseScriptItem
+ // 尝试在现有集合中查找相同路径的项目
+ var existingItem = _scriptItems.FirstOrDefault(item => item.Path == d.FullName);
+
+ if (existingItem != null)
{
- Name = d.Name,
- Path = d.FullName,
- CreateTime = d.CreationTime,
- CreateTimeStr = d.CreationTime.ToString("yyyy-MM-dd HH:mm:ss")
- });
+ // 如果找到现有项目,保留其状态
+ updatedItems.Add(existingItem);
+ }
+ else
+ {
+ // 如果是新项目,创建新的实例
+ updatedItems.Add(new KeyMouseScriptItem
+ {
+ Name = d.Name,
+ Path = d.FullName,
+ CreateTime = d.CreationTime,
+ CreateTimeStr = d.CreationTime.ToString("yyyy-MM-dd HH:mm:ss")
+ });
+ }
+ }
+
+ // 清空并重新添加项目
+ _scriptItems.Clear();
+ foreach (var item in updatedItems)
+ {
+ _scriptItems.Add(item);
}
}