From 4e92f145516d8b38b13edb972ee0cf713ba40586 Mon Sep 17 00:00:00 2001 From: ww-rm Date: Mon, 24 Mar 2025 01:58:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=96=87=E4=BB=B6=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpineViewer/MainForm.cs | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/SpineViewer/MainForm.cs b/SpineViewer/MainForm.cs index 8f12413..9832748 100644 --- a/SpineViewer/MainForm.cs +++ b/SpineViewer/MainForm.cs @@ -132,7 +132,7 @@ namespace SpineViewer var progressDialog = new Dialogs.ProgressDialog(); progressDialog.DoWork += ConvertFileFormat_Work; - progressDialog.RunWorkerAsync(openDialog); + progressDialog.RunWorkerAsync(openDialog.Result); progressDialog.ShowDialog(); } @@ -365,28 +365,19 @@ namespace SpineViewer private void ConvertFileFormat_Work(object? sender, DoWorkEventArgs e) { var worker = sender as BackgroundWorker; - var arguments = e.Argument as Dialogs.ConvertFileFormatDialog; + var arguments = e.Argument as Dialogs.ConvertFileFormatDialogResult; var skelPaths = arguments.SkelPaths; var srcVersion = arguments.SourceVersion; var tgtVersion = arguments.TargetVersion; - var jsonSource = arguments.JsonSource; var jsonTarget = arguments.JsonTarget; var newSuffix = jsonTarget ? ".json" : ".skel"; - if (jsonTarget == jsonSource) - { - if (tgtVersion == srcVersion) - return; - else - newSuffix += $".{tgtVersion.ToString().ToLower()}"; // TODO: 仅转换版本的情况下考虑文件覆盖问题 - } - int totalCount = skelPaths.Length; int success = 0; int error = 0; - SkeletonConverter srcCvter = SkeletonConverter.New(srcVersion); - SkeletonConverter tgtCvter = tgtVersion == srcVersion ? srcCvter : SkeletonConverter.New(tgtVersion); + SkeletonConverter srcCvter = srcVersion != Spine.Version.Auto ? SkeletonConverter.New(srcVersion) : null; + SkeletonConverter tgtCvter = SkeletonConverter.New(tgtVersion); worker.ReportProgress(0, $"已处理 0/{totalCount}"); for (int i = 0; i < totalCount; i++) @@ -402,8 +393,15 @@ namespace SpineViewer try { - var root = jsonSource ? srcCvter.ReadJson(skelPath) : srcCvter.ReadBinary(skelPath); - if (tgtVersion != srcVersion) root = srcCvter.ToVersion(root, tgtVersion); + if (srcVersion == Spine.Version.Auto) + { + if (Spine.Spine.GetVersion(skelPath) is Spine.Version detectedSrcVersion) + srcCvter = SkeletonConverter.New(detectedSrcVersion); + else + throw new InvalidDataException($"Auto version detection failed for {skelPath}, try to use a specific version"); + } + var root = srcCvter.Read(skelPath); + root = srcCvter.ToVersion(root, tgtVersion); if (jsonTarget) tgtCvter.WriteJson(root, newPath); else tgtCvter.WriteBinary(root, newPath); success++; }