Skip to content

Commit 9c6609a

Browse files
committed
feat: add loading state management to prevent interaction during file processing
1 parent 971d3b1 commit 9c6609a

File tree

2 files changed

+28
-20
lines changed

2 files changed

+28
-20
lines changed

KuchiPaku/ViewModels/MainWindowViewModel.cs

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ public sealed class MainWindowViewModel
6666

6767
public bool IsPartsOverrideMode { get; set; }
6868

69+
public bool IsFileLoading { get; set; }
70+
6971
private JObject? CurrentYmmp { get; set; }
7072

7173
private string? CurrentYmmpPath { get; set; }
@@ -138,8 +140,8 @@ is YmmpTachieType.AnimationTachie
138140
},
139141
DefaultMouthImgPath = v.TachieDefaultItemParameter.Mouth,
140142
TachieType = v.TachieType,
141-
EnableLayers = v.TachieType == YmmpTachieType.PsdTachie
142-
? v.TachieDefaultItemParameter.EnableLayers
143+
EnableLayers = string.Equals(v.TachieType, YmmpTachieType.PsdTachie
144+
, StringComparison.Ordinal) ? v.TachieDefaultItemParameter.EnableLayers
143145
: [],
144146
});
145147

@@ -211,8 +213,8 @@ is YmmpTachieType.AnimationTachie
211213
loading.Message = "出力対象のフィルタ…";
212214
var vItems = voiceItems
213215
.Where(v =>
214-
Characters.Any(c => c.Name == v.Item.CharacterName)
215-
&& Characters.First(c => c.Name == v.Item.CharacterName).IsExport
216+
Characters.Any(c => string.Equals(c.Name, v.Item.CharacterName, StringComparison.Ordinal))
217+
&& Characters.First(c => string.Equals(c.Name, v.Item.CharacterName, StringComparison.Ordinal)).IsExport
216218
)
217219
.ToList()
218220
;
@@ -455,27 +457,31 @@ private async ValueTask SelectedCharaItemChangedAsync(CharacterListViewModel ite
455457
var chara = item;
456458
Debug.WriteLine($"SelectedChara: {chara.Name}, isExport: {chara.IsExport}");
457459

458-
IsShowPsdLayerSelector = chara.TachieType == YmmpTachieType.PsdTachie;
460+
IsShowPsdLayerSelector = string.Equals(chara.TachieType, YmmpTachieType.PsdTachie, StringComparison.Ordinal);
459461

460-
if (chara.TachieType == YmmpTachieType.AnimationTachie)
462+
if (string.Equals(chara.TachieType, YmmpTachieType.AnimationTachie, StringComparison.Ordinal))
461463
{
462464
//アニメーション立ち絵
463-
var flowControl = await LoadLipSyncImagesAsync(chara);
464-
if (!flowControl) { return; }
465+
IsFileLoading = true;
466+
await LoadLipSyncImagesAsync(chara);
467+
IsFileLoading = false;
465468
}
466-
else if (chara.TachieType == YmmpTachieType.PsdTachie)
469+
else if (string.Equals(chara.TachieType, YmmpTachieType.PsdTachie, StringComparison.Ordinal))
467470
{
468471
//psd
472+
IsFileLoading = true;
469473
var loading = Manager.Loading("PSD解析中", "解析しています…");
470474

475+
//reset
476+
SelectedLayers = null;
477+
SelectedLayerTree = [];
478+
471479
//psd版LipSyncImagesのリスト構築
472-
var flowControl = await LoadLipSyncLayersAsync(chara);
480+
await LoadLipSyncLayersAsync(chara);
473481

474482
Manager.Info("PSD解析終了", "PSDファイルの解析終了!", true);
475-
//await Task.Delay(1000);
476483
Manager.Dismiss(loading);
477-
if (!flowControl) return;
478-
484+
IsFileLoading = false;
479485
//psd layer selectorのツリー表示構築
480486
}
481487
}
@@ -552,8 +558,8 @@ async ValueTask<bool>
552558
};
553559
var p = Path.Combine(kuchiDir, Path.GetFileName(v.Value));
554560
var kuchi =
555-
kList.First(k => k.Path == p)
556-
?? kList.FirstOrDefault(k => k.Path == chara.DefaultMouthImgPath);
561+
kList.First(k => string.Equals(k.Path, p, StringComparison.Ordinal))
562+
?? kList.FirstOrDefault(k => string.Equals(k.Path, chara.DefaultMouthImgPath, StringComparison.Ordinal));
557563
var index = (kuchi is null) ? 0 : kList.IndexOf(kuchi);
558564
return new LipSyncImageViewModel(
559565
v.Key,
@@ -588,9 +594,9 @@ async ValueTask<bool>
588594
return false;
589595
}
590596

591-
592-
593-
var psd = await PsdUtil.LoadPsdAsync(path);
597+
var psd = await PsdUtil
598+
.LoadPsdAsync(path)
599+
.ConfigureAwait(true);
594600
var tree = PsdUtil.ParsePsdLayers(psd);
595601

596602
//デフォルトレイヤー表示をymmpの"TachieDefaultItemParameter"から取得して反映、なければPSDファイルそのまま
@@ -646,7 +652,7 @@ IList<YmmPsdLayer> SetDefaultLayer(IEnumerable<YmmPsdLayer> tree)
646652
{
647653
foreach (var layer in tree)
648654
{
649-
layer.IsVisible = defs.Contains(layer.Cid);
655+
layer.IsVisible = defs.Contains(layer.Cid, StringComparer.Ordinal);
650656
layer.Children = SetDefaultLayer(layer.Children);
651657
}
652658
return [..tree];

KuchiPaku/Views/MainWindow.xaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,14 +307,15 @@
307307
SelectedItem="{Binding SelectedLayers}"
308308
VirtualizingStackPanel.IsVirtualizing="True"
309309
Visibility="{c:Binding IsShowPsdLayerSelector}"
310+
IsEnabled="{c:Binding !IsFileLoading}"
310311
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
311312
>
312313

313314
<ListView.ItemTemplate>
314315
<DataTemplate>
315316
<StackPanel Orientation="Horizontal">
316317
<TextBlock
317-
MinWidth="50"
318+
Width="40"
318319
Margin="0,5"
319320
Text="{Binding Name}"
320321
/>
@@ -420,6 +421,7 @@
420421
ItemsSource="{Binding SelectedLayerTree}"
421422
VirtualizingStackPanel.IsVirtualizing="True"
422423
Visibility="{c:Binding IsShowPsdLayerSelector}"
424+
IsEnabled="{c:Binding !IsFileLoading}"
423425
>
424426
<TreeView.ItemContainerStyle>
425427
<Style TargetType="TreeViewItem">

0 commit comments

Comments
 (0)