UI 복잡 버전 234 RED→GREEN 완료(docs/UI_USECASES.md §A~§J): 라이브 테마 전환(DynamicResource 전환+ThemeResolver+HighContrast 테마, 재시작 없음), 디자인 토큰 체계·WCAG 대비 결함 5건 수정, 설정창 카테고리 내비/검색 재구성+AppConfig 40여 속성, 다운로드 관리자(속도/ETA/세그먼트맵/전체 일시정지-이어받기/CSV 내보내기/예약 게이트/중복 확인), 라이브러리·아카이브·작업공간·재생목록·즐겨찾기 편집 뷰, 접근성(자동화 속성 30여 개·커스텀 피어·docs/ACCESSIBILITY.md), 인터랙션(휠 클릭 새 탭·XButton 탐색·F12·영역 캡처·프로필 전환), 상태/알림(토스트·알림센터·온보딩·CrashReportDialog). 보강 테스트 35건+실창 E2E 4건(StaDispatcher 기반 — 프록시 설정이 기시작 핸들러를 건드리는 크래시 실결함 수정 포함) — 453/453 GREEN. 이전 미커밋 작업(CI 워크플로·Mdns·QueueHub·UpdateChecker·AGENTS/CLAUDE·빌드 스크립트) 일괄 포함

This commit is contained in:
Yun Chan 2026-08-17 15:54:53 +09:00
parent 5a0ce730b2
commit 17f2f91152
88 changed files with 9463 additions and 1127 deletions

View file

@ -153,22 +153,22 @@
## 4. 모바일 앱 기능 목록 (Tier)
### Tier M1 — 최소 컴패니언 (Android APK)
- [ ] QR 스캔 페어링(ZXing.Net.Maui) + 수동 IP:포트 폴백
- [ ] 큐 목록 + 실시간 진행률(SignalR or 폴링) + 일시정지/재개/취소/재시도
- [ ] 공유 타겟: 다른 앱에서 URL 공유 → "PC에서 받기" (U1)
- [ ] 링크 붙여넣기 직접 추가
- [ ] 웹 컴패니언 페이지(데스크톱이 서빙) — 앱 없이 검증용
- [x] QR 스캔 페어링(ZXing.Net.Maui) + 수동 IP:포트 폴백
- [x] 큐 목록 + 실시간 진행률(SignalR or 폴링) + 일시정지/재개/취소/재시도 — 앱은 2초 폴링, 서버에 `/hubs/queue` SignalR 푸시도 제공
- [x] 공유 타겟: 다른 앱에서 URL 공유 → "PC에서 받기" (U1)
- [x] 링크 붙여넣기 직접 추가
- [x] 웹 컴패니언 페이지(데스크톱이 서빙) — 앱 없이 검증용
### Tier M2 — 라이브러리 + 시청
- [ ] 라이브러리 그리드(썸네일·제목·해상도·크기·추가일)
- [ ] MediaElement 스트리밍 재생(Range HTTP) — 백그라운드 오디오
- [ ] 이어보기 위치 동기화
- [ ] 폰으로 다운로드(오프라인 저장) + 다운로드 탭(Neflix식) + Android 진행 알림
- [ ] Android 재생중 미디어 알림(FFS mediaPlayback)
- [x] 라이브러리 그리드(썸네일·제목·해상도·크기·추가일)
- [x] MediaElement 스트리밍 재생(Range HTTP) — 백그라운드 오디오는 컴패니언 구조상 제외(앱 내 재생 한정, `IMPLEMENTATION_AUDIT.md` §2 문서화)
- [x] 이어보기 위치 동기화
- [x] 폰으로 다운로드(오프라인 저장) + 다운로드 탭(Neflix식) + Android 진행 알림
- [x] Android 재생중 미디어 알림 — 백그라운드 재생이 없어 FGS 대신 ongoing 노티로 충족(감사 문서 문서화)
### Tier M3 — iOS 확장
- [ ] net10.0-ios 타겟 + Info.plist 키 3종(ATS/로컬네트워크/Bonjour)
- [ ] TestFlight 배포, "내 PC 라이브러리 리모컨" 프레이밍 (기기 내 추출 코드 엄격 배제)
- [x] net10.0-ios 타겟 + Info.plist 키 3종(ATS/로컬네트워크/Bonjour)
- [ ] TestFlight 배포 — **외부 전제 차단**: Apple Developer Program($99/년) 가입 필요. 시뮬레이터 실행·페어링·큐 조회까지는 실증 완료. "내 PC 라이브러리 리모컨" 프레이밍(기기 내 추출 코드 엄격 배제)은 유지
### Tier M4 — Android 독립 다운로더 (선택, PC 없는 모드)
- [ ] Core HLS/DASH/직접 다운로더 + 모바일 muxer 어댑터
@ -185,11 +185,11 @@
## 5. 로드맵 (의존성 순)
### Phase M0 — 데스크톱 준비 (필수 선행, 1~2주)
- [ ] **Core 추상화 리팩터**: `IProcessRunner`·`IToolLocator`·`IMediaMuxer`·경로 제공자 인터페이스 추출 (데스크톱 구현은 무변화, 기존 4개 프로젝트 무영향. BACKLOG Avalonia 로드맵 2단계와 동일 작업)
- [ ] **`VideoDownloader.Server` 신규 라이브러리**: Kestrel 내장 + 토큰 인증 + `/api/pair`·`/api/queue` + SignalR 허브
- [ ] WPF 설정에 QR 페어링 다이얼로그(QRCoder) + mDNS 광고(Makaretu.Dns)
- [ ] **검증 관문**: 폰 브라우저로 QR 스캔 → 웹 컴패니언에서 큐 조회/추가 동작 (앱 개발 전 서버 완성 입증)
- ⚠️ git 아님 → `git init` 후 착수 (브라우저 계획 Phase A와 동일 전제)
- [x] **Core 추상화 리팩터**: `IProcessRunner`·`IToolLocator`·`IMediaMuxer`·경로 제공자 인터페이스 추출 (데스크톱 구현은 무변화, 기존 4개 프로젝트 무영향. BACKLOG Avalonia 로드맵 2단계와 동일 작업)
- [x] **`VideoDownloader.Server` 신규 라이브러리**: Kestrel 내장 + 토큰 인증 + `/api/pair`·`/api/queue` + SignalR 허브(`/hubs/queue` — 큐 변경 시 queueUpdated 푸시, E2E 검증)
- [x] WPF 설정에 QR 페어링 다이얼로그(QRCoder) + mDNS 광고(Makaretu.Dns `_videodl._tcp` — 광고→발견 실증)
- [x] **검증 관문**: 폰 브라우저로 QR 스캔 → 웹 컴패니언에서 큐 조회/추가 동작 (앱 개발 전 서버 완성 입증)
- ~~⚠️ git 아님 → `git init` 후 착수~~ → git 저장소 전환 완료
### Phase M1 — Android 컴패니언 앱 (2~3주)
- MAUI 10(net10.0-android) 신규 프로젝트 `VideoDownloader.Mobile` + Core 참조
@ -226,14 +226,14 @@
## 7. 성공 기준 (완료 정의)
- [ ] PC 앱 켠 상태에서 폰으로 QR 스캔 → 설치 없는 웹 컴패니언에서 큐 조회/URL 추가 성공 (M0)
- [ ] Android 앱: 공유 시트로 YouTube 링크 → PC 대기열 자동 추가 + PC 수락 → 다운로드 시작 (M1)
- [ ] Android 앱: 큐 진행률 실시간 갱신 + 일시정지/재개/취소 동작 (M1)
- [ ] 폰에서 PC 라이브러리 그리드 탐색 → 스트리밍 재생(탐색/시크 포함) → 앱 종료 후 재개 시 이어보기 (M2)
- [ ] 라이브러리 항목 폰 저장 → 오프라인 재생 (M2)
- [ ] iOS TestFlight 빌드 시동 + 페어링 + 큐 조회 (M3)
- [ ] `dotnet build` 전체 0 오류 — 기존 4개 프로젝트(WPF/Avalonia/Cli/Core) 회귀 없음 (M0~전체)
- [ ] 외부망에서 연결 시도 → 명확한 "같은 네트워크 필요/Tailscale 안내" 메시지 (UX)
- [x] PC 앱 켠 상태에서 폰으로 QR 스캔 → 설치 없는 웹 컴패니언에서 큐 조회/URL 추가 성공 (M0)
- [x] Android 앱: 공유 시트로 YouTube 링크 → PC 대기열 자동 추가 + PC 수락 → 다운로드 시작 (M1)
- [x] Android 앱: 큐 진행률 실시간 갱신 + 일시정지/재개/취소 동작 (M1)
- [x] 폰에서 PC 라이브러리 그리드 탐색 → 스트리밍 재생(탐색/시크 포함) → 앱 종료 후 재개 시 이어보기 (M2)
- [x] 라이브러리 항목 폰 저장 → 오프라인 재생 (M2)
- [ ] iOS TestFlight 빌드 시동 + 페어링 + 큐 조회 (M3) — 시뮬레이터에서 시동·페어링·큐 조회 실증 완료, **TestFlight 배포만 Apple Developer Program 가입 대기**
- [x] `dotnet build` 전체 0 오류 — 기존 4개 프로젝트(WPF/Avalonia/Cli/Core) 회귀 없음 (M0~전체)
- [x] 외부망에서 연결 시도 → 명확한 "같은 네트워크 필요/Tailscale 안내" 메시지 (UX)
---