import 'package:jj_mkvmaker/app/explorer_device.dart'; import 'package:jj_mkvmaker/app/local_fs.dart'; import 'package:jj_mkvmaker/core/file_ops.dart' show FileEntry; import 'package:jj_mkvmaker/platform/windows/recycle_bin.dart' show RecycleBinBackend; /// 시험용 [ExplorerDevice]: 정한 것만 바꾸고 나머지는 이 기기 그대로. /// [android] · [trash] · [nomediaOn] 은 Windows 에서 Android 의 갈래를 지나게 할 뿐이다 - 논리만 확인, Android 실제 확인은 노트 10+ class TestExplorerDevice implements ExplorerDevice { static const _real = RealExplorerDevice(); static const _fs = RealLocalFs(); /// 저장 장치 목록 (null 이면 이 기기) List<(String, String)> Function()? volumes; /// 드라이브를 열 수 있는지 (null 이면 이 기기) Future Function(String path)? probe; /// 폴더 목록 (null 이면 이 기기) - 느린 목록 등 Future> Function(String dir, {bool showHidden})? list; /// 남은 공간 · 전체 (null 이면 이 기기) - 캡처가 실행마다 같게 정한다 (int, int)? Function(String path)? space; /// Windows 휴지통 (null 이면 이 기기의 휴지통 - 시험은 useTestRecycleBin 으로 시험 폴더 안의 것) RecycleBinBackend? bin; /// 경로 입력 SMB 안내 · 앱 휴지통 · .nomedia 메뉴 (null 이면 이 기기) bool? android, trash, nomediaOn; @override LocalFs get fs => _TestFs(this); @override RecycleBinBackend get recycleBin => bin ?? _real.recycleBin; @override Future<(int, int)?> diskSpace(String path) async => space != null ? space!(path) : await _real.diskSpace(path); @override bool get androidPaths => android ?? _real.androidPaths; @override bool get androidTrash => trash ?? _real.androidTrash; @override bool get nomedia => nomediaOn ?? _real.nomedia; } class _TestFs implements LocalFs { final TestExplorerDevice d; _TestFs(this.d); @override Future> list(String dir, {bool showHidden = false}) => (d.list ?? TestExplorerDevice._fs.list)(dir, showHidden: showHidden); @override Future> volumes() async => d.volumes?.call() ?? await TestExplorerDevice._fs.volumes(); @override Future probe(String path) => (d.probe ?? TestExplorerDevice._fs.probe)(path); }