1
0
Fork 0
Commit graph

62 commits

Author SHA1 Message Date
Yun Chan
fc73b3c9a7 ci: PlatformToolset v145 → v143 (CI 호환)
GitHub Actions windows-latest runner는 VS 2022 Enterprise를 제공하므로
v145 (VS 2026 toolset) 빌드 도구가 없어 MSB8020 발생.
v143 toolset은 VS 2022 + VS 2026 모두 지원하므로 통일.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 23:16:15 +09:00
Yun Chan
d24cb90ed2 ci: build.yml + release.yml 보강 (서명 옵션 + workflow_dispatch)
- build.yml 추가: PR/push 시 솔루션 빌드 + MSIX 산출 검증, 14일 보관
- release.yml: PFX_BASE64 / PFX_PASSWORD secrets 있으면 자동 서명, 없으면
  unsigned. workflow_dispatch로 수동 트리거도 가능.
- 릴리즈 본문에 인증서 등록 + 사이드로드 가이드 inline 포함.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 23:13:03 +09:00
Yun Chan
784167ccff feat: P4-P8 한방 마무리 — 자체서명 MSIX, 영구저장, 단축키, capability 알림
P4 — 자체 서명 MSIX 자동화
- packaging/BuildAndSign.ps1: 인증서 생성→PFX export→MSIX 빌드→서명을
  한 스크립트로 일관 처리. 기존 인증서 있으면 재사용.
- Install-EverythingToJpeg.ps1: 기본 비밀번호 'EverythingToJpegDev' 자동
  사용 (사용자 5대 PC 본인 사용 한정).
- 검증: 53MB 서명된 MSIX 산출, signtool 정상 통과(DigiCert TimeStamp 박힘).

P6 — Past Results 영구 저장
- HistoryStorage.cs: %LocalAppData%\EverythingToJpeg\history.jsonl 에
  변환 결과 append. 시작 시 로드해서 _pastResults에 채움.
- 첫 실행에만 데모 시드, 이후엔 실데이터만 표시.
- Past Results의 Clear All은 영구 파일도 함께 삭제 (확인 다이얼로그 추가).

P7 — 정리 + 단축키
- 사용 안 하는 ConvertWindow.xaml/.cs 폐기 (코드 600줄 제거).
- KeyBinding 4개: Ctrl+O 파일 추가, Ctrl+Enter 변환, Esc 닫기, F5 새로고침.
- RelayCommand 헬퍼 클래스로 단축키 ICommand 패턴 구현.

P8 — Capability 자동 안내
- 시작 시 RequiresExternal Provider들의 가용성 비동기 체크.
- 외부 도구 미설치 형식이 있으면 사이드바 footer에
  "⚠ N개 형식이 외부 도구를 기다립니다 (Diagnose 참조)" 한 줄 표시.

README — Phase 1~8 전체 진척, 단축키 표 정리.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 19:36:55 +09:00
yunchan8804-blip
b2147a643f
Initial commit 2026-05-06 19:28:25 +09:00
Yun Chan
00d1eeff96 ux: 우클릭 → 메인 윈도우 통합 + Preview를 우측 컬럼으로 승격
우클릭 진입 통합
- App.OnStartup의 dialog 분기에서 ConvertWindow 대신 MainWindow를 띄우면서
  파일을 Active Queue에 자동 추가, 첫 항목 자동 Preview 로드.
- 사용자 시점에서 우클릭 → "JPEG로 변환…" 클릭 시 작은 다이얼로그가
  아니라 풀스크린 FormatShift 메인 화면이 그대로 노출.
- ConvertWindow 자체는 FormatShift 토큰으로 통일했지만 더 이상 호출되지
  않음 (코드는 향후 활용 위해 보존).

Preview를 탭 → 우측 메인 컬럼으로 승격
- 메인 영역 그리드를 1 column → 2 column 으로 분할: 좌측 *(min 360),
  우측 380px 고정 Preview 컬럼.
- 탭은 Active Queue / Past Results 두 개만 (Preview 탭과 무의미한 0 뱃지
  제거). Preview는 항상 보임.
- Active Queue 행 클릭 → 우측 Preview에 즉시 표시 (탭 전환 없음).
- Past Results 행도 클릭 가능: 실제 파일이면 미리보기, 데모/소실 파일이면
  안내 문구.
- Drop hint overlay는 ColumnSpan=2로 양쪽 컬럼 모두 덮음.

이벤트 처리 개선
- 행 Border에 PreviewMouseLeftButtonUp(tunnel) 사용 → 자식 컨트롤이 클릭을
  가로채는 이슈 해소.
- IsInsideButton 헬퍼로 Remove/Open 버튼이 발화시킨 클릭은 행 핸들러에서
  무시하여 의도 충돌 방지.

App.xaml 정리
- FormatShiftTheme.xaml 을 App-level resources에 머지 → 모든 윈도우에서
  Application.Current.FindResource("Fs*") 조회 가능 (이전엔 Window-level
  머지만 해서 ResourceReferenceKeyNotFoundException 발생).

LoadPreview 통합
- LoadPreviewByPathAsync(path, fileName, format, size) 단일 메서드로 통합.
- _selectedPreviewPath 로 Active/Past 두 케이스 모두 Open in Explorer 일관
  처리.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 19:26:27 +09:00
Yun Chan
01467a4d27 ux: FormatShift Utility 디자인을 메인 윈도우에 충실히 재현
새 메인 윈도우 (1280x960, dark minimal):
- 320px 사이드바 — Target Format(JPG), Encoding Quality 슬라이더(파란색 fill +
  흰 thumb), Output Destination, Skip/Rename/Replace 세그먼트, Stats Box,
  Processing Queue 버튼(disabled→enabled 상태 전이)
- 메인 영역 — pill 탭 3개(Active Queue / Preview / Past Results), 액션 버튼
  (Register Menu / Diagnose / Export Log / Clear All)
- Past Results — 날짜별 그룹화, "Today/Yesterday" 헤더 + Session Savings 뱃지,
  파일 아이콘(PDF/PNG/HEIC/JPG/...), 사이즈/savings/status 컬럼
- Active Queue — 빈 상태 드롭존 + 파일 행, 행 클릭 시 Preview 자동 전환
- Drop hint overlay — 파일 끌어올 때 흐릿한 가이드 표시

핵심 신규 인프라:
- FormatShiftTheme.xaml — 디자인 토큰(색/타이포/슬라이더 스타일/탭 pill 스타일/
  세그먼트 스타일/primary·secondary 버튼) 전부
- PreviewService — 이미지/RAW(Magick), HEIC(libheif decode), PDF(PDFium)을
  720px 긴변 BitmapSource로 렌더. DOCX/HWP/HTML은 안내 문구 fallback
- HistoryStore — 변환 결과 누적(메모리), 날짜별 group + session savings 합산
- Export Log — Past Results를 CSV/JSON으로 저장

기존 기능 통합:
- 사이드바 옵션이 ConvertOptions에 매핑 (Quality, Output Path, Conflict)
- Process Queue 버튼이 ConvertManyAsync 호출 → 결과를 History에 누적
- Register Menu / Diagnose 액션 유지

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:57:49 +09:00
Yun Chan
8065bf7373 fix: ConvertWindow ItemTemplate XamlReader 실패 + 진단/예외 핸들러
- ConvertWindow의 ItemTemplate을 코드비하인드 XamlReader.Parse 대신
  XAML 안에 <ItemsControl.ItemTemplate>으로 인라인 정의.
  XamlReader는 code-behind 메서드를 wire-up할 수 없어
  Click="OnRemoveEntry"가 매번 실패 → ConvertWindow 생성 시 예외 발생,
  GUI 상태가 깨져 변환 버튼 클릭이 처리되지 않던 근본 원인.
- OnConvertClick에 진단 로그(%TEMP%\EverythingToJpeg_dialog.log) 추가
- App에 전역 unhandled exception 핸들러 — DispatcherUnhandled,
  AppDomain.UnhandledException, TaskScheduler.UnobservedTaskException 모두
  %TEMP%\EverythingToJpeg_unhandled.log에 기록 + 메시지박스로 즉시 노출

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:47:41 +09:00
Yun Chan
e663921460 ux: ConvertWindow 좌우 → 상하 레이아웃 재설계
이전 좌우 분할은 IDE 패턴이라 변환 도구에 부자연스러웠음.
옵션 패널 320px 고정 때문에 창을 늘리면 좌측만 늘어나
"우측으로 늘어진" 인상을 줬다.

새 레이아웃 (위→아래):
1. 헤더(타이틀+파일 카운트) + 추가/비우기 버튼
2. 옵션 카드 (한 줄: 품질·출력 위치·이름 충돌)
   + 고급 옵션 expander (긴 변 픽셀·PDF DPI·투명 처리)
3. 파일 리스트 (메인, 세로 스크롤로 끝까지)
4. 하단 액션바 (진행률 + 닫기/변환 시작)

창 비율 940x700 → 640x780 으로 세로 우선.
파일이 많아질수록 자연스럽게 길게 늘어나는 패턴.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 14:50:48 +09:00
Yun Chan
69a6a1360d fix: 빠른 변환 후 프로세스 자동 종료 + 진단 로그
- ShutdownMode를 OnExplicitShutdown → OnLastWindowClose 로 변경
  변환 끝나도 WPF가 안 닫혀 좀비 프로세스로 남던 문제. 사용자 입장에선
  "결과가 안 보임"으로 인지됐음. 이제 GUI 닫히면 자동 종료(1초 내)
- RunQuickAsync에 %TEMP%\EverythingToJpeg_quick.log 진단 로그 추가
  (소스 경로, 결과 상태, 출력 경로, 예외 스택을 모두 기록)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 14:50:32 +09:00
Yun Chan
5750aed16f Phase 3: HTML(WebView2) + HWP/HWPX(LibreOffice) 실구현
HTML / HTM
- HtmlProvider: STA 스레드 + WPF Dispatcher에서 WebView2 헤드리스 컨트롤러(HWND_MESSAGE) 생성
- CDP Page.captureScreenshot(captureBeyondViewport=true)으로 풀페이지 PNG 획득
- Magick.NET으로 JPEG 인코드, 알파/리사이즈/품질 옵션 일관 적용
- ConvertOptions: HtmlViewportWidth/Height, HtmlWaitMilliseconds, HtmlFullPage

HWP / HWPX
- HwpxProvider: LibreOffice headless --convert-to pdf + H2Orestart 확장 자동 감지
- DocxProvider 패턴 재사용 (소스→PDF→PdfProvider 위임)
- ExternalToolDetector.IsH2OrestartInstalled — uno_packages/extensions 검색

기타
- Core csproj: UseWPF=true (WebView2가 WPF 의존), Microsoft.Web.WebView2 1.0.3912.50 추가
- AppX 매니페스트에 .html/.htm/.hwp/.hwpx ItemType 추가
- 파일 다이얼로그 필터 확장
- 두 ComingSoon 상태였던 Provider가 이제 Available/RequiresExternal로 노출됨

검증
- 솔루션 Release 빌드 통과
- MSIX 38개 페이로드 패키징 성공 (WebView2 SDK 포함)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 13:23:47 +09:00
Yun Chan
f2c8610ff6 Phase 2: MSIX 패키지 + IExplorerCommand 셸 익스텐션
C++ 셸 익스텐션 (src/EverythingToJpeg.Shell/)
- WRL RuntimeClass 패턴으로 IExplorerCommand 두 핸들러 구현
- Quick(빠른 변환) / Dialog(설정 창) verb를 다른 CLSID로 분리
- Invoke()에서 EverythingToJpeg.exe로 verb + 파일 경로 전달
- VS 2026 빌드 검증, /utf-8 한글 라벨 지원

MSIX 패키징 (packaging/)
- Package.appxmanifest: com:SurrogateServer + desktop4:FileExplorerContextMenus
- 26개 확장자 × 2 verb 자동 노출
- BuildMsix.ps1: dotnet publish + msbuild + makeappx 일관 파이프라인
- CreateDevCert.ps1 / Install-EverythingToJpeg.ps1: 자체 서명 인증서 워크플로
- GenerateAssets.ps1: placeholder 로고 자동 생성

CI/CD
- .github/workflows/release.yml: 태그 푸시 시 미서명 MSIX 자동 빌드 + 첨부

검증
- 50MB MSIX 산출 확인 (packaging/dist/EverythingToJpeg-x64.msix)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 13:03:16 +09:00
Yun Chan
8fa4a613d7 초기 커밋: Phase 1 — 레지스트리 기반 컨텍스트 메뉴 + 핵심 변환 파이프라인
- Provider 추상화(IConverterProvider + ProviderCapability) — Available/RequiresExternal/ComingSoon 1급 시민
- 변환 구현: Magick(이미지·RAW·GIF·TIFF), HEIC/HEIF(libheif decode→Magick encode), PDF(PDFium), DOCX(Word COM 또는 LibreOffice 자동 감지)
- ComingSoon 스텁: HTML, HWP/HWPX (UI 노출, 컨텍스트 메뉴 등록 자동 제외)
- WPF + WPF-UI 4.3 Fluent 2 UI: 메인 창(드래그&드롭, Provider 카드), 변환 창(썸네일·옵션·진행률), 빠른 변환 진행 창, 진단 창
- 단일 EXE에 verb 라우팅: quick / dialog / register / unregister / diagnose / help
- HKCU SystemFileAssociations 기반 컨텍스트 메뉴 등록 (Win11 "추가 옵션 표시"에 노출)
- README, packaging/ Phase 2 placeholder 포함

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 12:50:35 +09:00