Commit Graph

16 Commits (120d20fb8678307bc8258be3bfd4933f975bc6b4)

Author SHA1 Message Date
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 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 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 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 ba332f9f84 E10 · 50 보충: 로컬 폴더를 읽지 못하면 빈 폴더로 보이지 않게 ("읽을 수 없습니다 · 이유" 와 [다시 시도])
- listEntries 가 Directory.list 의 오류를 버려 권한 없는 폴더 · 빠진 USB · 없는 폴더가 빈 폴더로 보였다.
  하나도 읽지 못했으면 그 오류를 던지고, 일부를 읽은 뒤의 오류는 읽은 것까지 보여 준다
- 부르는 다른 곳: [폴더 재생] 은 이유 알림, [MKV 목록에 추가] 는 읽지 못한 폴더를 건너뛰고 알림, 그림 보기는 고른 그림만
- 시험: 빈 폴더 · 없는 폴더 · C:\System Volume Information (권한 없음) - 탐색기에 "이 폴더를 읽을 권한이 없습니다" 와 [다시 시도]

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:52:38 +09:00
RyuJongJin 1450b51316 묶음 3 Windows 확인 캡처 · 휴지통 시험 흔적 스스로 확인 · 꺼내는 드라이브가 비면 "비어 있음"
- integration_test/windows_b3_shot_test: 165 · 48 · 154 · 52 · 148 · 144 를 실제 화면으로 눌러 PNG (JJ_SHOT_DIR)
- 휴지통을 건드리는 시험은 끝에 사용자 휴지통 전체에서 시험 폴더 아래 (하위 포함) 가 원래 위치인 항목이 0 인지 확인
  (test/support/recycle_leftovers.dart)
- 165 보충: 카드 리더 · USB · CD (GetDriveType 2 · 5) 가 열리지 않으면 "연결 안 됨" 이 아니라 "비어 있음" (회색)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:55:29 +09:00
RyuJongJin 7d76af382d 165 탐색기 첫 열기 멈춤: 드라이브 목록은 GetLogicalDrives (열어 보지 않음) · 드라이브마다 비동기 확인 · 연결 안 됨 ⟳
- 예전: 드라이브 26개를 isDirectorySync 로 열어 봄 → 끊긴 · 느린 NAS 드라이브에서 화면이 멈춤 (이 PC 11,181ms → 2ms)
- 끊긴 드라이브도 숨기지 않고 탭에 "X: · 연결 안 됨 ⟳" - 누르면 다시 연결 (다시 확인), 안 되면 이유
- 네트워크 드라이브는 GetDriveTypeW 로 알아 네트워크 아이콘
- 지난 폴더는 비동기로 확인 (2초 넘으면 열어 보고, 못 읽으면 그 창에 이유)
- 시험: 응답 없는 드라이브가 있어도 첫 화면이 바로 뜬다 · 연결 안 됨 · 다시 연결

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 18:41:05 +09:00
RyuJongJin a878e3b1cc 48 같은 이름 충돌: 덮어쓰기 · 건너뛰기 · 이름 바꾸기 고르기 · 154 · 155 복사 · 이동 대상 규칙과 확인 창의 항목 이름
- 48: 앱이 직접 복사 · 이동할 때 받는 폴더에 같은 이름이 있으면 확인 창에서 고른다 (기본 이름 바꾸기 = 원래 파일 그대로).
  덮어쓰기는 새 파일을 .jjpart 에 다 쓴 뒤에만 옛 파일을 지움, 폴더는 합침. 같은 폴더 · 종류가 다르면 새 이름.
  건너뛰기는 그대로 두고 끝난 알림에 알림. 확인 창은 바로 뜨고 같은 이름은 창 안에서 찾음 (다 찾기 전엔 이름 바꾸기)
- 154 · 155: 확인 창 · 담기 알림에 항목 이름 (앞 3개 + 외 n개), 고른 것이 없으면 "옮길 · 복사할 항목을 고르세요",
  길게 누르기의 다른 창으로 복사 · 이동도 표시한 것 모두
- 시험: explorer_conflict_test · file_ops_test, explorer_webdav_test 는 시험 폴더 드라이브로 고정

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 18:41:05 +09:00
RyuJongJin 70056b0db3 보안 · 비밀번호 (124 · 127~132) · 쿠키 (53) · http 경고 (56) · 안내 고침 (116 · 125 · 126) · 시험 안정화
- 124: 최상 · 마스터 비밀번호 (솔트 PBKDF2-HMAC-SHA256, 안전 저장소에 해시만), 묻는 때 (안전 저장소),
  저장된 비밀번호를 쓰는 곳의 문 (WebDAV · OpenSubtitles · 재생 · 환경 설정), 최상으로 초기화 · 잊었을 때 초기화,
  틀리면 기다리기, 서버 지우기 전 쓰는 곳 알림, 실시간 동기화 폴더에 WebDAV 고르기
- 127: 서버 고치기 창은 마스터 뒤에 (저장된 비밀번호가 보이지 않게)
- 128: 마스터 창은 하나로 · 취소하면 배경 작업은 묻지 않고 "기다리는 중" 으로 표시
- 129: 묻는 때를 설정 파일이 아니라 안전 저장소에 (값이 없거나 틀리면 쓸 때 묻기)
- 130: Windows secrets.dat 를 쓰기 · 지우기 전에 다시 읽어 다른 창의 값과 합침
- 131: 앱 안 브라우저 쿠키를 쓰지 않게 바꾸면 내보낸 쿠키 파일을 지움
- 132: 최상 비밀번호 [끄기] 가 넓은 화면에서 잘리지 않게
- 53: 쿠키 파일 안내 · 넘길 사이트 고르기 · 쿠키 · 방문 기록 지우기 · 범위 넓힘 알림
- 56: http:// WebDAV 경고 · 인증서 확인 끄기가 다른 재생에 남지 않게
- 116 · 125 · 126: 권한 안내 다시 · "2-1 / 3장" · 바뀐 기본 설정 창을 닫으면 바로 저장
- 시험판 데이터 폴더 (JJ_MKVMAKER_DATA, Windows) · 휴지통 판정을 $I 정보로 · 모니터링 시험 기다림

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:22:47 +09:00
RyuJongJin 597d853943 비밀번호 안전 저장 · 동기화 안전장치 · 휴지통 · 시작 메뉴 알림 · 보기 화면 (계속 보기 · 두 쪽 · 회전) · 탐색기 배치 등
- 40/54: WebDAV · OpenSubtitles 비밀번호를 안전 저장소 (Android Keystore · Windows DPAPI) 로
- 95~114: rsync 지우기 확인 · 미리 보기 · 좁은 화면 확인 창 · 실시간 동기화 멈춤 알림
- 99: 시작 메뉴 바로 가기 (AUMID) · jjmkvmaker:// · Windows 알림 꺼짐 안내
- 102: 질문을 설정으로 · 시스템 언어 따르기
- 113 · 117~120: 보기 화면 막대 · 계속 보기 · 두 쪽 나눠 보기 · 회전 · 반전 · 좁으면 ⋮ 메뉴
- 115 · 116: 자동 백업 복원 알림 · 권한 안내와 자동 다시 분석
- 118 · 122: 탐색기 좌우 ⇆ / 위아래 ⇅ 버튼 · 경로로 가면 새로 읽어 펼침

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 10:25:08 +09:00
RyuJongJin 8f779fa7e6 WebDAV: 파일 탐색기 · Rsync 화면 · lsync 에서 연결 · 복사 · 동기화
- 환경 설정 > 파일 탐색기 > WebDAV: 서버 추가 · 고치기 · 지우기 · 연결 확인 (기본 인증, 인증서 확인 안 함)
- 위쪽 "SD 카드" 옆 서버 탭 (없으면 "WebDAV" 탭 → 바로 추가), 경로 dav://서버/경로
- 목록 · 새 폴더 · 이름 변경 · 삭제 · 찾기 · 복사 · 이동 (같은 서버는 MOVE), 열기 · 재생은 임시로 받아서
- Rsync · lsync: 한쪽이 WebDAV 면 앱이 크기 · 시각 비교로 맞춤 (-u · --remove-source-files 따름)
- PROPFIND 에 Content-Length (chunked 면 일부 서버가 남은 본문을 다음 요청으로 오해)
- Android: http:// NAS 연결 허용 (usesCleartextTraffic)
- 화면에는 내부 id 대신 "☁ 서버 이름/경로"
- 시험: webdav_test (시험 서버) · explorer_webdav_test · real_dav_test (JJ_REAL_DAV 일 때 실제 서버)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:30:54 +09:00
RyuJongJin 1ac48354af rsync 원본 파일 지우기 (--remove-source-files) · 빈 폴더 정리 · lsync 최종 정리
- Rsync 화면의 한 방향 (좌 → 우 · 좌 ← 우): 확인 창에서 [원본 파일 지우기 (--remove-source-files)] 를 고를 수 있고,
  고르면 끝난 뒤 원본의 빈 폴더를 지움 (find 원본/ -type d -empty -delete) - 원본 폴더는 남김 / 지움 중 고르기.
  양쪽 (⇄) 에는 없음
- 모니터링 lsync 의 쌍마다 [최종 정리]: rsync -avHPOg --remove-source-files 원본/ 대상/ 뒤 빈 폴더 지우기,
  원본 폴더 남김 / 지움 고르기. 원본이 비므로 그 실시간 동기화는 끔 (지우기 포함이면 대상까지 비우지 않게),
  진행은 복사 · rsync 탭에 남음
- 기억한 작업에 원본 정리 (prune) 저장, 모니터링 카드에서 바꾸기 · 진행 막대에 "빈 폴더 N개 지움"
- 원본 정리를 고른 이동은 예전의 "비면 원본 폴더째 지우기" 대신 고른 대로
- Windows 실제 rsync 로 시험 (integration_test/rsync_page_test.dart)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 21:47:20 +09:00
RyuJongJin 9ce55bbb74 복사 · 이동 시작 전 확인: 없는 원본 · 없는 대상 · 폴더를 자기 안으로 · 같은 폴더로 이동
- 다른 곳에서 지워진 폴더 (탐색기 목록에는 남아 있던 것) 를 복사 · 이동하면 rsync 오류 대신 알리고 목록을 새로 고침
- 폴더를 자기 자신 (또는 그 안) 으로 복사 · 이동하는 것을 막음 (현재 방식만 막고 있었고 rsync 는 막지 않았음)
- 모니터링의 실행 · 재개도 같은 확인: 시작하지 않고 실패와 이유를 남김

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 14:08:53 +09:00
RyuJongJin 7308f8ce1b 파일 탐색기: 복사 · 이동 방법 (현재 방식 · rsync · robocopy), 속도 제한, 실시간 동기화, 아래 진행 막대
- 환경 설정 > 파일 탐색기: 파일 / 폴더 복사 방법, rsync · robocopy 옵션 (기본 -avPog · /E /COPY:DAT /DCOPY:T /R:2 /W:2,
  바꿀 수 있음), 여러 개를 고르면 항목마다 따로 (기본) / 한 번에, 속도 제한 KB/s (rsync --bwlimit · 현재 방식 앱 조절 · robocopy /IPG)
- rsync (Windows): 처음 쓸 때 MSYS2 공식 저장소에서 rsync 3.5.1 과 필요한 DLL 을 내려받기 (파일마다 SHA256 고정 검증),
  설정 폴더 rsync\ 에 둔다. 경로는 /cygdrive/c/... 로 바꿔 넘김. 또는 직접 지정 (Android 도 지정하면 사용)
- robocopy (Windows): 폴더마다 실행, 파일은 같은 폴더끼리, 출력에서 파일 수를 세어 진행 표시
- 실시간 동기화 (lsyncd 처럼): 원본 · 대상 폴더 쌍, Windows 는 폴더 감시로 바로, Android 는 30초마다, 방법 · 지우기 선택
- 복사 · 이동 진행: 아래에서 올라오는 막대 두 줄 (위: 전체 항목 중 · 아래: 지금 폴더의 파일 중), 끝나면 내려감
- 선택 모드의 ✔: 고르지 않은 것은 흐리게, 고른 것은 진하게
Android 태블릿 (Galaxy Tab S6 Lite) 에서 속도 제한 복사 · 진행 막대 확인. rsync 는 실제로 내려받아 시험 (JJ_NET_TESTS=1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 10:38:09 +09:00
RyuJongJin 99024d3c6e 파일 탐색기 (X-plore 참고): 두 창 트리 · 가운데 기능 버튼 · 창 배치 · 버튼 구성
- 위쪽 공통 버튼에 [파일 탐색기], 환경 설정 > 홈 화면에 "파일 탐색기" (앱을 켜면 바로)
- 두 창 (트리: 누르면 그 자리에서 펼치기 · 접기), 저장 장치 고르기 (Windows 드라이브 · Android 저장소)
- 동영상: 누르면 기본 동작 (내장 플레이어 또는 확장자별 재생 프로그램), 길게 누르기 · 오른쪽 클릭 메뉴
  (내장 플레이어로 재생 · 다른 앱으로 열기 · MKV 목록에 추가 · 이름 변경 · 복사 / 이동 · 삭제 · 정보)
- 썸네일 · 해상도 · 길이 (작업 중에는 썸네일을 만들지 않음), 그림 파일 미리 보기
- 가운데 버튼: 상위 폴더 · 새로 고침 · 재생 · MKV 목록에 추가 · 새 폴더 · 이름 변경 · 복사 · 이동 · 삭제 ·
  찾기 · 정렬 기준 · 숨은 항목 · 내역 · 창 배치 · 버튼 구성
- 창 배치: 두 창 / 한 창, 좌우 / 위아래 / 화면 모양 따라, 버튼 줄 두 창 사이 / 끝 / 숨김
- 버튼 구성: 보일 버튼 · 순서
- 다른 앱으로 열기: Windows "연결 프로그램" 창 · Android 앱 고르기 (FileProvider, SD 카드 포함)
- 여러 개 지울 때 확인 창에 이름 · 폴더를 보여 준다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 04:14:05 +09:00