Skip to content

Task #833: rhwp-studio "다른 이름으로 저장" + 저장 cancel fallback download 정정#834

Open
jangster77 wants to merge 15 commits into
edwardkim:develfrom
jangster77:local/task833
Open

Task #833: rhwp-studio "다른 이름으로 저장" + 저장 cancel fallback download 정정#834
jangster77 wants to merge 15 commits into
edwardkim:develfrom
jangster77:local/task833

Conversation

@jangster77
Copy link
Copy Markdown
Contributor

Summary

rhwp-studio 의 file 저장 흐름 관련 결함 2건 통합 정정.

(A) Save As 기능 추가

본질: 현행 file:save (Ctrl+S) 만 존재, currentFileHandle 자동 overwrite 로 새 파일명 저장 불가. 한컴오피스 표준 동작 (Ctrl+Shift+S) 부재.

정정:

  • SaveDocumentOptions.forceSaveAs?: boolean 옵션 추가 → currentHandle 우회 + 항상 showSaveFilePicker
  • file:save-as command 신규 (HWPX #196 비활성 가드 정합)
  • 메뉴 항목: 파일 > "다른 이름으로 저장(A)..."
  • 단축키: Ctrl+Shift+S (영문 + 한글 IME )

(B) 저장 권한 프롬프트 취소 시 fallback download 오발현 정정

본질: Chrome "변경사항을 저장하시겠습니까?" 권한 프롬프트 → "취소" 클릭 → catch 가 AbortError 만 swallow → NotAllowedError 등 다른 cancel 에러는 fallback path 진입 → blob URL download → chrome-extension viewer 자동 연결 chain.

정정:

  • isUserCancelError(e) 모듈-레벨 helper 신규 — AbortError + NotAllowedError 통합 검출
  • file:save + file:save-as 양쪽 catch 동일 적용

인프라 재사용

기존 인프라만 사용 (신규 인프라 도입 부재):

  • saveDocumentToFileSystem (기존)
  • showSaveFilePicker (기존 picker)
  • showSaveAs fallback dialog (기존)

검증

  • cargo test --release: 1351 passed, 0 failed (TS 만 변경, Rust 무영향)
  • cargo clippy --release -- -D warnings: clean
  • npx tsc --noEmit: clean
  • ✅ WASM 재빌드 불필요 (TS 만)
  • ✅ 작업지시자 시각 판정 통과
    • (A) 파일 메뉴 + picker + Ctrl+Shift+S + currentFileHandle 갱신 + Ctrl+S 회귀 부재
    • (B) 권한 프롬프트 취소 + picker 취소 → download 미발현 + 정상 저장 회귀 부재

변경 파일

파일 변경
rhwp-studio/src/command/file-system-access.ts forceSaveAs?: boolean 옵션
rhwp-studio/src/command/commands/file.ts isUserCancelError helper + file:save catch 정정 + file:save-as command
rhwp-studio/src/command/shortcut-map.ts Ctrl+Shift+S binding
rhwp-studio/index.html 파일 메뉴 항목

알려진 제약 (별도 follow-up)

  • HWPX 출처 파일은 file:save-as 도 비활성 (#196 정합 — sourceFormat !== 'hwpx' 가드 유지). HWPX 완전 변환기 #197 후 검토.

closes #833

Test plan

  • cargo test --release (1351 passed)
  • cargo clippy --release -- -D warnings
  • npx tsc --noEmit (rhwp-studio)
  • 작업지시자 시각 판정 (A: Save As 흐름 / B: cancel download 미발현)

🤖 Generated with Claude Code

…fallback 우회

본질: file 저장 흐름 2건 통합 정정.
(A) Save As 기능 부재 — Ctrl+Shift+S / 파일 메뉴 "다른 이름으로 저장" 추가.
(B) 저장 권한 프롬프트 (Chrome "변경사항 저장") 취소 시 fallback download 오발현
    → Downloads 폴더 의도하지 않은 저장 + chrome-extension viewer 자동 연결.

수정:
- file-system-access.ts: SaveDocumentOptions 에 forceSaveAs?: boolean 추가.
  saveDocumentToFileSystem 분기 — forceSaveAs 시 currentHandle 우회 → 항상 picker.
- commands/file.ts:
  · isUserCancelError(e) 모듈-레벨 helper 신규 (AbortError + NotAllowedError 검출)
  · file:save catch 정정 — AbortError 단독 → isUserCancelError 사용
  · file:save-as command 신규 (forceSaveAs: true + 동일 catch 패턴 + Ctrl+Shift+S
    shortcut label + HWPX 비활성 가드 edwardkim#196 정합)
- shortcut-map.ts: Ctrl+Shift+S → file:save-as 등록 (영문 's' + 한글 IME 'ㄴ').
- index.html: 파일 메뉴 "저장" 아래 "다른 이름으로 저장(A)..." 항목 추가.

검증: tsc --noEmit clean.

다음 단계: Stage 2 (회귀) — cargo test + clippy + tsc 전체 재확인.
…회귀 부재

본질: 본 task 변경 (TS 만) 의 회귀 영향 검증.

검증 결과:
- cargo test --release: 1351 passed, 0 failed (base = local/devel, Task edwardkim#825/826
  PR edwardkim#832 머지 전. 본 task TS 만 변경이므로 Rust test 무영향 — 정상)
- cargo clippy --release -- -D warnings: clean
- npx tsc --noEmit: clean
- WASM 재빌드 불필요 (TS 만 변경)

회귀 영향 분석:
- forceSaveAs 는 optional (default false) → 기존 file:save 동작 유지
- isUserCancelError 는 기존 AbortError swallow + NotAllowedError 추가 swallow
  (기존 처리 회귀 부재 + cancel 정정만 추가)
- 신규 file:save-as command + 신규 단축키 + 신규 메뉴 항목 → 기존 binding/메뉴
  무영향
- Rust / WASM 무영향

다음 단계: Stage 3 — 작업지시자 시각 검증 + 보고서 + PR.
본질: file 저장 흐름 2건 통합 정정 완료. 작업지시자 시각 판정 통과.

산출물:
- mydocs/report/task_m100_833_report.md (최종 보고서)
- mydocs/orders/20260511.md (Task edwardkim#833 entry 추가)

시각 판정 통과 확인:
(A) Save As
- ✅ 파일 메뉴 "다른 이름으로 저장(A)..." 항목 표시
- ✅ showSaveFilePicker 다이얼로그
- ✅ Ctrl+Shift+S 단축키 (영문 + 한글 IME)
- ✅ currentFileHandle 갱신 (이후 Ctrl+S 새 파일 overwrite)
- ✅ Ctrl+S 회귀 부재
(B) Cancel fallback 정정
- ✅ 권한 프롬프트 취소 → download 미발현
- ✅ picker 취소 → download 미발현
- ✅ 정상 저장 회귀 부재

알려진 제약 (별도 follow-up):
- HWPX 출처 파일은 file:save-as 도 비활성 (edwardkim#196 정합)

closes edwardkim#833
…ders 갱신)

# Conflicts:
#	mydocs/orders/20260511.md
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