完善导入模块
This commit is contained in:
parent
ddf886b20a
commit
f0177e5180
|
@ -13,7 +13,7 @@
|
|||
MinHeight="500"
|
||||
mc:Ignorable="d">
|
||||
|
||||
<Grid Name="Grid" Margin="16,16,16,16">
|
||||
<Grid Name="GridView" Margin="16,16,16,16">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
|
@ -35,7 +35,7 @@
|
|||
Text="文件详情" />
|
||||
<TextBlock
|
||||
Name="InfoText"
|
||||
Style="{StaticResource BodyStrongTextBlockStyle}"
|
||||
Style="{StaticResource CaptionTextBlockStyle}"
|
||||
Text="处理信息" />
|
||||
</StackPanel>
|
||||
<Button
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
|
||||
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using RustTools.muqing;
|
||||
|
||||
namespace RustTools.WindowUI;
|
||||
public sealed partial class ImportModule : WindowEx
|
||||
{
|
||||
private readonly FileInfo? fileInfo;
|
||||
private readonly string ImpUrl= string.Empty;
|
||||
public ImportModule(string file)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
@ -14,40 +19,65 @@ public sealed partial class ImportModule : WindowEx
|
|||
Close();
|
||||
return;
|
||||
}
|
||||
var fileInfo = new FileInfo(file);
|
||||
fileInfo = new FileInfo(file);
|
||||
var iniHelper = new IniHelper();
|
||||
iniHelper.Load(IniHelper.FILE.Config);
|
||||
|
||||
ImpUrl = string.Empty;
|
||||
if (file.EndsWith(".rwmod"))
|
||||
{
|
||||
var l = " | ";
|
||||
var formattedSize = FormatFileSize(fileInfo.Length);
|
||||
MessageText.Text="类型:模组"+ l+ "大小"+ formattedSize;
|
||||
var v = iniHelper.GetValue(IniHelper.CODE.Rust, IniHelper.KEY.ModFileUrl);
|
||||
if (v == string.Empty) {
|
||||
return;
|
||||
}
|
||||
|
||||
ImpUrl = iniHelper.GetValue(IniHelper.CODE.Rust, IniHelper.KEY.ModFileUrl);
|
||||
InfoText.Text = string.Format("原位置 {0} --> {1} \n在处理的时候请不要关闭此窗口 导成功后会自动关闭 失败则会提示权限等错误问题",
|
||||
file,v);
|
||||
file,ImpUrl);
|
||||
}
|
||||
NameText.Text =
|
||||
fileInfo.Name;
|
||||
|
||||
GridView.Loaded += GridView_Loaded;
|
||||
// 添加 Loaded 事件处理程序
|
||||
}
|
||||
private async void Dialog()
|
||||
|
||||
private void GridView_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
ContentDialog dialog = new ContentDialog
|
||||
Init(ImpUrl);
|
||||
}
|
||||
|
||||
private async void Init(string v)
|
||||
{
|
||||
if (fileInfo == null)
|
||||
{
|
||||
await Dialog("没有足够的权限");
|
||||
return;
|
||||
}
|
||||
|
||||
if (v == string.Empty)
|
||||
{
|
||||
await Dialog("没有绑定模组路径");
|
||||
}
|
||||
else if (fileInfo.DirectoryName == v)
|
||||
{
|
||||
await Dialog("原路径与导入路径不能一致");
|
||||
}
|
||||
}
|
||||
private async Task Dialog(string content)
|
||||
{
|
||||
if (GridView.XamlRoot == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var dialog = new ContentDialog
|
||||
{
|
||||
Title = "警告",
|
||||
Content = "这是一个示例内容",
|
||||
PrimaryButtonText = "确定",
|
||||
SecondaryButtonText = "取消",
|
||||
CloseButtonText = "关闭"
|
||||
Content = content,
|
||||
CloseButtonText = "关闭",
|
||||
XamlRoot = GridView.XamlRoot
|
||||
};
|
||||
dialog.CloseButtonClick += (a, b) =>
|
||||
{
|
||||
Close();
|
||||
};
|
||||
|
||||
// 设置 XamlRoot,确保对话框显示在正确的窗口中
|
||||
dialog.XamlRoot = Grid.XamlRoot;
|
||||
|
||||
// 显示对话框
|
||||
await dialog.ShowAsync();
|
||||
}
|
||||
|
@ -64,9 +94,55 @@ public sealed partial class ImportModule : WindowEx
|
|||
};
|
||||
}
|
||||
|
||||
private void Button_Click(object sender, RoutedEventArgs e)
|
||||
private async void Button_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Dialog();
|
||||
if (fileInfo == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var button=sender as Button;
|
||||
if (button == null) { return; }
|
||||
|
||||
button.IsEnabled=false;
|
||||
gj.sc(fileInfo.ToString());
|
||||
|
||||
// 确保目标文件夹存在
|
||||
Directory.CreateDirectory(ImpUrl);
|
||||
|
||||
var destinationZipPath = Path.Combine(ImpUrl, fileInfo.Name);
|
||||
|
||||
await CopyFileWithProgressAsync( fileInfo.ToString() ,destinationZipPath, (percentage) =>
|
||||
{
|
||||
button.Content = $"{percentage:F2}%";
|
||||
Debug.WriteLine($"复制进度: {percentage:F2}%");
|
||||
});
|
||||
|
||||
button.Content = "导入成功";
|
||||
await Task.Delay(1500);
|
||||
Close();
|
||||
Debug.WriteLine("文件复制完成。");
|
||||
}
|
||||
public static async Task CopyFileWithProgressAsync(string sourcePath, string destinationPath, Action<double> progressCallback)
|
||||
{
|
||||
const int bufferSize = 81920; // 80KB
|
||||
byte[] buffer = new byte[bufferSize];
|
||||
|
||||
using (FileStream sourceStream = new FileStream(sourcePath, FileMode.Open, FileAccess.Read))
|
||||
{
|
||||
long totalBytes = sourceStream.Length;
|
||||
long totalBytesRead = 0;
|
||||
|
||||
using (FileStream destinationStream = new FileStream(destinationPath, FileMode.Create, FileAccess.Write))
|
||||
{
|
||||
int bytesRead;
|
||||
while ((bytesRead = await sourceStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
|
||||
{
|
||||
await destinationStream.WriteAsync(buffer, 0, bytesRead);
|
||||
totalBytesRead += bytesRead;
|
||||
double percentage = (double)totalBytesRead / totalBytes * 100;
|
||||
progressCallback(percentage);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user