1
0
Fork 0

feat(quick): 빠른 변환 간단 옵션 팝업 + 중간 취소 지원

컨텍스트 메뉴에서 형식(MP4/MP3 등) 선택 시 간단 옵션 팝업을 띄우고, 변환 중 취소를 지원한다.

- QuickOptionsWindow(신규): 출력 형식에 맞춘 간단 옵션(영상=품질CRF/해상도/GPU, 오디오=비트레이트,
  이미지=품질) 팝업. '변환'으로 진행, '취소'로 종료, '자세히 옵션…'으로 풀 UI(MainWindow) 전환.
  OptionsViewModel 재사용 → ToConvertOptions()로 변환 옵션 구성.
- App.RunQuickAsync: 변환 전 팝업 표시 + 선택 옵션 적용. ConvertManyAsync에 취소 토큰 전달(이전엔 None이라
  취소 불가였음). 변환 경로는 ShutdownMode=OnExplicitShutdown으로 전환해 **취소/창 닫기 시 ffmpeg를
  종료한 '뒤' 앱을 종료**(고아 프로세스·백그라운드 잔류 방지). 성공 시 결과 창 닫을 때까지 대기.
- QuickProgressWindow: 변환 중 '취소' 버튼 + 창 Closing 시 취소(CancellationTokenSource 주입).
  완료 시 취소 버튼 숨김.

버그 수정: 빠른 변환 진행 창을 닫아도 변환이 백그라운드에서 계속 돌던 문제 해결.
빌드 0/0, 106 테스트 그린, publish 후 팝업/일반 실행 크래시 없이 로드.
This commit is contained in:
Yun Chan 2026-06-02 21:35:47 +09:00
parent c10da19bfd
commit 7d461d6ae4
5 changed files with 226 additions and 12 deletions

View file

@ -8,7 +8,8 @@
WindowBackdropType="Mica"
WindowCornerPreference="Round"
WindowStartupLocation="CenterScreen"
ResizeMode="NoResize">
ResizeMode="NoResize"
Closing="OnWindowClosing">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
@ -41,13 +42,24 @@
HorizontalAlignment="Center" VerticalAlignment="Center"
RenderOptions.BitmapScalingMode="HighQuality"
Source="pack://application:,,,/Assets/illus-done.png"/>
<StackPanel Grid.Row="4" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,12,0,0">
<ui:Button x:Name="OpenFolderButton" Content="결과 폴더 열기"
Icon="{ui:SymbolIcon Folder24}"
Click="OnOpenFolderClick" IsEnabled="False" Margin="0,0,8,0"/>
<ui:Button x:Name="CloseButton" Content="닫기" Click="OnCloseClick"
Appearance="Primary" IsEnabled="False"/>
</StackPanel>
<Grid Grid.Row="4" Margin="0,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- 변환 중 취소 (완료되면 숨김) -->
<ui:Button x:Name="CancelButton" Grid.Column="0" Content="취소"
Icon="{ui:SymbolIcon Dismiss24}"
Click="OnCancelClick" HorizontalAlignment="Left"/>
<StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right">
<ui:Button x:Name="OpenFolderButton" Content="결과 폴더 열기"
Icon="{ui:SymbolIcon Folder24}"
Click="OnOpenFolderClick" IsEnabled="False" Margin="0,0,8,0"/>
<ui:Button x:Name="CloseButton" Content="닫기" Click="OnCloseClick"
Appearance="Primary" IsEnabled="False"/>
</StackPanel>
</Grid>
</Grid>
</Grid>
</ui:FluentWindow>