# gdown Porting TODO (Motrix 기준)

마지막 업데이트: 2026-02-24

## 규칙
- 모든 기능은 `/Users/A/Work/Motrix` 기준으로 비교/포팅
- 작업 후 반드시 이 파일과 `PORTING_PLAN.md` 동시 업데이트

## 현재 진행률
- 전체: 약 45%
- 엔진/RPC: 70%+
- UI 동등성: 55~60%
- 고급 기능: 40~50%

## In Progress
- [~] 범주(Category) 기능 단계 구현
  - [x] Step 1: 범주 기본 데이터/설정 토글/추가 모달 범주 선택 + 저장 경로 자동 반영
  - [ ] Step 2: 범주 관리 UI(추가/수정/삭제, 아이콘/확장자 규칙 편집)
  - [ ] Step 3: 좌측 범주 네비게이션/카운트/필터 연동
  - [ ] Step 4: 외부 연동/자동 캡처 시 범주 자동 매핑 고도화
  - [ ] Step 5: 범주별 통계/정렬/검색 UX 마무리
- [~] Native Messaging 기반 브라우저 연동 전환 (Step-by-step)
  - [x] Step 1: Native Host 스캐폴드(프로토콜/설치 스크립트/템플릿 manifest)
  - [x] Step 2: 확장에서 Native Host 1차 연결(우클릭 + 자동 경로 공통 addUri)
  - [x] Step 3: gdown 앱 제어 채널 정식화(외부 요청 큐 + 앱 포커스 + Add 모달 선표시)
  - [~] Step 4: 링크 자동 후킹 안정화 (사이트별 트리거 차이/클릭 경합)
  - [ ] Step 5: 장애 복구/재시도/로깅 정리
  - [ ] Step 6: 설정 UI/배포 문서 정리
- [ ] motrix-extension gdown 친화 리브랜딩/동작 정렬
  - [ ] 문구/알림/컨텍스트 메뉴의 `Motrix` 표기 제거 후 `gdown` 기준으로 통일
  - [ ] 확장 설정 문서/툴팁을 `gdown` 워크플로우(추가 모달 확인 후 시작)로 전면 수정
  - [ ] 불필요 fallback 옵션 정리 및 기본 동작을 gdown 표준 경로로 고정
- [ ] 확장자별 분기 동작 정책 구현
  - [ ] `*.torrent`/`magnet:`: 토렌트 탭/파일 선택 UI 우선 진입
  - [ ] 일반 바이너리(`zip/exe/dmg/...`): URL 탭 + 다운로드 추가 모달 사전 채움
  - [ ] 미디어/문서(`mp4/mp3/pdf` 등): 사용자 정책(자동 캡처/브라우저 유지) 선택 가능
  - [ ] 확장자 룰셋 UI(허용/제외/모달 강제/자동시작 금지) 추가
- [~] Task Detail 패널 1차 포팅
  - [x] General
  - [x] Activity
  - [x] Files
  - [x] Peers
  - [x] Trackers
  - [~] 하단 액션바/상세 인터랙션 Motrix 동등화
    - [x] 하단 액션바(재개/중지/삭제/폴더/링크)
    - [x] 탭 아이콘/간격/텍스트 밀도 디테일 튜닝
    - [x] 피어 %/클라이언트 파싱 고도화

## Next
- [~] 설정 저장소(local) 연결
  - [x] RPC Port / Secret / Binary Path 저장/복원
  - [x] Download Dir / Split / Concurrent 저장/복원
  - [x] 테마/고급 설정 키 저장/복원
- [x] aria2 global option 반영 커맨드
  - [x] `changeGlobalOption` 대응
- [ ] 리스트 인터랙션 강화
  - [ ] 행 선택 상태
  - [ ] 다중 선택
  - [ ] 선택 항목 일괄 액션
- [ ] Task Detail 패널 1차 포팅 마무리
  - [ ] 하단 액션 세부 UX(Motrix 동등성 최종 조정)
  - [ ] 탭별 빈 상태/오류 상태 문구 정리

## Done
- [x] Native Host `addUri` 처리에서 앱 포커스/전환 동작 제거(큐 적재 전용 무중단 모드)
- [x] Native Host 포커스 로직에서 `osascript/System Events` 제거, `open` 기반 포커스만 사용(자동화 승인 팝업 회피)
- [x] macOS 앱 시작 시 Native Host(`org.gdown.nativehost`) 자동 설치/갱신 로직 추가
- [x] 완료 작업 분류 보정: `active/waiting/stopped` 전 구간에서 완료 조건(`done>=total`)을 `다운로드 완료`로 집계
- [x] 외부 링크 캡처 시 즉시 시작 대신 `Add 모달 확인 후 시작` 흐름으로 전환
- [x] `gdown://` 스킴 미등록 환경 대응: Native Host -> 로컬 큐(`~/.gdown/external_add_queue.jsonl`) -> 앱 폴링 처리
- [x] Native Host 설치/삭제/스모크 스크립트 추가 (`tools/native-host/install-macos.sh`, `uninstall-macos.sh`, `smoke.mjs`)
- [x] Native Messaging Host 1차 스캐폴드 추가 (`tools/native-host/*`)
- [x] 앱 종료 시 aria2 종료 루틴 보강 (강제 정리 + 메인 윈도우 close 이벤트 훅)
- [x] Browser extension 연동 UX: `gdown://focus` 딥링크 수신 시 앱 창 `show/unminimize/focus` 처리
- [x] Add Task 모달 고급 옵션(접기/펼치기) 구현: 사용자 에이전트/권한 부여/리퍼러/쿠키/프록시/다운로드로 이동
- [x] Add Task 고급 옵션 값의 aria2 전달 연결 (`header`, `all-proxy`, `user-agent`)
- [x] aria2 addUri/addTorrent 요청에 `options`/`position` 확장 지원
- [x] 작업 카드 `i` 버튼 우측 슬라이드 Task Info 패널 구현 (General/Activity/Trackers/Peers/Files)
- [x] Task Detail API 확장: 토렌트 생성일/코멘트/트래커 목록 필드 추가
- [x] 고급 설정 RPC 확장 연동 보조 기능 구현 (RPC URL/토큰 복사, RPC 연결 테스트)
- [x] 엔진 실행 정책 정식화: 외부 aria2 자동 재사용 제거, 포트 충돌 시 명시적 오류 처리
- [x] 작업 추가 임시 재시도 로직 제거, TLS 설정 기반 단일 경로로 정리
- [x] 설정 화면 저장/적용 시 하단 중앙 토스트 피드백 추가 및 애니메이션 적용
- [x] 다운로드 필터에 `다운로드 완료` 추가 및 완료 항목 자동 분류
- [x] 다운로드 중 항목 삭제 신뢰성 개선 (`forceRemove -> remove -> removeDownloadResult`)
- [x] 고급 설정 탭 1차 구현 (업데이트/프록시/트래커/RPC/포트/프로토콜/UA) + 런타임 즉시 반영
- [x] Motrix `TaskActions.vue` / `TaskItemActions.vue` 분석 기반 아이콘 기능 매핑 적용
- [x] 항목 아이콘 기능 확장: 폴더 열기(네이티브 파일관리자), 링크 복사(URI 우선), 정보 표시
- [x] 다운로드 화면을 스크린샷 기준으로 재정렬(라이트 톤, 좌측 작업 패널, 상단 아이콘 툴바)
- [x] 다운로드 리스트를 Motrix 톤의 카드형 레이아웃 + 아이콘 액션 버튼(재개/일시정지/삭제)으로 리디자인
- [x] 삭제 시 aria2 상태 경합 보완: `remove` 실패 시 `removeDownloadResult` 폴백 + 이미 삭제된 GID는 성공 처리
- [x] dialog 권한(`dialog:allow-open`) 추가로 저장 폴더 선택 버튼 무반응 이슈 보완
- [x] Tauri 초기 창 크기 확대(1280x860, 최소 1080x720)
- [x] 저장 폴더 탐색 버튼 클릭 전달 구조 수정 (label 중첩 제거 + 클릭 이벤트 안정화)
- [x] 설정 페이지 드롭다운(select) 플랫 스타일 적용
- [x] 메인 다운로드 하단 엔진 패널 제거 (자동 엔진 관리 UX에 맞게 단일 리스트 집중형 레이아웃 적용)
- [x] 기본 폴더 네이티브 선택 다이얼로그 구현 (`@tauri-apps/plugin-dialog`)
- [x] 설정 페이지 여백/레이아웃을 Motrix 스크린샷 톤으로 재조정
- [x] 설정 페이지 UI를 Motrix 스타일의 컴팩트 밀도 중심으로 재조정
- [x] RPC 포트 점유 시 기존 aria2 엔진 재사용 로직 추가
- [x] Motrix extra 기반 aria2 번들 리소스 도입 (`src-tauri/resources/engine`)
- [x] Motrix -> gdown 엔진 리소스 동기화 스크립트 추가 (`npm run sync:aria2`)
- [x] 엔진 수동 버튼 제거, Motrix 스타일 자동 엔진 관리로 전환
- [x] 빌드 시 패치 버전 자동 증가 훅 추가 (`scripts/version-bump.sh`, `tauri:build`)
- [x] 엔진 시작/중지/상태 조회
- [x] URI/Torrent 추가
- [x] 토렌트 드래그&드롭
- [x] 작업 목록(Active/Waiting/Stopped) 표시
- [x] 개별 작업 pause/resume/remove
- [x] 전체 pause/resume
- [x] aria2 바이너리 자동 탐지 + 시작 오류 분류
- [x] 기본 실행 설정 localStorage 저장/복원
