Commit Graph

375 Commits (split_core)

Author SHA1 Message Date
RyuJongJin 45e1a95df0 WIP 204 Android 브라우저: 아래 시스템 막대 (제스처 · 작업 표시줄) 가 잠깐 커질 때 웹 뷰 크기를 바꾸지 않고 그 띠 위로 그림 - 아래에서 검은 띠가 올라오던 것 (기기 확인 전, 원인 추정) (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:35:47 +09:00
RyuJongJin cfed8fa355 WIP 145 초기화 창 캡처 (ko · en · ja × 412 · 960, 시험 windows_reset_shot): 잘림 없음 · 문구를 사실대로 - SFTP · SMB · FTP 비밀번호 · 키도 지움, "앱 설정 전체" 는 파일 탐색기 즐겨찾기도 지움 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:16:49 +09:00
RyuJongJin 722edc8ed1 WIP 177 Rsync 실행 전 비교 (미리 보기 · 지울 목록) 가 옵션의 거르기 (--exclude · --include · --exclude-from · --filter · --delete-excluded) 를 실제 rsync 와 같게 따름 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:09:13 +09:00
RyuJongJin 58254e42b2 WIP Wi-Fi 공유 (Windows): 켜기 전 방화벽 안내 · 막혔을 때 "개인 네트워크 허용" 하는 법과 설정을 여는 버튼 (검토 대기)
관리자 지시 (10/19, 사용자 "오늘 못했던 것 진행" 3번):
- 켜기 전 화면: "켜면 Windows 방화벽 창이 뜰 수 있습니다: '개인 네트워크' 에 체크하고 [허용]. '공용 네트워크' 는 체크하지 않는 것이 안전" (전에는 한 줄 안내만).
- 켜기 전 · 공유 중 화면 모두에 펼침 도움말 [다른 기기에서 열리지 않으면 (Windows 방화벽)]:
  ① 이 PC 의 망이 "개인 네트워크" 인지 (설정 > 네트워크 및 인터넷 > … > 네트워크 프로필 유형) + [네트워크 설정 열기] (ms-settings:network-status)
  ② 방화벽에서 이 앱 "개인" 허용 (제어판 > Windows Defender 방화벽 > 앱 허용 > [설정 변경]) + [방화벽 허용 앱 열기] (control /name Microsoft.WindowsFirewall /page pageConfigureApps)
  ③ 목록에 없으면 [다른 앱 허용] 으로 JJ_MKVMaker.exe · 바꾼 뒤 공유를 끄고 다시 켜기 · 회사 · 학교 PC 는 바꿀 수 없을 수 있음.
  내 판단: 방화벽을 앱이 직접 바꾸지 않는다 (관리자 권한 · 사용자 몰래 바꾸지 않게) - 안내와 설정 화면 열기만.

시험: wifi_share_page_test (새 1: 켜기 전 안내 · 도움말 펼치기 · 두 버튼이 여는 것) · wifi_share_test 10 통과, 임시 폴더 흔적 0, analyze 문제 없음, l10n 빠짐 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:55:38 +09:00
RyuJongJin 6366a2f880 WIP 글 뷰어: 줄바꿈 없는 큰 파일은 화면 폭에 맞춰 나눠 그려 멈추지 않게 (검토 대기)
관리자 지시 (10/19, 사용자 "오늘 못했던 것 진행" 2번 - 데이터 검토에서 남긴 작은 점):
줄바꿈 없는 큰 파일 (한 줄 수십만 자) 을 한 Text 로 그려 잠깐 멈췄다.
- 화면 한 줄에 드는 글자 수 (고정폭 글꼴 · 글자 크기 · 줄 번호 칸) 를 보고, 그 8배보다 긴 줄만 4배 (화면 네 줄쯤) 씩 나눠 그린다.
  보통 줄은 그대로 (화면에서 저절로 줄바꿈). 줄 번호는 첫 조각에만. 이모지 같은 두 단위 글자는 반으로 자르지 않는다.
- 나눈 줄은 글 · 한 줄 글자 수가 같으면 다시 만들지 않는다 (viewerRows).

시험: xplore_tools_test (새 2: viewerRows - 글 그대로 · 줄 번호 · 8배까지 그대로 · 이모지 / 200KB 한 줄 파일을 412 폭에서 여러 짧은 조각으로) 4 통과,
임시 폴더 흔적 0 (tool/test_temp_check.ps1), analyze 문제 없음.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:50:59 +09:00
RyuJongJin 53f5c432bb WIP 압축 펼치기: 펼친 뒤 압축 파일이 바뀌면 (크기 · 바뀐 때) 펼치거나 새로 고칠 때 목록을 다시 읽음 (검토 대기)
관리자 지시 (10/19, 사용자 "오늘 못했던 것 진행" 1번 - 압축 펼치기의 알려진 한계):
읽어 둔 압축 목록을 계속 써서, 다른 프로그램이 압축을 바꿔도 접었다 펼치거나 새로 고쳐도 예전 목록이 보였다.
- 압축을 읽을 때의 (크기, 바뀐 때) 를 기억하고, 다시 펼칠 때 · 새로 고침 (F5 · [새로 고침] · 앱으로 돌아옴) 때 비교해 다르면
  그 압축의 목록과 모든 창의 그 안 폴더 목록을 잊고 다시 읽는다.
- 압축이 없어졌으면 목록을 잊고 그 안은 빈 목록으로 (예전 것을 보이지 않게).

시험: explorer_test (새 1: 펼친 뒤 압축을 바꾸고 F5 → 새 항목 · 예전 항목 없음) 62 통과, 임시 폴더 흔적 0 (tool/test_temp_check.ps1), analyze 문제 없음.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:47:58 +09:00
RyuJongJin 29b4365b74 WIP 압축 안 메뉴 정리: 펼친 압축 안의 것에는 [ZIP 으로 묶기] · [Wi-Fi 로 공유] · [PDF 로 만들기] 를 숨김 (검토 대기)
관리자 지시 (10/18, 데이터 검토에서 찾은 것): 펼친 압축 안의 항목은 실제 파일이 아니라 위 셋을 눌러도 없는 경로라 오류만 났다 (데이터는 다치지 않음).
→ 누른 것이나 표시한 것 중 하나라도 압축 안이면 그 셋을 메뉴에서 뺀다. 압축 밖은 그대로.

시험: explorer_test X-plore 16 통과 (f 에 덧붙임: 압축 안 폴더 메뉴에 ZIP · Wi-Fi 없음 · 밖의 폴더에는 ZIP 있음), analyze 문제 없음.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 04:47:12 +09:00
RyuJongJin 160bfe85e0 Merge commit '565ad3b' into next 2026-10-18 04:25:04 +09:00
RyuJongJin 565ad3bd17 WIP 960 캡처: 탐색기 동영상 줄의 "크기 · 날짜" 가 넓은 창에서도 잘리던 것 - 동영상 정보와 한 줄 글로 (검토 대기)
관리자 지시 (10/18, next e8baa84 의 960 폭 캡처에서 찾음): X-plore 모양 트리의 동영상 줄이 "5KB · 2026-10-18 03:…" 로 잘렸다.
크기 · 날짜 글과 동영상 정보 (_MetaText) 가 Flexible 둘이라 폭을 반씩 나눴고, 정보가 비어 있어도 반을 차지했다.
→ _MetaText 가 앞글 (크기 · 날짜) 과 정보를 한 Text.rich 로 그린다 (넘치면 끝을 줄임). 동영상이 아닌 줄은 그대로.

확인: windows_xplore 캡처 (release\test\shots_trunc\windows_xplore_meta - 960 에서 "5KB · 2026-10-18 04:13" 다 보임) 4 통과, explorer_test 56 통과, analyze 문제 없음.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 04:22:08 +09:00
RyuJongJin 6b6c23dc49 Merge commit '53a7418' into next 2026-10-18 04:11:01 +09:00
RyuJongJin 53a74183a7 WIP 412 캡처의 잘림: 서버 창 칸 이름은 짧게 · 설명은 helper, 해시 비교 칸, 날짜 고르기, 갈 곳 막대는 가운데 줄임 (검토 대기)
관리자 지시 (10/18, next e8baa84 캡처에서 찾은 ①~④, 회귀 아님):
① FTP · SFTP · SMB · WebDAV 서버 창: "이름 (탭에 보임, 비우면 주소)" · "시작 폴더 (비우면 …)" · "도메인 · 작업 그룹 (보통 비움)" 이 en 412 에서 잘렸다
  → 칸 이름은 "이름" · "시작 폴더" · "도메인 · 작업 그룹", 설명은 helper (3줄까지).
② 해시 창 비교 칸 → "비교할 해시" + helper "받은 곳에서 알려 준 해시를 붙여넣으세요".
③ 일괄 이름 바꾸기 날짜 고르기: 고른 뒤 상자에는 짧게 ("날짜: 찍은 때" · "날짜: 바뀐 때"), 펼친 목록은 긴 설명 그대로.
④ 한 창 갈 곳 막대: "갈 곳:" 은 늘 보이고 폴더 이름이 길면 가운데를 줄인다 (middleEllipsis · textWidth - path_label.dart). 전체 경로는 길게 눌러 · 마우스를 올려.

확인: integration_test/windows_trunc_shot_test.dart (새, 서버 창 4개 위 · 아래, 412/960 x ko/en/ja) · windows_ftp · windows_p3 · windows_xplore_tools · windows_xplore 캡처 통과
(release\test\shots_trunc), explorer · explorer_webdav · batch_rename · file_tools · ftp · smb · smb_find 시험 통과, analyze 문제 없음, l10n 빠짐 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 04:09:02 +09:00
RyuJongJin 11d709a97b Merge commit '63b92b6' into next974 2026-10-18 03:30:27 +09:00
RyuJongJin 63b92b6956 WIP 보안 검토 6: 설정 "SMB 서명 · 암호화 필수" (처음 끔) · 서명도 암호화도 안 되는 연결은 탐색기 탭에 ⚠ (검토 대기)
관리자 결정 (10/18):
- 설정 > SMB [SMB 서명 · 암호화 필수] (smbRequireSecure, 처음 끔 - 오래된 NAS 가 붙지 않을 수 있음, 틀린 값은 끔).
  켜면 Android 다리 (smbj) 가 서명을 요구하고 (withSigningRequired), 로그인 뒤 세션이 서명도 암호화도 안 되면 닫고 막는다
  → "서명 · 암호화가 되지 않는 연결이라 열지 않았습니다 (설정 …)". 설정을 바꾸면 열려 있던 연결을 닫는다 (다음 연결부터).
- 서버마다 처음 연결이 되면 info 를 한 번 물어 (세션의 shouldEncryptData · isSigningRequired) 서명도 암호화도 안 되면 탐색기 · Rsync 탭에 ⚠ (DavPath.mark, 꺼 두어도).
  info 의 "encrypted" 는 협상 가능 여부 (supportsEncryption) 가 아니라 이 세션이 실제로 암호화되는지로 바꿈. [연결 확인] 경고도 서명 여부를 따라 두 가지.
- 서버 목록에서 빠지거나 설정이 바뀐 서버는 ⚠ 기억도 지운다.

시험: smb_test (새 1: 처음 끔 · 틀린 값 · 연결 전 🗄 · 처음 한 번만 info · ⚠ · 서명만 되면 ⚠ 없음 · 필수를 다리에 넘김 · 막힌 이유) · smb_find · explorer_webdav 11 통과,
analyze 문제 없음, l10n 빠짐 0, APK 빌드 (Kotlin 컴파일) 성공. 실제 NAS (서명 · 암호화 켬 / 끔) 확인은 기기에서.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 03:16:57 +09:00
RyuJongJin f6bdc35920 Merge commit '19d4f7b' into next974 2026-10-18 02:59:15 +09:00
RyuJongJin 5038a60b87 Merge commit '546b915' into next974 2026-10-18 02:59:08 +09:00
RyuJongJin 546b915b55 WIP X-plore 숨기기 후속: 지우기 · 옮기기 · 이름 바꾸기를 따라감 · 설정의 [목록에서 숨긴 항목] · 위 막대 ⋮ 에도 보이기 (검토 대기)
관리자 결정 (10/18, 9f758ac 의 판단에 대해):
- 이름 바꾸기 (하나 · 일괄) · 옮기기 (다른 창으로 · 붙여넣기 · 끌어 놓기 · 되돌리기 - 작업이 끝나면) 를 하면 숨긴 목록의 경로도 새 경로로 (그 안의 것도).
  옮기기는 원래 자리에 없고 새 자리에 있는 것만 (같은 이름이라 바꾼 것 · 실패는 그대로).
- 영구로 지운 것 (그 안 포함, 실제로 없어진 것만) 은 목록에서 뺀다. 내 판단: 휴지통 (Windows · 앱 휴지통) 으로 보낸 것은 남긴다 - [되돌리기] 로 되살리면 그대로 숨김이 되게.
- 환경 설정 > 파일 탐색기 [목록에서 숨긴 항목 (n개)] → 목록 (이름 · 폴더) 과 하나씩 [숨기기 풀기] · [모두 풀기] (lib/ui/hidden_items_dialog.dart). 풀면 열려 있는 탐색기에 바로 보인다 (설정 바뀜을 듣는다).
- 위 막대 ⋮ 메뉴에도 [목록에서 숨긴 항목 보이기 (n개)] · [다시 숨기기] (큰 폴더를 펼쳐 목록 맨 아래가 멀 때).

시험: explorer_test (새 3: 이름 바꾸기 → 새 경로 · 영구 삭제 → 뺌 / 다른 창으로 옮기기 → 새 자리 / ⋮ 보이기 · 다시 숨기기 · 설정 창에서 풀기 → 바로 보임) 포함 68 통과, analyze 문제 없음, l10n 빠짐 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 02:57:16 +09:00
RyuJongJin 19d4f7bf3d WIP 보안 검토 10 · 3 보충: Wi-Fi 공유는 디스크를 비동기로 · 설정 "Tailscale 에서도 열기" (검토 대기)
관리자 결정 (10/18):
- 10: 요청마다 하던 경로 확인 (링크 · 폴더 밖) · 폴더 목록 · 파일 크기를 비동기 IO 로 (같은 망의 기기가 큰 폴더를 요청해도 화면 스레드가 멈칫하지 않게). 켤 때의 폴더 확인도.
- 3 보충: Tailscale (100.64/10) 주소는 계속 열되, 공유 화면에 [Tailscale 에서도 열기] (처음 켬, wifiShareTailscale). 끄면 같은 Wi-Fi · 유선 주소에만 연다. 틀린 값은 처음 값 (켬).

시험: net_security_test (Tailscale 끔 · 처음 값 · 틀린 값) · wifi_share · wifi_share_page · settings_store 22 통과, analyze 문제 없음, l10n 빠짐 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 02:48:38 +09:00
RyuJongJin 00e9685a33 Merge commit '4ae6845' into next974 2026-10-18 02:32:33 +09:00
RyuJongJin 7c068ede3e Merge commit '9f758ac' into next974 2026-10-18 02:32:23 +09:00
RyuJongJin 4ae6845513 WIP 새 네트워크 기능 보안 고침: 원격 이름 경로 벗어나기 · FTPS 주입 · Wi-Fi 공유는 Wi-Fi · 유선 주소에만 · 찾기 범위 · SMB 강제 DNS (검토 대기)
관리자 지시 2 (10/18, SFTP · SMB · FTP · Wi-Fi 공유 · 스트리밍 다리 · mDNS/훑기 검토) 의 고침:
1 (P0, 로컬 데이터) 악성 · 탈취된 서버가 목록 이름을 "..\..\x" 로 보내면 임시 사본이 앱 임시 폴더 밖에 쓰이고 맞추기 (--delete) 가 위 폴더를 지울 수 있었다
  → vList: 그 폴더 바로 아래의 평범한 이름만 (".." · "." · "\" · NUL · 다른 폴더 버림, 모든 원격 목록이 거침) · DavPath.parse 는 ".." 마디 거부 · vLocalCopy 는 임시 폴더 안인지 확인 (서버에 묻기 전에)
2 FTPS 명시: 234 뒤에 평문으로 끼워 넣은 줄이 있으면 끊는다 (STARTTLS 주입)
3 Wi-Fi 공유: 0.0.0.0 이 아니라 화면에 보이는 Wi-Fi · 유선 · Tailscale 주소에만 따로 연다. 모바일 데이터 (rmnet · ccmni 등 - 통신사 10.x · 100.x) · 가상 어댑터 (WSL · Hyper-V · VirtualBox · VMware · Docker) · 다른 VPN 은 뺀다.
  주소가 없으면 켜지 않고 알림. 캡처에서도 172.24.240.1 (WSL) · 192.168.56.1 (VirtualBox) 이 주소 목록에 보였음.
4 SMB 찾기: Wi-Fi · 유선 연결만 훑는다 (isLanInterfaceName - 3 과 같은 기준)
5 SMB: 서버 이름을 FTP · SFTP 와 같은 DNS 설정 (강제 DNS) 으로 풀어 주소로 넘긴다 (Android 다리의 시스템 DNS 로 새지 않게)
8 FTP: \r · \n · NUL 이 든 명령은 보내지 않는다 (이름으로 명령 끼워 넣기)
11 mDNS: 사설망 주소만 받는다
15 [마스터 초기화] 확인 글에 SFTP · SMB · FTP · SFTP 키도 (실제로 지우는 것과 같게)
같이: Wi-Fi 공유 캡처 시험 (integration_test/windows_wifi_shot_test.dart) - 시험용 주소는 WifiShare.debugAddresses 로 (1차 캡처에서 화면이 다시 그려지지 않아 이 PC 의 실제 망 주소가 찍혔음)

남김 (보고서에): 6 SMB 서명 필수 · 암호화 안 될 때 표시 (Kotlin · 실기기), 7 FTPS 사설 CA 체인의 지문 고정 (사설 CA 서버 시험 필요), 10 Wi-Fi 공유 동기 IO.
괜찮음: 9 원격 임시 사본은 정리 창 "작업 임시 파일" 이 지움, 비밀 값 기록 · 설정 · 백업 · 오류 · 알림 · 경로 복사 없음, 인증서 · 호스트 키 건너뛰기 없음, 다리는 127.0.0.1 · 비밀 주소.

시험: test/net_security_test.dart (새 7) + 전체 902 통과 (17 건너뜀), analyze 문제 없음, l10n 빠짐 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 02:29:58 +09:00
RyuJongJin 9f758ac386 WIP X-plore 숨기기: 고른 파일 · 폴더를 목록에서만 숨기기 · 맨 아래 [숨긴 항목 보이기] (검토 대기)
관리자 지시 (10/18, X-plore 비교표 P3):
- 길게 누르기 메뉴 [목록에서 숨기기] (표시한 것이 여럿이면 "n개 목록에서 숨기기"). 앱 설정 explorerHiddenItems 에 경로 목록으로만 둔다 - 파일 · 폴더 자체 (속성 · 이름) 는 바꾸지 않는다.
- 펼친 폴더 안에 숨긴 것이 있으면 목록 맨 아래 (X-plore 자리) 에 [숨긴 항목 n개 보이기] → 흐리게 (불투명도 0.5) 보이고 [숨긴 항목 n개 다시 숨기기]. 보이기는 이번 실행 동안 · 모든 창 (내 판단: 다시 켜면 숨김).
  트리 (두 창 · 한 창) · 폴더 + 파일 목록 배치의 오른쪽 목록 모두.
- 보이는 숨긴 것의 메뉴는 [숨기기 풀기].
- 숨긴 것은 지우기 · 이동 대상에서 빠지지 않는다 (폴더를 지우거나 옮기면 안의 숨긴 것도 함께). 지우는 폴더 안에 숨긴 것이 있으면 확인 창에
  "지우는 폴더 안에 목록에서 숨긴 항목 n개가 있습니다 - 함께 지워집니다".
- 숨긴 것은 모두 고르기 · 빠른 필터 결과에서 빠진다 (보이는 것만 - 76 과 같게).
- 내 판단: 지우거나 이름이 바뀐 항목의 경로는 목록에 남는다 (같은 이름이 다시 생기면 숨김). 설정 화면에서 목록 보기 · 지우기는 아직 없음.
  트리는 Temp 처럼 큰 폴더를 펼쳐 두면 맨 아래가 멀다 (X-plore 와 같은 자리) - 필요하면 가운데 버튼 줄에도 둘 수 있음.

시험: explorer_test (새 2: 숨기기 → 목록에서 빠짐 · 파일 그대로 · 설정에 경로 · 보이기 → 흐리게 · 풀기 / 숨긴 것이 든 폴더 지우기 확인 창 알림 · 다른 파일은 알리지 않음) 57 통과,
settings_store_test 통과, analyze 문제 없음, l10n 빠짐 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 02:21:26 +09:00
RyuJongJin e8baa846bb Merge commit 'd29593b' into next
# Conflicts:
#	assets/l10n/en.json
#	assets/l10n/ja.json
#	assets/l10n/zh-Hans.json
2026-10-18 02:02:22 +09:00
RyuJongJin 17c1ea7a04 WIP 서버 창 예시 글: 폰 세로 (412) 에서 잘리던 것 - FTP · SFTP · SMB · WebDAV 모두 세 줄까지 (검토 대기)
15 FTP 캡처에서 찾음 (관리자 지시 10/18, hint_fix = next 위). 서버 주소 · 시작 폴더 · 공유 이름 · WebDAV 주소 칸의 helperText 에 helperMaxLines: 3. 글은 그대로.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 01:50:07 +09:00
RyuJongJin d29593b2e6 WIP P3 보충: 폴더 속성 · 파일 [정보] 에 만든 때 · 숨김 · 읽기 전용 · 시스템 (보기만) (검토 대기)
관리자 지시 (10/18). lib/core/file_attributes.dart: Windows 는 FFI GetFileAttributesExW (kernel32, file_ops 의 GetDriveTypeW 와 같은 꼴), 그 밖 (Android) 은 이름이 점으로 시작하면 숨김 · 만든 때는 모름. 바꾸기는 넣지 않음.
폴더 속성 창: 만든 때 · 속성 (없으면 없음). 파일 [정보] 창: 만든 날 · 속성 (원격은 뺌).
시험: file_attributes_test 2 (시험 파일에만 attrib +h +r 을 켜고 끝에 끔 - 숨김 · 읽기 전용 · 폴더 · 없는 경로 null · 만든 때) · file_tools · explorer P3 통과, analyze 문제 없음, l10n 빠짐 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 01:47:45 +09:00
RyuJongJin 8eb1674382 WIP X-plore P3 보충 (캡처에서 찾음) · 경로 막대 누르기로 위 폴더 고르기 (검토 대기)
캡처 (integration_test/windows_p3_shot_test.dart - 해시 · 비교 · 폴더 속성 · 16진, 412/960 × ko/en/ja, release\test\shots_p3_fix) 에서 찾아 고침:
- 16진 보기: 폭 412 에서 한 줄 16 바이트면 끝의 글자 칸이 화면 밖으로 잘렸다 → 폭 560 미만은 한 줄 8 바이트 (line(per:), 처음 값 16 그대로)
- 해시 창: 닫자마자 글 칸 컨트롤러를 dispose 해 닫히는 동안 "A TextEditingController was used after being disposed" (닫을 때마다) → 닫힌 뒤 dispose
관리자 지시 3 (X-plore 비교표의 작은 것): 위 막대의 경로를 누르면 지금 폴더 · 위 폴더들 (창의 맨 위까지, 가까운 것부터) 이 나와 고르면 그리로 (X-plore 4.4x 경로 막대).
지금 폴더는 고를 수 없게 흐리게.

시험: explorer_test (새: 경로 막대 - 지금 폴더 못 고름 · 바로 위 = left · 고르면 하나 적어짐) · file_tools_test 통과, analyze 문제 없음, l10n 빠짐 0, 캡처 시험 6 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 01:43:17 +09:00
RyuJongJin 4070f8d2ee Merge commit '88379f1' into next 2026-10-18 01:18:36 +09:00
RyuJongJin 88379f16f4 WIP X-plore j 보충: SMB 찾기에 mDNS (_smb._tcp.local) 를 먼저 (검토 대기)
관리자 지시 (10/18): 훑기보다 먼저 mDNS 로 빠르게 찾기.
- lib/core/mdns_smb.dart (새, 패키지 없음): "레거시 유니캐스트" 질의 (RFC 6762 6.7) - 빈 포트에서 224.0.0.251:5353 으로 PTR (QU) 을 묻고
  응답자가 그 포트로 바로 답한다. Android 의 멀티캐스트 받기 (MulticastLock, Kotlin) 없이도 받을 수 있게 고른 방식 (내 판단).
  PTR → 인스턴스, SRV → 호스트 이름, A → IPv4 (이름 압축 읽기). 1.5초 모으고, 못 찾으면 빈 목록 (오류 없음). 묻기만 하고 알리지 않음
- 찾기 창: mDNS 먼저 → 이어서 포트 훑기 (mDNS 를 안 하는 NAS 도). 같은 주소는 하나로 (이름은 mDNS 것), 주소 순서. 안내 글도 고침

시험: mdns_smb_test 3 (질의 꼴 · 손으로 만든 응답 읽기 - 압축 이름 · SRV · A · 합치기) · smb_find_test - 4 통과, analyze 문제 없음, l10n 빠짐 0.
실제 NAS 의 mDNS 응답은 기기 · 사무실 망에서 확인 필요 (Synology 는 기본으로 _smb._tcp 를 알림).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 01:13:11 +09:00
RyuJongJin 9f94d8ea2c WIP next: FTP 동영상 스트리밍 다리 · 경로 복사 ftp:// (합친 뒤 고침, 관리자 지시) (검토 대기)
- 스트리밍 다리 (remote_stream): ftp:// 의 부분 읽기를 FtpRemote.openReadFrom (REST) 로 - 예전에는 처음부터 읽으며 건너뛰어
  동영상 건너뛰기가 느렸다 (15 가 알린 것). 시험: ftp_test "동영상 스트리밍 다리".
- 경로 복사: FTP 는 ftp://아이디@서버:포트/시작 폴더/경로 (암시 FTPS 990 은 ftps://, 처음 값 포트는 빼고, 비밀번호 없음).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 01:06:38 +09:00
RyuJongJin 8d6f288fab Merge branch 'smb_find' into next
# Conflicts:
#	assets/l10n/en.json
#	assets/l10n/ja.json
#	assets/l10n/zh-Hans.json
2026-10-18 01:03:14 +09:00
RyuJongJin fefe972937 Merge branch 'xplore_p3' into next 2026-10-18 01:02:55 +09:00
RyuJongJin f28af04f77 Merge branch 'ftp' into next
# Conflicts:
#	assets/l10n/en.json
#	assets/l10n/ja.json
#	assets/l10n/zh-Hans.json
2026-10-18 01:02:49 +09:00
RyuJongJin 7e38ad8aec Merge branch 'zip_aes' into next
# Conflicts:
#	assets/l10n/en.json
#	assets/l10n/ja.json
#	assets/l10n/zh-Hans.json
2026-10-18 01:02:39 +09:00
RyuJongJin 4bd0226efb Merge branch 'sftp_next' into next 2026-10-18 01:02:23 +09:00
RyuJongJin 12c041eed0 Merge branch 'wifi_89' into next
# Conflicts:
#	assets/l10n/en.json
#	assets/l10n/ja.json
#	assets/l10n/zh-Hans.json
#	assets/licenses/THIRD_PARTY_NOTICES.txt
#	assets/licenses/THIRD_PARTY_NOTICES_ANDROID.txt
#	lib/ui/explorer_page.dart
2026-10-18 01:01:31 +09:00
RyuJongJin 3a1a6391ca WIP X-plore j: [SMB 서버 추가] 창에 [같은 망에서 찾기] (검토 대기)
관리자 지시 (10/18): cd 의 lan_scan.dart (xplore b6e4717) 를 묶음7_88 (88 SMB) 위로 가져와 SMB 추가 창의 [찾기] 에 붙인다.
- lib/core/lan_scan.dart · test/lan_scan_test.dart: b6e4717 의 것 그대로 (cd 작성 - 사설 /24 의 445 포트에 연결만 해 보고 닫음, 64개 동시, Tailscale 은 훑지 않음)
- SMB 추가 · 고치기 창: 서버 주소 아래 [같은 망에서 찾기] → 찾는 창 (무엇을 하는지 안내 · 진행 "n / 254 확인" · [취소]).
  찾은 서버를 누르면 서버 주소 칸에 이름 (역방향 조회, 모르면 주소), 이름 칸이 비었으면 이름 앞부분을 채움. 못 찾으면 직접 넣으라는 안내
- 누를 때만 훑는다 (저절로 훑지 않음 - 내 판단: 망 전체에 연결을 시도하므로 사용자가 고를 때만)
- mDNS (_smb._tcp) 는 아직 (관리자 "더하면 좋음") - 포트 훑기로 찾은 것의 이름은 역방향 DNS

시험: smb_find_test (가짜 찾기 - 실제 망을 훑지 않음: 고르면 주소 · 이름 채움, 이름 모르면 주소, 못 찾음 안내, 추가 창 유지),
lan_scan_test (127.0.0.1 만), smb_test - 7 통과, analyze 문제 없음, l10n 빠짐 0. Android 실제 망에서는 기기 확인 필요.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:59:10 +09:00
RyuJongJin d5e705152a Merge branch 'xplore' into next
# Conflicts:
#	assets/l10n/en.json
#	assets/l10n/ja.json
#	assets/l10n/zh-Hans.json
2026-10-18 00:59:10 +09:00
RyuJongJin fba28cb027 WIP X-plore P3 연결: 길게 누르기 [해시] · [폴더 속성], 빠른 보기 [16진] (검토 대기)
관리자 지시 (10/18): cd 의 도우미 (b6e4717, lib/ui/file_tools.dart) 를 탐색기에 연결.
- 길게 누르기 메뉴 (폴더 크기 계산 옆 - cd 가 넣을 격자 · 글 뷰어 항목과 떨어진 곳):
  · 파일: [해시 (MD5 · SHA-256)] → showFileHash (진행 · 취소, 복사, 붙여 넣은 값과 비교)
  · 폴더: [폴더 속성] → showFolderProperties (파일 · 폴더 수 · 크기 · 링크 · 만든 · 바뀐 때)
- 빠른 보기 (81) 창: [16진] → HexViewerPage (앞부분부터 나눠 읽기)
- 내 판단: 셋 다 이 기기의 파일만 (원격 WebDAV 는 해시 · 16진 · 속성이 파일을 다 받아야 해서 메뉴에서 뺌)

시험: explorer_test 에 연결 시험 (해시 "hello" 의 MD5 · SHA-256 값, sub 의 "파일 1개 · 폴더 0개", 빠른 보기 → 16진 화면) -
explorer · file_tools · quick_look 57 통과, analyze 문제 없음, l10n 빠짐 0. 캡처는 아직 (Windows 캡처 시험은 다음).
j (SMB 찾기) 는 이 브랜치에 88 (SMB) 이 없어 smb_find (묶음7_88 위) 에서 (관리자 지시).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:55:49 +09:00
RyuJongJin 60398d22e8 WIP X-plore P3: 저장 공간 분석에 [칸 그림] (treemap, 87 위) (검토 대기)
- 저장 공간 분석 화면에 세 번째 보기 [칸 그림]: 지금 폴더 안을 크기만큼의 칸으로 (squarified treemap).
  큰 폴더 30개는 따로, 나머지 폴더는 한 칸, 이 폴더 바로 안의 파일도 한 칸 (회색, 누를 수 없음). 칸 = 이름 · 크기 · %.
  폴더 칸을 누르면 그 안으로 (← 로 위로, [그 자리로] 는 예전 그대로). 지우기는 여기서 하지 않음 (87 결정 그대로).
- 시험: storage_chart_test (넓이 비례 · 겹치지 않음 · 누르기).
- 캡처: integration_test/windows_xplore_tools_shot_test.dart → release\test\shots_xplore_tools
  (격자 · 글 뷰어 · 일괄 이름 날짜 · 칸 그림, ko/en × 412/960).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:55:29 +09:00
RyuJongJin e512d75d57 WIP X-plore i: 일괄 이름 바꾸기에 날짜 · 시각 ([D] · [T], 사진은 찍은 때) · 마지막 규칙 기억 (검토 대기)
- [D] = 2026-10-18, [T] = 13-05-09 (Windows 는 ':' 를 못 써서 '-'). 날짜는 고름: 찍은 때 (JPEG Exif DateTimeOriginal →
  DateTimeDigitized → DateTime, 없으면 바뀐 때, 처음 값) / 바뀐 때. Exif 는 파일 앞 256KB 만 읽음 (image 패키지, 새 의존성 없음).
- 찍은 때를 다 읽기 전에는 [바꾸기] 를 누를 수 없음 (미리 보기와 실제가 다르지 않게).
- 마지막에 [바꾸기] 한 규칙을 설정 batchRenameLast 에 기억해 다음에 그 값으로 창이 열림. 틀리거나 없는 값은 처음 값.
- 내 판단 (캡처에서 발견): 412 폭에서 날짜 고르기가 창을 넘어 [D] [T] 옆 남은 폭에 맞춤, 이름 틀 설명은 4줄까지.
- 시험: batch_rename_date_test (토큰 · 기억 · Exif · 창), batch_rename_test 그대로 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:55:28 +09:00
RyuJongJin 78486be27a WIP X-plore g · h: 격자 보기 · 글 뷰어 (검토 대기)
- g: 폴더 길게 누르기 메뉴 [격자로 보기 (그림 · 동영상)] - 썸네일 격자 (크게 · 작게), 누르면 열기 (보기 · 재생),
  칸을 길게 누르면 탐색기에서 그 자리로. WebDAV · SFTP 폴더는 메뉴에 없음 (썸네일을 받아야 해서).
- h: 파일 메뉴 [글 뷰어로 보기] (동영상 · 소리 빼고 어떤 파일이든, 읽기 전용) - 글자 코드 스스로 판별
  (UTF-8 · UTF-16 · CP949 · Shift-JIS · GBK, 위에서 바꿈), 큰 파일은 256KB 씩 [더 읽기], 줄 번호 · 글자 크기 · 전체 복사 · 고르기.
  나눠 읽은 끝에서 두 바이트 글자가 잘려 CP949 풀이가 실패하던 것은 끝 바이트를 다음 조각까지 미뤄 고침.
- 내 판단: 글 파일 (txt · srt · log 등) 을 열 앱이 없을 때만 글 뷰어로 연다 (예전에는 "열 앱이 없습니다").
  기본 앱이 있으면 예전처럼 그 앱으로 (사용자가 보는 동작은 바꾸지 않음).
- 내 판단 (캡처에서 발견): 좁은 화면 (폭 600 미만) 의 글 뷰어는 줄 번호 · 글자 크기를 ⋮ 메뉴로 (412 에서 파일 이름이 다 가려졌다).
- 번역: 이 커밋 뒤의 i · 저장 공간 그림 글도 같이 넣음 (en · ja · zh-Hans).
- 시험: xplore_tools_test (글 뷰어 CP949 나눠 읽기 · 격자), explorer_test "X-plore g · h".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:55:27 +09:00
RyuJongJin dd9e93b4fe WIP l FTP · FTPS: 탐색기 원격 탭 (WebDAV · SFTP 와 같은 길) - dart:io 로 직접, 처음 값 FTPS (검토 대기)
관리자 지시 (10/17, l): FTP · FTPS 를 탐색기 원격 탭으로. 평문 FTP 는 "암호화 안 됨" 경고, 처음 값은 FTPS, 비밀번호는 안전 저장소.
- lib/core/ftp.dart (새, 패키지 없음 - ftpconnect 3.0.0 은 dartssh2 ^3 에 묶여 우리 dartssh2 4.1.0 과 함께 못 씀):
  · 명령 채널 RawSocket → 명시 FTPS 는 AUTH TLS 뒤 RawSecureSocket.secure (같은 연결을 TLS 로), 암시 FTPS (990) 는 연결하자마자 TLS. PBSZ 0 · PROT P
  · 목록 MLSD (FEAT 에 MLST 가 있으면) 아니면 LIST (유닉스 꼴), 정보 · 만들기 · 지우기 (안쪽까지) · 옮기기 (RNFR/RNTO)
  · 받기 · 올리기는 따로 연결 (REST 로 부분 읽기 - 동영상 건너뛰기 · 이어 받기). 자료 연결의 TLS 는 명령에 150/125 를 받은 뒤
  · 자료 연결 주소는 명령 채널의 서버 주소로만 (PASV 가 알려 준 다른 주소로 가지 않음 - FTP 바운스 막기). EPSV 먼저
  · FTPS 로 고른 서버가 평문만 되면 몰래 평문으로 내려가지 않고 이유를 알림
  · 자체 서명 인증서: SFTP 호스트 키처럼 처음 한 번 지문 (SHA-256) 을 보이고 믿을지 묻고 (TOFU), 바뀌면 막음. 공인 인증서는 그대로
  · DNS 강제를 따름 (FtpRegistry.resolveWithDns - SFTP 와 같게)
- vfs: ftp://<서버 id>/<경로> (isFtp · noStreamUrl → 받아서 열기, 표시 📂 · 평문은 ⚠, 임시 폴더 jj_ftp)
- 설정: ftpServers (비밀번호는 ftp.pw.<id> 안전 저장소, 설정 파일 · .bak · 보관본에서 뺌), 마스터 초기화에서 지움
- 화면: 환경 설정 > 파일 탐색기 > FTP · FTPS (추가 · 고치기 · 지우기 · 연결 확인, 암호화 고르기 - 평문은 빨간 경고),
  탐색기 위 줄 탭 (평문은 ⚠ 이름) · [FTP 서버 추가] · 좁은 창 메뉴 · 길게 누르기 고치기 · 인증서 지문 안내 [지문 확인하고 연결]

시험: test/ftp_test.dart 7 - 설정의 비밀번호 (안전 저장소 · 보관본), 목록 줄 읽기, 실제 서버 (tool/ftp_test_server.py = pyftpdlib 2.2.0 ·
pyOpenSSL 26.4.0, 시험용 파이썬에만 - 앱에 안 들어감): 명시 FTPS (인증서 TOFU · 바뀐 인증서 막기 · 폴더 · 쓰기 · 목록 · 부분 읽기 · 옮기기 · 지우기),
암시 FTPS, 평문 FTP (+ FTPS 서버가 평문만이면 이유), 틀린 비밀번호 · 비밀번호 없음 · 닿지 않음.
sftp · master_lock · settings_store · webdav · explorer_webdav · explorer · sftp_explorer · licenses 와 함께 98 통과, analyze 문제 없음, l10n 빠짐 0.
시험 서버 메모: pyftpdlib 2.2.0 + pyOpenSSL 26 은 자료 연결 TLS 닫기에서 끝없이 되풀이해 STOR 가 끝나지 않는다 - 시험 서버에서만 덮어씀.
못 한 것: 실제 NAS (Synology 등) FTPS · TLS 세션 재사용을 요구하는 서버 (vsftpd require_ssl_reuse) 는 확인 못 함 (Dart 는 자료 연결의 TLS 세션 재사용을 못 함),
FTP 스트리밍 재생 (sftp_next 의 다리와 합칠 때 FtpRemote.openReadFrom 을 넣으면 됨), 경로 복사의 ftp:// 꼴.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:45:33 +09:00
RyuJongJin a80d8bcafe WIP X-plore f: 압축 (ZIP · 7z · RAR) 을 트리 안에서 폴더처럼 펼치기 · 읽기 전용 (검토 대기)
- 압축 파일의 › 로 펼치면 안의 폴더 · 파일이 트리에 (목록에 폴더 이름이 없어도 경로에서 폴더를 만든다).
  안의 파일을 열면 그 파일만 임시 폴더 (jj_arcview) 로 꺼내 연다 (보기 · 재생).
- 읽기 전용 (관리자 지시): 압축 안의 이름 바꾸기 · 일괄 이름 · 지우기 · 이동은 막고 알림. 압축 안으로 붙여넣기 · 놓기 · 새 폴더도 막음.
  압축 안의 것을 복사 · 붙여넣기 · 끌어 놓으면 86 의 풀기 창 (위험한 경로 · 링크 검사 · 같은 이름 · 갈 곳) 으로 꺼낸다.
- 비밀번호가 걸린 압축 · 파일은 미리 보지 않고 [압축 풀기] 로 안내 (비밀번호를 명령 줄 · 기록에 남기지 않는 86 흐름 그대로).
- 7z · RAR 은 동봉 7-Zip 이 있을 때만 (없으면 알림). WebDAV · SFTP 위의 압축과 Rsync 화면은 펼치지 않음.
- 내 판단: 압축 안 폴더를 펼쳐 지금 폴더가 압축 안이 되면 [새 폴더] · 붙여넣기를 막는다 (캡처에서 발견).
- 알려진 한계: 펼친 뒤 압축 파일이 바뀌면 다시 펼칠 때까지 예전 목록.
- 시험: explorer_test "X-plore f", 캡처 release\test\shots_xplore_f (archive_ko/en_412/960).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:42:08 +09:00
RyuJongJin b6e47178e3 WIP X-plore j · P3 도우미 (미연결, 15 에게 넘김) (검토 대기)
관리자 지시 (10/18): j (SMB 자동 찾기) 와 P3 의 해시 · 16진 보기 · 폴더 속성은 15 가 탐색기 · SMB 추가 창에 연결한다.
cd 가 만든 도우미와 시험만 넣는다 (탐색기 · 설정에는 아직 연결 안 함).
- lib/core/lan_scan.dart: 사설 IPv4 /24 를 445 포트 연결 시도로 훑기 (보내는 것 없음, 64개 동시, 취소 · 진행), 역방향 이름.
  Tailscale 100.64/10 은 넓어 훑지 않음. test/lan_scan_test.dart (이 기기의 열린 · 닫힌 포트).
- lib/ui/file_tools.dart: MD5 · SHA-256 (조각 읽기 · 취소 · 붙여 넣은 값과 비교), 16진 보기 ([더 읽기]), 폴더 속성 (링크 · junction 은 따라가지 않음).
  test/file_tools_test.dart. 번역 en · ja · zh-Hans.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:28:55 +09:00
RyuJongJin f4760cb4d7 WIP X-plore e: Android 앱 휴지통 · 85 진행 패널 시험 흔들림 · X-plore 캡처 시험 (검토 대기)
- e (관리자 지시): Android 는 저장 장치마다 .jj_trash 에 보관 (처음 14일, 설정 0 = 끔 - 예전처럼 바로 영구 삭제).
  지우기 = 휴지통으로 · [되돌리기] 알림 · 휴지통 화면 (되살리기 · 영구 삭제 · 비우기), 켤 때 기한 지난 것 정리.
  휴지통으로 못 옮긴 것은 영구 삭제할지 따로 묻는다 (몰래 영구 삭제하지 않음). Windows 의 [휴지통] 버튼은 시스템 휴지통을 연다.
- 내 판단: 한 창 "갈 곳" 줄은 전체 경로 대신 폴더 이름 (좁은 화면에서 잘림).
- 85 시험 흔들림 (관리자 지시): pumpAndSettle 대신 조건 기다리기 · 칩 onTap 직접 (3번 연속 통과).
- integration_test/windows_xplore_shot_test.dart: X-plore P1 화면 캡처 (ko/en × 412/960).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:28:06 +09:00
RyuJongJin 16f33b3b71 WIP zip_aes: 비밀번호 ZIP (AES-256) 만들기 · 한글 비밀번호 ZIP 풀기 고침 (검토 대기)
관리자 지시 (10/17, k): 86 [ZIP 으로 묶기] 창에 "비밀번호" 칸. 비밀번호는 기억 · 기록하지 않음.
- 창: [비밀번호 (선택)] (보기 · 숨기기) → 넣으면 [비밀번호 다시 넣기], 같아야 [암호로 묶기]. 잊으면 못 푼다 · 이름 목록은 암호화 안 됨 안내
- 영문 · 숫자 · 기호 비밀번호: 동봉 7-Zip (Windows 7z.exe · Android lib7zz) 로 -tzip -mem=AES256 -mcu=on, 비밀번호는 표준 입력으로만.
  흘려 가며 암호화해 큰 동영상도 메모리에 다 올리지 않음. 넣을 파일은 앱이 고름 (링크 · junction 빼고, 고른 것 기준 상대 이름)
- 한글 등 영문 밖 글자 비밀번호: Windows 7-Zip 은 받지 않는다 (표준 입력 · 명령 줄 모두 "매개 변수가 틀립니다", 10/17 시험)
  → archive 의 AES-256 (WinZip AE) 으로. 파일을 통째로 메모리에 올리므로 512MB 넘는 파일이 있으면 미리 알리고 묶지 않음 (내 판단).
  창에 "이 앱에서는 풀리지만 7-Zip 등 다른 프로그램에서는 풀리지 않을 수 있음" 안내 (막지는 않음)
- 버그 고침: archive 4.3.0 은 비밀번호를 password.codeUnits 를 바이트로 잘라 써서 한글이 깨졌다 (다른 프로그램과 맞지 않음).
  UTF-8 바이트로 넘기고 (zipPasswordBytes), 풀 때는 UTF-8 로 먼저 · 틀리면 예전 방식으로 한 번 더
- -mcu=on: 7-Zip 이 만든 ZIP 의 한글 이름을 UTF-8 로 (안 하면 앱 · Android 에서 이름이 깨졌다 - 시험에서 찾음)

따로 알릴 것 (이 커밋에서 고치지 않음): 86 의 7z · RAR 풀기도 비밀번호에 한글이 있으면 Windows 7-Zip 이 표준 입력을 받지 않아 실패할 것 (관리자 판단 필요).

시험: archive_ops (영문 비밀번호 → 7-Zip, 한글 비밀번호 → archive: 앱 풀기 · 틀린 비밀번호 · 7-Zip 풀기, 취소 · 실패 · 빈 비밀번호),
archive_ui (두 번 같아야 누름 · 한글 안내 · [취소] 는 아무 일 없음), licenses - 25 통과, analyze 문제 없음, l10n 빠짐 0.
위젯 시험 안에서는 7-Zip 이 가짜 시간 때문에 끝나지 않아 창 동작만 본다 (만들기 · 풀기는 단위 시험). 7z 의 표준 입력 비밀번호는 실제 7z.exe 로 확인.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:09:10 +09:00
RyuJongJin c2c43825d6 WIP X-plore ⚖ 3개 (관리자 결정): 표시 동그라미 늘 보이기 · 밀기 = 창 바꾸기 (X-plore 스타일 처음 값 켬) · X-plore 식 폴더 표시 (설정만) (검토 대기)
관리자 결정 (10/18, 사용자 "네가 판단해서"):
- 표시 동그라미 늘 보이기: X-plore 스타일에서 처음 값 켬 (설정으로 끔). 다른 스타일 · Rsync 는 지금대로 (선택 모드에서만).
  고른 것이 있으면 아래 표시 줄도. 줄 누르기는 그대로 (열기 · 고르기), 동그라미를 누르면 표시.
- 밀기 = 창 바꾸기: X-plore 스타일 탐색기 안에서 처음 값 켬 (설정). 두 창이면 다른 창이 활성, 한 창이면 숨은 창과 바꿔 보임 (알림).
  탐색기 안쪽이 먼저 받으므로 화면 사이 이동은 위 막대에서 밀기 (10/8 결정 유지).
- 폴더 표시 X-plore 식 (1번 폴더 · 2번 안의 파일 전체 · 3번 풀기): 설정으로만, 처음 값은 지금 규칙 (자신 + 안 전체) -
  고르는 범위가 바뀌면 지우기 · 이동 대상이 바뀌는 데이터 문제라 (관리자 결정).
- 시험: X-plore ⚖ 2개 + 예전 시험 2곳 (동그라미가 평소에 안 보임 → X-plore 스타일은 보임, 끄면 예전대로) 고침.
  탐색기 시험 15개 파일 202개 통과. test_temp_check 의 남은 폴더 2개는 같은 때 돌던 다른 세션 시험의 것 (끝난 뒤 사라짐 - 이 시험들은 tearDown 에서 지움).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 23:45:57 +09:00
RyuJongJin eefcb18ab8 WIP sftp_next: SFTP · SMB 동영상을 받지 않고 스트리밍 - 같은 폴더의 다음 동영상 · 그 자막 (검토 대기)
관리자 지시 (10/17, 88 1차에서 빠진 것): 88 1차는 고른 파일 하나를 임시 폴더로 다 받은 뒤 그것만 틀어
다음 파일로 넘어가지 않았다 (playFiles 가 목록을 [받은 파일] 하나로 줄임).
- lib/core/remote_stream.dart: 이 기기 안 (127.0.0.1, 빈 포트) 의 작은 HTTP 다리. 플레이어 (mpv) 의 Range 요청을
  SFTP 는 SftpFile.read(offset, length), SMB 는 readChunk(offset) 로 그 부분만 읽어 준다 - 건너뛰기 · 다음 파일 모두 받지 않고 바로
- media_kit_full_player._media: SFTP · SMB 는 다리 주소로 (예전: vLocalCopy 로 다 받기)
- playFiles: 같은 폴더 목록을 그대로 넘김 (preparePlayback 은 이미 원격 형제 목록을 만들고 있었음).
  자막은 플레이어가 차례가 올 때마다 그 파일 것을 받는다 (externalSubtitlesFor 의 원격 분기 - 이미 있던 것)
- SftpRemote · SmbRemote 에 openReadFrom (시작 · 길이). openRead 는 그것을 처음부터 부름 (동작 그대로)
- WebDAV 는 바꾸지 않음 (이미 주소 + 인증 헤더로 스트리밍 · 다음 파일 · 자막)

내 판단 (보안): 다리는 127.0.0.1 에만 열고 이 기기에서 온 요청만, 주소에 실행마다 바뀌는 무작위 비밀값
(DNS · Tor 다리와 같은 판단, a4 10/11), 등록한 파일만 번호로 (경로를 주소로 받지 않음), GET · HEAD 만, 주소에 비밀번호 없음.
외부 프로그램으로 여는 것은 그대로 (받아서 넘김).

시험: sftp_stream_test 2 (실제 SFTP 서버 paramiko - 부분 읽기, 같은 폴더 목록, Range 206 · 416 · HEAD,
다음 파일, 틀린 비밀값 · 번호 404, PUT 405, 다음 파일의 자막) · sftp · webdav · player · smb 37 통과, analyze 문제 없음.
SMB 는 Android 플랫폼 채널이라 이 PC 에서 실제 시험 못 함 (기기 확인 필요). 실제 재생 (mpv 가 다리로 여는 것) 도 기기 · Windows 시험판 확인 필요.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 23:35:54 +09:00
RyuJongJin 94ecd7b25e WIP 89 Wi-Fi 공유: 고른 폴더를 같은 Wi-Fi 의 다른 기기 브라우저에서 보기 · 받기 (읽기 전용) (검토 대기)
사용자 결정 (10/9): 기본 꺼짐 · 읽기 전용 · 접속 비밀번호. 관리자 지시 (10/17) 대로:
- 앱 안 작은 HTTP 서버 (dart:io, 새 서버 패키지 없음). 켤 때마다 6자리 코드를 새로 만들고 주소 · QR · 코드를 화면에
- 고른 폴더 밖은 막음: ../ · 역슬래시 · 드라이브 · ':' · 링크 · junction (목록에도 안 보임), 실제 경로가 폴더 안인지 다시 확인
- GET · HEAD 만 (그 밖은 405). 올리기 · 지우기 · 이름 바꾸기 없음
- 저절로 끄기: 설정 10 / 30 (처음 값) / 60 / 120분 / 끄지 않음, [+30분]. 앱을 끄면 함께 꺼짐
- 접속 기록은 화면에만 (파일에 남기지 않음). 작업 기록에는 켜고 끈 것만, 코드 · 주소 없음. 로그인 뒤 주소에서 코드를 뺌
- Android: 켜져 있는 동안 작업 알림 서비스 ("Wi-Fi 공유 켜짐" - 코드 · 주소는 잠금 화면에 보일 수 있어 넣지 않음)
- 탐색기: 폴더 길게 누르기 [Wi-Fi 로 공유] (이 기기의 폴더만) · ⋮ 메뉴 · 버튼 구성, 켜져 있는 동안 위에 "Wi-Fi 공유 중" 줄 ([끄기])

내 판단 (보안):
- 코드를 틀리면 한 기기는 5번에 1분 막고, 모두 30번이면 공유를 끔 (6자리 무작위 대입 막기)
- 사설망 · 링크 로컬 · Tailscale (100.64/10) · 이 기기에서 온 요청만 받음
- 공유한 파일은 격리해 보냄 (CSP sandbox · nosniff, HTML · SVG · JS 는 내려받기로). 앱 화면에도 스크립트 없음 (CSP)
- 쿠키는 HttpOnly · SameSite=Strict, 코드 비교는 시간 차가 없게

라이선스: qr 3.0.2 (BSD-3-Clause, 원래 간접 의존성) 를 직접 의존성으로 - 두 고지 · licenses_test.
시험: wifi_share_test 8 (401 · 429 · 끄기 · 403/404 · 링크 · Range · 격리 · 저절로 끄기 · 사설망), wifi_share_page_test (412 폭),
keep_alive · licenses. analyze 문제 없음, l10n 빠짐 0, test_temp_check: jj_wifi* 흔적 0 (같은 때 cd 의 explorer 시험 폴더가 섞여 보임).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 23:20:24 +09:00
RyuJongJin 23d3da8483 WIP X-plore c: X-plore 스타일 트리 맨 위에 저장 장치 · 서버 · 즐겨찾기 (위 줄 탭 · ★ 는 그대로) (검토 대기)
15 비교표 P1 c. X-plore 는 저장 장치 · 서버 · 즐겨찾기가 한 트리의 맨 위 항목이다.
- X-plore 스타일에서 지금 저장 장치를 그 자리에 펼친 채, 다른 저장 장치 · WebDAV 서버를 접힌 줄로 앞뒤에 (탭 순서대로),
  맨 끝에 "★ 즐겨찾기" (누르면 펼침 · 즐겨찾기를 누르면 그 폴더로). 다른 저장 장치 줄을 누르면 그 저장 장치로.
- 위 줄 탭 · ★ 메뉴는 그대로 (관리자 결정 "함께"). 다른 스타일 · Rsync 화면은 그대로.
- 설정 "저장 장치 · 서버 · 즐겨찾기를 트리 맨 위에" (처음 값 켬, X-plore 스타일에서만 보임).
- 줄 위젯은 따로 (_extraRow) - 파일 줄의 고르기 · 끌기 · 메뉴는 이 줄에 없음. 폴더로 스크롤 (_reveal) 은 실제 트리 줄만.
- 시험: explorer_test "X-plore c" + 탐색기 시험 15개 파일 200개 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 23:15:55 +09:00
RyuJongJin 0ce26e9124 WIP X-plore d: 설정 "펼친 폴더를 다시 누르면 접기" (처음 값 끔 - 189 그대로) (검토 대기)
15 비교표 P1 d. X-plore 는 폴더를 다시 누르면 접는다. 189 (관리자 지시) 는 이름으로 접지 않게 해 두었으므로 설정으로만 넣는다.
켜면 펼쳐 둔 지금 폴더를 다시 누를 때 접고, 두 번 누르기의 두 번째 (짧은 사이) 는 접지 않는다 (목록이 움직이지 않게).
내 판단: 처음 값 끔 (189 와 부딪힘). 시험: explorer_test "X-plore d", 189 시험 그대로 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 23:07:34 +09:00
RyuJongJin f9cd5f98c9 WIP X-plore b: 가운데 버튼 길게 누르기 = 짝 동작 (복사 ↔ 이동, 삭제 → 영구 삭제로 묻기) (검토 대기)
15 비교표 P1 b (X-plore 의 버튼 길게 누르기). 확인 창은 그대로 - 영구 삭제는 처음 고른 칸만 영구로 (Shift+Delete 와 같음).
풍선 도움말에 "길게 누르면 …". Rsync 화면은 없음. 시험: explorer_test "X-plore b".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 23:05:26 +09:00
RyuJongJin 818b4a0615 WIP X-plore a: 한 창일 때 복사 · 이동 갈 곳 - 설정 "숨은 다른 창으로" 면 위에 갈 곳 줄 · 바로 복사 · 이동 (처음 값은 지금대로) (검토 대기)
사용자 "파일 탐색기는 X-plore 와 최대한 같게" (관리자 3a, 15 비교표 P1 a).
- X-plore 는 대상 창이 숨어도 파란 화살표 + 대상 이름을 보이고 그리로 복사 · 이동한다. 우리 한 창은 담아 두었다가 붙여넣기.
- 설정 "한 창일 때 복사 · 이동": 담아 두고 붙여넣기 (처음 값, 지금 그대로) / 숨은 다른 창으로.
  숨은 다른 창으로면 맨 위에 "→ 복사 · 이동 갈 곳: 폴더" 와 [지금 폴더로] · [다른 폴더], [복사] · [이동] 은 그 폴더로 (확인 창 그대로).
- 내 판단: 동작이 바뀌는 것이라 처음 값은 지금대로 (관리자 결정 - 예전과 부딪히는 것은 설정으로).
- 시험: explorer_test "X-plore a".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 23:03:26 +09:00
RyuJongJin e5a115d450 WIP 88 SMB 3/3: Android SMB (smbj 0.15.0, 플랫폼 채널) - 서버 설정 · 탭 · 받아서 열기 · 고지 (미완 - 기기 확인 안 됨)
사용자 결정 88-1 (Windows 는 운영체제 그대로) · 88-4 (SMB3 암호화는 허용 + 안 되면 경고) 대로 Android 만.
- android/.../SmbBridge.kt (채널 jj_mkvmaker/smb, 뒤 스레드): smbj (SMB2 · SMB3, SMB1 없음) · Bouncy Castle 보안 제공자
  (Android 기본에는 NTLM 의 MD4 가 없음) · 암호화 요청 (withEncryptData). 서버마다 연결 하나를 다시 씀, 파일은 손잡이로 1MB 조각.
  오류를 종류로 (auth · unreachable · noShare · smb1 · permission · notFound). R8 keep 규칙 (smbj · mbassador · bouncycastle).
- lib/core/smb.dart: SmbServer (비밀번호는 안전 저장소 smb.pw.<id> 에만) · SmbRemote (RemoteClient) · SmbRegistry.
  저장된 비밀번호 없음은 서버에 묻지 않고 알림, 게스트 (아이디 없음) 허용, info() 로 암호화 여부.
- vfs: smb:// 를 같은 원격 길로 (🗄), 재생 · 다른 앱은 받아서 (noStreamUrl = SFTP · SMB).
- 화면: 환경 설정 > 파일 탐색기 > SMB (Android 만) - 서버 · 포트 · 공유 · 시작 폴더 · 아이디 (비우면 게스트) · 비밀번호 · 도메인,
  [연결 확인] 에서 암호화 안 되면 경고. 탐색기 탭 · ⋮ 메뉴 [SMB 서버 추가] · 탭 길게 누르기 = 고치기 · 폴더 고르는 곳.
  179 바꿈: Android 에서 smb:// · \서버\공유 를 넣으면 "SMB 서버 추가로 넣으면 탭으로" 안내와 [SMB 서버 추가] (넣은 주소로 채움) · [WebDAV 서버 추가].
- 최상 · 마스터 초기화의 저장된 비밀번호 지우기에 SMB 도.
- 라이선스: SMBJ_LICENSES.txt (smbj LICENSE_HEADER · Bouncy Castle · SLF4J · MBassador 원문 + Apache 2.0 전문, smbj 는 NOTICE 파일이 없음),
  라이선스 화면 · Android 고지, 판이 바뀌면 시험이 알림.
- 시험: smb_test (가짜 채널 - 1MB 조각 쓰기 · 읽기 · 목록 · 이름 바꾸기 · 지우기 · 시작 폴더 · 오류 글 · 저장된 비밀번호 없음 · 설정 · 주소 풀기),
  179 시험 고침. 전체 837 통과 · 17 건너뜀, 새로 남은 임시 폴더 0. APK 빌드 (Kotlin 컴파일 · R8) 통과.
- 시험이 잡은 버그: 큰 조각 하나가 오면 1MB 로 나누지 않고 통째로 보냈다 → 나눔.
- 미완: 실제 smbj 연결 (Android 기기 + SMB 서버) 은 확인하지 못함 - 노트 10+ 등에서 PC 공유 폴더로 확인 필요.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 22:55:59 +09:00
RyuJongJin d00df74257 WIP 최상 · 마스터 초기화 "저장된 비밀번호 · API 키" 가 AI 서비스 API 키도 지우게 (버그, 관리자 결정) (검토 대기)
관리자 결정 (10/17): 문구는 "비밀번호 · API 키" 인데 AI 서비스 API 키 (ai.*) 는 남았다 (예전부터) → 함께 지운다.
SFTP 비밀 값 (비밀번호 · 개인 키 · 키 암호) 은 88 1/3 에서 이미 넣음. 목록 · 아이디 · 주소 · 믿은 서버 키는 남김.
시험: 실제 SettingsStore + 메모리 안전 저장소로 os. · dav. · sftp. · ai. 값 7개를 넣고 지운 뒤 하나도 없음.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 22:32:14 +09:00
RyuJongJin 9a786f3496 WIP 88 SFTP 2/3: 화면 - 환경 설정 SFTP 서버 · 탐색기 탭 · 처음 키 확인 · 고르는 곳 · 라이선스 고지 (미완)
- 환경 설정 > 파일 탐색기 > SFTP (lib/ui/sftp_settings.dart): 추가 · 고치기 · 지우기 (쓰는 곳 알림), 서버 주소 · 포트 · 아이디 ·
  비밀번호 · 개인 키 파일 고르기 (내용만 안전 저장소에, 원래 경로는 저장하지 않음) · 키 암호 · 시작 폴더 · 오래된 ssh-rsa 허용,
  [연결 확인] 에서 처음 보는 키는 지문을 보이고 [믿고 연결], 믿은 키 보기 · [믿은 키 지우기] (마스터 비밀번호 뒤).
- 파일 탐색기 · Rsync 화면: SFTP 서버 탭 (🔑), 탭 길게 누르기 = 고치기, 끝 버튼에 [SFTP 서버 추가] (좁으면 ⋮ 메뉴에).
  처음 연결: 목록 대신 "처음 연결하는 서버입니다 · 지문" 안내와 [지문 확인하고 연결] → 확인 창 [믿고 연결] → 지문을 설정에 저장하고 읽음.
  바뀐 키: 막고 예전 · 지금 지문, [서버 설정 고치기]. 경로 복사는 sftp://아이디@서버:포트/경로 (비밀번호 없음).
- 실시간 동기화 · 모니터링의 폴더 고르기에 SFTP 서버도. 화면 경로 "🔑 서버 › 폴더".
- WebDAV 에만 맞던 글 6개를 "WebDAV · SFTP" 로 (풀기 · ZIP · 분석 · MKV 목록 · Rsync 안내 · 빠른 보기). 탐색기 ⋮ 이름 "경로 입력 · 네트워크 서버".
- 파일 고르기: 확장자 목록이 비면 모든 파일 (확장자가 없는 개인 키 파일 - Windows · Android).
- 라이선스: dartssh2 4.1.0 (MIT) 를 두 고지에 (pointycastle · pinenacl · asn1lib 원문은 패키지 라이선스 화면), 판이 바뀌면 시험이 알림.
- 번역 en · ja · zh-Hans (빠진 번역 0).
- 시험: sftp_explorer_test (시험 서버로 처음 연결 → 지문 → 믿고 연결 → 목록 · 지문 저장), test/support/sftp_server.dart 로 서버 띄우기 공용,
  글이 바뀐 시험 3곳 고침. 전체: 이 4곳 말고 통과, 새로 남은 임시 폴더 0 (move_settled 1번은 powershell 실행 "액세스 거부" - 다시 돌려 통과).
- 내 판단: 끝 버튼 줄에 [SFTP 서버 추가] 아이콘을 하나 더 (WebDAV 와 따로 바로 보이게).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 22:28:35 +09:00
RyuJongJin b5918b7aa2 WIP 88 SFTP 1/3: 핵심 (dartssh2) - sftp:// 경로 · 서버 설정 · 안전 저장소 · 처음 키 확인 (TOFU) · 오래된 ssh-rsa · 시험 서버 (미완)
사용자 "진행" (10/17, 관리자 3a 전달) - 88 설계안의 제안값:
1) Windows SMB 는 운영체제 그대로 2) 키 암호는 안전 저장소 3) ssh-rsa 기본 끔 · 서버마다 켬 4) SMB3 암호화 (SMB 때) 5) 서버 rsync 는 다음 판.

이 커밋 (화면은 아직 없음 - 설정 화면 · 탐색기 탭은 다음 커밋):
- lib/core/remote_fs.dart: 원격 저장소 공통 동작 (RemoteClient). WebDAV (DavClient) 도 이것으로.
- lib/core/sftp.dart: SftpServer (설정, 비밀 값은 toJson 에 없음) · SftpRemote (dartssh2, 서버마다 연결 하나를 다시 씀) · SftpRegistry.
  - 호스트 키: 믿은 지문이 없으면 연결하지 않고 지문 (SHA256:…) 을 알림 (SftpHostKeyException) → 화면이 묻고 저장.
    바뀌면 막고 예전 · 지금 지문을 알림 (중간자 공격 안내).
  - 비밀번호 · keyboard-interactive · 개인 키 (암호), 키 암호 틀림 · 키를 못 읽음 · 저장된 비밀번호 없음 · 닿지 않음 · 권한 · 없는 경로를 사람 말로.
  - 오래된 서버: 처음엔 SHA-1 을 쓰지 않고 "오래된 ssh-rsa 허용" 을 안내, 서버마다 켜면 ssh-rsa · SHA-1 키 교환.
  - DNS 강제를 따라 직접 연결 (집 안 이름 · 주소는 기기 DNS), 시작 폴더 (비우면 홈).
  - 소켓 끊김의 쓰기 실패가 처리되지 않은 오류로 올라오지 않게.
- vfs: sftp:// 를 dav:// 와 같은 원격 길로 (isDav = 원격, isWebDav · isSftp 따로). 화면 "🔑 서버/경로", 받아서 열기는 jj_sftp.
- 설정: sftpServers (비밀번호 · 개인 키 · 키 암호는 안전 저장소 sftp.pw/key/kp.<id> 에만, 평문 파일에 쓰지 않음), .bak · 깨진 파일 가림,
  최상 비밀번호 초기화의 "저장된 비밀번호 지우기" 에 SFTP 도.
- 재생 · 다른 앱: SFTP 는 스트리밍 주소가 없어 고른 파일만 받아서 (진행 · 취소) 틀고 같은 폴더 자막도 받음 (다음 파일로 넘어가지 않음 - 1차).
- 시험: test/sftp_test.dart 7개 (설정 · 경로 + paramiko 시험 서버: TOFU · 바뀐 키 · 틀린 비밀번호 · 닿지 않음 · vfs 전체 · 키 로그인 · ssh-rsa).
  tool/sftp_test_server.py (paramiko 3.5.1 - 5.0 은 SHA-1 을 뺌), venv 는 ..\tools\sftp_test_py (없으면 건너뜀).
- 라이선스 고지 · 화면 · Android SMB 는 다음 커밋.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 22:11:07 +09:00
RyuJongJin ab4d935fca WIP 관리자 결정: 거절 기록은 방식 주소:포트만 · DoH 주소는 호스트만 · 시험 임시 폴더 흔적 0 + 검사 (검토 대기)
관리자 결정 (10/17, 개인정보):
- DNS 프록시 거절 기록: 요청 줄 대신 "방식 주소:포트" 만 (경로 · 질의 (? 뒤) 는 남기지 않음, requestLineForLog).
- DoH 주소: 작업 기록 · app.log · 안내 · 다운로드 실패 이유에는 호스트만 ("https://dns.nextdns.io/…", DnsConfig.label · hideUrlPaths).
  DoH 오류 원문 안의 주소도 가림. 설정 화면은 그대로.

시험 임시 폴더 (%TEMP%\jj_*) - 전체 시험마다 8개가 남았다:
- 앱 버그 (버그 수정): AI 해상도 올리기 upscale4x 가 실패 · 취소하면 jj_up_ 임시 폴더를 지우지 않음 → 지움.
  품질 올리기 (묶음6 내 코드) 는 4배 결과 폴더를 지우지 않음 → 저장했든 못 했든 지움. 사용자 기기의 임시 폴더에도 남던 것.
- 시험: 책갈피 저장이 뒤에서 늦게 끝나 폴더를 다시 만들던 3곳 (jj_bmf_ · jj_bm_ · jj_nav_) 은 파일 끝에 기다렸다 지움
  (test/support/temp_dirs.dart). ai_upscale_test 는 받은 결과 폴더를 지움.
- 검사: tool/test_temp_check.ps1 - 전체 시험 앞뒤로 %TEMP% 를 비교해 시험 소스의 jj… 이름으로 새로 남은 것이 있으면 실패.
  (시험 파일들이 동시에 돌아 파일마다 스스로 확인할 수 없어 전체 실행 앞뒤로 본다.) 이미 있던 폴더는 건드리지 않음.
전체 822 통과 · 17 건너뜀, 새로 남은 임시 폴더 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 16:53:56 +09:00
RyuJongJin a6b3f13e62 WIP 릴리스 전 점검 (지시 8): DNS 실패 기록에서 사이트 이름 뺌 · archive 고지 · 큰 글자 넘침 3곳 (검토 대기)
- 개인정보: DNS 강제 프록시의 "DNS 실패 (사이트): 까닭" 이 연 사이트 이름을 app.log 에 남겼다 → 까닭 (닿지 않은 DNS 서버) 만.
- 라이선스: ZIP 풀기 · 묶기의 archive 4.3.0 (MIT, Brendan Duncan) 을 두 고지 (Windows · Android) 에 이름으로. 판이 바뀌면 시험이 알림.
- 접근성 (253 시험을 묶음6 새 창으로 넓힘, 412×900 · 900×412 · 글자 1.6배, 누르는 것이 화면 폭 안인지도 봄):
  · 78 이름 일괄 창: 대소문자 고르기가 가장 긴 항목 폭이라 창을 넘음 → 한 줄 전체 (isExpanded). 낮은 화면에서 아래가 넘침 → 창 안 스크롤.
    "대소문자 무시" 글은 줄 바꿈.
  · 86 풀기 확인 창: "같은 이름이 있으면 [고르기]" 가 화면 밖으로 밀림 (넘침 오류 없이 누를 수 없었다) → 자리가 없으면 다음 줄.
  · 85 작은 표시: "복사 · 이동 멈춤 - 눌러서 보기" 가 412 를 넘음 → 두 줄까지.
버그 수정 (사용자 동작은 배치만 바뀜). 시험: 253 의 settle 이 시험 시계를 앞으로 돌리게 (열리는 움직임이 끝나야 넘침이 보임).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 16:18:14 +09:00
RyuJongJin 0f3133cc68 WIP 15 캡처 지적 ①~④: 영어 단수 · 좁은 화면 풀 곳 세로 목록 · 찾기/분석 줄은 시작한 폴더 기준 짧은 경로 · 캡처 DEBUG 띠 끔 (검토 대기)
관리자 지시 (15 캡처 지적, 버그 수정):
① 영어 "1 problems" · "1 names": englishSingular (61) 에 problems · names · paths 를 더하고,
   수와 명사 사이 꾸미는 말 하나도 넘게 ("1 incomplete files" → "1 incomplete file"). 78 영어 글 "until fixed".
② 86 풀 곳: 폭 720 미만이면 칩 대신 세로 라디오 목록 (글이 다 보임). ZIP 묶기의 넣을 곳도 같은 도우미.
③ 79 찾기 결과 · 87 큰 파일 줄: 시작한 폴더 이름부터의 상대 경로 (shortUnder), 길면 가운데 줄임 (앞 … 마지막 두 단계),
   전체 경로는 마우스를 올리거나 그 줄을 길게 누르면 (Tooltip).
④ 캡처 시험 debugShowCheckedModeBanner: false.

내 판단: ① 은 개수별 글을 따로 두지 않고 기존 61 의 단수 처리를 넓힘 (같은 꼴의 다른 글도 함께 고쳐짐).
② 를 ZIP 묶기 창에도 적용 (같은 모양).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:57:25 +09:00
RyuJongJin bb95be3589 WIP 78 이름 일괄 창: 이름 틀 설명을 3줄까지 (폭 412 일본어에서 예가 잘림) (검토 대기)
화면 캡처 (shots_b6_dc8a5f0) 에서 찾음. 버그 수정.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:42:31 +09:00
RyuJongJin dc8a5f0b56 WIP 화면 캡처에서 찾은 것: 85 멈춤 표시는 경고 아이콘 · 78 이름 일괄 창의 칸 이름을 짧게 (폭 412 일본어 잘림) (검토 대기)
- 85: 멈춘 (실패한) 작은 표시가 꽉 찬 진행 고리라 "끝났다" 로 보였다 → 빨간 경고 아이콘.
- 78: 폭 412 · 일본어에서 "名前の形式 (拡張子は…" · "置き換える文字 (空なら…" 로 칸 이름이 잘렸다 →
  이름은 "이름 틀" · "바꿀 글" 로 짧게, "확장자는 그대로" 는 아래 설명 줄 (2줄까지), "비우면 지움" 은 칸 안 안내로.
- 내 판단 (화면 캡처를 보고 고침, 동작은 같음).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:39:00 +09:00
RyuJongJin 3b6d50f409 WIP 시험: 묶음6 화면 캡처 (Windows 통합 시험, 412 · 960 × ko · en · ja) + 85 작은 표시를 TransferProgressChip 으로 (검토 대기)
- 관리자 지시 5: 기기 없이 15 가 볼 수 있게 integration_test/windows_b6_shot_test.dart (JJ_SHOT_DIR 에 PNG):
  78 이름 일괄 창 (겹침 빨간 줄) · 79 찾기 결과 (고른 줄 · 아래 할 일 줄) · 81 빠른 보기 (자막 글) · 82 놓기 묻기 창 ·
  85 작은 표시 (보통 · 멈춤) · 86 풀기 확인 창 (밖으로 나가는 경로 · 링크 · 쓸 수 없는 이름 · 덮어쓰기 경고) · 87 분석 (큰 폴더 · 큰 파일).
  시험 파일은 임시 폴더에만 (끝나면 지움), 설정은 메모리에만.
- 85 의 작은 표시를 공개 위젯 TransferProgressChip 으로 뺐다 (모양 · 동작 같음) - 멈춤 상태를 실제 실패 없이 캡처하려고.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:19:46 +09:00
RyuJongJin e0466d6168 WIP 86 Android: 7-Zip 25.01 을 공식 소스에서 NDK 로 빌드 (lib7zz.so) - Android 에서도 7z · RAR 풀기 (검토 대기)
- 관리자 지시 4: 7z2501-src.7z (SHA-256 2aed39b8…0181 고정, 고치지 않음) 의 CPP/7zip/Bundles/Alone2 (7zz) 를 NDK clang
  (aarch64-linux-android24) 으로 빌드 - tool/build_7zz_android.sh. 어셈블리 끔, Windows 에서 빌드할 때 makefile 이 MinGW 로
  여기지 않게 SystemDrive · SYSTEMDRIVE 를 비움, 새 clang 경고로 실패하지 않게 경고 묶음 끔. libc++ 는 정적 (libc · libm · libdl 만 씀).
  결과 third_party/7zip/android/arm64-v8a/lib7zz.so (2.8MB) + License.txt.
- APK: jniLibs 에 third_party/7zip/android, third_party_libs.txt · check_apk 목록에 lib7zz.so (check_apk 통과 - 실행 파일 5개).
- 앱: bundledSevenZip 이 Android 에서는 네이티브 라이브러리 폴더의 lib7zz.so (rsync 와 같은 방식). 있으면 "다른 앱으로 열기" 안내
  대신 실제 풀기 - 같은 검사 (zip slip · 링크 · 이름 · 공간 · 비밀번호 표준 입력) 그대로. 없으면 예전처럼 안내.
- 고지: THIRD_PARTY_NOTICES_ANDROID 에 7-Zip 25.01 (LGPL 2.1+ · BSD · unRAR 제한, 소스 주소 · 빌드 방법 · 대응 소스 = 태그).
- 시험: licenses_test (Android 고지 · 빌드 스크립트 해시 · APK 목록). Android 기기에서 실제로 푸는 것은 15 의 기기 확인 필요.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:17:01 +09:00
RyuJongJin 47144981d0 WIP 87 저장 공간 분석: 고른 폴더 · 드라이브의 큰 폴더 · 큰 파일 차례, 누르면 탐색기에서 그 자리로 (검토 대기)
- 관리자 지시: 고른 폴더나 드라이브의 큰 폴더 · 큰 파일 차례. 80 의 폴더 크기 규칙 (링크 · junction 은 따라가지 않고 수만,
  이미 센 폴더 (실제 경로) 는 다시 세지 않음, 취소) 을 그대로.
- 여는 곳: 폴더 길게 누르기 [저장 공간 분석], ⋮ 메뉴 [저장 공간 분석] (지금 폴더 - 드라이브 맨 위면 드라이브 전체).
- 한 번 훑으며 폴더마다 크기 (안쪽 합) · 파일 수와 큰 파일 200개를 모은다 → 폴더를 누르면 그 안으로 바로 (다시 읽지 않음),
  [위 폴더] · ← 로 나옴. "큰 폴더" (막대 = 지금 폴더 안 비율) · "큰 파일" (지금 폴더 아래).
  읽지 못한 폴더 수 · 세지 않은 링크 수를 알린다. 읽는 동안 폴더 수 · 크기, [취소] (화면을 닫아도 멈춤).
- 누르면 (파일) · [그 자리로] (폴더) 탐색기에서 그 자리로 - 지우기는 탐색기의 지우기 (확인 · 휴지통) 로만 (관리자 판단).
- WebDAV 는 직접 시킬 때만 (이 메뉴) 하고, 먼저 "서버에서 모두 읽어 오래 걸릴 수 있습니다" 를 묻는다.
- 시험: storage_scan_test (합 · 차례 · junction (위 폴더 고리 포함) 을 세지 않음 · 취소 · 화면 들어가기 · 큰 파일 · 돌려주는 경로),
  explorer_test 87 (길게 누르기 → 큰 파일 → 탐색기 그 자리).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 14:55:42 +09:00
RyuJongJin c440b688ea WIP 86 보충 (관리자 · 15): 덮어쓰기에도 받는 쪽이 더 새것이면 그대로 · Windows 에서 쓸 수 없는 이름은 미리 건너뜀 · 릴리스에 7-Zip 꼭 (검토 대기)
- [덮어쓰기] 를 골라도 설정 "받는 쪽이 더 새것이면 건너뛰기" (229, 처음 켜짐) 를 따른다: 이미 있는 파일이 압축 안의 것보다
  2초 넘게 새것이면 덮지 않는다 (ZIP 은 DOS 시각, 7z 는 목록의 Modified 로 견줘 목록 파일에서 뺌). 끝 알림 "n개는 더 새 파일이라 그대로 둠".
  확인 창에 [덮어쓰기] 를 고르면 "덮어쓴 파일은 되돌릴 수 없습니다" (휴지통에 남지 않음).
- 압축 안 이름이 이 기기에서 쓸 수 없으면 (Windows: CON · NUL · ? * " < > | · 끝 점 · 빈칸 - 78 의 nameProblem) 풀기 전에 걸러
  확인 창에 "풀 수 없는 이름 n개 (건너뜀)" - 나머지는 그대로 푼다 (풀다 실패하거나 7-Zip 이 다른 이름으로 바꾸지 않게).
  Android 는 지금처럼.
- 릴리스: make_zip.ps1 이 Lib\7zip\7z.exe · 7z.dll · License.txt 가 없으면 실패. CMake 는 없으면 경고 (개발 빌드는 그대로).
- (번역 파일에는 다음 커밋 87 의 글도 함께 들어 있다 - 쓰이지 않는 열쇠)
- 시험: archive_ops_test (쓸 수 없는 이름 · ZIP 과 실제 7z 의 받는 쪽이 더 새 파일).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 14:47:39 +09:00
RyuJongJin 219510fec0 WIP 86 압축: ZIP 만들기 · 풀기, 7z · RAR 풀기 (Windows - 7-Zip 25.01 동봉), 풀기 전 검사 + 품질 올리기 다듬기 정도 설정 (검토 대기)
86 (관리자 지시 · 승인):
- ZIP 만들기 (archive 4.3.0, MIT): 길게 누르기 [ZIP 으로 묶기] (표시한 것 모두 · 바깥 것만) - 이름 · 압축 정도
  (빠르게 1 · 보통 6 (처음 값) · 작게 9, 설정 zipLevel 로 기억) · 넣을 곳 (지금 폴더 · 다른 창). 링크 · junction 은 넣지 않음.
  .jjpart 에 쓰고 다 되면 이름 바꾸기 - 취소 · 실패면 만들다 만 ZIP 이 남지 않음. 같은 이름이면 "이름 (2).zip".
- 풀기: 길게 누르기 [압축 풀기] (ZIP · 7z · RAR), 7z · RAR 은 열면 풀기, 보기의 ZIP 화면 [풀기] 도 같은 흐름.
  풀 곳 (압축 옆 새 폴더 · 압축이 있는 폴더 · 다른 창), 같은 이름 (이름 바꾸기 · 건너뛰기 · 덮어쓰기 - 처음은 복사 설정대로), 진행 창 · 취소.
- 7z · RAR: 7-Zip 25.01 (7z.exe · 7z.dll) 을 실행 파일 옆 7zip\ 에 동봉 (tool/fetch_7zip.ps1 - 공식 MSI, SHA-256 고정,
  관리자 설치로 풀기만). RAR 은 풀기만 (unRAR 라이선스) - RAR 만들기 선택지 없음.
  Android 는 아직 (lib7zz.so 빌드는 마감 뒤로) - 막지 않고 "다른 앱으로 열기" 안내.
- 보안 (관리자 판단) - 셋 다 목록을 먼저 읽고 검사:
  · 밖으로 나가는 경로 (../ · 절대 경로 · 드라이브 · UNC · ':') 는 막고 확인 창 · 끝 알림에 (zip slip).
  · 압축 안의 심볼릭 링크 · junction 은 만들지 않고 건너뛰고 알림.
  · 풀린 크기가 대상의 빈 공간보다 크면 풀기 전에 알리고 묻는다 ([그래도 풀기]).
  · 비밀번호: 보이지 않는 칸으로 묻고, 7-Zip 에는 명령 줄이 아니라 표준 입력으로만 (작업 기록 · app.log 에 없음).
    ZIP 은 가운데 목록에서 암호 표시를 읽어, 비밀번호 없이 암호 글자를 그대로 쓰지 않는다. 틀리면 다시 묻는다.
- 라이선스: assets/licenses/7ZIP_LICENSE.txt (원문 - LGPL 2.1+ · BSD 3/2-clause · unRAR 제한), 라이선스 화면 (7-Zip · LGPL),
  THIRD_PARTY_NOTICES (판 · 소스 7z2501-src.7z · RAR 은 만들지 않음), 설치 폴더 7zip\ 에 License.txt · LGPL-2.1.txt.
- 내 판단: 진행은 탐색기 진행 패널이 아니라 진행 창 (취소) - 진행 패널은 복사 · 이동 (TransferJob) 전용이라.
보충 (관리자 지시): [품질 올리기] 다듬기 정도 설정 - 약하게 0.15 / 보통 0.25 (처음 값) / 강하게 0.4. fetch 스크립트에 받은 주소 · 판 · 날짜.
- 시험: archive_ops_test (막는 이름 · 계획 · ZIP 만들기 · 풀기 · 같은 이름 · zip slip · 비밀번호 · 취소, 실제 7-Zip 목록 · 풀기 ·
  표준 입력 비밀번호 · 머리 암호 · 틀린 비밀번호), archive_ui_test (확인 창 · 취소 · 다른 앱 안내 · 묶기), licenses_test (7-Zip),
  ai_quality_test (다듬기 정도).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 14:38:26 +09:00
RyuJongJin eee38aa2fd WIP AI 해상도 올리기: 배율 "1배 (선명하게)" · 보기 화면 [품질 올리기] (그림 → 그림 약하게 + 해상도 올리기, 처음 숨김) (검토 대기)
관리자 판단 (10/17): 답이 없는 사용자 질문이라 둘 다 넣고 기본 꺼짐.
(a) 환경 설정 > AI 해상도 올리기 > 배율에 "1배 (선명하게)" - 크기는 그대로, 모델로 선명하게만 (4배 결과를 원본 크기로).
    처음 값은 지금 그대로 2배. 이름은 "이름_x1". 확인 창 글도 "크기는 그대로 두고 선명하게".
(b) 보기 화면 [품질 올리기 (이 장)] - 설정 "품질 올리기 단추 보이기" (처음 값 끔) 를 켰을 때만.
    1/2 AI 그림 (그림 → 그림, 바꾸는 정도 0.25 · 원본 비율 · 긴 쪽 1024 까지 · 64 배수) 으로 다듬고
    2/2 해상도 올리기 (설정의 배율 - 원본 크기 기준). 새 파일 "이름_q" (덮어쓰지 않음, 원본 그대로).
    AI 그림 모델이 없으면 "환경 설정 > AI 그림에서 받으라" 는 안내. 진행 창 · 취소, 작업 (AiJobs) 으로 작업 알림에.
  - 내 판단: 바꾸는 정도 0.25 · 다듬기 글 (high quality, detailed …) 은 고정 (설정 없음).
- 시험: ai_quality_test (설정 · 1배 크기 · "_q" 이름 · 그림 → 그림 크기 · 모델 없음 안내).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 14:05:26 +09:00
RyuJongJin 863b5e2ea0 WIP 82 보충 (15 지적): 같은 이름을 덮어쓴 파일은 "덮어쓴 파일 n개는 되돌리지 않습니다" (폴더라고 하지 않게) + 78 시험 흔들림 (검토 대기)
- 끌어 놓기 이동에서 같은 이름을 덮어쓴 파일이 "합친 폴더 n개는 무엇을 옮겼는지 몰라…" 로 나왔다. 파일이면 따로 센다.
  되돌리지 않는 까닭: 원래 파일은 이미 덮어써져 없고, 되돌리면 대상에 아무것도 남지 않는다. 되돌릴 것이 하나도 없으면
  [되돌리기] 알림을 띄우지 않고 끝난 알림 ([폴더 열기]) 그대로.
- 78 시험: 알림은 목록을 다시 읽은 뒤에 뜨므로 파일이 보일 때가 아니라 알림까지 기다린다 (전체 시험 중 한 번 흔들림).
- 시험: explorer_test 82 (새 파일 하나 + 덮어쓴 파일 하나 → "덮어쓴 파일 1개", "합친 폴더" 없음).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 13:50:22 +09:00
RyuJongJin 53a1b47a2c WIP 85 파일 탐색기 진행 패널 숨기기 · 작은 표시 · Android 알림 진행률 · 끝나면 [폴더 열기] (검토 대기)
- 관리자 지시 (F14): 복사 진행 패널을 숨길 수 있게 (Android 는 알림줄에 진행), 끝나면 [폴더 열기].
- 패널 오른쪽 위 [숨기기] → 오른쪽 아래 작은 표시 "복사 · 이동 n개 · 45%" (누르면 다시 펼침). 숨김은 설정으로 기억 (처음 값: 보임).
  관리자 판단: 숨겨도 묻는 창 (확인 · 같은 이름) 과 실패 알림은 늘 뜬다 (패널과 따로). 멈춘 (실패한) 것이 있으면 작은 표시가
  빨갛게 "복사 · 이동 멈춤 - 눌러서 보기".
- Android 작업 알림: "복사 · 이동 n개 · 45%" (CopyCenter.activeProgress), 다운로드가 없으면 진행 막대도 복사 · 이동 진행률.
- 끝난 알림에 [폴더 열기] - 앱 탐색기에서 넣은 폴더로 (그 폴더를 보는 창, 없으면 지금 창).
- 시험: keep_alive_test (복사 진행률 글 · 막대 · 다운로드가 먼저), explorer_test 85 ([폴더 열기] · [숨기기] → 작은 표시 → 다시).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 13:36:59 +09:00
RyuJongJin 58380e4ae0 WIP 81 보충 (15 지적 · 관리자 판단): 빠른 보기의 글 미리 보기가 CP949 · UTF-16 · UTF-8 BOM 도 읽게 (검토 대기)
- 예전: UTF-8 만 보고 깨진 글자가 있으면 "미리 볼 수 없음" - 한국어 .smi (대부분 CP949) · 메모장의 UTF-16 글이 안 보였다.
- 자막과 같은 글자 코드 판별 (detectCharset · decodeText) 을 그대로 써서 MKV 화면과 같게 판단한다
  (UTF-8 (BOM) · UTF-16 (BOM) · CP949 · Shift-JIS · GBK).
- 그래도 깨진 글자가 많거나 (2 + 글자 수의 1% 넘음) 글이 아니면 (NUL) "미리 볼 수 없음 (글자 코드를 알 수 없습니다)".
  64KB 끝에서 잘린 글자는 빼고 본다.
- 시험: CP949 .smi · UTF-16 (BOM) .srt · UTF-8 BOM .txt · 글이 아닌 파일.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 13:19:23 +09:00
RyuJongJin 39dab23138 WIP 82 파일 탐색기 창 사이 끌어 놓기: 마우스 8px 끌기 · 터치 ≡ 손잡이, 놓을 곳 강조, 묻기 (복사 · 이동), 이동 [되돌리기] (검토 대기)
- 관리자 지시 (F11) · 판단: 창 사이 끌어 놓기로 복사 · 이동 (태블릿 · PC). 미리 보기 · 확인 · 되돌리기.
- 끌기: PC 마우스는 줄을 8px 넘게 움직였을 때만 (한 번 누르기 = 고르기 · 두 번 = 열기는 그대로).
  터치는 선택 모드에서 표시한 줄의 ≡ 손잡이 (길게 누르기 메뉴는 그대로). 누른 줄이 표시한 것이면 표시한 것 모두 (바깥 것만).
- 놓기: 다른 창의 폴더 줄 = 그 폴더 안, 창의 빈 곳 = 그 창의 지금 폴더. 놓을 수 있으면 강조, 못 놓는 곳 (같은 창 · 자기 안 ·
  원본 폴더 자신) 은 빨간 테두리이고 놓아도 아무 일 없음. WebDAV 창도 지금의 복사 · 이동으로.
- 설정 "끌어 놓기 기본": 묻기 (처음 값) / 복사 / 이동. 묻기 창은 [복사] 가 처음 고름 (Enter) · [이동] · [취소].
  어느 쪽이든 지금의 복사 · 이동 확인 창 (같은 이름 등) · 진행 패널을 그대로 탄다.
- 이동만 끝난 알림에 [되돌리기] (10초): 실제로 옮긴 것만 원래 자리로 (원래 폴더마다 지금의 이동 - 같은 이름이면 지금의 같은 이름 창).
  대상에 새로 생긴 항목은 통째로, 이미 있던 폴더에 합친 것은 앱이 옮긴 파일만 (TransferJob.movedFiles) -
  그 폴더 전체를 옮기지 않는다. robocopy 로 합친 폴더는 무엇을 옮겼는지 몰라 되돌리지 않고 알린다. 복사 되돌리기는 없음.
- 내 판단: 끝난 알림 (n개 옮김) 은 [되돌리기] 알림으로 바로 바꾼다 (진행 막대가 내려가기를 기다리지 않게).
- 시험: explorer_test 82 (놓는 곳 규칙, 4px 는 누르기, 같은 창 · 묻기 [취소] 는 아무 일 없음,
  이동 → 되돌리기 - 합친 폴더의 원래 파일은 그대로 · 옮긴 파일만 돌아옴).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 13:12:04 +09:00
RyuJongJin b1f20914a0 WIP 81 파일 탐색기 빠른 보기: Space (TC 는 F3) · 길게 누르기 [미리 보기] - 동영상 썸네일 · 길이 · 코덱, 그림, 글 앞 64KB (검토 대기)
- 관리자 지시 (F10): 미리 보기 창 / PC 에서 Space 로 빠른 보기 (썸네일 · 길이 · 코덱).
  관리자 판단: 띄우는 창 (옆에 붙는 칸은 넓은 화면용으로 나중에 따로).
- 여는 곳: Windows 탐색기 · X-plore 모양은 Space (빠른 필터가 닫혀 있을 때만 - 칸에 치는 중이면 빈칸), TC 모양은 F3 (Space 는 표시 그대로),
  길게 누르기 [미리 보기] (파일).
- 동영상 · 음악: 큰 썸네일 (가로 640, jj_thumbs 에 따로 기억) · 길이 · 영상 코덱 · 해상도 · 소리 (코덱 · 언어) · 자막 트랙.
  ffprobe 는 기다리는 동안 "정보를 읽는 중…", 20초 넘으면 "읽지 못했습니다" (창은 멈추지 않음).
- 그림: 그림 그대로. 글 파일 (txt · srt · ass · smi · log · json …): 앞 64KB, UTF-8 이 아니면 "미리 볼 수 없음".
- WebDAV: 썸네일 · ffprobe 없이 이름 · 크기 · 날짜만 (비밀번호를 명령 줄에 넣지 않게 - 관리자 판단).
- ← → (↑ ↓) 로 같은 폴더의 앞 · 다음 (지금 목록 차례 - 필터 · 정렬 반영), Space · Esc 로 닫기, Enter · [열기 · 재생].
- 시험: quick_look_test (글 앞부분 · CP949 · 64KB 경계, ← → · 열기 · Space 닫기), explorer_test 81 (Space · 필터 중 빈칸 · TC F3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 12:50:14 +09:00
RyuJongJin 60336d342d WIP 83 보충: 스타일 설명의 단축키 줄은 PC 에서만 (15 지적 · 194 와 같게) (검토 대기)
- 키보드가 없는 폰 · 태블릿에서는 쓸모없는 긴 글이었다. Windows (desk) 에서만 보인다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 12:35:15 +09:00
RyuJongJin a780139eeb WIP P0 파일 탐색기: 글자 칸에 치는 중에는 파일 단축키가 키를 가로채지 않게 (15 지적 · 관리자 P0) (검토 대기)
- 예전: 화면의 CallbackShortcuts 가 글자 칸 (빠른 필터 등) 보다 먼저 키를 받아, 칸에서 Delete 를 누르면 파일 지우기 창이 뜨고
  Ctrl+A · C · X · V · Space · F8 · Backspace 도 파일 동작으로 쓰였다 (Ctrl+V 는 파일을 지금 폴더에 붙여넣을 수 있었다).
  Delete · F2 · Backspace 는 83 전부터 있던 것.
- 이제 단축키는 Focus.onKeyEvent 로 받아, 글자 칸에 포커스가 있으면 넘긴다 (칸의 기본 동작). 모든 모양 · Rsync 화면 공통.
  Esc 는 지금처럼 필터 칸이 받아 필터를 닫는다.
- 찾기 · 이름 바꾸기 · 경로 입력은 창 (다른 경로) 이라 이 단축키 아래에 있지 않다.
- 시험: explorer_test P0 (windows · xplore · totalcmd 각각 - 필터 칸에서 Ctrl+A 는 글 전체 선택, Ctrl+C · V · Delete · Space · F8 ·
  Backspace 가 파일을 표시 · 담기 · 지우기 하지 않고 칸이 그대로, Esc 로 닫힘).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 12:34:15 +09:00
RyuJongJin 5411558779 WIP 83 파일 탐색기 스타일별 단축키: Total Commander F5~F8 · Insert/Space 표시, Windows 탐색기 Ctrl+C · X · V · A (검토 대기)
- 관리자 지시 (F12): 스타일에 맞는 단축키.
- Total Commander 모양: F5 복사 · F6 이동 · F7 새 폴더 · F8 지우기 · Insert (표시하고 다음 줄로) · Space (표시) · Ctrl+R 새로 고침.
  Space 는 이 모양에서 빠른 필터를 열지 않는다 (필터가 열려 있으면 그대로 글자).
- Windows 탐색기 · X-plore 모양: Ctrl+C (담기) · Ctrl+X (잘라내기) · Ctrl+V (지금 폴더에 붙여넣기) · Ctrl+A (지금 폴더 모두 표시) · F5 새로 고침 (예전과 같음).
- 모든 모양 공통 (예전과 같음): Delete · Shift+Delete · F2 · Esc · Ctrl+F · Backspace · Alt+← → · Tab.
- Rsync 화면은 스타일 단축키를 쓰지 않는다 (F5 새로 고침 그대로).
- 내 판단: TC 모양에서는 F5 가 복사라 새로 고침을 Ctrl+R 로 (Total Commander 와 같게).
- 환경 설정 > 파일 탐색기 > 스타일 설명에 단축키를 적었다.
- 시험: explorer_test 83 (TC: Insert · Space 표시 · Space 가 필터를 열지 않음 · F5 복사 창 · F7 새 폴더 / Windows: Ctrl+A · Ctrl+C).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 12:17:04 +09:00
RyuJongJin 5007d30afa WIP 80 보충 (15 지적 · 관리자 판단 ① ②): 폴더 크기에서 링크 · junction 은 따라가지 않음 · 화면에서 사라진 자동 계산은 멈춤 (검토 대기)
① 링크 · junction 을 따라가 세던 것 (같은 것을 여러 번 세어 크게 나오고, 위 폴더를 가리키는 고리면 끝나지 않을 수 있었다 -
   실제 예: wt_*\third_party (junction) · .plugin_symlinks):
  - 크기를 셀 때 로컬 폴더는 list(followLinks: false) 로 직접 읽고, 심볼릭 링크 · junction 은 0 으로 세고 수만 센다.
    "1.2GB · 링크 3개 제외" 로 보인다 (214 의 링크 처리와 같은 판단).
  - 안전장치: 이미 센 폴더 (실제 경로) 는 다시 세지 않는다.
② 다른 폴더로 가도 기다리던 계산이 끝까지 돌던 것:
  - 화면을 위해 걸어 둔 자동 계산은 그 폴더가 어느 창에도 보이지 않으면 대기 줄에서 빼고, 세는 중이면 멈춘다 (결과는 남기지 않음).
  - 길게 누르기 [폴더 크기 계산] 으로 직접 시킨 것만 끝까지 - 아래 알림 [취소] · 같은 메뉴 "폴더 크기 계산 멈추기".
  - WebDAV 는 자동으로 하지 않는다. 직접 시키면 "서버에서 안의 것을 모두 읽어 오래 걸릴 수 있습니다" 를 알린다 (관리자 판단).
- 시험: folder_size_test (Windows 에 실제 junction · 심볼릭 링크 · 위 폴더 고리 junction, 화면이 바뀌면 자동 계산 멈춤 · 사용자가 시킨 것은 끝까지 · 취소).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 12:01:06 +09:00
RyuJongJin 1b988cd84c WIP 84 파일 탐색기 정렬: 열 머리를 누르면 그 기준 · 다시 누르면 거꾸로, 설정 "정렬을 폴더마다 기억" (검토 대기)
- 관리자 지시 (F13): 열 머리를 누르면 그 기준으로 정렬, 폴더마다 정렬을 기억 (선택).
- Windows 탐색기 · Total Commander 모양의 열 머리 (이름 · 날짜 · 유형/확장자 · 크기) 를 누르면 그 기준 (오름차순),
  같은 열을 다시 누르면 거꾸로. 지금 정렬 열은 강조색 + ▲ ▼. (X-plore 모양은 열이 없어 예전처럼 [정렬 기준])
- 설정 "정렬을 폴더마다 기억" (처음: 끔 - 예전처럼 모든 폴더가 같은 정렬). 켜면 열 머리 · [정렬 기준] 이 지금 창의 폴더에만 쓰고
  (정렬 창에 "이 폴더에만: …"), 기억하지 않은 폴더는 전체 정렬. 300개까지 (오래된 것부터 지움). 틀린 값은 비움.
- 80 의 자동 폴더 크기 · 크기가 나온 뒤 다시 줄 세우기도 그 폴더의 정렬을 따른다.
- 시험: explorer_test 84 (열 머리 · 거꾸로 · ▼, 폴더마다 · 저장 · 틀린 값).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 11:53:38 +09:00
RyuJongJin ef1cb069c1 WIP 80 파일 탐색기 폴더 크기: 필요할 때 계산 · 기억, 크기순 정렬 + 79-a [그 자리로] 뒤에도 돌아가기 줄 (검토 대기)
80 (관리자 지시 F9): 폴더 크기를 목록에 표시하고 크기순으로 정렬 (필요할 때 계산하고 기억).
- FolderSizes: 안의 파일 크기 합, 한 번에 하나씩 (디스크 · NAS 를 몰아 읽지 않게), 이번 실행 동안 기억.
  읽지 못한 폴더가 있으면 "1.2GB+". 다시 읽는 폴더 (새로 고침 · 복사 · 이동 · 지우기) 는 그 폴더 · 안쪽 · 위 폴더 크기를 잊는다.
- 설정 "폴더 크기": 크기순 정렬일 때만 (처음 값) / 늘 계산 / 계산 안 함. 길게 누르기 [폴더 크기 계산] 은 늘 된다.
  - 내 판단: 자동 계산은 지금 보고 있는 폴더 바로 안의 폴더만 - 트리에 보이는 위 폴더들 (C:\ · 사용자 폴더 …) 까지 하면
    드라이브 전체를 읽느라 정작 보고 있는 폴더가 뒤로 밀렸다 (시험에서 발견).
- 보이는 곳: Windows 탐색기 모양은 크기 열, TC 모양은 <DIR> 자리, X-plore · 좁은 화면은 폴더 이름 아래. 계산 중 "…".
- 크기순 정렬은 아는 폴더 크기로 (모르는 폴더는 가장 작게, 폴더는 늘 위 - 예전 그대로). 크기가 나오면 다시 줄 세운다.
- 측정은 바깥 영역 (Zone.root) 에서 - 화면을 그리다 맡긴 계산이 그 영역에 묶이지 않게 (위젯 시험에서 읽기가 끝나지 않았다).
79-a (관리자 판단 10/17): [그 자리로] 로 나가도 [찾기 결과로 돌아가기] 줄을 남긴다.
- 시험: folder_size_test (합 · 기억 · 잊기 · "+" · 정렬), explorer_test 80 (크기순 자동 · 새로 고침 뒤 다시 · "안 함" + 길게 누르기), 79-a 그 자리로.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 11:33:07 +09:00
RyuJongJin 60d4db7583 WIP 79 보충 (15 지적 · 관리자 판단 a~d): 폴더와 안의 파일을 함께 골라도 한 번만 · 합계에 폴더 따로 · [찾기 결과로 돌아가기] · "지금까지 찾은 n개 모두" (검토 대기)
c (데이터) 찾기 결과에서 폴더와 그 안의 파일을 함께 고르면 안의 것은 빼고 바깥 것만 (outermostPaths) -
  안쪽 파일을 두 번 처리하거나 이동 뒤 "없음" 오류가 나고 확인 창 개수가 부풀 수 있었다.
  탐색기의 복사 · 이동 · 지우기 시작에서도 같은 정리를 한다 (탐색기 표시는 이미 정리돼 있어 동작은 같음).
b 아래 줄 합계: "파일 n개 · 크기 / 폴더 m개 (크기 미포함)". 지우기 확인 창에 "그중 폴더 m개 - 안의 파일 · 폴더도 모두 함께".
a 복사 · 이동 · 지우기 뒤 결과 화면은 닫힌 채로, 탐색기 위에 [찾기 결과로 돌아가기] 줄 (✕ 로 닫기).
  다시 찾지 않고 결과를 열며, 지운 것은 빼고 옮긴 것은 새 자리로 (고른 폴더와 함께 옮겨진 안쪽 것도).
  다음 찾기 · ✕ · 결과 화면을 그냥 닫으면 없어진다. 처음 찾기가 끝나기 전 결과였으면 그렇다고 적는다.
  - 내 판단: [그 자리로] (reveal) 로 나가면 돌아가기 줄을 남기지 않는다 (탐색이라서).
d 찾는 중 전체 고르기 단추 글: "지금까지 찾은 n개 모두", 다 찾으면 "모두".
- 시험: explorer_test 79-c 복사 · 이동 · 지우기 (한 번만 · 오류 없음 · 확인 창 개수 · 돌아가기), explorer_search_test (outermostPaths · 단추 글 · 합계).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 11:13:21 +09:00
RyuJongJin 9032e8c4d7 WIP 78 파일 탐색기 일괄 이름 바꾸기: 이름 틀 [N] · 번호 [C] · 찾아 바꾸기 · 대소문자, 미리 보기 · 겹침 검사, 실패하면 되돌림 · [되돌리기] (검토 대기)
- 관리자 지시 (F7): 번호 [C] · 찾아 바꾸기 · 대소문자, 미리 보기, 되돌리기 (예: "Show S01E01…").
  데이터를 바꾸는 기능이라 미리 보기 · 확인 · 되돌리기를 둔다.
- 여럿을 고르고 [이름 변경] (버튼 · F2 · 길게 누르기 아이콘 줄 "n개 이름 일괄 바꾸기") → 일괄 이름 바꾸기 창.
  하나면 예전 이름 변경 그대로.
  - 77 에서는 여럿일 때 [이름 변경] 이 꺼져 있었다 → 이제 일괄 창을 연다 (77 시험의 기대값을 바꿈).
- 규칙 (차례대로): 이름 틀 (확장자 뺀 이름, [N] 원래 이름 · [C] 번호 시작 · 간격 · 자릿수) → 찾아 바꾸기 (대소문자 무시 기본)
  → 대소문자 (그대로 · 모두 작게 · 모두 크게 · 단어 첫 글자만). 파일 확장자는 그대로 (대소문자 바꾸기만 따름).
- 미리 보기: 원래 → 새 이름, 문제 (쓸 수 없는 이름 · 고른 것끼리 같은 이름 · 고르지 않은 것과 같은 이름, 대소문자 무시)
  는 빨갛게 보이고 하나라도 있으면 [바꾸기] 를 막는다. 고른 것끼리 맞바꾸기 (a↔b) 는 된다.
- 번호는 목록에 보이는 차례대로.
- 바꾸기는 모두 임시 이름을 거쳐 두 단계로 (맞바꾸기 때문). 도중에 실패하면 이미 바꾼 것을 원래 이름으로 되돌리고
  창에 이유 · 되돌리지 못한 것을 보인다.
- 끝나면 아래 알림 "n개의 이름을 바꿨습니다" + [되돌리기] (10초).
- 내 판단: 규칙은 창을 열 때마다 처음 값 ([N] · 1 · 1 · 2자리) - 설정에 저장하지 않음.
- 시험: batch_rename_test (규칙 · 미리 보기 · 맞바꾸기 · 실패 되돌림 · 되돌리기 · 창), explorer_test 78 (고르기 → 바꾸기 → 되돌리기).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 11:07:48 +09:00
RyuJongJin e39068cc9f WIP MKV 화면 ②③ 보충 (15 확인 · 관리자 판단): [›] 뒤 바탕 · 폰 세로 빈 작업 기록은 한 줄 높이 (검토 대기)
② [›] · [‹] 를 짧은 흐림 (20) + 바탕색 칸 + 단추 바탕 (panelHigh) 위에 - 폭 412 에서 잘린 세 번째 버튼 글자가
   [›] 뒤로 비쳐 보였다 (관리자 지시).
③ 관리자 1차 판단: 폰 세로 (좁은 화면) 에서 작업 기록이 비었으면 칸을 안내 한 줄 높이 (40) 로,
   기록이 생기면 예전 높이 (140 까지). 정보는 숨기지 않고 빈 자리만 없앤다. 넓은 화면 · 인코딩 줄은 그대로.
- 시험: 비었을 때 40 → 기록이 생기면 140, 넓은 화면은 140.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 10:50:01 +09:00
RyuJongJin 31a06c74ed WIP 79 파일 탐색기 찾기 결과를 목록 화면으로: 크기 · 바뀐 날 · 종류 조건, 고르고 그대로 복사 · 이동 · 지우기, 2000개마다 [더 보기] (검토 대기)
- 관리자 지시 (F8): 찾기 결과를 목록으로 보여 그대로 복사 · 지우기 · 재생, 크기 · 날짜 · 확장자 조건
  ("1GB 넘는 30일 지난 영상"), 2000개에서 멈추면 "더 보기".
- 찾기 창: 이름 (비워도 됨, * ?) · 크기 이상 (MB/GB) · 바뀐 날 (아무 때 / N일 지남 / N일 안) · 종류
  (모두 · 동영상 · 음악 · 자막 · 그림 · 확장자 직접). 크기 · 날짜 · 종류를 넣으면 파일만 찾는다.
  마지막 조건은 이번 실행 동안 다음 찾기 창의 처음 값.
- 결과 화면 (예전 작은 창 _SearchDialog 를 바꿈): 경로 · 크기 · 바뀐 날, 누르면 파일은 열기 · 재생 (결과 화면 그대로),
  폴더는 그 자리로, 줄마다 [그 자리로]. 체크 · 길게 누르기로 고르면 아래 줄에 개수 · 합계 크기와
  [복사 → 다른 창] [이동 → 다른 창] [지우기] - 고른 것만, 탐색기와 같은 확인 창 · 진행 패널 · 휴지통 (154 · 155 · 65).
- 2000개마다 멈추고 [2000개 더 보기]. 딱 2000개면 멈췄다고 하지 않는다 (다음 것이 올 때만).
- searchFiles 에 accept (조건) - 이름 없이 조건만으로도 찾는다. 이름도 조건도 없으면 예전처럼 찾지 않음.
- 시험: explorer_search_test (조건 · accept · 더 보기 · 열기 · 고르기 · 폴더), explorer_test 79 (종류만으로 찾아 다른 창으로 복사).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 10:48:42 +09:00
RyuJongJin e658de6691 WIP MKV 화면 ① 보충: 넓은 화면에서 목록이 비었으면 [동영상 추가] 안내 그대로 (검토 대기)
- 8833c93 에서 넓은 화면은 고른 것이 없으면 늘 "고른 동영상이 없습니다" 를 보여, 빈 목록일 때도
  [동영상 추가] 안내가 사라졌다 (ui_test "동영상 추가 후 화면 표시" 가 잡음). 좁은 화면과 같게 나눈다.
- 시험: 빈 목록 안내를 412 · 1280 둘 다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 10:33:54 +09:00
RyuJongJin 8833c93bf8 WIP MKV 화면 (15 지적 ①②③): 고른 것 없음 안내 · 폰 세로 버튼 줄 [›] · 목록은 내용만큼 + 설정 "폰 세로 목록 크기" (검토 대기)
① 동영상이 있는데 고른 것이 없으면 빈 목록 안내 ("동영상 추가로 파일을 선택하세요") 대신
   "고른 동영상이 없습니다 · 목록에서 동영상을 누르면 여기에 자세히 보입니다" (넓은 · 좁은 화면 모두).
   첫 줄 자동 고르기는 하지 않음 (관리자 판단).
② 폰 세로 (폭 412) 위 버튼 줄이 화면보다 길면 끝에 흐림 · [›] (밀었으면 [‹]), 누르면 한 화면쯤 민다
   (새 위젯 ScrollMore). 예전에는 세 번째 버튼이 잘린 채 더 있다는 표시가 없었다 (버그).
③ 폰 세로 목록 높이: 화면 32% 고정 → 관리자 판단대로 목록은 내용만큼, 자세히 칸 최소 높이를 남기고
   남는 공간은 목록에. 설정 "폰 세로 목록 크기" 자동 (처음 값) / 작게 (25%) / 크게 (55%), 모르는 값은 자동.
   - 내 판단: 자동의 자세히 칸 최소 = 고른 동영상이 있으면 62% (261 · 266 의 자막 버튼 보호, 예전 68% 와 비슷),
     없으면 안내 자리 120.
   - 내 판단: 작업 기록 칸이 비었으면 "작업 기록이 아직 없습니다 …" 를 적는다 (✕ 만 있는 빈 칸으로 보였다, 높이는 그대로).
- 시험 mkv_compact_list_test (412 · 1280, 작게 < 크게 < 자동, [›] 누르기, 빈 기록 안내), 번역 en · ja · zh-Hans.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 10:24:00 +09:00
RyuJongJin a2cb535f1e WIP 263 다운로드: DNS 서버에 닿지 않아 실패하면 줄에 이유 · [시스템 DNS 로 바꾸기] (검토 대기)
- 관리자 지시 (42 가 찾던 것): DNS 강제 프록시를 거친 yt-dlp · aria2 는 "Tunnel connection failed" 만 남겨
  줄에는 "연결할 수 없습니다" 뿐이라 이유 · 할 일을 몰랐다.
- 실패한 그때 DNS 강제 + "닿지 않음" 상태이고 오류가 연결 · 프록시 실패이면 줄에 "DNS 서버 (…) 에 닿지 않아 받지 못했습니다".
  404 · 로그인 같은 다른 실패는 DNS 탓으로 보지 않는다.
- 아직 DNS 강제면 [시스템 DNS 로 바꾸기] (설정에 저장, 버튼은 사라짐). 다시 받기는 [다시 시도] 로 사용자가 (내 판단: 몰래 다시 받지 않음).
- 번역 en · ja · zh-Hans, 시험 download_error_test (판단 · 줄 · 버튼).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:55:14 +09:00
RyuJongJin f596ef7253 WIP 266 폰 세로 MKV 화면: DNS 닿지 않음 줄을 한 줄로 (글 줄임 · 길게 누르면 전체 · 버튼 같은 줄) - 세부 정보의 자막 버튼이 밀려나지 않게 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:36 +09:00
RyuJongJin 1c6b008332 WIP 77 길게 누르기 메뉴: 위 아이콘 줄 (복사 · 이동 · 이름 변경 · 삭제 · 공유), 여럿이면 "n개 항목" · 삭제도 표시한 것 모두, 경로 복사 · 즐겨찾기에 추가, Android 공유 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:34 +09:00
RyuJongJin 8228d04a6e WIP 264 · 265 이동 · 복사 끝: 알림에 "n개는 원본에 남음" · 펼쳐 둔 원본 · 대상 안쪽까지 다시 읽기 (없어진 폴더는 접음) (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:33 +09:00
RyuJongJin 92919aae93 WIP 262 MKV 끝나는 순간 줄 ■: 같은 자리에 오는 ⟳ 는 묶음이 끝날 때까지 안 눌림, 집계는 끝났을 때의 결과로 · 시작 못 한 것만 취소됨 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:32 +09:00
RyuJongJin 320025c5fa WIP 76 보충: 목록 줄에 항목 경로 키 - 줄 목록이 바뀔 때 누른 줄의 두 번 누르기 기다림이 다른 항목으로 넘어가지 않게 (setState during build) (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:31 +09:00
RyuJongJin 1eef4ff65f WIP 76 파일 탐색기 빠른 필터: 창 위 필터 버튼 · Ctrl+F · 글자 바로 치기, 지금 폴더 안을 이름으로 좁힘, 고르기는 보이는 것만, Esc 로 닫기 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:30 +09:00
RyuJongJin f9d3596bae WIP 261 폰 세로 MKV 세부 정보: 자막 버튼을 칩 바로 아래로 - 감지한 언어 줄 · 이동 버튼이 [AI 자막 만들기] 를 밀어내지 않게 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:28 +09:00
RyuJongJin 8937c17617 WIP 260 환경 설정 > 자막: 받은 AI 자막 모델 (Whisper · NLLB) 크기 · [지우기], 작업 중에는 못 지움 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:27 +09:00
RyuJongJin 99d446cea6 WIP 259 번역 모델 (NLLB 912MB) 은 번역이 실제로 필요할 때만 받기 - 자동 감지 + 한 언어면 감지한 원어가 다를 때 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:26 +09:00
RyuJongJin a5017965cb WIP 256 폰 가로 MKV 화면: 인코딩 줄은 한 줄 (설명 · 경고 앞), 작업 기록은 작게 - 목록이 한 줄만 보이던 것 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:20 +09:00
RyuJongJin cab577ec8a WIP 255 세로 폰 환경 설정: 묶음 바로가기를 한 줄로 (옆으로 밀기) (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:19 +09:00
RyuJongJin ed5a1407c1 WIP 다운로드 줄이 자동 추가로 빠질 때 이유 알림 · [보기] (931 관리자 판단) (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:18 +09:00
RyuJongJin 2d2f7055ba WIP 253 글자 크게 (1.6배) 해도 넘치지 않게: 탐색기 줄 높이 · 설정 고르기 상자 · 위 막대 · 인코딩 · 모니터링 · 언어 · 화면 전체 시험 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:49:12 +09:00
RyuJongJin 6a782b2fdb WIP 다음 판: 199 권한 앱 목록 안내 · 188 버튼 글 맞춤 · 206 이동 버튼 · 181 · 182 mp3 재생 · 184 직접 파일 일반 받기 · 185 [계속 받기] (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 09:48:44 +09:00
RyuJongJin 1be9f58248 폰 세로 MKV 위 막대 진행: "2/3 · 37%" 짧은 꼴 · 폭을 미리 잡아 [+ 동영상 추가] 를 가리지 않게
a4 의 934 기기 확인 · 관리자 지시 (10/12): 폰 세로에서 진행이 "37%" 만 보여 몇 번째인지 몰랐고, 동영상 추가 [+] 를
반쯤 가렸다. 위 막대는 작업이 시작될 때 재는데 그때는 진행률이 없어 글이 없다가, 나중에 글이 생기며 잰 폭보다 넓어졌다.
- 아이콘만 보이는 좁은 꼴에서 여러 개면 "n/전체 · %" · 폭은 늘 같게 (여러 개 72 · 하나 36).
- 여러 개를 만드는지가 바뀌면 위 막대를 다시 잰다.
- 시험: 폰 세로 411×800, 3개 만드는 중 진행률이 생긴 뒤에도 "n/3 · 37%" · [+] 의 보이는 부분과 겹치지 않음.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 08:15:38 +09:00
RyuJongJin 031e8d3f84 폰 세로 모니터링 버튼 줄 넘침 (257) · 지운 쌍의 "동기화 멈춤" 알림이 남던 것 (258)
a4 의 934 기기 확인 · 관리자 지시 (10/12, 버그 수정):
- 257: 폰 세로 모니터링 > lsync 카드의 버튼 줄이 화면 밖으로 넘쳐 [고치기] · [지우기] 를 누를 수 없었다 → Wrap 으로 줄 바꿈
  (복사 카드 버튼 줄도). 같은 폭 (411) 시험에서 함께 넘치던 곳도 고침: lsync 탭 위 "다시 켤 때 동기화" 줄,
  카드 머리의 방식 칩 (남는 폭만큼 · … · 전체는 마우스), 일정 글.
- 258: 멈춘 lsync 쌍을 지워도 작업 알림 "⚠ 동기화 멈춤 1개" 가 앱을 다시 켤 때까지 남았다 → 쌍 목록이 바뀌면
  지켜보지 않는 쌍 (지움 · 끔 · 멈춤) 의 멈춤 기록을 지운다.
- 시험: 411 폭에서 넘침 없음 · 버튼이 화면 안 (고치기 전에는 실패) · 지우면 멈춤 기록이 바로 사라짐.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 08:15:38 +09:00
RyuJongJin 4ad66dd5a1 통합: fix_mkv (c41954b: P0 MKV 다시 만들기 · 묶음 집계, 229 폴더 덮어쓰기) 를 합침
관리자 지시 (10/12, 마지막 후보). 겹친 곳 없이 자동으로 합쳐짐 (번역 json 3개만 양쪽이 고침 - 정렬 · 모양 그대로 확인).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 07:56:17 +09:00
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 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 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 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 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