- lib/ui/row_fit.dart: fitRow (판단만 - 82a87da 그대로) + FitButtonRows (그 판단대로 한 줄 / 두 줄로 그림, 단추 크기 그대로,
소리 막대만 남는 폭 최대 100). 재생 화면은 부르기만 한다 (player_page 580 → 576줄)
- 재생 목록 모듈 (core/playlist.dart): isPlayableFile · samePlayKind · folderPlaylist. buildPlaylist 의 형제는 고른 파일과 같은 종류만,
폴더 [재생] 은 동영상이 없으면 소리 파일 (안내 글 "이 폴더에 재생할 동영상 · 소리 파일이 없습니다." - en · ja · zh 사전 함께).
컨트롤러 (playback_prep) · 탐색기 (explorer_buttons · open_flow) 는 부르기만
- 시험: row_fit_contract_test (새) · player_test 약속 줄 · full_player_test 실제 mpv 장면 (82a87da 에서 옮김).
explorer_flows_contract_test 의 알림 글을 새 글로 (틀 것이 없으면 알림은 그대로)
- full_player_test: 앞 판은 mp3 목록이 [ep1.mkv, Other - Track 2.mp3] 로 실패 (결함 재현), 뒤 판은 목록은 통과하나
"audio 재생 시작" 에서 멈춤 - 이 PC 는 소리 출력 장치가 모두 꺼져 있음 (AudioEndpoint 모두 Unknown). 조절 줄 장면은 기기 (노트 10+) 확인 몫
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 첫 창에 넘겨 본 결과를 셋으로: 받음 · 아직 준비 안 됨 (instance.json 없음 · 연결 안 됨) · 연결은 됐는데 답 없음
- 답 없음은 1초씩 3번이면 바로 unresponsive (관리자 결정 10/24). 첫 창이 정상이면 그 창에 넘기는 동작 · 막 뜨는 중이면
잠깐 다시 해 보는 동작은 그대로
- 약속 시험: 받기만 하고 답하지 않는 실제 소켓 - 5초 안에 unresponsive
확인: analyze 0 · 단위 1474 ×2 · player_test 17 ×2 · 통합 6/6 ×2 (a · c) · base10 214장 0px
(b 회차는 시험 도중 C: 임시 폴더의 시험 폴더 jj_usechk_fixed_412 와 시험 휴지통 폴더가 통째로 없어져 412 23장 벗어남 - 이 고침과 무관, 원인 미확인)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Tor: debugRunning · executable 없앰 → 떠난 뒤 잠시 켜 두기를 IdleStop 모듈로 (schedule · cancel · stopNow).
환경 설정 > Tor 는 IdleStop 을 받음 (처음 값 = 앱의 Tor), [지금 끄기] = stopNow
- Wi-Fi 공유: debugLoopbackOnly · debugAddresses · loopbackOnly 인자 없앰 → WifiShareNet 주입 (열 주소 · 설정 열기).
WifiSharePage(net:) 가 debugLaunch 를 대신함. debugFail 없앰 - 시험이 실제 다른 루프백 주소 (127.0.0.x) 에서 틀린 코드를 보냄
- 관리자 권한: Elevation.debugElevated 없앰 → PlatformInfo.elevated (조립 주입), CefView(elevated:)
- CEF 시작 시간: 바꿀 수 없게 (const) - 시험은 가짜 시간을 넘김
- 단일 실행: debugStopListening 없앰 - 시험이 instance.json 을 아무도 듣지 않는 포트로 (받는 곳이 죽은 첫 창)
- SMB 찾기: 전역 debugFindSmbServers 없앰 → PlatformServices.findLanSmb 주입
- 남은 @visibleForTesting (들여다보기만): browser_page · tor_page debugNav, secret_store dpapiAt, reader_page dropMissingFiles
확인: analyze 0 · 단위 1473 ×2 · 통합 6/6 ×2 · base10 214장 0px · windows_wifi_shot ×2 · windows_smbfind_shot ×2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 도구 고침: setter 안의 ' closeAction = v' 줄을 선언으로 잡던 것 (타입은 글자로 시작 · 첫 선언만)
- 문서 주석 [AppSettings.run.x] → [RunSettings.x]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
관리자 검토 (10/12): 이름 있는 뮤텍스는 쥔 OS 스레드가 끝나면 버려진 상태가 되어 다음 실행이 첫 실행으로
판단할 수 있다 → 데이터 폴더의 instance.lock 을 파일 핸들 잠금 (LockFileEx) 으로 앱이 끝날 때까지 쥔다.
스레드와 상관없고 프로세스가 죽으면 Windows 가 푼다. GetLastError · FFI 를 쓰지 않는다.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
근거: 사용자 지적 ("가로 · 세로를 왜 막았나, 지시한 적 없다") + 감독 세션 지시.
예전 결정 (bf6429d · bca0c04, 내 판단 - 사용자 지시 없음): "데스크톱 화면이니까" 시작할 때 가로 고정을 강제하고
기본값 · 모르는 값도 가로 고정으로 해 휴대폰 · 태블릿의 세로 보기를 막았다.
- 시작할 때 가로 고정 강제 (runAndroid) 삭제
- 기본값 auto, 값이 없거나 틀리면 auto
- 예전 설정 파일 (orientationV2 없음) 의 가로 고정은 사용자가 고른 값이 아니므로 한 번 auto 로
- applyScreenOrientation: 모르는 값은 기기 방향 따라 (빈 목록)
- 환경 설정 > 화면 방향: 자동 (기본) · 가로 고정 · 세로 고정
- 시험: player_test 화면 방향
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>