Commit Graph

119 Commits (bdea662daaa439648fb5f229c9921b6eabfa1c4e)

Author SHA1 Message Date
RyuJongJin d83b0b5aef 설정 A: 일반 분야 (GeneralSettings) · 남은 키 정리 - toJson · fromJson 은 분야 목록만 돈다
- 일반: 즐겨찾기 · 저장 공간 정리 · 바뀐 기본값 알림 · 안쪽 → 바깥 · 비밀번호 기억 · 휴지통 · 모든 파일 안내 (allFilesHint2)
- imageExts 는 보기 화면 분야 (ReaderSettings) 로
- 표시 cookieScopeV2 → 다운로드, robocopyLinksV1 → 복사 분야로
- AppSettings 에 남은 것: 분야 목록 · 모르는 항목 보존 · 비밀 값 빼기 · 바뀐 기본값 알림 · 실행 중 값 (webViewDataDir)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 00:15:58 +09:00
RyuJongJin e828227693 설정 A: 재생 분야 (PlaybackSettings) - 동영상 열기 · 재생 목록 · 외부 플레이어 · 자막 크기 · 기본 자막 언어
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 00:12:48 +09:00
RyuJongJin 7fe2f0562f 설정 A: MKV · 자막 분야 (MkvSettings) - 저장 위치 · 이동 버튼 · 인코딩 · AI 자막 · OpenSubtitles 키를 분야로
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 00:11:13 +09:00
RyuJongJin c5aa8c657b 설정 A 분야 13: 화면 · 앱 모양 (DisplaySettings) - 키 13 · clampUiScale → DisplaySettings.clampScale
- ComponentManifest 의 자기 필드 components 는 그대로 (같은 이름이라 잘못 바뀐 것을 되돌림)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 00:06:30 +09:00
RyuJongJin 8d26d1af1e 설정 A 분야 12: 원격 서버 (RemoteSettings) - WebDAV · SFTP · SMB · FTP 목록 · 쉬는 시간 · WebDAV 외부 열기, 키 7
- 비밀 값 처리 (webdavServers 의 plainSecrets · 새 비밀 값은 평문으로 쓰지 않음) 그대로, 설명 주석도 함께 옮김

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:37:49 +09:00
RyuJongJin 828d978812 설정 A 분야 11: 탐색기 도구 (ExplorerToolSettings) - 시스템 폴더 · 루트 · Wi-Fi 공유 · ZIP 수준, 키 6
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:32:25 +09:00
RyuJongJin a35293271e 설정 A 분야 10: 암호 보관함 (VaultSettings) - 키 3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:30:18 +09:00
RyuJongJin 056ca186d9 설정 A 분야 9: 실행 · 종료 · 업데이트 (RunSettings) - 키 11 · backgroundRun 함께
- 도구 고침: setter 안의 '      closeAction = v' 줄을 선언으로 잡던 것 (타입은 글자로 시작 · 첫 선언만)
- 문서 주석 [AppSettings.run.x] → [RunSettings.x]

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:28:09 +09:00
RyuJongJin 7c6320165a 설정 A 분야 8: 웹 브라우저 (BrowserSettings) - 키 10
- 이미 옮긴 분야 뒤의 같은 이름 (s.tor.homeUrl) 은 바꾸지 않음
- browser_page 의 _CefView 자기 필드 cefWhenElevated 는 그대로 (같은 이름이라 잘못 바뀐 것을 되돌림)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:23:30 +09:00
RyuJongJin 6beeb22e43 설정 A 분야 7: 다운로드 · YouTube (DownloadSettings) - 키 12
- settings_group.dart 에 pickEnum (분야들의 읽기가 같이 씀 - fromJson 의 지역 함수 pick 대신)
- AppSettings.resolvedDownloadRoot 는 download.root 를 씀

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:20:58 +09:00
RyuJongJin 6054daf17a 설정 A 분야 6: 보기 화면 (ReaderSettings) - 키 9 · zipComicV2 표시
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:16:46 +09:00
RyuJongJin 506803ca65 설정 A 분야 5: AI 그림 · 해상도 올리기 (AiImageSettings) - 키 27 · aiServices 의 비밀 값 처리 (plainSecrets) 그대로
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:14:56 +09:00
RyuJongJin 059c8cba59 설정 A 분야 4: 복사 · 이동 · rsync · 실시간 동기화 (CopySettings) - 키 16 · 도우미 _method 함께
- 부르는 곳: s.copyTasks → s.copy.tasks 꼴 (RsyncRun 의 자기 필드 copySkipNewer 는 그대로 - 같은 이름이라 잘못 바뀐 것을 되돌림)
- 문서 주석 [AppSettings.x] → [CopySettings.x] 등

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:10:42 +09:00
RyuJongJin ee7524e1c7 설정 A 분야 3: Tor 브라우저 (TorBrowserSettings) - 키 5 · defaultTorHome → TorBrowserSettings.defaultHome
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 22:43:02 +09:00
RyuJongJin 1db0bda829 설정 A 분야 2: 네트워크 · DNS (NetworkSettings) - 키 4 · dnsConfig → network.config
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 22:29:42 +09:00
RyuJongJin 428fe99a82 설정 A 분야 1: 파일 탐색기 (ExplorerSettings) - 키 31 · 옮김 표시 3
- lib/app/settings/explorer_settings.dart: 탐색기 설정의 이름 · 처음 값 · 읽기 · 쓰기를 한 곳에
- AppSettings 는 explorer 분야를 갖고 분야 목록을 돌며 합치기만 (toJson · fromJson 에서 탐색기 키를 지움)
- 부르는 곳: s.explorerLayout → s.explorer.layout 꼴 (옛 이름 getter 없음), 저장 키 이름은 그대로
- 고침: fromJson 이 바뀐 기본값 알림 (_migrated) 을 분야를 읽기 전에 계산하던 것 - 분야를 먼저 읽음
- JSON 약속 시험: 알림 목록 (__migrated) · 옛 판 설정 경우를 더함, 기준은 옛 판 (db45f80) 에서 다시 만듦

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 22:08:55 +09:00
RyuJongJin 74da2e9a3e 설정 A 바탕: 기록 클래스 · settings_store 옮김 · 분야 틀 (SettingsGroup) · JSON 약속 시험
- lib/app/settings/records.dart: MoveTarget · FolderBookmark · LiveSyncPair · CopyTask
- lib/app/settings/settings_store.dart: SettingsStore · SecretIssue · SettingsLoadProblem (동작 그대로, M0 자리에 TODO)
- lib/app/settings/settings_group.dart: 분야 약속 - 자기 키를 읽고 쓴다
- AppSettings.toJson · fromJson 은 분야 목록 (groups) 을 돌며 합침 (지금은 빈 목록)
- settings.dart 는 옮긴 것을 그대로 내보냄 (부르는 쪽 그대로)
- 약속 시험: test/settings_json_contract_test.dart + fixtures (나누기 전 판의 출력, 합성 값 - 개인 자료 없음).
  사용자 설정 파일은 시험 폴더에 복사해 읽기만 (JJ_USER_SETTINGS_EXPECT 가 있을 때, 기준은 커밋하지 않음)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:10:09 +09:00
RyuJongJin 9ba39e5ed6 E3: 탐색기 처음 값을 선택 규칙대로 - TC 키 (Windows) · 표시는 선택 모드에서만 (V) · 다시 누르면 접기 · Android 한 번 = 선택 · 두 창
기준: wiki "파일 탐색기 선택 규칙 (사용자 지시 모음)" 규칙 1~7, 관리자 결정 3 · (a) (10/22)
- 규칙 1: Windows 는 스타일과 상관없이 Total Commander 키 (F3 보기 · F5 복사 · F6 이동 · F7 새 폴더 · F8 삭제 ·
  Space/Insert 고르기 · Ctrl+R 새로 고침) + Ctrl+C · X · V · A (explorer_keys · _tcKeys)
- 규칙 2: Android 도 한 번 = 선택 · 두 번 = 실행 (explorerClick 처음 값 'select')
- 규칙 3: 펼친 폴더를 다시 누르면 접기 처음 값 켬 (explorerRetapCollapse)
- 규칙 4: 줄 끝 표시는 선택 모드에서만 (explorerAlwaysMarks 처음 값 끔), 모양 V (Icons.check)
- 규칙 7 · 결정 3: 처음 배치 두 창 (폰 세로도), 'auto' 는 설정으로 남김
- 규칙 이전 판에서 저장된 예전 처음 값은 한 번 새 값으로 옮기고 업데이트 뒤 한 번 알림 (explorerRulesV1,
  알림 explorerMarksRule · explorerRetapRule · explorerClickRule · explorerLayoutRule) - 근거: 10/8 사용자 결정
  "예전 기본값을 옮긴 설정은 업데이트 뒤 한 번 알림". 그 뒤 사용자가 고른 값은 그대로
- 결정 (a): Windows 처음 스타일 = TC 와 저장된 'xplore' 묻기 (결정 1) 는 E6 (TC 모양) 과 함께 - 이번에는 넣지 않음
- 번역 9개 추가 · 안 쓰게 된 5개 뺌 (빠진 번역 0)

기대값을 바꾼 시험 (규칙 번호):
- 규칙 7: decisions_test 처음 배치 'dual' / settings_store_test 예전 'dual' 그대로 · 'explorerLayout' 알림 없음
- 규칙 4: explorer_test "두 창: …" 첫 화면에 표시 없음 / "선택 모드: …" V 모양 · 고름 여부 · [선택 끝] 뒤 표시 없음 ·
  설정 '늘 보이기' 를 켜면 보임 / explorer_text_scale_test 3개 (✔ 칸 자리) 는 사용자 설정 explorerAlwaysMarks 를 켜서
- 규칙 3: explorer_test 다시 눌러 접기 (처음 값 켬)
- 규칙 1: explorer_test 빠른 보기 F3 · 새로 고침 Ctrl+R (2곳, Windows 에서 F5 는 복사)
- 새 시험: settings_store_test "E3: 규칙 이전 판 처음 값 옮기기 · 알림 · 다시 고른 값 그대로"

확인: analyze 0, 전체 단위 2회 통과 1,299 · 건너뜀 17 · 실패 0. Selection 지문 그대로 (d438fac0)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 06:09:50 +09:00
RyuJongJin 797126b297 E2: 탐색기 화면은 Selection · ClickPolicy 만 부름 + X-plore 식 폴더 표시 설정 뺌 (결정 5)
- explorer_page: 누르기 (한 번 · 두 번 · 길게 · 오른쪽) 는 ClickPolicy.decide 로만, 표시 (고르기 · 범위 · 뒤집기 ·
  이름 바꾸기 · 지우기 따라가기 · Rsync 폴더 하나) 는 _Pane.sel (Selection) 로만. 화면 안의 규칙 코드 (_normalizeMarks ·
  _toggleMark 의 나누기 · _pick 의 하나만) 를 지움
- Selection 에 rename · removeWhere · has, ClickPolicy 에 사용자 설정 옵션 tapOpens (바로 열기) · retapCollapses
  (다시 누르면 접기) - 처음 값은 E3 에서 규칙대로
- 관리자 결정 5 (10/22): explorerFolderMarkRule ('xplore' 1 · 2 · 3번) 설정 · 설정 화면 항목 · 번역 4개 · 시험 1개를 뺌.
  사용자가 요청하지 않고 넣은 것이라 규칙 6 하나로 합침. 저장된 값은 읽지 않음
- test/explorer_test.dart "선택 모드: 파일 누르기…" 기대값을 바꿈: 하나를 뺀 폴더를 다시 누르면 예전 "전체 다시 고름" →
  관리자 결정 2 (10/22) "그 폴더와 안의 것 전체 취소" (규칙 6). 앱 동작이 결정대로 바뀐 것
- 약속 시험 25개 (지문 selection.dart d438fac0 · 시험 007d2a59) 같은 판 2회 통과
- 전체 단위 1,298 통과 · 건너뜀 17 · 실패 0 (third_party 연결 뒤), 점검 통합 시험 (1920 · 960 · 412) 2회 파일 결과가 1b31609 와 같음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 03:04:53 +09:00
RyuJongJin 6e1e191779 rc2: after_1020 62ba78d (15 - 73fcd97 비밀 열쇠 꼴 규칙 · 62ba78d 화면 · 색 보정 칩 · 자막 편집 F9 · F10 · ftp28) 다시 합침
충돌: lib/ui/subtitle_editor_page.dart - after_1020 의 F9 (좁으면 두 단, 단추 폭) 를 따르고, xplore_p3b 의 JjColors (테마 색) 쪽
const 빼기를 다시 적용 (_hdr 는 final, 분석기 기준 3곳)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:49:58 +09:00
RyuJongJin 73fcd97e90 비밀 열쇠 꼴 규칙: 새 종류는 겹치지 않는 새 머리글로 - 주석 · secretForms 목록 · 시험 (관리자 지시 10/21, 28 검토)
- SettingsStore.secretForms: 이 판이 만드는 비밀 열쇠의 꼴 목록 (os.key · os.user · os.password · dav.servers · dav.pw.<id> · sftp.pw|key|kp.<id> ·
  smb.pw.<id> · ftp.pw.<id> · ai.key.<id>). ownsSecret 은 이 목록으로 (54eb692 와 같은 뜻, 꼴의 . 은 글자 그대로)
- _secretsOf · ownsSecret 옆에 규칙 주석: 새 종류의 비밀 값은 지금 꼴과 앞부분이 겹치지 않는 새 머리글 (dav2. 등) - 겹치면 예전 판이 저장할 때 지움.
  새 꼴은 secretForms 에도 더함
- 시험 settings_store_test: 모든 종류를 채워 저장한 열쇠 11개가 저마다 꼴 하나에만 맞고 꼴마다 쓰임 · sec. 은 설정 꼴이 아님 ·
  dav.token.x · dav.pwx 는 꼴 밖. 관련 7파일 79개 통과

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:13:53 +09:00
RyuJongJin a907b3d25e rc2: after_1020 f67e1e3 (15) + xplore_p3b 4ebc4f2 (d3) - 10.20_001 다음 정식 판 후보 (시험판 · 태그 없음, 관리자 지시 10/21)
둘 다 1b31609 (v2026.10.20_001) 바탕. 충돌:
- assets/l10n en · ja · zh-Hans: 열쇠별 3방향 합치기 (양쪽이 같은 열쇠를 다르게 바꾼 것 0)
- lib/ui/home_page.dart 자막 줄: after_1020 의 새 배치 (좁으면 두 줄) 를 따르고, xplore_p3b 의 JjColors (테마 색) 쪽 const 빼기를 다시 적용
- lib/ui/settings_page.dart 설명 글: after_1020 의 테마 글자색 (bodyMedium · onSurfaceVariant - 밝은 화면에서도 맞음)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 17:47:59 +09:00
RyuJongJin 9324e4100f WIP X-plore 비교 5-1 ⑦ 밝은 테마 바탕: 색이 테마를 따름 · 설정 "화면 밝기" (시험) (검토 대기)
관리자 지시 10/21 (⑦ (가) 바탕): 처음 값은 어둡게 (예전 색 그대로), 설정 "화면 밝기: 어두운 화면 / 밝은 화면 / 기기 따라" 에 "시험" 표시.
- JjColors 를 두 벌 (JjPalette.dark = 예전 값 그대로 · light) 에서 고르는 값으로. 그래서 JjColors 를 쓰던 const 는 뺐다 (기계적으로, 62개 파일 294곳)
- 밝기를 바꾸면 테마와 함께 화면 조각 전체를 다시 그림 (상태는 그대로) - JjColors 를 직접 읽는 곳도 바로 새 색
- 기기 따라: 기기 밝기가 바뀌면 따라감. 모르는 값 · 없는 값은 어둡게
- 밝은 색은 바탕 · 칸 위 글 · 흐린 글 · 강조 · 경고 · 성공 대비 4.5:1 이상 (시험으로 확인)
- 화면별 맞추기 ((나): 탐색기 → 보기 → 설정 → 나머지) 는 다음 커밋들에서

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:08:47 +09:00
RyuJongJin ab735396ac WIP X-plore 비교 5-2 루트 폴더 보기 (su · 읽기 전용) (검토 대기)
관리자 지시 10/21: Shizuku 와 같은 틀 - 처음 끔 · 경고 두 번 (켤 때 · 앱을 켠 뒤 처음 열 때) · 주황 띠 · 고정 명령 셋 · 쓰기 길 없음.
- su 를 Dart 에서 바로 (Kotlin 없음), 경로는 shz://root/… - 시스템 폴더와 같은 읽기 전용 막기 (탐색기 · 클라이언트 둘 다)
- su 가 없거나 거절하면 안내만 (들어가지 않음). 있는지 볼 때는 허락 창을 띄우지 않고, 탭을 누를 때 su 앱의 허락 창
- 처음 여는 곳 "/" (관리자 3a 결정: 다른 앱의 개인 자료가 있는 /data 를 고르기 전에 펼치지 않음), 경고 창에 "다른 앱의 개인 자료도 보일 수 있습니다"
- 셸 경로는 절대 경로만 · 줄바꿈 · \0 거절 · 작은따옴표로 감쌈
- 설정의 켜기 경고 창을 시스템 폴더 · 루트가 같이 씀 (confirmReadOnlyView)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 13:34:21 +09:00
RyuJongJin 8f6fcdd9ed WIP X-plore 비교 5-2 시스템 폴더 보기 (Shizuku · 읽기 전용) (검토 대기)
관리자 결정 10/21: 1단계는 Shizuku 만 · 읽기 전용 · 처음 끔 · 경고 두 번 (켤 때 · 앱을 켠 뒤 처음 열 때).
- Shizuku API 13.1.5 (MIT - 3a 지시의 "Apache-2.0" 이 아니라 실제 라이선스는 MIT, 고지에 MIT 원문)
- shz://sys/<기기 경로>: 목록 · 정보 · 내용 읽기 (임시로 받아 읽고 지움) 만, 쓰기 · 지우기 · 옮기기 · 새 폴더는 막음
- 셸 명령은 고정된 셋 (목록 · stat · cat), 경로는 절대 경로만 · 따옴표 처리
- 탐색기 탭 [시스템 (읽기 전용)] → Android 폴더, 주황 띠, 꺼짐 · 허락 없음 안내
- 내 판단: Shizuku API 13 의 newProcess 는 숨겨져 있어 반사로 부름 (널리 쓰는 방법, 버전이 바뀌면 다시 확인)
- 내 판단: 시스템 폴더 오류 띠에는 [서버 설정 고치기] 를 두지 않음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 12:50:23 +09:00
RyuJongJin 286e6b4698 WIP 암호 보관함 1단계-2 화면 (관리자 결정 10/21): 환경 설정 > 보안 [암호 보관함] (처음 끔) · [보관함 열기] · [보관함 자동 잠금] (처음 1분). 만들기 창에 자리 · "다른 앱도 이 폴더의 암호화된 파일을 볼 수 있음 (내용 · 이름은 안 보임)" · "이 폴더를 지우면 보관함도 사라짐 · 폴더 복사 = 백업" · "잊으면 되살릴 수 없음" + 체크해야 [만들기]. 잠금 풀기는 "보관함을 여는 중… (비밀번호 확인)" (Isolate), 5번 틀리면 30초. 목록 (넣은 날 · 이름 정렬) · [보기] (임시로 풀어 앱 안 보기 화면 · 플레이어, 닫으면 지움) · [꺼내기] (고른 폴더, 같은 이름이면 (2)) · [이름 변경] · [보관함에서 지우기] (확인). 파일 탐색기 길게 누르기 [보관함에 넣기] (보관함을 켰을 때 · 이 기기의 파일만) - 넣기 창의 [원본 지우기 (이동)] 처음 끔, 켜면 다 넣은 뒤 탐색기의 지우기 (확인 · 휴지통). 가운데 버튼 [암호 보관함] (끝에). [마스터로도 열기] (처음 끔, 마스터가 있어야) - 보관함 열쇠 한 벌을 안전 저장소에, 열 때 마스터 확인 (SecretGate), 마스터를 초기화 (clearMaster) 하면 그 한 벌만 지움. 최상 초기화 창에 "보관함은 초기화되지 않음". 자리: Android Download/JJ_MKVMaker/vault · Windows 문서\JJ_MKVMaker\vault. 앱이 뒤로 간 뒤 정한 시간이 지나면 다시 잠금. 보관함 열쇠는 설정 파일 · 버전 보관본에 들어가지 않음 (안전 저장소에만, [마스터로도 열기] 일 때) · 시험 3개 (만들기 → 넣기 / 이동 → 잠금 → 틀린 비밀번호 → 열기 → 꺼내기 → 지우기, 5번 틀림 · 마스터로 열기 · 마스터 초기화, 탐색기 메뉴) (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 11:45:17 +09:00
RyuJongJin b5434683f4 WIP X-plore 비교 5-1 ⑥ 파일 탐색기 단축키 바꾸기 (관리자 지시 10/21): 환경 설정 > 파일 탐색기 [파일 탐색기 단축키] (키보드가 있는 PC 에서만) - 동작 19개마다 지금 키 · [바꾸기] (다음에 누른 키, Ctrl · Shift · Alt 함께) · [처음 값으로] · [단축키 없음] · [모두 처음 값으로]. 처음 키는 83 의 스타일별 키 그대로 (바꾼 것만 설정 explorerKeyOverrides 에), 바꾼 키는 모든 스타일에 쓰이고 다른 동작과 겹치면 그 동작은 그 키를 잃음 (창에서 먼저 알림), Esc 는 바꿀 수 없음, Rsync 화면은 늘 같은 키 · 시험 (처음 키 = 예전 키 · 바꾸기 · 겹침 · 저장 꼴 · 탐색기에서 바꾼 키 동작 · 설정 화면) (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 03:33:43 +09:00
RyuJongJin f92f801e7a WIP X-plore 비교 5-1 ② 원격 썸네일 (관리자 지시 10/21): WebDAV · SFTP · SMB · FTP 의 그림 (30MB 아래) · 동영상을 X-plore 모양 목록에서 작은 그림으로 - 환경 설정 > 파일 탐색기 "원격 썸네일" (Wi-Fi 에서만 (처음 값) · 늘 · 받지 않음) · 캐시 상한 (처음 200MB, 넘으면 오래 쓰지 않은 것부터) · [캐시 지우기]. 동시에 2개, 화면에서 사라진 줄은 시작하지 않음, 같은 것은 한 번. FFmpeg 가 이 기기 안 스트리밍 다리 (127.0.0.1, Range) 에서 일부만 읽음 - WebDAV 도 Range 로 (모르는 서버는 받으며 건너뜀), 비밀번호는 명령 줄에 넣지 않음. "Wi-Fi 에서만" = Android 의 데이터 요금제 판단 (isActiveNetworkMetered) - 내 판단: VPN 은 그 아래 망을 따름 (집 Wi-Fi 위의 Tailscale 은 받음, 모바일 데이터 위는 받지 않음), PC 는 늘 받음 · 시험 (동시 수 · 보이는 줄 · 상한 · 망 · Range 206/200 · 실제 FFmpeg 썸네일) (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 02:51:45 +09:00
RyuJongJin 81e5906f76 WIP X-plore 비교 5-1 ① 종류별 기본 정렬 (관리자 지시 10/21): 환경 설정 > 파일 탐색기 "종류별 기본 정렬" (처음 끔 - 지금 정렬 그대로). 켜면 파일 중 반 넘게가 사진 · 동영상인 폴더는 날짜 (새것 먼저 - 내 판단: 갤러리처럼), 음악 폴더는 이름, 그 밖은 전체 정렬. 그 폴더에서 정렬을 바꾸면 그 폴더만 기억 (전체 정렬을 바꾸면 눌러도 안 바뀐 것처럼 보이므로) · 켜고 끄면 읽어 둔 목록을 다시 줄 세움 · 시험 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 02:32:22 +09:00
RyuJongJin 54eb692001 보통 저장은 이 판이 만드는 꼴의 비밀 열쇠만 지운다 - 같은 머리글의 모르는 꼴 (새 판의 dav.token.x 등) 은 남김 (관리자 지시 10/21, 15 알림, 데이터)
- 틈: _writeSecrets 가 머리글 (os. · dav. · ai. · sftp. · smb. · ftp.) 만 보고 지금 설정에 없는 열쇠를 지웠다. 새 판이 같은 머리글로
  새 종류의 열쇠를 쓰면 예전 판으로 되돌려 저장할 때 사용자 비밀번호를 잃을 수 있었다 (40 의 비밀 값 쪽)
- SettingsStore.ownsSecret 을 정확한 꼴로: os.key · os.user · os.password · dav.servers ·
  dav.pw.<id> · sftp.pw|key|kp.<id> · smb.pw.<id> · ftp.pw.<id> · ai.key.<id> ([_secretsOf] 가 만드는 것과 같음).
  지우는 것은 이 꼴 중 그 서버 · 항목이 설정에서 없어지거나 비운 것만
- 초기화의 [저장된 실제 비밀번호 · API 키] (clearForeignSecrets) 는 그대로 sec. 밖을 모두 지움
- 시험 settings_store_test: 모르는 꼴 (dav.token.d1 · sftp.cert.s1 · nfs.pw.n1) 은 보통 저장 · 다시 켜 저장 뒤에도 남음,
  서버 s1 을 지우면 s1 의 pw · key · kp 만 없어지고 s2 · 모르는 꼴 · sec. 은 그대로, clearForeignSecrets 는 3개 지우고 sec. 만 남김.
  관련 9파일 81개 통과

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 01:09:18 +09:00
RyuJongJin 27259af83c 초기화 [앱 설정 전체] 는 이 판이 모르는 설정 키도 지움 · 다른 판의 비밀 값은 [저장된 실제 비밀번호 · API 키] 를 골랐을 때만 (관리자 판단 10/21)
- 까닭 (3a): 사용자가 직접 "전체" 를 골랐고, 새 판으로 돌아갔을 때 예전 값이 되살아나면 더 헷갈린다.
  모르는 키를 남기는 규칙 (40) 은 보통 저장 때만 - resetAllSettings 는 AppSettings()..extra = {} 로 (뜻을 드러냄)
- 안전 저장소: 이 판이 맡지 않는 열쇠 (os. · dav. · ai. · sftp. · smb. · ftp. · sec. 밖 = 다른 판이 쓴 것) 는
  [저장된 실제 비밀번호 · API 키] 를 골랐을 때만 지움 (SettingsStore.clearForeignSecrets, clearStoredSecrets 끝에서). 마스터 · 최상 (sec.) 은 남김
- 초기화 창 설명에 한 줄씩: "다른 판에서 넣은 비밀번호 · 키도 지웁니다." · "다른 판에서 만든 설정도 지웁니다." (en · ja · zh, 새 줄로)
- 시험: master_lock_test - 모르는 키 · 다른 판 열쇠가 있는 설정 → 보통 저장은 남김 → 전체 초기화는 키 없음 · 열쇠는 남음 →
  저장된 비밀번호 지우기는 열쇠도 지움 · sec. 남김. 초기화 창 캡처 다시 (ko · en · ja × 412 · 960, 넘침 없음)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 01:00:47 +09:00
RyuJongJin ba968cbed9 WIP X-plore 비교 40 (관리자 지시 10/20): 파일 탐색기 목록 글자 크기 (80~150%, 처음 100%) · 줄 간격 (좁게 0.8 · 보통 · 넓게 1.25, 처음 보통) - 환경 설정 > 파일 탐색기, 세 스타일 모두, 앱 화면 크기 · 기기 글자 크기와 곱함 (처음 값은 예전 줄 높이 그대로) · 버그 고침: 412 폭 "폴더 + 파일 목록" 의 좁은 트리 (77px) 에서 X-plore · TC 줄이 넘치던 것 (100% 에서도) - 아이콘 칸을 남은 폭만큼 · 시험 (세 스타일 × 100/150 넓게/기기 1.3×120 좁게/80) · 캡처 시험 integration_test/explorer_text_shot_test.dart (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 22:45:24 +09:00
RyuJongJin fc0f6316f9 WIP X-plore 맞추기 (관리자 지시 10/20): 숨기기 - [목록에서 숨기기] 전에 무엇이 바뀌는지 확인 창 (목록에서만 빠지고 파일 · 다른 앱은 그대로, 다시 보는 곳) · [다음부터 묻지 않기] (환경 설정 > 파일 탐색기 "목록에서 숨기기 전에 묻기", 처음 켬) · 폴더 길게 누르기 [갤러리 · 음악 앱에서 숨기기 (.nomedia)] / [다시 보이기 (.nomedia 지우기)] (Android, 확인 창 뒤 빈 .nomedia 만 만들고 지움 - 안의 파일 그대로) · 시험 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 21:43:51 +09:00
RyuJongJin ed24463192 WIP X-plore 맞추기 (관리자 지시 10/20): 보기 화면 볼륨 키로 넘기기 (아래 = 다음 장, 위 = 이전 장, Android) - 처음 끔 (환경 설정 > 보기), 켰을 때만 보기 화면에서 가로채고 (처리한 키는 시스템 볼륨을 바꾸지 않음) 동영상 · 다른 화면은 그대로 · 시험 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 21:29:55 +09:00
RyuJongJin 99de4f4bc9 WIP X-plore 맞추기 (관리자 지시 10/20): 그림 보기 아래 갤러리 줄 - 썸네일 줄, 누르면 그 장으로, 지금 장은 테두리 · 장이 바뀌면 따라감 · 그림 원본 (폴더 · ZIP) 만 · 처음 끔 (위 막대 버튼 · 환경 설정 > 보기에서 켬) · 시험 (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 21:27:52 +09:00
RyuJongJin 7f2263bbb9 원격 서버가 멈추면 정한 시간 (처음 60초) 뒤 실패 - FTP · SFTP · SMB · WebDAV 받기 · 올리기 · 명령 (검토 대기)
관리자 판단 (10/20): 서버가 중간에 멈추면 복사 · 동기화가 영원히 멈추던 것 (15 가 FTP 에서 찾음 - 명령의 답에만 시간 제한).
- lib/core/remote_idle.dart: idleRead (조각 사이) · idleWrite (보내는 쪽이 한 조각도 더 가져가지 않거나 다 보낸 뒤 답이 없음) ·
  idleCall (요청 하나). 넘으면 그 연결을 끊고 RemoteIdleTimeout "서버가 답하지 않습니다 (n초)".
- FTP: 자료 연결 받기 (await for) · 올리기 (addStream). SFTP: 파일 읽기 · 쓰기와 모든 명령 (목록 · 열기 · 닫기 · 지우기 등) -
  멈추면 그 연결을 닫고 다음에 다시 연다. SMB: 조각 읽기 · 쓰기 채널 호출. WebDAV: 받기 · 올리기와 모든 요청의 답 (머리 · 몸).
- 올리다 실패하면 서버의 받다 만 .jjpart 지우기도 정한 시간까지만 (못 지우면 다음 정리 71).
- 설정 "원격 서버 응답 기다리기" (환경 설정 > 파일 탐색기): 30 · 60 (처음) · 120 · 300초, 그 밖의 값은 60. 번역 en · ja · zh.
- 버그 수정 (멈추는 서버 시험으로 찾음): 원격에서 로컬로 받다 실패하면 임시 파일을 닫고 지운 뒤 finally 에서 한 번 더 닫다가
  난 "File closed" 가 진짜 이유를 덮어썼다 (vWrite) - 이제 원래 이유 그대로.
시험 remote_idle_test: 멈추는 시험 서버로 정한 시간 (시험은 1초) 뒤 실패 - FTP (Dart 로 만든 서버: 보내다 멈춤 · 받다 멈춤,
로컬에 받다 만 파일 없음), WebDAV (머리 없음 · 몸 멈춤 · 받기 멈춤 · .jjpart 지우기 부탁), SFTP (paramiko + 멈추는 중계: 받는 중 ·
열기 · 올리는 중), 도우미 · 설정. smb_test: 가짜 채널이 답하지 않음 (열린 것은 닫음).
캡처 windows_remote_idle_shot_test (ko · en · ja × 412 · 960, 넘침 0) → release\test\shots_remote_idle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 14:46:42 +09:00
RyuJongJin 6e646b60c1 next8: + a8bc585 (실시간 동기화: 옵션이 바뀌어 지울 것이 늘면 다시 묻기) - 시험판 980
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 12:30:18 +09:00
RyuJongJin a8bc585b1a 실시간 동기화: 확인한 쌍도 rsync 옵션이 바뀌어 지울 것이 늘면 다시 묻기 (검토 대기)
관리자 3a 판단 (10/20, 데이터 쪽이라 안전한 쪽으로): 로컬 · 원격 쌍 모두.
- 쌍에 확인할 때의 rsync 옵션을 기억 (LiveSyncPair.confirmedOptions, 설정 파일에 저장 - 틀린 값은 없는 것으로).
- 맞추기 전에 지금 옵션이 기억한 것과 다르면, 두 옵션으로 지울 것을 견주어 늘었으면 (--delete-excluded · --exclude ·
  --filter 를 바꿔 새로 지워질 것이 생김) 지우지 않고 맞춘 뒤 다시 묻는다 (42 와 같은 창, 주황 "옵션이 바뀌어 지울 것이
  늘었습니다" 줄). 늘지 않았으면 묻지 않고 지금 옵션을 기억.
- 이 값이 생기기 전에 확인한 쌍은 예전 동작 (--delete-excluded 를 따르지 않음) 과 견준다 - 업데이트 뒤 --delete-excluded 로
  새로 지워질 것이 있으면 묻고, 없으면 기억만 (처음 한 번 설정을 저장).
- 확인 창 높이를 화면 높이에 따라 (360 ~ 520) - 412 세로에서 거른 것 묶음이 잘려 보이던 것 (캡처로 찾음).
시험: live_sync_scene_test (로컬, 실제 rsync - 늘지 않는 바꿈 · --delete-excluded 더함 · 거르기 뺌 · 예전 쌍 · 설정 저장),
webdav_test (원격 쌍). LiveSync 를 쓰는 시험 14개 파일 148개 통과. 캡처 windows_live_excl_shot_test 를 다시 묻는 창으로
(ko · en · ja × 412 · 960, 넘침 0) → release\test\shots_live_excl.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 12:26:08 +09:00
RyuJongJin 6b60f348e2 WIP 마그넷: 인터넷 IPv6 가 없으면 (Tailscale ULA 뿐) aria2 의 IPv6 끔 - 시작되지 않던 것 (28 확인) · 정한 시간 (처음 60초) 동안 메타데이터 · 피어가 없으면 줄에 이유 후보 · [다시 시도] · 실제 마그넷 받기 통합 시험 (JJ_REAL_MAGNET=1) (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 11:32:40 +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 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 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 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 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 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 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 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 ba34014a1f WIP 회귀 고침: 탐색기 밀기 = 창 바꾸기는 설정으로만, 처음 값 끔 (검토 대기)
c2c4382 에서 X-plore 스타일의 밀기 = 창 바꾸기를 처음 값으로 켜서, 사용자가 10/8 에 정한
"화면 가운데를 밀면 화면 이동" 이 깨졌다 (components_test 실패). 관리자 판단 (10/18) 을 따라 모든 스타일에서 처음 값은 끔.
예전 설정 파일에 값이 없으면 끔. 밀기 시험은 설정을 켠 뒤 돌리고, 처음 값이 끔인지 확인을 더함.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:28:06 +09:00