51 lines
2.6 KiB
Dart
51 lines
2.6 KiB
Dart
/// 약속: 탐색기에서 연 동영상의 새 재생 창 (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<void> runSecondWindow(List<String> 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<NavigatorState>();
|
|
// 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);
|
|
});
|
|
}
|