JJ_MKVMaker/lib/ui
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
..
added_to_mkv_notice.dart WIP 다운로드 줄이 자동 추가로 빠질 때 이유 알림 · [보기] (931 관리자 판단) (검토 대기) 2026-10-17 09:49:18 +09:00
ai_dialog.dart WIP 259 번역 모델 (NLLB 912MB) 은 번역이 실제로 필요할 때만 받기 - 자동 감지 + 한 언어면 감지한 원어가 다를 때 (검토 대기) 2026-10-17 09:49:26 +09:00
ai_image_page.dart 라이선스 고지 (62 · 63 · 64) · AI 릴리스 전 수정 (152 · 156 · 157 · 159) 2026-10-09 16:20:15 +09:00
ai_settings.dart WIP 86 압축: ZIP 만들기 · 풀기, 7z · RAR 풀기 (Windows - 7-Zip 25.01 동봉), 풀기 전 검사 + 품질 올리기 다듬기 정도 설정 (검토 대기) 2026-10-17 14:38:26 +09:00
ai_subtitle_models.dart WIP 260 환경 설정 > 자막: 받은 AI 자막 모델 (Whisper · NLLB) 크기 · [지우기], 작업 중에는 못 지움 (검토 대기) 2026-10-17 09:49:27 +09:00
ai_upscale_ui.dart WIP 관리자 결정: 거절 기록은 방식 주소:포트만 · DoH 주소는 호스트만 · 시험 임시 폴더 흔적 0 + 검사 (검토 대기) 2026-10-17 16:53:56 +09:00
all_files_guide.dart WIP 다음 판: 199 권한 앱 목록 안내 · 188 버튼 글 맞춤 · 206 이동 버튼 · 181 · 182 mp3 재생 · 184 직접 파일 일반 받기 · 185 [계속 받기] (검토 대기) 2026-10-17 09:48:44 +09:00
android_file_browser.dart WIP 88 SFTP 2/3: 화면 - 환경 설정 SFTP 서버 · 탐색기 탭 · 처음 키 확인 · 고르는 곳 · 라이선스 고지 (미완) 2026-10-17 22:28:35 +09:00
app_actions.dart WIP 253 글자 크게 (1.6배) 해도 넘치지 않게: 탐색기 줄 높이 · 설정 고르기 상자 · 위 막대 · 인코딩 · 모니터링 · 언어 · 화면 전체 시험 (검토 대기) 2026-10-17 09:49:12 +09:00
app_drop.dart 화면 언어: 한국어 · English · 日本語 · 简体中文, 언어 추가 (AI 자동 번역) · 삭제, 바꾸면 화면 전체가 바로 그 언어로 2026-10-04 14:13:02 +09:00
archive_ui.dart WIP 88 SFTP 2/3: 화면 - 환경 설정 SFTP 서버 · 탐색기 탭 · 처음 키 확인 · 고르는 곳 · 라이선스 고지 (미완) 2026-10-17 22:28:35 +09:00
audio_now_playing.dart WIP 다음 판: 199 권한 앱 목록 안내 · 188 버튼 글 맞춤 · 206 이동 버튼 · 181 · 182 mp3 재생 · 184 직접 파일 일반 받기 · 185 [계속 받기] (검토 대기) 2026-10-17 09:48:44 +09:00
batch_rename_dialog.dart WIP 릴리스 전 점검 (지시 8): DNS 실패 기록에서 사이트 이름 뺌 · archive 고지 · 큰 글자 넘침 3곳 (검토 대기) 2026-10-17 16:18:14 +09:00
bookmark_ui.dart 비밀번호 안전 저장 · 동기화 안전장치 · 휴지통 · 시작 메뉴 알림 · 보기 화면 (계속 보기 · 두 쪽 · 회전) · 탐색기 배치 등 2026-10-09 10:25:08 +09:00
browser_page.dart 248 다듬기: 아래 DNS 알림은 상태가 풀리면 닫고, 같은 안내를 보이는 화면 (브라우저 덮개 · 설정 DNS 칸) 에서는 띄우지 않음 2026-10-12 07:47:50 +09:00
cef_setup.dart Chrome 엔진: 관리자 권한이면 시작 안 함 (설정으로 허용) · 20초 안전망 · 인증 없는 숨긴 문 (207) · DNS 강제를 앱 시작 맨 앞에 2026-10-12 00:23:20 +09:00
cleanup_dialog.dart 비밀번호 안전 저장 · 동기화 안전장치 · 휴지통 · 시작 메뉴 알림 · 보기 화면 (계속 보기 · 두 쪽 · 회전) · 탐색기 배치 등 2026-10-09 10:25:08 +09:00
component_settings.dart 통합: tor_dns (Tor 브라우저 · DNS 강제 · 228 · 247~249) 를 묶음5 (aa7a1af) 에 합침 2026-10-12 01:53:32 +09:00
confirm.dart WIP 다음 판: 199 권한 앱 목록 안내 · 188 버튼 글 맞춤 · 206 이동 버튼 · 181 · 182 mp3 재생 · 184 직접 파일 일반 받기 · 185 [계속 받기] (검토 대기) 2026-10-17 09:48:44 +09:00
copy_sync_settings.dart 폰 세로 모니터링 버튼 줄 넘침 (257) · 지운 쌍의 "동기화 멈춤" 알림이 남던 것 (258) 2026-10-12 08:15:38 +09:00
dav_external.dart WIP 88 SMB 3/3: Android SMB (smbj 0.15.0, 플랫폼 채널) - 서버 설정 · 탭 · 받아서 열기 · 고지 (미완 - 기기 확인 안 됨) 2026-10-17 22:55:59 +09:00
downloads_page.dart WIP 263 다운로드: DNS 서버에 닿지 않아 실패하면 줄에 이유 · [시스템 DNS 로 바꾸기] (검토 대기) 2026-10-17 09:55:14 +09:00
encode_notice.dart 비밀번호 안전 저장 · 동기화 안전장치 · 휴지통 · 시작 메뉴 알림 · 보기 화면 (계속 보기 · 두 쪽 · 회전) · 탐색기 배치 등 2026-10-09 10:25:08 +09:00
existing_output_dialog.dart MKV 다시 만들기: 임시 이름에 만들고 다 됐을 때만 바꿔 넣음 · 이미 있으면 묻기 · 묶음 집계 · 끝난 뒤 취소 무시 (P0, 931) 2026-10-12 07:31:41 +09:00
exit_dialog.dart 화면 언어: 한국어 · English · 日本語 · 简体中文, 언어 추가 (AI 자동 번역) · 삭제, 바꾸면 화면 전체가 바로 그 언어로 2026-10-04 14:13:02 +09:00
exit_guard.dart 비밀번호 안전 저장 · 동기화 안전장치 · 휴지통 · 시작 메뉴 알림 · 보기 화면 (계속 보기 · 두 쪽 · 회전) · 탐색기 배치 등 2026-10-09 10:25:08 +09:00
explorer_bookmarks.dart 파일 탐색기 즐겨찾기 (73): 지금 폴더 넣기 · 창 위에서 한 번에 · Rsync 짝 2026-10-11 18:49:03 +09:00
explorer_drag.dart WIP 82 파일 탐색기 창 사이 끌어 놓기: 마우스 8px 끌기 · 터치 ≡ 손잡이, 놓을 곳 강조, 묻기 (복사 · 이동), 이동 [되돌리기] (검토 대기) 2026-10-17 13:12:04 +09:00
explorer_look.dart WIP 84 파일 탐색기 정렬: 열 머리를 누르면 그 기준 · 다시 누르면 거꾸로, 설정 "정렬을 폴더마다 기억" (검토 대기) 2026-10-17 11:53:38 +09:00
explorer_page.dart WIP l FTP · FTPS: 탐색기 원격 탭 (WebDAV · SFTP 와 같은 길) - dart:io 로 직접, 처음 값 FTPS (검토 대기) 2026-10-18 00:45:33 +09:00
explorer_search.dart WIP 15 캡처 지적 ①~④: 영어 단수 · 좁은 화면 풀 곳 세로 목록 · 찾기/분석 줄은 시작한 폴더 기준 짧은 경로 · 캡처 DEBUG 띠 끔 (검토 대기) 2026-10-17 15:57:25 +09:00
file_error.dart 오류 메시지 안쪽을 화면 언어로 (59) 2026-10-10 01:11:17 +09:00
folder_picker.dart WIP 88 SMB 3/3: Android SMB (smbj 0.15.0, 플랫폼 채널) - 서버 설정 · 탭 · 받아서 열기 · 고지 (미완 - 기기 확인 안 됨) 2026-10-17 22:55:59 +09:00
ftp_settings.dart WIP l FTP · FTPS: 탐색기 원격 탭 (WebDAV · SFTP 와 같은 길) - dart:io 로 직접, 처음 값 FTPS (검토 대기) 2026-10-18 00:45:33 +09:00
home_page.dart WIP MKV 화면 ②③ 보충 (15 확인 · 관리자 판단): [›] 뒤 바탕 · 폰 세로 빈 작업 기록은 한 줄 높이 (검토 대기) 2026-10-17 10:50:01 +09:00
key_hint.dart 단축키 안내 '(Alt+←)' 등은 PC 에서만 - 태블릿 · 폰은 이름만 (194) 2026-10-12 06:01:43 +09:00
language_settings.dart WIP 253 글자 크게 (1.6배) 해도 넘치지 않게: 탐색기 줄 높이 · 설정 고르기 상자 · 위 막대 · 인코딩 · 모니터링 · 언어 · 화면 전체 시험 (검토 대기) 2026-10-17 09:49:12 +09:00
license_texts.dart WIP 88 SMB 3/3: Android SMB (smbj 0.15.0, 플랫폼 채널) - 서버 설정 · 탭 · 받아서 열기 · 고지 (미완 - 기기 확인 안 됨) 2026-10-17 22:55:59 +09:00
master_prompt.dart WIP l FTP · FTPS: 탐색기 원격 탭 (WebDAV · SFTP 와 같은 길) - dart:io 로 직접, 처음 값 FTPS (검토 대기) 2026-10-18 00:45:33 +09:00
migration_notice.dart 193 dnsForced 알림: 8.8.8.8 이 막힌 회사 · 학교망에서는 [시스템 DNS 로 바꾸기] 를 누르라고 한 줄 더 2026-10-12 06:29:25 +09:00
monitor_page.dart WIP 253 글자 크게 (1.6배) 해도 넘치지 않게: 탐색기 줄 높이 · 설정 고르기 상자 · 위 막대 · 인코딩 · 모니터링 · 언어 · 화면 전체 시험 (검토 대기) 2026-10-17 09:49:12 +09:00
network_settings.dart WIP 266 폰 세로 MKV 화면: DNS 닿지 않음 줄을 한 줄로 (글 줄임 · 길게 누르면 전체 · 버튼 같은 줄) - 세부 정보의 자막 버튼이 밀려나지 않게 (검토 대기) 2026-10-17 09:49:36 +09:00
path_label.dart WIP 88 SMB 3/3: Android SMB (smbj 0.15.0, 플랫폼 채널) - 서버 설정 · 탭 · 받아서 열기 · 고지 (미완 - 기기 확인 안 됨) 2026-10-17 22:55:59 +09:00
player_page.dart WIP 88 SMB 3/3: Android SMB (smbj 0.15.0, 플랫폼 채널) - 서버 설정 · 탭 · 받아서 열기 · 고지 (미완 - 기기 확인 안 됨) 2026-10-17 22:55:59 +09:00
quick_look.dart WIP 88 SFTP 2/3: 화면 - 환경 설정 SFTP 서버 · 탐색기 탭 · 처음 키 확인 · 고르는 곳 · 라이선스 고지 (미완) 2026-10-17 22:28:35 +09:00
reader_page.dart WIP AI 해상도 올리기: 배율 "1배 (선명하게)" · 보기 화면 [품질 올리기] (그림 → 그림 약하게 + 해상도 올리기, 처음 숨김) (검토 대기) 2026-10-17 14:05:26 +09:00
rsync_setup.dart 좁은 화면 (접은 폴드 · 휴대폰 세로) 배치 정리 2026-10-08 14:10:04 +09:00
schedule_editor.dart 복사 모니터링 · 복사 기억 · lsync 일정 (cron + 격자 편집) 2026-10-05 11:16:05 +09:00
scroll_more.dart WIP MKV 화면 ②③ 보충 (15 확인 · 관리자 판단): [›] 뒤 바탕 · 폰 세로 빈 작업 기록은 한 줄 높이 (검토 대기) 2026-10-17 10:50:01 +09:00
secret_issue.dart 비밀번호 안전 저장 · 동기화 안전장치 · 휴지통 · 시작 메뉴 알림 · 보기 화면 (계속 보기 · 두 쪽 · 회전) · 탐색기 배치 등 2026-10-09 10:25:08 +09:00
security_settings.dart 보안 · 비밀번호 (124 · 127~132) · 쿠키 (53) · http 경고 (56) · 안내 고침 (116 · 125 · 126) · 시험 안정화 2026-10-09 12:22:47 +09:00
setting_tile.dart WIP 253 글자 크게 (1.6배) 해도 넘치지 않게: 탐색기 줄 높이 · 설정 고르기 상자 · 위 막대 · 인코딩 · 모니터링 · 언어 · 화면 전체 시험 (검토 대기) 2026-10-17 09:49:12 +09:00
settings_page.dart WIP l FTP · FTPS: 탐색기 원격 탭 (WebDAV · SFTP 와 같은 길) - dart:io 로 직접, 처음 값 FTPS (검토 대기) 2026-10-18 00:45:33 +09:00
settings_problem.dart 설정 파일: 안전하게 저장 · 깨지면 백업으로 되살리고 알림 2026-10-08 23:54:30 +09:00
setup_dialog.dart 좁은 화면 (접은 폴드 · 휴대폰 세로) 배치 정리 2026-10-08 14:10:04 +09:00
sftp_settings.dart WIP 88 SFTP 2/3: 화면 - 환경 설정 SFTP 서버 · 탐색기 탭 · 처음 키 확인 · 고르는 곳 · 라이선스 고지 (미완) 2026-10-17 22:28:35 +09:00
smb_settings.dart WIP 88 SMB 3/3: Android SMB (smbj 0.15.0, 플랫폼 채널) - 서버 설정 · 탭 · 받아서 열기 · 고지 (미완 - 기기 확인 안 됨) 2026-10-17 22:55:59 +09:00
storage_page.dart WIP 15 캡처 지적 ①~④: 영어 단수 · 좁은 화면 풀 곳 세로 목록 · 찾기/분석 줄은 시작한 폴더 기준 짧은 경로 · 캡처 DEBUG 띠 끔 (검토 대기) 2026-10-17 15:57:25 +09:00
subtitle_editor_page.dart 단축키 안내 '(Alt+←)' 등은 PC 에서만 - 태블릿 · 폰은 이름만 (194) 2026-10-12 06:01:43 +09:00
subtitle_language_picker.dart 환경 설정 > MKV 만들기 > 기본 자막 언어 (MKV 기본 자막 트랙 · 플레이어가 먼저 켜는 자막) 2026-10-10 02:41:14 +09:00
subtitle_search_dialog.dart 보안 · 비밀번호 (124 · 127~132) · 쿠키 (53) · http 경고 (56) · 안내 고침 (116 · 125 · 126) · 시험 안정화 2026-10-09 12:22:47 +09:00
sync_alert.dart 보안 · 비밀번호 (124 · 127~132) · 쿠키 (53) · http 경고 (56) · 안내 고침 (116 · 125 · 126) · 시험 안정화 2026-10-09 12:22:47 +09:00
sync_preview_view.dart robocopy 복사도 링크 · junction 을 따라가지 않음 (/XJ 처음 값) 2026-10-12 00:51:43 +09:00
theme.dart 66-2 화면 옮기기: 지금 화면 아이콘 파랗게 · 민 쪽으로 미끄러지는 전환 · 처음으로 / 끝 알림 · 브라우저 안내 한 줄 (한 번) 2026-10-09 20:16:08 +09:00
timeline.dart 화면 언어: 한국어 · English · 日本語 · 简体中文, 언어 추가 (AI 자동 번역) · 삭제, 바꾸면 화면 전체가 바로 그 언어로 2026-10-04 14:13:02 +09:00
toast_status.dart 비밀번호 안전 저장 · 동기화 안전장치 · 휴지통 · 시작 메뉴 알림 · 보기 화면 (계속 보기 · 두 쪽 · 회전) · 탐색기 배치 등 2026-10-09 10:25:08 +09:00
tor_page.dart 통합: 묶음5 의 마지막 끝 (433f5b1: 192 · 193 · 194 · 196~198) 을 합침 · 194 · 193 을 Tor · DNS 에도 2026-10-12 06:19:59 +09:00
translate_dialog.dart 라이선스 원문 (175): 네이티브 구성 요소 · 받는 AI 모델의 저작권 줄과 허가 문구를 그 판 그대로 2026-10-10 00:29:19 +09:00
update_dialog.dart 닿지 않는 DNS: 새 버전 확인 실패를 사용자 글로 · 안내는 닫을 때까지 · 상태를 설정 · 작업 현황에 (247 · 248 · 249) 2026-10-12 01:27:00 +09:00
version_restore.dart P0 Android 되돌리기: 남는 것 / 사라지는 것을 사실대로 · 두 번 확인 · 받은 AI 모델 복사해 두었다가 되살리기 2026-10-09 18:03:47 +09:00
video_adjust_dialog.dart 비밀번호 안전 저장 · 동기화 안전장치 · 휴지통 · 시작 메뉴 알림 · 보기 화면 (계속 보기 · 두 쪽 · 회전) · 탐색기 배치 등 2026-10-09 10:25:08 +09:00
webdav_settings.dart AI 그림 1차 (123) · WebDAV 안내 (133 · 134 · 142 · 143) · 긴 경로 휴지통 보호 · AI 화면 작은 것 (139 · 140 · 141) 2026-10-09 14:35:57 +09:00
work_panel.dart 폰 세로 MKV 위 막대 진행: "2/3 · 37%" 짧은 꼴 · 폭을 미리 잡아 [+ 동영상 추가] 를 가리지 않게 2026-10-12 08:15:38 +09:00
zip_page.dart WIP 86 압축: ZIP 만들기 · 풀기, 7z · RAR 풀기 (Windows - 7-Zip 25.01 동봉), 풀기 전 검사 + 품질 올리기 다듬기 정도 설정 (검토 대기) 2026-10-17 14:38:26 +09:00