Skip to content

Fix pending prompts, Whale cancellation, version, and themes#1

Draft
esleeeeee wants to merge 24 commits into
mainfrom
feature/initial-spike
Draft

Fix pending prompts, Whale cancellation, version, and themes#1
esleeeeee wants to merge 24 commits into
mainfrom
feature/initial-spike

Conversation

@esleeeeee

@esleeeeee esleeeeee commented Jul 21, 2026

Copy link
Copy Markdown
Owner

개요

eslee Download Router의 초기 기능을 실제 설치형 WinUI 3 앱 수준으로 완성하고, 사용자 검증에서 확인된 다운로드 상태·선택 창·DPI·테마·버전 문제를 수정합니다.

이 PR은 계속 Draft/Open 상태로 유지하며 병합하지 않습니다.

주요 변경 사항

다운로드 라우팅과 선택 흐름

  • SelectSubfolder 작업을 FIFO 선택 창으로 처리합니다.
  • 계층형 폴더 선택, 긴 폴더명 줄바꿈, 실제 다운로드 파일명 표시를 지원합니다.
  • 선택 창에 현재 순서(1 / N)와 나머지 대기 파일 수를 표시합니다.
  • 모두 나중에 선택으로 현재 세션의 기존 팝업 큐만 일괄 숨길 수 있습니다.
  • 새로 시작되는 다운로드는 이후에도 정상적으로 선택 창을 표시합니다.

과거 Pending 팝업 폭주 방지

  • 자동 팝업은 선택이 필요한 SelectSubfolder 작업 중 마지막 브라우저 이벤트가 30분 이내인 작업으로 제한합니다.
  • 30분 이상 지난 작업은 DB와 Pending 탭에 유지하되 앱 시작 시 자동 팝업으로 표시하지 않습니다.
  • Extension 시작 재조정 메시지가 과거 작업의 LastBrowserEventAt을 현재 시각으로 갱신하지 않도록 IsReconciliation을 구분합니다.
  • 이전 세션 작업은 Pending 화면에서 별도 설명으로 안내합니다.

Whale 취소·중단 상태

  • chrome.downloads.onChanged에서 USER_CANCELED를 확인하는 즉시 idempotent한 download.cancelled를 전송합니다.
  • interrupted 상태는 chrome.downloads.search 결과와 마지막 오류를 함께 사용해 취소와 중단을 구분합니다.
  • onErased는 브라우저 기록 삭제일 뿐 다운로드 취소로 오판하지 않습니다.
  • service worker 시작 시 Agent 작업과 Whale 다운로드 상태를 재조정합니다.
  • 취소된 작업은 Pending과 팝업 큐에서 즉시 제외하고 파일 이동을 금지합니다.
  • 다운로드 이력에는 취소선, 낮은 opacity, 사용자가 다운로드를 취소했습니다 안내를 표시합니다.
  • 진단 로그에는 download ID, 정제된 상태 enum, Native Messaging 전송 결과, Agent 상태 전이만 기록하며 URL·토큰·전체 로컬 경로는 기록하지 않습니다.

최소화 상태 선택창 전면 표시

  • 실제 진단에서 FolderSelectionWindow는 처음부터 MainWindow의 owned window가 아니라 owner HWND = 0인 독립 top-level window였습니다.
  • 회귀 원인은 최소화된 owner가 아니라, 기존 Activate → ShowWindow(SW_SHOW) → SetForegroundWindow가 Windows foreground 제한에 거부된 뒤 곧바로 작업표시줄 Flash만 수행한 데 있었습니다.
  • 선택창 HWND 자체에 ShowWindow(SW_SHOWNORMAL) → Window.Activate → BringWindowToTop → SetForegroundWindow를 적용합니다.
  • 직접 foreground 전환이 거부되면 foreground thread와 입력 큐를 잠시 연결해 선택창 HWND에 SetActiveWindow, SetFocus, SetForegroundWindow를 재시도합니다.
  • 선택창은 항상 non-iconic 상태를 보장하고 짧은 간격으로 제한된 재시도를 수행합니다.
  • FlashWindowEx는 모든 전면 활성화 시도가 실패한 경우의 마지막 fallback으로만 사용합니다.
  • MainWindow HWND에는 복원 명령을 보내지 않으므로 선택창 종료 후에도 메인 창의 최소화 상태가 유지됩니다.
  • main/selection HWND, visible, IsIconic, owner, foreground와 각 Win32 호출 결과를 경로·URL 없이 진단 로그에 남깁니다.

WinUI 3 UI·DPI·반응형 레이아웃

  • 앱 manifest를 Per-Monitor V2 DPI aware로 구성합니다.
  • 공통 콘텐츠 영역을 반응형 ScrollViewer와 제한된 form container 구조로 정리합니다.
  • 중복 여백과 고정 폭을 줄이고 페이지가 창 폭에 맞게 늘어나도록 수정합니다.
  • QHD 125%에서 우측 잘림 없이 NavigationView, 카드, 폼, 다운로드 이력을 실제 확인했습니다.

버전과 정보 화면

  • Directory.Build.props를 App, Agent, Native Host, Installer의 단일 버전 원본으로 사용합니다.
  • 정보 화면에 제품명, 현재 버전, 커밋, 설치형/개발 빌드 구분, 데이터 위치 열기, GitHub 열기 기능을 표시합니다.
  • 현재 설치본은 0.3.1, 제품 informational version은 0.3.1+ed0aacce970c34ac2e4674e3a62ac41e7eb34210입니다.

전역 테마

  • ThemeManager가 모든 열린 Window에 System/Light/Dark 테마를 즉시 적용합니다.
  • 새 MainWindow, FolderSelectionWindow, ContentDialog, 트레이에서 다시 연 창에도 저장된 테마를 적용합니다.
  • 설정은 기존 LocalAppData 구성 파일에 보존하며 업그레이드 설치 후에도 유지합니다.
  • 동적 카드, 상태 영역, NavigationView와 AppWindow 제목 표시줄까지 테마에 맞게 표시합니다.

실제 검증

  • .NET 테스트: 73/73 통과(Core 46, Infrastructure 7, Integration 20)
  • Extension 테스트: 13/13 통과
  • Debug/Release 빌드: 경고 0, 오류 0
  • Release Native Host publish 및 설치 프로그램 생성 통과
  • GitHub Actions build-and-test 2개 통과
  • 0.3.0 설치본 위 0.3.1 업그레이드 설치 성공
  • 업그레이드 전후 기존 설정 파일과 SQLite DB의 크기 및 SHA-256 동일
  • App, Agent, Native Host, Installer 버전 0.3.1 일치
  • 실제 Whale 4.38.386.14 취소 시나리오 4종 모두 1초 이내 Cancelled 반영
  • 30분 이상 된 Pending 27개: 앱 시작 자동 팝업 0개, Pending 탭에는 27개 유지
  • QHD 2560×1440, Windows 125%에서 다크/라이트/시스템 테마 전환과 재실행 유지 확인

실제 Whale 선택창 회귀 검증

  • A 일반 표시: 선택창이 화면 전면의 foreground HWND로 표시됨
  • B 실제 최소화 버튼: MainWindow IsIconic=True 상태에서 선택창 visible=True, IsIconic=False, owner=0, foreground 전환 성공
  • B 종료 후: MainWindow가 계속 IsIconic=True로 유지됨
  • C X 트레이 숨김: MainWindow visible=False 상태에서도 독립 선택창이 foreground로 표시됨
  • D 연속 3개: 선택창은 항상 1개만 존재하고 (13) → (14) → (15) 순서로 FIFO 진행
  • E 실제 Whale 취소: 선택창 표시 855ms, 취소 클릭 후 팝업 제거 628ms
  • E 상태 전이: BrowserTransferState InProgress → Cancelled, RoutingState WaitingForSelection → NotRequired
  • E 화면 반영: Pending 10→9 감소, 이력의 파일명·보조 설명 취소선과 사용자가 다운로드를 취소했습니다 표시 확인

설치 파일

  • 경로: artifacts/installer/eslee-download-router-setup.exe
  • SHA-256: EDF8E3C6EEFEA132EFB1D4A691EC3A0CE4B8DC42BA53088B2BB3840032A8486F

남은 사용자 검증

  • 실제 Windows 재부팅 후 자동 시작 동작
  • 물리적인 FHD/4K 및 Windows 100%/150% 배율 환경

@esleeeeee esleeeeee changed the title Fix Native Messaging diagnostics and WinUI DPI layout Fix SelectSubfolder flow, history, and WinUI layout Jul 22, 2026
@esleeeeee esleeeeee changed the title Fix SelectSubfolder flow, history, and WinUI layout Implement installed tray workflow, folder routing, and UI fixes Jul 22, 2026
@esleeeeee esleeeeee changed the title Implement installed tray workflow, folder routing, and UI fixes Fix pending prompts, Whale cancellation, version, and themes Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant