Commit Graph

246 Commits (ab4d935fcaf958bd815982cdd21284c01b6f4986)

Author SHA1 Message Date
RyuJongJin c350499b79 248 다듬기: 아래 DNS 알림은 상태가 풀리면 닫고, 같은 안내를 보이는 화면 (브라우저 덮개 · 설정 DNS 칸) 에서는 띄우지 않음
a4 의 933 기기 확인 · 관리자 지시 (10/12, 이번 릴리스 전에):
- DNS 를 고친 뒤 (정한 서버가 다시 답함 · 설정을 바꿈) 에도 옛 문구 "DNS 서버 (192.0.2.1) 에 닿지 않아…" 가 남아
  설정의 DNS 칸을 가렸다 → 알림 내용 위젯 (DnsFailureNotice) 이 상태를 듣다가 풀리면 스스로 닫는다
  (Flutter 의 알림 닫기는 "지금 보이는 알림" 에만 해야 해서, 보이는 동안 그려지는 내용이 닫는다).
- 브라우저 덮개와 함께 떠 [시스템 DNS 로 바꾸기] 가 두 개 보였다 → 덮개 · 환경 설정의 DNS 칸이 열려 있는 동안은
  띄우지 않고, 떠 있다가 그런 화면이 열리면 닫는다 (NetGuard.noticeBlockers). 상태는 설정 · 작업 기록 줄 (249) 에 그대로.
- 버튼이 있는 알림이 저절로 사라지지 않는 것 (248 처음 지시) 은 그대로.
- 시험: 상태 풀림 → 닫힘 · 막는 화면이 있으면 안 뜸 · 뜬 뒤 열리면 닫힘 · 설정 DNS 칸 · 덮개가 막는 수를 올리고 내림.
  실제 Edge 통합 시험 다시 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 07:47:50 +09:00
RyuJongJin c41954b3ea 폴더를 덮어쓰기로 합쳐도 안쪽의 받는 쪽이 더 새 파일은 건너뜀 · 같은 이름 창에 미리 알림 (229, 931)
- 데이터 (버그, 기기 확인): 폴더 [덮어쓰기] (합치기) 가 안쪽의 더 새 파일을 예전 것으로 덮었다 - 설정 '받는 쪽이 더 새것이면 건너뛰기' 를 안쪽에도
- 이동이면 건너뛴 원본은 남기고 옮긴 것만 지움 ('n개는 원본에 남음'), 같은 이름 창의 폴더 줄에 '안쪽에 받는 쪽이 더 새 파일 n개'
- 맨 위 파일 하나를 사용자가 [덮어쓰기] 로 고른 것은 그대로 따름

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 07:31:41 +09:00
RyuJongJin bf4b27a5f6 MKV 다시 만들기: 임시 이름에 만들고 다 됐을 때만 바꿔 넣음 · 이미 있으면 묻기 · 묶음 집계 · 끝난 뒤 취소 무시 (P0, 931)
- 데이터 (버그, 기기 확인 · 10.10 에도 있음): FFmpeg -y 가 처음부터 결과 MKV 에 써서, 다시 만들다 취소 · 실패하면 예전 완성본이 사라졌다
  → 이름.mkv.jjpart 에 만들고 다 된 뒤에만 storage.replaceFile, 취소 · 실패면 임시 파일만 지움
- 결과가 이미 있으면 시작 전에 묻기 (덮어쓰기 · 건너뛰기 · 다른 이름) + 환경 설정 '만들 MKV 가 이미 있으면' (처음 값 묻기)
- 240 집계: 이번 묶음의 이전 상태를 비우고, 시작 못 한 것은 취소로 셈
- 끝난 (코드 0) 뒤에 온 취소는 무시 - 성공으로 (Windows · Android)
- 폰 세로 작업 중 [취소] · 진행을 늘 보이는 자리에, 진행 글 'MKV 3개 중 2번째 · 36%'
- 시험: 가짜 FFmpeg 가 출력을 만들게 (queue_test), 모든 파일이 '있는' 가짜 저장소에서는 덮어쓰기 (ui_test)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 07:31:41 +09:00
RyuJongJin f7d73da301 250 고침 2: Android 에서 덮개가 뜨자마자 걷히던 것 - 덮개는 사용자가 옮길 때만 걷음 · 기록의 예외 이름 빼기
a4 의 932 기기 확인 (노트 10+): 작업 기록에 "웹 페이지를 열지 못함 (…): net::ERR_TUNNEL_CONNECTION_FAILED" 는 남는데
덮개가 보이지 않았다 (버그 수정).
- 원인: Android 는 본문 오류 (onReceivedError) 뒤에 엔진의 오류 페이지를 또 읽어 진행률이 0 → 100 으로 한 번 더 돈다.
  "새로 읽기 시작 (진행률이 1 아래로)" 에서 덮개를 걷어, 뜨자마자 걷혔다. Windows (Edge) 는 이 단계가 없어 통과했다.
- 덮개는 사용자가 옮길 때만 걷는다: 주소 · 뒤로 · 앞으로 · 새로고침 · [다시 시도] (WebNav 를 감싸 알림 - _NavWatch).
  덮개가 웹 뷰를 덮고 있어 그 밖의 길로는 옮겨지지 않는다.
- 덮개를 띄우면 작업 기록에 "DNS 안내 덮개를 띄움 (…)" - 기기에서 "띄웠는데 안 보임" 과 "띄우지 않음" 을 가리게.
- DNS 실패 글에 예외 이름 ("TimeoutException:") 을 빼고 이유만 (a4 932).
- 시험: Android 순서 (본문 오류 → 오류 페이지 진행률 0 → 100) 뒤에도 덮개가 남음. 실제 Edge 통합 시험 다시 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 07:25:27 +09:00
RyuJongJin 0b0f2617ae 250 고침: 덮개를 띄우면 웹 뷰가 새로 만들어져 덮개가 바로 걷히던 것 · 엔진의 본문 오류로도 판단
a4 의 931 기기 확인 (노트 10+): DNS 192.0.2.1 에서 브라우저에 덮개가 보이지 않고 ERR_TUNNEL_CONNECTION_FAILED 만 (버그 수정).
- 원인: 덮개가 없을 때는 웹 뷰를, 있을 때는 Stack 안의 웹 뷰를 돌려 트리 모양이 바뀌었다 → 웹 뷰가 새로 만들어져
  페이지를 다시 읽고, 다시 읽기 시작에서 덮개가 걷혔다. Windows 실제 Edge 통합 시험에서 재현
  ("WindowsInAppWebViewController was used after being disposed"). 늘 같은 Stack 모양으로.
- 엔진이 알려 주는 본문 오류 (onReceivedError, Edge · Android) 도 받아 판단한다: 그 이름의 실패 기록이 있거나,
  DNS 서버에 지금 닿지 않는 중에 프록시 터널 실패 (TUNNEL · PROXY) 면 덮개. 오류 뒤에 오는 읽기 끝이 덮개를 지우지 않는다.
  DNS 강제 중의 본문 오류는 작업 기록에 남긴다 (기기에서 원인을 볼 수 있게).
- 시험: 덮개를 띄워도 웹 뷰를 다시 만들지 않음 · 본문 오류 경로 · DNS 와 상관없는 오류는 엔진 화면 그대로.
  실제 Edge: integration_test/dns_block_real_test.dart (덮개 → [다시 시도] → 다시 덮개) 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:59:07 +09:00
RyuJongJin 614584c78c 193 dnsForced 알림: 8.8.8.8 이 막힌 회사 · 학교망에서는 [시스템 DNS 로 바꾸기] 를 누르라고 한 줄 더
관리자 지시 (10/12, 이번 판에). 버튼 이름은 각 언어의 실제 버튼 글과 같게.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:29:25 +09:00
RyuJongJin 120d20fb86 통합: 묶음5 의 마지막 끝 (433f5b1: 192 · 193 · 194 · 196~198) 을 합침 · 194 · 193 을 Tor · DNS 에도
관리자 지시 (10/12, 이번 판에 넣을 마지막 끝). 풀었던 곳:
- 번역 json: 세 판으로 열쇠마다 합침 (서로 다르게 바뀐 열쇠 0).
- browser_page import: key_hint (194) 와 cef_setup · settings_page · tor_page (tor_dns) 를 모두.
양쪽을 맞춘 것 (작업 세션 판단):
- 194 (단축키 안내는 PC 에서만): Tor 화면의 이전 · 다음 페이지 · 새로고침도 keyHint.
- 193 (그 설정이 없던 예전 판에서 올라오면 바뀐 동작을 한 번 알림): DNS 강제 (처음 값 직접 지정 8.8.8.8 · 8.8.4.4) 가
  없던 판 (10.10 까지) 에서 올라오면 이름을 묻는 서버가 바뀐다 → 'dnsForced' 알림 (되돌리는 곳과 함께). 이미 고른 사람은 알리지 않음.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:19:59 +09:00
RyuJongJin 433f5b187a 감지한 언어 알림은 닫을 때까지 · MKV 세부 정보에도 [다른 언어로 다시] (198 보충)
- 관리자 지시: 248 과 같게 버튼이 있는 안내는 닫을 때까지, 알림을 놓쳐도 세부 정보에서 다시 할 수 있게

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:01:45 +09:00
RyuJongJin 36bbee615d 원어를 자동 감지했으면 끝난 뒤 감지한 언어 · [다른 언어로 다시] (198)
- 사용자 편의 (기기 확인): 영어 음성을 한국어로 감지해 영어 발음을 한글로 적은 자막 - 막지는 못하므로 알리고 고른 원어로 다시 만들 수 있게

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:01:45 +09:00
RyuJongJin 65c049d043 작업 기록의 경로는 기기 구분자로 · AI 예상 시간 '약 1~1분' 고침 (196 · 197)
- 196 (버그): Android 에서도 'jj_mkv\이름' - p.join
- 197 (버그): 짧은 동영상의 '약 1~1분' → '1분 안', 같은 수면 하나

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:01:45 +09:00
RyuJongJin 6cb2dde089 그 설정이 없던 예전 판에서 올라오면 탐색기 한 번 누르기 · 화면 방향 · 좌우 밀기 · 백그라운드를 한 번 알림 (193)
- 사용자 편의 (기기 확인, P11 10.03 → 10.10): 한 번 눌렀는데 바로 열려 놀람 - 예전 판에는 키가 없어 알림 조건에 걸리지 않았다. 처음 설치는 알리지 않음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:01:44 +09:00
RyuJongJin 624076f787 예전 판에서 올라오면 바뀐 동작을 한 번 알림: 받는 쪽이 더 새것이면 건너뜀 · robocopy 링크 (193)
- 사용자 편의 (관리자 지시): 기존 사용자에게 동작이 바뀐 것을 '이번 업데이트로 바뀐 기본 설정' 창에

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:01:44 +09:00
RyuJongJin e32cd7d648 단축키 안내 '(Alt+←)' 등은 PC 에서만 - 태블릿 · 폰은 이름만 (194)
- 사용자 편의 · 접근성 (기기 확인): 키보드가 없는 태블릿에 Alt 안내가 보이고 TalkBack 도 읽었다 - keyHint

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:01:43 +09:00
RyuJongJin 69b8ab52ad 해상도 올리기 메모리: 이 기기에서 같은 값이면 같다고 알림 (192)
- 사용자 편의 (기기 확인, P11): 메모리가 작은 기기는 적게 · 보통 · 많이가 모두 가장 작은 타일이라 같은 값이 세 번 보였다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:01:42 +09:00
RyuJongJin 55f5676cf5 통합: 묶음5 의 새 끝 (e81fa6e: 243~246 · 233 · 242 · 241 · 251 · 252 · 시험 흔들림 calm) 을 합침
관리자 지시 (10/12). 겹친 곳 없이 자동으로 합쳐짐 (번역 json · app_actions · home_page · settings_page).
번역 json 은 정렬 · 모양 그대로 확인, 빠진 번역 0, analyze 0, 전체 시험 646 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 05:49:18 +09:00
RyuJongJin 6c61b8b82d 250 웹 브라우저: DNS 서버에 닿지 않아 못 연 페이지는 이유 · [시스템 DNS 로 바꾸기] [다시 시도]
관리자 지시 (10/12, a4 자유 점검): 엔진 기본 오류 "net::ERR_TUNNEL_CONNECTION_FAILED" 만 보여 안내를 닫은 뒤에는
이유를 알 수 없었다. 앱 안 프록시가 기록한 실패 (NetGuard.dnsUnreachableFor: 이 페이지를 읽기 시작한 뒤 그 이름이
DNS 서버에 닿지 않음 · 아직 다시 답하지 않음) 로 판단해, 읽기가 끝나면 웹 뷰 위에 앱이 그린다.
Edge · Chrome 엔진 · Android 모두 같은 길 (엔진마다 다른 오류 콜백에 기대지 않음). 새로 읽기 시작하면 걷힌다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 05:49:18 +09:00
RyuJongJin f0fad6c0e4 249 보충: MKV 화면 작업 기록 위에도 "DNS 서버 (…) 에 닿지 않음 · [시스템 DNS 로 바꾸기]"
a4 의 918 기기 확인 (노트 10+): 작업 현황 (MKV 화면 아래 작업 기록) 에는 줄이 없었다 - WorkPanel 은 브라우저의
오른쪽 작업 현황이고, MKV 화면 아래는 작업 기록 (_LogPanel) 이었다. 작업 기록을 열거나 숨겨도 그 위에 보인다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 05:49:18 +09:00
RyuJongJin e81fa6e5ba 다운로드 화면 시험을 언어 · 폭별로 · 설정 맨 위 글 · 영어 탐색기 배치 이름 (246 · 251 · 252)
- 246 시험: ko · en · ja × 폭 800 · 1200 (P11 확인에서 영어 · 일본어는 체크가 안 보였음)
- 251 (기기 확인): 영어 설정 맨 위 글이 잘림 - 두 줄까지 · 'Saved automatically'
- 252 (기기 확인): 영어 'Side ⇆' 뜻이 잘 오지 않음 - 'Side by side ⇆' · 'Side by side ⇆ / Stacked ⇅'

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:06:46 +09:00
RyuJongJin 8bfcb7ceda MKV 위 막대: 어림으로 두 줄을 정하던 것을 빼고 실제로 잰 것만 (242 보충)
- 버그: 900 에서 한 줄에 들어가는데 어림이 두 줄로 바꿨다 (scale_menu_test)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:06:46 +09:00
RyuJongJin 70e6071991 이름 없는 아이콘 버튼에 TalkBack 이름 · 화면 시험 (241)
- 접근성 (기기 확인): 바깥 Tooltip 으로 감싼 아이콘 버튼은 Android 에 이름이 가지 않았다 - 버튼 자체의 tooltip, 탐색기 펼치기 화살표 이름, 설정 줄 MergeSemantics
- a11y_names_test (다섯 화면 · 세 폭) 로 찾은 넘침도 고침: 모니터링 디스크 줄, MKV 인코딩 줄 (960 보다 좁으면 줄 바꿈 - 내 판단, 관리자 승인)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:06:45 +09:00
RyuJongJin 2239e70013 다운로드 화면 버튼 줄: 좁으면 다음 줄로 · '완료 시 자동 동영상 추가' 띄어쓰기 (246)
- 버그 (기기 확인): 옆으로 미는 줄이라 앞쪽 글이 잘려 '전체 선택' 과 겹쳤다 (영어 · 일본어는 아예 안 보임) - Wrap

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:06:45 +09:00
RyuJongJin c2c523a260 MKV 위 막대: 오른쪽 묶음을 실제로 재어 모자라면 두 줄 · 넘쳐도 화면 크기 칸을 덮지 않게 (242)
- 버그 (기기 확인, 노트 10+ 가로): 작업 중 폴더 버튼이 화면 크기 '100%' 를 덮었다 - 어림한 폭이 실제보다 작았음
- AppTopBar trailing (CustomMultiChildLayout 으로 실제 폭) · minMiddleWidth 로 두 줄

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:06:45 +09:00
RyuJongJin 5a0bc0ec50 이동 카드 저장 창은 '이 이동을' · '받는 쪽이 더 새것이면 건너뛰기' 를 Rsync 탭에도 (233)
- 233 (버그): 이동 카드인데 '이 복사를' 로 묻던 것
- 관리자 지시: 229 설정이 Rsync 화면 · 모니터링에서도 쓰이므로 Rsync 설정 탭에서도 같은 스위치

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:06:44 +09:00
RyuJongJin 01ef79f86f 앱이 직접 할 때의 파일 오류도 화면 언어로 (245)
- 버그 (기기 확인): 현재 방식 실패 글이 'Cannot delete file …' 영어 - 원본을 못 지웠으면 rsync 때 (215) 와 같은 글, 그 밖도 짧은 한글 + 경로 + OS 오류

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:06:44 +09:00
RyuJongJin 58bc8fa35b lsync 로 옮길 때 원본을 지우지 않음 안내 · 대상에만 있는 것을 사실대로 (243 · 244)
- 243 (사용자 편의, 기기 확인): 이동 카드를 lsync 로 옮기면 원본이 남아 헷갈렸다 (107: 실시간 동기화는 복사로 맞춤) - 확인 창에 알리고 쌍에 '복사로 맞춤'
- 244 (버그, 기기 확인): 대상에만 있는 파일이 있는데 '같습니다' - 대상에만 있는 수를 세어 사실대로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:06:43 +09:00
RyuJongJin cdfcf360c4 통합: tor_dns (Tor 브라우저 · DNS 강제 · 228 · 247~249) 를 묶음5 (aa7a1af) 에 합침
관리자 지시 (10/12, 다음 릴리스 준비). 겹친 곳은 양쪽 뜻을 살려 풀었다:
- 번역 json (en · ja · zh): 세 판 (공통 · 양쪽) 으로 열쇠마다 합침 (서로 다른 값으로 바뀐 열쇠 0개).
- 225 (모르는 컴포넌트 · 화면 순서 남기기, 양쪽에 따로 들어감) 를 하나로:
  settings.fromJson 은 tor_dns 쪽 (문자열만 남김), 순서 바꾸기는 묶음5 의 AppComponent.reorder (모르는 화면은 그 자리에)
  + tor_dns 의 fullOrder (Tor 는 웹 브라우저 바로 뒤, 켜지 않은 Tor 는 순서에 넣지 않음).
  시험은 둘 다 남기고, 이제 tor 를 아는 판이라 "모르는 화면" 은 future_screen 으로.
- build.gradle.kts: Tor jniLibs 폴더 + 195 의 third_party_libs.txt 거르기에 tor 폴더 포함, 목록에 libtor.so 추가.
  check_apk.ps1 도 tor 폴더를 본다.
- 201 (브라우저 위 막대 두 줄) 을 Tor 화면에도 (minMiddleWidth 380).
- live_sync · sync_tools · explorer_page · 흔들림 시험 (165 등) 은 tor_dns 가 건드리지 않아 묶음5 그대로.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 01:53:32 +09:00
RyuJongJin 6470368c2e 닿지 않는 DNS: 새 버전 확인 실패를 사용자 글로 · 안내는 닫을 때까지 · 상태를 설정 · 작업 현황에 (247 · 248 · 249)
테스터 a4 의 914 기기 확인 · 관리자 지시 (10/12, 버그 수정 · 편의):
- 247: 새 버전 확인 실패가 영어 원문 (HttpException: Proxy failed to establish tunnel (502 ...)) 이던 것.
  DNS 강제 프록시에서 실패했으면 "DNS 서버 (…) 에 닿지 않아 새 버전을 확인하지 못했습니다" (원문은 작업 기록).
- 248: [시스템 DNS 로 바꾸기] 가 붙은 안내가 12초 만에 사라지던 것 → 사용자가 닫거나 누를 때까지.
- 249: 안내가 1분마다 다시 뜨던 것 → 처음 실패 때 한 번. 상태는 서버가 다시 답하거나 DNS 설정을 바꿀 때까지
  환경 설정 > 네트워크 · DNS 와 작업 현황에 "DNS 서버 (…) 에 닿지 않음 (시각부터) · [시스템 DNS 로 바꾸기]".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 01:27:00 +09:00
RyuJongJin 893f6759ff 중복 실행 막기 (228): 데이터 폴더의 잠금 파일 (instance.lock, 핸들 단위) · 포트 0 + 비밀값 · 응답 없으면 묻기
관리자 검토 (10/12): 이름 있는 뮤텍스는 쥔 OS 스레드가 끝나면 버려진 상태가 되어 다음 실행이 첫 실행으로
판단할 수 있다 → 데이터 폴더의 instance.lock 을 파일 핸들 잠금 (LockFileEx) 으로 앱이 끝날 때까지 쥔다.
스레드와 상관없고 프로세스가 죽으면 Windows 가 푼다. GetLastError · FFI 를 쓰지 않는다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 01:26:59 +09:00
RyuJongJin aa7a1af27c 모르는 컴포넌트 (다른 판의 Tor 등) 는 설정 · 화면 순서에서 지우지 않음 (225)
- 데이터 (설정): 다른 판으로 오가면 Tor 컴포넌트 켜짐이 사라졌다 - 모르는 id 를 남기고 (40), 순서를 바꿀 때도 그 자리에 (AppComponent.reorder)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:51:45 +09:00
RyuJongJin 3a9f09a6eb 실시간 동기화: dispose 뒤에 맞추기가 끝나도 알리지 않음
- 버그 (관리자 전체 시험에서 발견): 앱을 끄거나 화면을 닫는 중에 맞추기가 끝나면 used after disposed 오류
- 시험은 정해진 4초가 아니라 맞추기가 끝날 때까지 기다리고, 끝난 뒤 지움 (흔들림)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:51:44 +09:00
RyuJongJin 037ddf502a 탐색기: 앱으로 돌아오면 보이는 폴더를 다시 읽기 (232)
- 버그 (기기 확인): 다른 앱에서 바꾸고 돌아와도 예전 목록이 남았다 - 돌아올 때 [새로 고침] 과 같게 (WebDAV 는 빼고 - 관리자 판단 승인)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:51:44 +09:00
RyuJongJin 54c4d6f97f MKV 취소 창은 창을 연 때의 동영상만 취소 · 여럿이 돌면 묻기 · 줄마다 ■ (239 · 240)
- 239 (버그, 기기 확인): 창을 보는 사이 다음 동영상이 시작하면 [지금 것만 취소] 가 그 다음 것을 취소했다 - FFmpeg 실행에 꼬리표 (MediaTool tag · cancelTagged), 이미 끝났으면 알리고 다시 묻기
- 240 (사용자 편의, 기기 확인): 여럿이 동시에 돌면 [그대로 두기] · [모두 취소 (n개)], 목록 줄의 ■ 로 하나만

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:51:43 +09:00
RyuJongJin 976f4633aa robocopy 복사도 링크 · junction 을 따라가지 않음 (/XJ 처음 값)
- 데이터 (관리자 지시): 따라가면 원본 바깥 파일을 복사하거나 고리 junction 을 끝없이 돈다 - rsync -a 처럼 복사 · 이동 · lsync 모두 /XJ
- 옵션 칸에 사용자가 넣은 링크 옵션 (/XJ · /XJD · /XJF · /SJ · /SL) 은 그대로. 명령 줄 · 미리 보기도 같게 (robocopyExtraOptions)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:51:43 +09:00
RyuJongJin b9739fd71c 모니터링 카드 실패 줄 [자세히]: 원문 (명령 줄 포함) 보기 · 복사 (237 보충)
- 사용자 편의 (관리자 지시): 원인을 물어볼 때 쓰게 원문을 CopyTask.lastDetail 에 두고 보기 · 복사 (비밀은 가림)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:51:42 +09:00
RyuJongJin f1206ae1f2 robocopy 이동은 원본 안의 링크 · junction 을 따라가지 않음 (/XJ, 데이터)
- 데이터 (버그, 개발 중 Windows 에서 재현): robocopy /E /MOVE 가 junction 을 따라가 원본 바깥 폴더의 파일을 옮기고 지웠다
- 이동에 /XJ - 링크는 원본에 남긴다 (앱이 직접 할 때 214 와 같게). rsync 는 링크를 링크로 옮겨 문제없음 (확인)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:51:42 +09:00
RyuJongJin d86a929ba1 미리 보기: 원본의 링크 · junction 은 따라가지 않음 (231)
- 버그: 미리 보기가 링크 안으로 들어가 실제로는 건너뛰는 (214) 바깥 파일을 옮길 것으로 보였다
- 앱이 직접 (현재 방식 · WebDAV) 이면 '링크 · junction - 따라가지 않고 건너뜀', rsync 는 링크 하나로 셈

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:51:42 +09:00
RyuJongJin 620cd63e34 Chrome 엔진: 관리자 권한이면 시작 안 함 (설정으로 허용) · 20초 안전망 · 인증 없는 숨긴 문 (207) · DNS 강제를 앱 시작 맨 앞에
- 207 원인: Chromium 은 관리자 권한으로 실행되면 권한을 낮춰 다시 띄우려고 스스로 끝난다 (CefInitialize false, 종료 코드 38).
  관리자 판단 (보안 우선): 관리자 권한이면 Chrome 엔진을 시작하지 않고 이유 · [Edge 엔진으로 바꾸기] · [그래도 Chrome 엔진 쓰기…] (경고 확인).
  환경 설정 > 브라우저 "관리자 권한일 때도 Chrome 엔진 쓰기 (권장하지 않음)" (처음 꺼짐) 를 켜면 --do-not-de-elevate (webview_cef 패치 7).
- 20초 안에 준비되지 않으면 "Chrome 엔진을 시작하지 못했습니다" · [Edge 엔진으로 바꾸기] · [다시 시도]. 시작 중에 닫을 때의 LateInitializationError 고침.
- Chrome 엔진은 프록시 인증에 답하지 않아 (CEF 149 windowless 에서 GetAuthCredentials 가 불리지 않음, 확인) 인증 없는 문을
  실행마다 고른 127.x.y.z 의 빈 포트에, Chrome 엔진 웹 뷰가 있는 동안만 연다 (관리자 결정). 듣지 않던 옛 인증 패치는 걷어냄.
- DNS 강제: HttpOverrides 를 main · runAndroid · runSecondWindow 맨 앞에서 건다. 그 전에 만들어 두던 HttpClient
  (새 버전 확인 · 구성 요소 · 도구 받기 · 자막 검색) 가 정한 DNS 를 거치지 않고 시스템 DNS 로 나가던 것 (닿지 않는 DNS 시험판에서 발견).
- 안내 문구: DNS 서버에 닿지 않음은 예외 원문 대신 무엇을 확인할지, Tor 연결이 2분 넘게 멈추면 몇 % 에서 멈췄는지와 [다시 시도].
- 시험: cef_elevation_test (4), dns_proxy_test (Chrome 엔진 문 · 일찍 만든 HttpClient 도 정한 DNS).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:23:20 +09:00
RyuJongJin 41d4d8afbf 모니터링 [실행] 뒤 옵션 칸 포커스 풀기 · 실패 글에 예외 이름 없이 (236 · 237)
- 236 (버그, 기기 확인): 실행 뒤 포커스가 옵션 칸에 남아 키보드가 올라와 끝 알림을 가렸다
- 237 (사용자 편의, 기기 확인): 카드 실패 글에서 'ProcessException:' · Command 줄을 뺌 (userErrorText). 원문은 작업 기록에

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:11:34 +09:00
RyuJongJin 90246717ec robocopy 도 '받는 쪽이 더 새것이면 건너뛰기' 를 따름 (/XO) (229)
- 데이터 (버그, 관리자 지적): robocopy 는 기본으로 예전 원본 (Older) 으로 대상의 새 파일을 덮어썼다 - 설정이 켜져 있으면 /XO
- 건너뛴 원본은 남기고 알림, 미리 보기 · 명령 줄도 같게. 설정 설명 글에 robocopy 를 넣음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:11:33 +09:00
RyuJongJin d8ce0eb302 robocopy 이동은 만든 시각 · 속성만 다른 같은 파일도 옮김 · 카드에 원본에 남은 수 · 명령 줄 (217 · 235 · 238)
- 데이터 (버그, 기기 확인): robocopy 가 'Modified' (만든 시각만 다름) · 'Tweaked' 를 /IS 로도 건너뛰어 원본에 남기고 성공처럼 보였다 - 이동에 /IT /IM 도 붙임
- 235 (버그): 이동 뒤 원본에 남은 수를 카드에 (CopyTask.lastLeft, 주황 경고) · 파일 수는 옮긴 수로 (doneFiles)
- 238 (버그): 확인 창 · 카드 명령 줄에 실제로 붙는 /MOVE /IS /IT /IM
- 시험 기대값: sync_tools_test · dismiss_test 의 robocopy 옵션 (관리자 승인)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:11:32 +09:00
RyuJongJin 8c2ddc3385 이동 확인 창의 명령 줄은 실제로 실행할 것 (230)
- 버그 (테스터 지적): 모니터링 이동 카드 [실행] 확인 창이 칸의 옵션을 그대로 보여 --remove-source-files 가 빠져 보였다
- effectiveRunText 를 sync_preview_view 로 옮겨 확인 창도 같은 글을 쓴다 (원본 지우기 옵션은 이동일 때만)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:11:31 +09:00
RyuJongJin c070486c84 앱 직접 복사 · 이동은 받는 쪽이 더 새것이면 건너뜀 · 미리 보기 경고 (229)
- 데이터 (버그): 현재 방식 · WebDAV 의 이동이 받는 쪽의 더 새 파일을 예전 원본으로 덮어쓰고 원본까지 지웠다
- 환경 설정 '받는 쪽이 더 새것이면 건너뛰기' (copySkipNewer, 처음 값 켜짐 - 관리자 판단). rsync -u 와 같음
- 건너뛴 파일은 이동이라도 원본에 남기고 'n개는 원본에 남음' 으로 알림
- 미리 보기: 건너뛰는 것 (받는 쪽이 더 새것 - 건너뜀), 더 새 파일을 덮어쓸 때 주황 굵은 경고
- 시험 sync_preview_test 기대값: -u 일 때 leftold.txt 는 목록에서 빠지지 않고 skipNewer 로 보임 (관리자 승인)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:47:58 +09:00
RyuJongJin 27d50891d0 MKV 묶음 취소: 지금 것만 / 남은 것 모두 / 그대로 · 취소됨 상태 (186 · 187)
- 186 (사용자 편의, 기기 확인 지적): 묶음 실행 중 취소를 누르면 기다리는 항목이 있을 때 세 가지 중 고르기
- 187 (버그): 취소한 항목이 실패로 보이던 것 - JobStatus.cancelled, 회색으로 보이고 기록에 성공 · 취소 · 실패 / 전체

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:47:57 +09:00
RyuJongJin c9c4f031b5 폰 가로 브라우저 · 다운로드 주소 칸: 모자라면 위 막대 두 줄 (201 · 200)
- 버그 (기기 확인 지적): 가로 폰에서 주소 칸이 너무 좁거나 보이지 않던 것
- AppTopBar 가 가운데 폭을 재고 minMiddleWidth (브라우저 380 · 다운로드 420) 보다 좁으면 두 줄로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:47:57 +09:00
RyuJongJin 487d955a99 Rsync 화면은 rsync 로 · lsync 로 옮길 때 이동 유지 (218 · 219)
- 218 (버그): Rsync 화면에서 만든 작업이 기억된 다른 방법으로 돌던 것 - 늘 rsync 로
- 219 (버그): 모니터링에서 lsync 로 옮길 때 이동 · 안의 것 · 원본 정리 · 한 번에를 그대로 넘김

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:47:57 +09:00
RyuJongJin c0397e9fe1 미리 보기에 덮어쓸 것을 눈에 띄게 (211)
관리자 지시: 대상에 내용이 다른 같은 이름이 있으면 목록에 "~ 이름" 으로만 보였다. 요약을 "덮어씀 n" 으로,
"받는 쪽에서 n개를 덮어씁니다 (내용이 다른 같은 이름 - 원래 것은 없어짐)" 주황 줄과 목록의 "(덮어씀)" 을 더한다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:14:25 +09:00
RyuJongJin 64ce867612 robocopy 이동은 같은 파일도 포함 (/IS) (217)
관리자 지시 (Windows 실제 확인): 대상에 같은 파일이 있으면 robocopy /MOVE 는 건너뛰고 원본에 남긴다 (종료 코드 0 → "옮겼습니다").
이동일 때 /IS 를 붙여 옮긴다 (사용자가 이미 넣었으면 그대로). 속성만 다른 "수정됨" 파일은 /IS · /IT 로도 남아, 216 의 "원본에 남음" 으로 알린다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:14:25 +09:00
RyuJongJin b0d7f021f7 rsync 실패 글에 원본을 못 지운 이유 · 오류 줄 (215)
관리자 지시: 실패 글이 출력의 앞쪽 8줄이라 전송한 파일 이름만 보이고 "Permission denied" · "rsync error … (code 23)" 가 빠지기 쉬웠다.
오류 출력 (stderr) 을 따로 모아 오류 · 권한 줄을 끝쪽부터 보이고, 원본을 못 지웠으면 (failed to remove 등) 쉬운 말 한 줄을 앞에 붙인다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:14:24 +09:00
RyuJongJin 44663ec2b9 이동 뒤 원본에 남은 파일을 다시 세어 알리기 (216) · 끝 알림에 이동 / 복사 · 개수 (212)
- 216 (관리자 지시, 205 점검에서 찾음): -u · --exclude · 대상이 더 새것 등으로 건너뛴 파일은 원본에 남는데 "끝" 으로만 보였다.
  이동이 끝나면 원본에 남은 파일을 다시 세어 "n개는 원본에 남음 (건너뜀)" 으로 알린다 (끝 알림 · 모니터링 카드 · 작업 기록).
- 212 (관리자 지시): 끝 알림을 "이동 끝: n개 · 원본 → 대상" / "복사 끝: n개 · …" 로.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:14:23 +09:00
RyuJongJin 37d7c0da31 모니터링 카드에 실제로 실행할 것 · 이동 / 복사 (209)
관리자 지시: 카드의 옵션 칸은 저장된 원문이라 이동 카드는 "-avPog", 복사 카드는 "… --remove-source-files" (실제로는 빠짐) 로 거꾸로 읽혔다.
칸 옆에 "이동 · 실제 실행: rsync -avPog --remove-source-files" / "복사 · 실제 실행: rsync -avPog" 를 보이고,
복사 카드 칸에 원본 지우기 옵션이 있으면 쓰지 않는다고 알린다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:14:23 +09:00
RyuJongJin e4b6e33a97 모르는 구성 요소 보존 (225) · Tor 대기 표시 (226) · 막은 파일 주소 되돌림 (227) · 포트 다시 잡기
- 225 (기기 확인 a4): Tor 를 모르는 판을 거치면 구성 요소 'tor' 가 지워지던 것. 설정을 읽을 때 components · navOrder 의
  모르는 id 를 버리지 않고 그대로 둔다 (40 과 같은 원칙). 화면 · 버튼은 아는 것만. 화면 순서를 바꿔 저장할 때도 모르는 id 를 남긴다.
- 226: Tor 화면을 떠난 뒤 tor 를 켜 두는 동안 "Tor 대기 중 (n분 뒤 끔)" 을 환경 설정 > Tor 와 일반 브라우저 띠에 [지금 끄기] 와 함께.
- 227: Tor 화면에서 막은 파일 링크 뒤 주소 칸을 마지막으로 보인 페이지 주소로 되돌린다.
- 포트 (관리자 지적): Windows 는 TCP · UDP 마다 막아 둔 포트 범위 (Hyper-V · WSL) 가 있어 번호를 정해 bind 하면 10013 이 날 수 있다.
  시험의 가짜 DNS 는 TCP 를 OS 가 고른 번호로 먼저 열고 그 번호로 UDP (안 되면 다시). aria2 는 넘긴 번호를 열지 못해 끝나면 새 번호로 다시 (2번).
  앱 안 프록시 · Tor 다리 (같은 번호 → 실패하면 OS 가 고름), Tor (auto), Android 웹 뷰 문 (0) 은 이미 그렇다.
- analysis_options: packages/whisper_ggml 도 분석에서 뺌 (자기 analysis_options 가 flutter_lints 를 찾지 못함).
- 시험: components_test 1 · tor_test 2 (226 · 227).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:56:22 +09:00
RyuJongJin f59e2f75a1 이동 경고 문구 (222) · 자동 두 쪽 나누기는 두 쪽 스캔일 때만 (223) · 보는 동안 지운 그림 (224)
- 222 (관리자 지시): 원본이 대상 안일 때 이동이면 "옮겨집니다 (원본 파일은 지워지고, 원본 폴더는 아래에서 고른 대로)" - 예전에는 이동일 때도 "복사됩니다 · 원본 폴더 그대로".
- 223 (관리자 지시): 보기 화면 "두 쪽 나눠 보기: 자동" 이 평범한 가로 사진도 반으로 잘랐다. ZIP · CBZ · PDF 묶음의 가로 그림은 예전처럼 나누고,
  폴더의 그림은 다른 그림 대부분 (3/4 이상, 2장 이상) 이 세로일 때만 나눈다. 나눠 볼 때 위 막대 맨 앞에 [두 쪽 나눔 끄기]. 설정 값 · 처음 값은 그대로.
- 224 (관리자 지시): 보기 화면이 앱으로 돌아올 때 폴더의 그림 중 없어진 것을 목록에서 빼고, 보던 그림이 없어졌으면 "파일이 없어졌습니다" 와 다음 그림, 다 없으면 닫는다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:43:32 +09:00
RyuJongJin 3ffaf23955 설정 글 칸이 입력 중에 끊기지 않게 · 키보드가 열리면 위 줄 접기 (213) · 좁은 창 위 줄 기준 480 (221)
- 213 (관리자 지시, 입력이 안 됨): 설정의 rsync · robocopy 옵션 칸이 값이 기본값과 같아지거나 달라지는 순간 새로 만들어져 포커스를 잃었다.
  칸마다 컨트롤러를 두고 고정 key, ↺ 는 칸의 글을 바꾼다.
- 213: 폰 가로에서 키보드가 열려 남는 높이가 360 미만이면 설정 화면의 위 줄 둘 (막대 · 묶음 바로가기) 을 접는다.
- 221 (관리자 지시): 폰 세로 (창 약 400dp) 에서 창 위 줄이 넓은 배치라 탭 칸이 130dp 남짓이어서 두 번째 저장소 (SD 카드) 가 끝에서 잘려 보였다.
  넓은 배치 기준을 320 → 480 으로 올려, 그보다 좁으면 끝 버튼을 [⋮] 하나로 모으고 탭 칸을 넓힌다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:43:32 +09:00
RyuJongJin 697235073e Tor · DNS 보완: 앱 안 프록시 인증 · Android 웹 뷰 문 · Tor 화면 떠남 정리 · 다운로드 막기
관리자 결정 (10/11) · 기기 확인 (노트 10+, 911 시험판 1~6 통과) 에 따라 0d1ea93 을 보완.
- 앱 안 프록시 (DNS 강제 · Tor 다리) 인증: 실행마다 새 무작위 비밀값 (저장 안 함) 으로 Basic Proxy-Authorization, 틀리면 407.
  HttpClient (findProxy) · yt-dlp (--proxy) · aria2 (--all-proxy-user/passwd) · Edge (WebView2 BasicAuthenticationRequested) ·
  Chrome 엔진 (webview_cef 패치 7, GetAuthCredentials) 이 이 프록시에만 답한다. 127.0.0.1 에만 묶음.
- Android 웹 뷰는 프록시 인증에 답하지 못해 (기기 확인) 인증 없는 "문" 을 따로: 실행마다 고른 127.x.y.z 의 빈 포트,
  웹 뷰 화면 (일반 브라우저 · Tor 화면) 이 맨 앞에 보이고 앱이 앞일 때만 연다 (그 밖엔 닫힌 포트 127.0.0.1:9).
  "다른 화면으로 가면 소리 멈춤" 을 끈 사용자는 일반 브라우저가 살아 있는 동안 DNS 문 유지 (사용자 설정을 따름). Tor 문은 따로.
- Tor 화면을 떠나면 (다른 화면 · 앱이 뒤로) 바로 웹 뷰 · 쿠키 정리, 프록시 · 다리 되돌림. tor 는 설정 시간 (처음 2분, 0 = 바로) 뒤 끔.
  남은 Tor 웹 뷰가 있는 동안은 Tor 문 · 닫힌 포트만 건다 (앱이 뒤에 있어 화면을 그리지 않아도 일반 쪽으로 나가지 않게).
- Tor 화면 파일 링크는 받지 않고 안내 (Windows: flutter_inappwebview_windows 0.6.0 사본에 DownloadStarting, JJ_PATCH.md · 고지).
- 시험: web_proxy_gate_test (새), tor_test · dns_proxy_test 보강, integration_test tor_dns_real_test 보강 · cef_dns_real_test (새, 207 확인용).
- analysis_options: packages/flutter_inappwebview_windows 를 분석에서 뺌 (다른 고친 외부 부품과 같게).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:36:32 +09:00
RyuJongJin 954b86b84c 모니터링 [실행] 의 이동도 미리 보기 · 확인 (210)
관리자 지시 (데이터): 모니터링 카드의 [실행] 은 따로 묻는 창이 없어 이동 (원본 지우기) 을 곧바로 했다.
이동이면 "원본을 지우는 작업입니다 (이동)" 창에 옮길 목록을 보이고, 목록이 나온 뒤에만 [실행]. 복사만은 지금처럼 바로.
탐색기 이동 · Rsync 화면 · [최종 정리] 는 이미 자기 확인 창이 있어 두 번 묻지 않는다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:39:51 +09:00
RyuJongJin cd00d3ce3a 앱이 직접 하는 이동은 대상에 맞춘 원본 파일만 지운다 (214)
관리자 지시 (P0 데이터, 205 점검에서 찾음): WebDAV 가 끼거나 현재 방식으로 하는 "안의 것" 이동이 맞춘 뒤 원본 폴더를 다시 읽어 모든 파일을 지웠다.
- 맞추기 (mirror) 가 지금 복사했거나 같다고 확인한 원본 파일만 알리고 (onSettled), 그 파일만 지운다.
  -u 로 건너뛴 것 (대상이 더 새것) · 맞추는 동안 새로 생긴 것 · 맞춘 뒤 바뀐 것은 원본에 남긴다.
- 이동의 같음은 크기 + 바뀐 때 (±2초) 로만 본다 (WebDAV 의 "크기 같고 대상이 더 새것" 은 다시 보낸다 - 내용이 다른데 원본만 지우지 않게)
- 로컬 원본의 링크 · junction 은 따라가지 않는다 (WebDAV 로 맞출 때도)
- 시험: 건너뛴 것 · 도중에 생긴 것 · 링크 (로컬 · WebDAV) · 크기만 같고 내용이 다른 대상

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:39:51 +09:00
RyuJongJin 3ad8becafa 폴더 안의 것을 바로 위 폴더로 이동이 조용히 안 되던 것 (205)
사용자 지적 "rsync 로 이동이 안 되는 경우가 있어" (버그 수정): Rsync 화면 (원본/ → 대상/) 에서 바로 위 폴더로 이동하면
실행 때의 검사가 폴더째 옮기는 규칙 ("이미 이 폴더에 있습니다") 으로 막아, 알림 없이 아무 일도 하지 않았다.
안의 것을 옮길 때 (contents) 는 이 검사를 하지 않는다. 그래도 시작하지 못하면 이유를 화면 · 작업 기록에 알린다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:39:50 +09:00
RyuJongJin 996491547b 좁은 Rsync 화면은 창 하나씩 (191) · 방향 실행 버튼을 앞에 (208)
- 191 (관리자 지시): 좌우 두 창인데 폭이 560 보다 좁으면 (폴드 접은 화면 · 폰 세로) 창이 140~330px 라 폴더 이름이 잘렸다.
  창 하나씩 보이고 위에 [왼쪽 · 폴더 | 오른쪽 · 폴더] 로 바꿔 본다. 버튼 줄은 가로, 이름은 창 배치대로 (좌 → 우).
- 208 (관리자 지시): Rsync 버튼 순서를 [좌 → 우 · 좌 ← 우 · 좌 ⇄ 우 · 모니터링 · …] 로 - 좁아서 [더 보기] 로 가는 것은 뒤쪽

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:39:50 +09:00
RyuJongJin a94009524c Windows 경로 입력의 smb:// · cifs:// 를 \서버\공유 로 (190)
관리자 지시 (179 보충): 주소가 틀린 줄 알지 않게, Windows 는 smb://서버/공유 (cifs:// 도) 를 \서버\공유 로 바꿔 연다.
%20 같은 주소 글자는 풀고 한글은 그대로. 바꿔도 못 열면 "Windows 의 네트워크 공유는 \서버\공유 형식 (바꾼 경로)" 를 알린다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:39:50 +09:00
RyuJongJin df508e3d2d 탐색기 탭 줄이 넘쳐도 경로 입력 · WebDAV (202) · 모르는 크기 · 날짜 "—" (203) · E10 시험 건너뛰기
- 202 (관리자 지시, 사용 막힘): 빈 드라이브가 많은 PC 에서 창 위 줄이 넘쳐 [경로 입력] · WebDAV 를 누를 수 없었다.
  [← → ★] · 저장 장치 탭 (이것만 옆으로, 마우스 휠 · 끌기) · [WebDAV · 경로 입력] (늘 보임) 으로 나눈다.
  비어 있거나 연결 안 된 드라이브는 숨기지 않고 뒤쪽으로. 창이 320 보다 좁으면 끝 버튼은 [⋮] 하나로.
- 203: 잠긴 시스템 파일의 크기 · 바뀐 날 ("-1B · 1970-01-01") 은 "—"
- 시험: 권한 없는 폴더 (E10) 가 읽히는 환경 (Git Bash · MSYS 는 백업 권한을 켬) 에서는 이유를 남기고 건너뜀.
  explorer_parallel_test 37 · 122 는 202 때문에 [경로 입력] 을 못 찾던 것 - 이제 통과

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:39:50 +09:00
RyuJongJin 850b148d9e ARMv8.0 기기용 AI 엔진 · 신호별 문구 · 받기 전 검사 · APK 네이티브 목록 (195)
관리자 지시 (정식 판 문제, P11 = Snapdragon 662 에서 해상도 올리기가 "코드 -4" 로 바로 멈춤): sd-cli 를 armv8.2 (dotprod · fp16 · i8mm) 로만
빌드해 dotprod · fp16 이 없는 CPU 에서 SIGILL 로 죽었다.
- tool/build_sdcpp_android.sh [v82|v80]: v80 (armv8-a) 판 libsdcli_v80.so 를 더한다 (APK +15MB).
  앱은 /proc/cpuinfo 의 모든 코어 Features 에 asimddp · fphp 가 있을 때만 빠른 판, 아니면 (모름 포함) v80 판.
- 엔진이 신호로 죽으면: SIGILL → "이 기기의 CPU 가 이 AI 엔진을 지원하지 않습니다", SIGKILL → 메모리, 그 밖은 코드만 (메모리 · 파일 탓이라고 하지 않음)
- 모델을 받기 전에 엔진을 --help 로 한 번 실행해 보고, 못 돌면 받지 않고 이유를 알린다. 결과는 작업 기록에 한 줄 ("AI 엔진 확인: 판 · 결과")
- APK 에 넣을 third_party 실행 파일을 android/app/third_party_libs.txt 로 정한다 (gradle 은 목록 밖을 빼고, check_apk.ps1 이 목록과 APK 를 비교)
- 기기 확인 (a4): P11 "libsdcli_v80.so · 통과", 해상도 올리기 약 5분 30초 · 저장. 노트 10+ (dotprod 있음) 는 빠른 판 그대로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:39:50 +09:00
RyuJongJin 7df43a750e 트리 화살표 누르는 영역: 줄 높이 전체 · Android 는 폭 44 (189 보충)
189 로 접기 · 펼치기를 화살표로만 하게 되어, 아이콘 크기 (18px) 만 눌리던 것을 넓혔다 (관리자 지시: 손가락으로 누르기 충분히).
Windows 는 폭 20 그대로 (배치가 바뀌지 않게). 시험: Android 흉내로 영역 크기 · 가장자리를 눌러도 펼침.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:19:37 +09:00
RyuJongJin a7632a9bed 탐색기 뒤로 · 앞으로를 실제 Windows 에서 한 칸씩 (75) · 이름으로 접지 않기 (189)
- 75 (버그 수정, 실제 Windows 빌드에서 재현): 창 위의 마우스 4 · 5 누름을 창과 화면이 둘 다 받아 두 칸씩 움직였다
  (받는 곳마다 좌표를 바꾼 새 이벤트라 identical 로 막히지 않음) → 누른 손가락 · 시각으로 한 번만.
  이동이 끝나기 전에 다시 불리면 무시 (내역에서 두 칸이 빠지지 않게).
- 75: 지운 폴더로 뒤로 · 앞으로 하면 그 상위 폴더를 두 창 모두 다시 읽는다 (트리에 지운 폴더가 남지 않게)
- 189 (관리자 지시): 폴더 이름을 누르면 그 폴더로 (닫혀 있으면 펼침), 이름으로는 접지 않는다.
  다시 누르거나 두 번 눌러도 아래 줄이 움직이지 않게. 접기 · 펼치기는 화살표로 (Windows · Android 같게)
- 시험: 이름을 다시 · 두 번 눌러도 그대로, 화살표로 접기. 지운 폴더가 트리에서도 사라짐

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 19:48:20 +09:00
RyuJongJin e9f7e5d819 복사 · 이동해도 목록 자리 · 스크롤 그대로 (180) · [새로 고침] 두 창 모두 (183)
- 창 (왼쪽 · 오른쪽 · 파일 목록) 마다 같은 GlobalKey: 창 크기 비율이 바뀌어 두 창이 가로 ↔ 세로로 바뀌어도 목록을 새로 만들지 않는다 (스크롤이 맨 위로 가던 것)
- 읽는 중 막대는 목록 위에 겹쳐 그린다 (끼어들어 목록이 밀리지 않게)
- 폴더 + 파일 목록: 다시 읽는 동안 앞의 목록을 그대로 (처음 읽을 때만 빙글이)
- 복사 · 이동이 끝나면 표시만 지우고 선택 모드는 그대로. Esc 로 선택 모드 · 표시 풀기 (뒤로 키는 전과 같이)
- 보던 폴더로 스크롤: 줄이 막 늘어난 때의 낡은 끝 값으로 자르지 않는다
- 183: [새로 고침] 은 두 창 모두, 목록을 비우지 않고 새로 읽은 것으로 바꾼다
- 시험: explorer_steady_test (매 프레임 자리 · 스크롤, 배치 전환, 선택 모드 · Esc, 두 창 새로 고침). 37-2 는 고정 횟수 대신 될 때까지 기다림

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:49:04 +09:00
RyuJongJin 5e5182178b 저장 줄 · 복사 창 안내 · Android SMB 안내 (176 · 178 보충, 179)
- [보기] 로 비교 후 저장하면 작업 현황 줄이 "저장했습니다: 경로" + [열기] (저장하지 않으면 "…: 저장하지 않았습니다")
- 복사 창: 설정 옵션의 원본 지우기 옵션 (/MOV · --remove-source-files 등) 은 복사에서 쓰지 않는다고 알림 (이동은 [이동])
- 179: Android 경로 입력에 smb:// · \서버 를 넣으면 "네트워크 공유 (SMB) 는 아직 지원하지 않습니다. WebDAV 탭을 쓰세요" + [WebDAV 서버 추가]
- 시험: 저장 줄 · 복사 창 안내 · SMB 안내

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:49:04 +09:00
RyuJongJin 36de96dd0b 해상도 올리기 메모리 설정 (176 보충)
- 환경 설정 > AI: 해상도 올리기 메모리 적게 (20%) · 보통 (30%, 처음 값) · 많이 (45%) - Android CPU 타일 크기
- 수준마다 이 기기에서의 타일 · 예상 메모리, 예시 시간 (16GB 폰)
- 빠르기 기록 열쇠에 메모리 설정을 넣어 다른 설정의 시간으로 어림하지 않음
- 모르는 설정 값은 보통

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:49:03 +09:00
RyuJongJin d6f3de130c Rsync 확인 창: 1280×720 에서 체크 · 경고가 버튼에 가리지 않게
- 미리 보기 높이를 화면 높이의 28% (140 이상) 로
- [원본 파일 지우기] 체크 · 경고를 미리 보기 위로
- 시험: 1280×720 에서 체크 · 경고가 버튼보다 위

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:49:03 +09:00
RyuJongJin 4f10cf167f 파일 탐색기 창마다 뒤로 · 앞으로 (75)
- 창마다 가 본 폴더 내역 (50개). 머리 줄 [←] [→], Alt+← / Alt+→, 마우스 4 · 5번 버튼
- 두 창일 때 마우스 4 · 5번은 마우스가 올라간 창에 적용하고 그 창을 활성으로 (창 밖이면 활성 창)
- 갈 폴더가 지워졌거나 열 수 없으면 그 항목은 버리고 지금 폴더는 그대로, 이유를 알림
- 시험: 버튼 · 단축키 · 마우스, 두 창 + 마우스 버튼, 지워진 폴더로 앞으로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:49:03 +09:00
RyuJongJin a7ef14382c 파일 탐색기 고르기 도구 (74) · 붙여넣기 줄에 남기기 · WebDAV 즐겨찾기 시험 (73 보충)
74: 고르기 막대에 "n개 표시함 · 합계 크기" (폴더는 개수만). [고르기 도구 ▾]: 반전 · 패턴으로 고르기 (*.srt, ?, ;, 대소문자 무시) ·
같은 확장자 모두. 범위: PC Shift+누르기, 폰은 첫 항목을 표시한 뒤 마지막 항목을 길게 눌러 [여기까지 범위 고르기] (시작점은 창마다).
73 보충: 복사 · 이동으로 담아 둔 것이 있으면 [붙여넣기] 는 좁아도 줄에 (pinned). WebDAV 폴더 즐겨찾기 - 마스터 문을 지나야 열림.
explorer_test · explorer_webdav_test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:49:03 +09:00
RyuJongJin fe4ca6adb2 파일 탐색기 즐겨찾기 (73): 지금 폴더 넣기 · 창 위에서 한 번에 · Rsync 짝
- 창 맨 위 줄 맨 앞 ★ (즐겨찾기한 폴더면 채움) · 버튼 줄 [즐겨찾기] (처음 값 순서 · Rsync 버튼 줄에도).
- 즐겨찾기 창: 누르면 그 창이 그 폴더로, [지금 폴더 추가] (표시 이름 고침), 이름 바꾸기 · 빼기 (폴더는 그대로),
  바로 가기 (다운로드 · MKV 결과 폴더).
- Rsync 화면: [지금 짝 추가] 로 "왼쪽 ⇄ 오른쪽", 누르면 두 창이 함께. 설정 folderBookmarks.
- explorer_test (넣기 · 가기 · 빼기 · Rsync 짝 · 저장). 버튼이 늘어 기존 시험 두 곳 고침 (처음 값 순서 · [더 보기] 안의 [붙여넣기]).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:49:03 +09:00
RyuJongJin 0d1ea93fd3 Tor 브라우저 (컴포넌트) · DNS 강제 (기본 8.8.8.8 / 8.8.4.4)
사용자 요청 (10/10): "Tor 브라우저를 현재 브라우저 옆에 추가 · 설정에서 컴포넌트처럼 추가 ·
DNS 주소를 강제로 내가 설정한 주소로, 기본 8.8.8.8" (보조 8.8.4.4 는 관리자 결정).

DNS 강제 (환경 설정 > 네트워크 · DNS: 시스템 DNS (끄기) / 직접 지정 (기본) / DNS over HTTPS)
- 앱 안 HTTP 프록시 (127.0.0.1, CONNECT + http) 가 정한 서버로 이름을 푼다 (UDP, 잘리면 TCP, DoH,
  TTL 동안 기억). 닿지 않으면 기기 DNS 로 몰래 바꾸지 않고 502 + 알림 [시스템 DNS 로 바꾸기].
- 따르는 것: 앱의 HttpClient (HttpOverrides: 업데이트 · 컴포넌트 · AI 모델 · WebDAV · 번역 · 자막),
  Edge (--proxy-server) · Chrome 엔진 (webview_cef 패치 6), Android 웹 뷰 (ProxyController),
  yt-dlp --proxy, aria2 --all-proxy (+ c-ares 가 있으면 --async-dns-server).
- IP 주소 · 같은 집 안 이름 (점 없는 이름, *.local, Tailscale *.ts.net 등) 은 기기 DNS (내 판단: NAS · WebDAV 가 그대로 열리게).

Tor 브라우저 (컴포넌트 'tor', 처음 꺼짐, 화면은 웹 브라우저 바로 뒤)
- Windows: 공식 Tor Expert Bundle 15.0.24 (tor 0.4.9.13) 을 받아 SHA-256 확인
  (e9dc6ccc…2b65) → 앱 데이터 components/tor. Android: 같은 판의 libTor.so 를 APK 에 (tool/fetch_tor_android.ps1).
- tor 를 자식 프로세스로 (SOCKS · 제어 포트는 빈 포트, 쿠키 인증, __OwningControllerProcess), Tor 화면을 닫으면 끔.
- 웹 뷰 → Tor 다리 (HTTP 프록시 → SOCKS5, 이름은 Tor 에 넘김). Tor 100% · 프록시 적용 · 전용 프로필이
  모두 된 뒤에만 웹 뷰를 만든다. WebRTC 끔, 권한 거절, 검색은 DuckDuckGo.
- Windows: 따로 WebView2 환경 (tor_webview, InPrivate). Android: 웹 뷰 프록시가 앱 전체라 Tor 화면이
  열려 있는 동안 일반 브라우저도 Tor (안내 띠, 관리자 결정), androidx.webkit 프로필 'jj_tor'
  (flutter_inappwebview_android 패치 jjProfile). 기능이 없으면 화면을 열지 않음.
- 상태 줄 (연결 중 % / 연결됨 / 실패 + 다시 시도), [새 경로] (NEWNYM), 처음 열 때 "공식 Tor Browser 아님" 안내.
- 라이선스: TOR_LICENSES.txt (Tor BSD-3 · Libevent · OpenSSL · zlib · zstd), tor 실행 파일은 GPL 빌드 → GPL-3.0.

시험: dns_proxy_test (가짜 DNS · 프록시 · SOCKS 다리), tor_test (새는 것 막기 · 번들 해시 · torrc),
integration_test/tor_dns_real_test (Windows 실제: 8.8.8.8 로 풀기, 닿지 않는 DNS 는 실패,
check.torproject.org "Congratulations").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:10:17 +09:00
RyuJongJin ae51fdfa34 원본 지우기 옵션: 확인 창에 보이는 것과 실제 실행을 같게 (178, 데이터)
환경 설정의 rsync 옵션에 --remove-source-files 가 있으면 [좌 → 우] 확인 창은 [원본 파일 지우기] 꺼짐 · [실행] 인데
실행하면 원본이 지워졌다 (사용자는 복사라고 믿음).
- rsyncArgs · robocopyRuns: 원본을 지우는 옵션 (--remove-source-files · --remove-sent-files · /MOV · /MOVE) 은 옵션 글에서 늘 빼고
  move (이동 · [원본 파일 지우기]) 일 때만 넣는다 - 탐색기 복사 · Rsync 확인 창 · 모니터링 다시 실행 모두.
- Rsync 확인 창: 설정 (기억한) 옵션에 원본 지우기가 있으면 체크를 켠 채로 · [이동] · 경고. 끄면 명령 줄 · 실행에서 빠진다.
  ⇄ 는 원본을 지우지 않는다고 알린다. 복사 확인 창 · 모니터링 카드의 옵션 줄도 실제 쓰는 것으로.
- sync_tools_test · explorer_webdav_test (끄면 원본이 남음).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:14:11 +09:00
RyuJongJin 36e724afc1 AI 해상도 올리기 [이 장] 도 작업으로 · 큰 그림은 메모리에 맞는 타일 (176)
한 장 올리기가 작업 알림 · 앞 서비스 없이 돌아, 앱이 뒤에 있으면 Android 가 꺼 결과가 사라질 수 있었다 (S10: 엔진 6.6GB · 약 4분).
- AiJobs.runTask (1장) 로 - 작업 알림 · 앞 서비스 · 작업 현황. 다른 AI 일이 돌면 막는다.
- 진행 창 [뒤에서 계속]: 창만 닫고 계속. 화면에 남아 있으면 끝난 뒤 비교 화면, 떠났으면 작업 현황 끝 줄 [보기] (비교 → 저장,
  한 번만) 와 Android 끝 알림. 다음 일을 시작하면 남겨 둔 임시 결과를 지운다.
- Android CPU 타일: 기기 메모리 (/proc/meminfo) 의 20% 안에 드는 가장 큰 타일 (512 · 384 · 320 · 256 · 192), 모르면 큰 그림만 256.
- upscale_job_test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:14:10 +09:00
RyuJongJin e46c73a317 맨 위 줄: 지금 화면 버튼 아래 밑줄
파란 아이콘 · 옅은 바탕에 더해 3px 밑줄 - 색만으로 알아보기 어려운 사람도 어디인지 알게 (좁은 · 넓은 화면 모두). batch_test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 04:32:54 +09:00
RyuJongJin a66f3a8823 파일 탐색기 같은 이름 창: 두 파일의 크기 · 바뀐 날 · 어느 쪽이 새것인지 (172)
"doc.txt: 보낼 것 3B · 2026-10-09 12:00 / 있는 것 3B · 2026-10-01 08:00 (보낼 것이 더 새것)" (3개까지, 폴더는 "폴더").
_findClashes 가 vStat 으로 두 쪽을 함께 읽는다 (WebDAV 포함). explorer_conflict_test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 04:25:48 +09:00
RyuJongJin f805403641 버전 고르기 창: 좁은 화면에서는 목록 위 · 바뀐 내용 아래 (168)
창 안 너비가 560 보다 좁으면 목록 (높이 40%, 최대 200) 과 고른 버전 · 바뀐 내용을 위아래로. 넓으면 예전처럼 나란히.
update_ui_test (400×800 · 1200×900).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 04:11:33 +09:00
RyuJongJin 968d62979c 프로그램 정보에 버전 · [최신 버전 확인], 결과는 버튼 옆에 (164)
환경 설정 > 프로그램 정보 맨 위에 "JJ_MKVMaker v<지금>" 과 [최신 버전 확인]. 결과 (최신 · 새 버전 · 확인 못 함) 는 알림이 아니라
버튼 옆에, 확인하는 동안 도는 표시. 업데이트 묶음의 버튼도 같은 위젯 (UpdateCheckButton). 새 버전이면 안내 창은 예전처럼.
checkForUpdate 에 onResult. update_ui_test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 04:06:06 +09:00
RyuJongJin ecb1cf93b7 여러 장 AI 작업의 진행 줄: "10장 중 3장째 · 남은 약 …" (161)
폴더 · ZIP 전체 해상도 올리기와 AI 그림 여러 장. Android 진행 알림 · 작업 현황 · AI 그림 화면에 같은 줄.
제목에 붙이던 "3/10" · "남은 n장" 대신 AiJobs.total 로 센다. ai_upscale_test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 03:56:00 +09:00
RyuJongJin afdbcfb2d7 웹 브라우저: 동영상을 못 찾은 페이지의 다운로드 버튼은 테두리만 (137)
- 덜 눈에 띄게 하려던 tonal 버튼이 이 테마에서 채움 버튼과 거의 같아 보였다 → OutlinedButton · IconButton.outlined.
- YouTube 첫 화면 · 구독 목록은 미리보기 <video> 가 있어 동영상 있음으로 보였다 → 동영상 주소가 정해진 사이트
  (YouTube · Vimeo · TikTok · 치지직 등) 는 주소로만, 그 밖은 페이지 안의 <video> 로 (downloadLooksUseful).
- browser_test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 03:45:49 +09:00
RyuJongJin b1f2b1aef4 Android 업데이트 설치: 첫 시도가 다른 오류로 실패하면 1초 뒤 한 번 더 · 원문은 작업 기록에 (170 보충)
폴드에서 첫 시도만 실패하고 두 번째에 바로 된 일 (접은 화면 · 화면 전환 중으로 보임) - 사용자가 두 번 누르지 않아도 되게.
화면에 보이지 않는 첫 시도의 실패 원문 · "허용 필요로 왔지만 허용돼 있음" 은 app.log 에 남겨 다음에 진짜 원인을 볼 수 있게.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 03:44:18 +09:00
RyuJongJin bf72557fc3 AI 해상도 올리기 비교 화면: 저장하지 않고 닫으면 묻기 (160)
닫으면 올린 그림이 지워지므로 [닫기] · 뒤로 키 · 뒤로 몸짓 모두 "저장하지 않고 닫을까요?" ([취소] · [저장하지 않고 닫기] · [저장]).
위쪽 [저장] 은 묻지 않는다. 시험하려고 UpscaleCompareView 로 공개. upscale_compare_test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 03:44:17 +09:00
RyuJongJin 06b6169ad8 Android 업데이트: 설치가 허용돼 있는데 "설치 허용 필요" 창이 뜨던 것 (170)
폴드 (Android 16 · 허용 allow) 에서 첫 설치 시도에 앱의 "설치 허용 필요" 창이 떴다 (Android 설정 화면은 열리지 않음 -
허용 문제가 아니라 다른 오류). Kotlin 이 installApk 안의 IllegalStateException 을 모두 "허용 필요" 로 보냈기 때문.
- Kotlin: 허용이 꺼져 설정 화면을 연 경우만 InstallPermissionNeededException → PERMISSION, 다른 오류는 "예외 이름: 원문" (INSTALL).
- 채널 canInstallPackages. Dart: PERMISSION 이 와도 허용돼 있으면 창 없이 다시 연다 (한 번).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 03:30:29 +09:00
RyuJongJin 76f8ab18da 버전 고르기 창: 처음엔 최신 버전을 골라 둔다 (169)
이 기기용 파일이 있는 것 중 가장 새 버전 (없으면 지금 버전). 이 창을 여는 사람은 대개 업데이트하려는 것.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 03:30:29 +09:00
RyuJongJin 3a220ab073 [MKV 만들기] 와 AI 버튼 구별 · AI 작업 전에 계획 보이기 (138)
[MKV 만들기] 와 [자막 만들기 & MKV 만들기] 를 헷갈려 오래 걸리는 AI 자막이 돌던 것.
- AI 버튼 (자막 만들기 · 자막 & MKV) 은 보라 테두리 · 글자 · ✨ 아이콘, [MKV 만들기] 는 청록 채움 · ▶.
  좁은 화면에서는 AI 버튼을 맨 뒤 구분선 너머로 (넓은 화면은 왼쪽 · 오른쪽으로 원래 떨어져 있음).
- AI 설정 창 맨 위에 계획: 할 일 · 대상 수 · 자막 언어 · 예상 시간 (영상 1시간 ≈ 음성인식 15~30분 + 번역 언어마다 10~20분).
- 환경 설정에서 "매번 묻기" 를 끈 경우는 사용자 설정대로 묻지 않되, 3초 알림
  "AI 자막 (동영상 n개 · 약 m분) 을 시작합니다 [취소]" 뒤에 시작해 잘못 누른 것을 되돌릴 수 있게.
- ai_confirm_test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 03:12:14 +09:00
RyuJongJin 8c1ef5a03b 실패한 다운로드 줄을 쉬운 말로 (136): 진행 막대 대신 실패 · 이유 · [자세히] · [다시 시도]
- 실패하면 진행 막대 ("준비 중…") 를 지우고 사람 말 이유 (화면 언어): 주소에 영상이 없습니다 (404) · 로그인이 필요합니다 (403) ·
  연결할 수 없습니다 · 지원하지 않는 사이트입니다 · 저장 공간이 모자랍니다 · 받지 못했습니다 (그 밖). yt-dlp · aria2 (errorCode) 같은 모양.
- yt-dlp 백엔드는 원문을 저장하고 화면에서 바꾼다. [자세히] 는 원문 - 주소의 서명 · 키 (?… · #… · 아이디:비밀번호@) 는 가림 (redactUrlSecrets).
- [다시 시도] 는 기존 다시 받기. 진행 막대만 쓰는 곳도 실패면 "실패".
- download_error_test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 02:52:57 +09:00
RyuJongJin 26f6389f02 MKV 화면 맨 위 줄: 다른 언어에서 버튼 글이 잘리던 것 (61)
줄이기 순서 (제목 → 버튼 글 → …) 를 정할 때 버튼 너비를 한국어 글로 잰 고정 값으로 셈해, 글이 긴 일본어
("字幕作成 & MKV 作成") 에서는 줄이기 전에 잘렸다 (S10 Ultra 가로). 지금 언어의 글 너비를 재어 차이를 더한다
(한국어는 그대로). 캡처 시험: 실제 서비스로 일본어 1644 · 1480 · 1280 · 1138 · 960, 체크 0 · 50개.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 02:41:14 +09:00
RyuJongJin c986690b3c 환경 설정 > MKV 만들기 > 기본 자막 언어 (MKV 기본 자막 트랙 · 플레이어가 먼저 켜는 자막)
화면 언어 따르기 (처음 값) / 한국어 / English / 日本語 / 中文 / 직접 고르기 (자막 언어 목록).
화면은 일본어인데 한국어 자막을 기본으로 원하는 경우처럼, 고른 언어가 화면 언어보다 먼저.
설정 preferredSubtitleLanguage ('' = 화면 언어 따르기). i18n_small_test 에 시험.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 02:41:14 +09:00
RyuJongJin f429c59502 다국어 작은 것들 (61)
- 영어 복수형: 영어 글에서 수가 1 이면 단수 ("1 videos" → "1 video"). 11 · 21 · 1.5 는 그대로.
- 탐색기 복사 · 이동 확인: 문장 조각 + "복사할까요?" 를 잇던 것을 두 문장으로 (언어마다 어순이 깨졌음).
- MKV 기본 자막 트랙 · 플레이어가 먼저 켜는 자막: 늘 한국어 → 화면 언어 (목록에 없는 언어면 한국어).
- robocopy 진행: 종류 글 ("New File" 등) 이 아니라 탭 모양으로 파일 줄을 알아봐 일본어 · 중국어 Windows 에서도.
- Android 저장소 이름: 내장 · SD 카드는 앱 화면 언어로 (Kotlin 이 isPrimary 를 넘김), USB 등은 기기 이름 그대로.
- 기본 즐겨찾기 ("YouTube 구독" · 표시줄 · 기타): 한국어 열쇠로 저장하고 이름을 바꾸지 않았으면 화면 언어로
  (예전 판이 다른 언어로 저장한 기본 이름 포함). 바꾼 이름 · 사용자 항목은 그대로.
- i18n_small_test · sync_tools_test (일본어 · 중국어 robocopy 줄), 캡처 시험에 일본어 가로 첫 화면.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 02:29:58 +09:00
RyuJongJin f33a4b3547 휴지통 시험: 기본은 가짜 휴지통, 실제 휴지통은 JJ_TEST_REAL_RECYCLE=1 일 때만
전체 시험 도중에 끊기면 사용자 휴지통에 시험 흔적이 남았다 (10/10 01:31).
- 탐색기는 recycle() · restoreRecycled() 를 쓴다 (앱은 늘 실제 휴지통, 시험만 recycleBinForTest 로 바꿈).
- test/support/fake_recycle_bin.dart: 실제와 같은 규칙 (긴 경로 거부 · 되돌릴 때 덮지 않음 · 원래 폴더 없으면 안 만듦),
  다른 드라이브면 복사 후 지움. useTestRecycleBin() 은 JJ_TEST_REAL_RECYCLE=1 이 아니면 가짜로.
- recycle_bin_test 의 실제 휴지통 시험 3개와 긴 경로의 실제 함수 부르기는 실제 모드에서만.
  explorer_conflict · explorer · 캡처 시험 (b3 · check) 은 기본 가짜.
- windows_check_shot_test 의 "65 · 94 · 98" 은 144 뒤로 깨져 있었다 ([그대로 두기] 창을 닫지 않아 다음 크기에서 막힘) - 닫게 고침.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 02:11:38 +09:00
RyuJongJin 5601f9d4fb 화면 글자 검사기가 놓치던 것 잡기 · 찾은 번역 빠짐 고치기 (60)
- tool/l10n: trf( 뒤에서 줄을 바꾼 열쇠도 (앞 200글자까지 봄). tr 로 감싸지 않은 한글 글이 사전에 없으면
  "번역 안 된 글" 로 실패 (tr(변수) 로 쓰이는 글 포함). 일부러 번역하지 않는 자료는 // l10n-skip (줄) · // l10n-skip-file.
- 찾아 고친 것: Rsync 위아래 배치 버튼 "위 → 아래 · 위 ← 아래 · 위 ⇄ 아래", 컴포넌트 "AI 그림" 설명,
  AI 목록의 NVIDIA 라이선스 이름 (받기 화면), 라이선스 화면의 이름 · stable-diffusion.cpp 요약 (화면을 열 때 언어로),
  Android 되돌리기 안내 한 줄, 파일 작업 오류 글 (같은 이름 · 원본 없음 · 자기 안으로 · 쓸 수 없는 이름).
- 자료로 표시: 음성인식 말버릇 목록 (ai_subtitle) · 실제 폴더 이름 · PowerShell 스크립트.
- l10n_check_test: check.py 가 통과하는지, 검사기가 줄 바꾼 trf( · tr(변수) 글을 잡고 skip · raw 는 넘기는지.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 01:39:33 +09:00
RyuJongJin a37ae55e2d 보관 폴더에 README.txt (영어 · 한국어): "설정 보관" · "AI 모델 보관"
Download 아래 한국어 이름 폴더를 한국어를 모르는 사용자도 알아보게 만들 때 안에 README.txt 를 둔다
(이미 있으면 그대로). 보관본 고르기 · 모델 되살리기에는 끼지 않는다. 작은 파일이라 동기로 쓴다
(비동기면 되돌리기 흐름에 기다릴 단계가 늘어 update_ui_test 의 Android 되돌리기가 시간 안에 끝나지 않았다).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 01:39:32 +09:00
RyuJongJin 388d01a0e3 오류 메시지 안쪽을 화면 언어로 (59)
- 컴포넌트 설치 (진행 단계 글 포함) · WebDAV (실패 글 · 상태별 힌트 · 동작 이름) · cron · rsync 설치 · 복사 (rsync · robocopy 종료 코드) ·
  이름 바꾸기 · 설정 복구 · 웹 번역 응답 · 그림 읽기의 오류 글을 tr / trf 로 (번역 3개 언어).
- explainFileError (예전 탐색기 _explain) 는 한국어 글과 화면 언어로 바뀐 글을 둘 다 보고 오류 종류를 가른다.
  WebDAV 실패 글은 상태 번호 앞 빈칸 (" 401") 을 번역에서도 지킨다.
- 컴포넌트 설정의 trStep (한국어 진행 글 앞부분만 번역) 은 할 일이 없어 지움.
- file_error_test: ja 에서 로컬 서버의 401 · 403 · 404 오류 글에 한국어가 없고 종류를 맞게 가르는지
  (시험 바인딩이 HttpClient 를 가짜로 바꾸므로 이 시험에서만 HttpOverrides 를 풂).
- 폴더 이름 "설정 보관" · "AI 모델 보관" 은 예전 보관을 찾아야 하므로 그대로 둔다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 01:11:17 +09:00
RyuJongJin a4afdda5c6 Android 알림 글 · 채널 이름을 화면 언어로 (57)
- 앱이 고른 언어라 Android 의 values-xx 로는 맞출 수 없어, Dart (AndroidKeepAlive) 가 시작할 때와 화면 언어가 바뀔 때
  번역된 글 8개 (진행 알림 제목, "작업 멈춤" 알림, 채널 2개의 이름 · 설명) 를 보낸다.
- Kotlin 은 받은 글을 SharedPreferences 에 저장해 앱이 꺼진 뒤 서비스만 떠도 마지막 언어로 쓰고,
  이미 만든 채널은 같은 ID 로 다시 만들어 이름 · 설명만 바꾼다. 받은 적이 없으면 한국어.
- notification_texts_test: Kotlin 기본값과 Dart 의 한국어 글이 같은지, ja 로 바꾸면 모두 번역되는지.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 00:48:24 +09:00
RyuJongJin abeb3d8999 옮기기: 시작하면 바로 목록에서 빼고, 옮기지 못하면 원래 자리 · 표시 · 선택으로 되돌리기
- 다른 드라이브 · NAS 로는 복사라 큰 동영상이 1초 넘게 목록에 남아 보였다 (1GB 시험 파일 M: → C: 1,079ms, 같은 드라이브 22ms).
- 데이터 버그 고침 (moveFileInto): 다른 드라이브로 복사한 뒤 원본을 지우지 못하면 (열려 있음 등) 대상 폴더에 사본이
  남아 두 벌이 됐다. 이제 방금 만든 사본을 지우고 오류를 낸다 (원본은 그대로).
  같은 함수를 쓰는 app_controller 안의 다른 두 곳 (옆 자막 · jj_mkv 결과물 함께 옮기기) 도 시험으로 확인했다:
  자막 · 결과물을 열어 둔 채 옮기면 동영상만 옮겨지고, 자막 · 결과물은 원래 자리에 하나만 남는다
  (고치기 전 코드로는 이 시험이 실패하는 것도 확인).
- move_test: 옮기는 중 목록에 없음 → 실패하면 복원 · 대상에 사본 없음, 함께 옮기는 파일의 실패.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 00:48:24 +09:00
RyuJongJin cd81f6db37 라이선스 원문 (175): 네이티브 구성 요소 · 받는 AI 모델의 저작권 줄과 허가 문구를 그 판 그대로
- assets/licenses 에 원문 9개를 더한다 (tool/licenses/fetch_licenses.py 로 상류에서 그 판 그대로 받아 만든다):
  · STABLE_DIFFUSION_CPP_LICENSES: sd.cpp 228c707 과 sd-cli 에 함께 묶인 ggml · libwebp · libwebm · Oniguruma · Darts-clone ·
    utf8proc · nlohmann/json · miniz · stb · zip
  · WHISPER_CPP_LICENSE (v1.9.1) · ONNXRUNTIME_LICENSES (1.15.1, Third Party Notices 포함)
  · 받는 모델: CreativeML OpenRAIL-M (SD1.5) · OpenRAIL++-M (LCM-LoRA) · TAESD · Real-ESRGAN · Whisper 모델 · NLLB (CC BY-NC 4.0)
- 라이선스 화면에 원문으로 등록. AI 그림 받기 화면의 줄마다 [원문], 동의 창에 [라이선스 원문 보기].
- NLLB 를 받는 곳 (AI 자막 · 번역 · 화면 언어 더하기) 에 "비상업적 이용만 허용" 과 [원문].
- SD1.5 licenseUrl 을 원문이 있는 CompVis 저장소로 (사본 저장소의 LICENSE.md 는 없음).
- THIRD_PARTY_NOTICES (Windows · Android) 에 원문 위치. Windows 는 whisper.cpp · onnxruntime 원문을 실행 파일 옆에도.
- licenses_test: MIT 는 Copyright 줄 + "Permission is hereby granted", BSD 는 "Redistribution and use", OpenRAIL 은 부속서 A,
  NLLB 는 NonCommercial 정의까지. AI 목록의 파일마다 원문 asset 이 있는지.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 00:29:19 +09:00
RyuJongJin 4c0bc0b9ce Flutter 기본 글을 화면 언어로 (140 · 158): 뒤로 · 라이선스 화면 · 복사 · 붙여넣기 메뉴 등
- flutter_localizations 를 더하고 MaterialApp 이 화면 언어 (i18n) 를 바꿀 때만 다시 그려진다.
- Flutter 가 아는 언어면 그 언어 (앱이 더한 기계 번역 언어 포함, 예 de · vi), 모르는 언어일 때만 영어. 한국어가 섞이지 않는다.
- supportedLocales 는 kMaterialSupportedLanguages 전체 + 지금 언어 (zh-Hant · pt-BR 처럼 글자 체계 · 나라까지 그대로).
- Material 만 알고 Cupertino 는 모르는 언어 (ps) 는 Cupertino 글만 영어로 채운다.
- 시험: locale_test (de → Zurück, 없는 언어 → Back, zh-Hant 유지, ps 열림).
- Windows 캡처 시험 (windows_i18n_shot_test): 라이선스 목록을 다 읽은 뒤까지 찍는다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 23:54:24 +09:00
RyuJongJin f331672e3a 진행 표시: 해상도 올리기는 모델을 읽는 동안 숫자 없이 (167) · 큰 파일 하나도 보낸 바이트로 오름 · 끝난 진행 창의 이름 (171)
- 167: sd-cli 의 모델 읽기 막대를 올리기 진행으로 읽어 처음부터 100% 였다. 읽는 동안은 움직이는 막대,
  올리기는 타일 n/m 으로 % 와 "약 n초 남음" (upscaleProgressOf)
- 앱이 직접 복사할 때 항목마다 바이트 크기와 보낸 바이트로 진행률 (이름 바꾸기로 옮기면 파일 수로),
  보내는 동안 0.2초마다 알림 - 큰 파일 하나가 끝날 때까지 0% 에 머물던 것
- 171: 끝난 진행 창의 " 안의 파일" 에 마지막 항목 이름
- 시험: upscaleProgressOf, 256KB 를 256KB/s 로 복사하는 도중 20~100%

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 23:14:31 +09:00
RyuJongJin daac19a514 157 · 162 끝난 작업 알림은 따로 "끝난 작업" 채널로 · [열기] 는 Android 에서 이 앱의 탐색기로
- 157: 끝 알림이 진행 알림 채널 (조용히, 낮은 중요도) 에 올라가 알림 창의 조용한 칸에 묻혔다 -
  새 채널 "끝난 작업" (보통 중요도, 소리 없음, 설정에서 따로 끌 수 있음)
- 162: ExplorerPage.openAt - 이 앱의 탐색기를 그 폴더로 (이미 열려 있으면 그 화면에서, 처음 열면 첫 창으로).
  AI 해상도 끝 알림 · 작업 현황의 [열기] 가 Android 에서 이것을 씀 (Windows 는 Windows 탐색기).
  폴더 메뉴의 "파일 관리자에서 보기" 로 다른 파일 앱도 그대로 열 수 있다
- 시험: openAt 으로 열기 · 열린 채로 다른 폴더

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 23:03:55 +09:00
RyuJongJin cc05fcad3c 174 MKV 화면이 맨 처음 화면이 아니어도 (홈 화면 = 탐색기 등) MKV 아이콘이 "지금 여기"
- 위쪽 아이콘 줄이 MKV 를 맨 처음 화면일 때만 알아봐, 홈 화면이 다른 화면인 사용자는 MKV 화면에서 아무것도 파랗지 않았다
- 다른 화면처럼 MKV 화면이 스스로 알린다 (AppNavButtons onMkvPage)
- 시험: 다른 화면 위에 연 MKV 화면에서 MKV 아이콘이 지금 여기

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 22:52:18 +09:00
RyuJongJin 746082db22 147 좁은 화면의 버튼 줄: 들어가지 않는 버튼은 [더 보기] 메뉴로 · 창 배치 버튼은 늘 줄에 · 처음 값은 자주 쓰는 것부터
- 버튼 줄은 밀어 넘기는 줄이라 아래쪽 버튼 (숨은 항목 표시 등) 을 찾지 못했다 - 들어가는 만큼 보이고 나머지는 [더 보기 ⋯]
- 창 배치 (두 창으로 / 좌우 ⇆) 는 사용자 요청대로 늘 줄에 (넘치면 마지막 자리를 내줌)
- 처음 값 (버튼 구성을 바꾸지 않았을 때 · [기본값]) 순서: 복사 · 이동 · 삭제 · 새 폴더 · 이름 변경 · 선택 · 찾기 · 창 배치 → 나머지.
  사용자가 정한 순서는 그대로
- 시험: 낮은 화면에서 [더 보기] · 메뉴로 숨은 항목 표시 · 창 배치 버튼은 줄에 · 처음 값 순서 · 정한 순서 유지

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:52:34 +09:00