/// 약속: 탐색기에서 연 동영상의 새 재생 창 (Windows). 설정은 읽기만 하고 저장하지 않으며, 동영상 목록은 원래 창과 같은 파일로 맞춘다. library; import 'dart:async'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:path/path.dart' as p; import 'package:window_manager/window_manager.dart'; import '../app/app_controller.dart'; import '../app/net_guard.dart'; import '../ui/master_prompt.dart'; import '../app/settings.dart'; import '../platform/windows/single_instance.dart'; import '../platform/windows/window_memory.dart'; import '../services/platform_services.dart'; import '../ui/player_page.dart'; import '../app/i18n_controller.dart'; import '../main.dart'; /// 탐색기에서 연 동영상의 새 창: 바로 재생하고, ← 로 나오면 같은 동영상 목록의 MKV 화면. /// 트레이 · 단축키 · 다운로드 · 브라우저는 원래 창이 맡는다. 닫으면 이 창만 끝난다. /// 동영상 목록은 원래 창과 같은 파일을 보므로 어느 창에서 넣거나 지워도 서로 맞춰진다. /// 설정은 읽기만 한다 (원래 창의 설정 파일을 덮어쓰지 않도록 저장하지 않음). Future runSecondWindow(List files, String dataDir) async { HttpOverrides.global = JjHttpOverrides(); // DNS 강제: HttpClient 를 만들기 전에 (main 과 같은 까닭) await windowManager.ensureInitialized(); await windowManager.setTitle(appTitle); await WindowMemory(p.join(dataDir, 'window.json'), 'second').restoreAndWatch(); final controller = AppController(PlatformServices.create()); await controller.init(); await setupNetwork(controller, dataDir, second: true); // 화면 언어 (환경 설정 > 화면 언어) i18n.init(controller, dataDir); await i18n.apply(controller.settings.display.language, save: false); final store = SettingsStore(); controller.settings = await store.load(); final navigatorKey = GlobalKey(); // 124: 이 창도 저장된 비밀번호 (WebDAV 재생) 를 쓰기 전에 마스터를 묻는다 (풀린 상태는 창마다) await setupMasterLock(controller, secrets: store.secrets); attachMasterPrompt(navigatorKey); runApp(JjMkvMakerApp(controller: controller, navigatorKey: navigatorKey, onExit: endProcessNow)); WidgetsBinding.instance.addPostFrameCallback((_) async { await controller.shareVideoList(p.join(dataDir, 'videos.json')); unawaited(controller.addVideos(files, allowOutputFolder: true)); final ctx = navigatorKey.currentContext; if (ctx != null && ctx.mounted) await playFiles(ctx, controller, files); }); }