Files
gopeed/ui/flutter/lib/main.dart

56 lines
2.0 KiB
Dart

import 'dart:async';
import 'package:app_links/app_links.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_foreground_task/flutter_foreground_task.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'app/app.dart';
import 'app/child_window_app.dart';
import 'core/capabilities/app_capabilities.dart';
import 'core/entry/app_initializer.dart';
import 'core/entry/app_startup_options.dart';
import 'core/window/app_window_bootstrap.dart';
import 'core/window/app_window_launch_context.dart';
import 'core/window/window_capability_transport.dart';
import 'util/util.dart';
Future<void> main(List<String> args) async {
WidgetsFlutterBinding.ensureInitialized();
if (Util.isMacos()) {
// Gopeed is not sandboxed. Configure each engine before the main/child
// window split so native file and directory dialogs work in both windows.
await FilePicker.skipEntitlementsChecks();
}
if (Util.isAndroid()) {
FlutterForegroundTask.initCommunicationPort();
}
final launchContext = AppWindowLaunchContext.fromArgs(args);
if (launchContext.isSubWindow) {
final windowController = launchContext.buildController()!;
final session = await ChildWindowSession.connect(windowController);
await AppWindowBootstrap.setupSubWindow(launchContext.payload.type, localeConfig: session.appearance.value.locale);
runApp(
ProviderScope(
overrides: [appCapabilitiesProvider.overrideWithValue(session.capabilities)],
child: ChildWindowApp(payload: launchContext.payload, session: session),
),
);
return;
}
var startupOptions = AppStartupOptions.fromArgs(args);
if (Util.isDesktop() && !startupOptions.hidden) {
try {
startupOptions = startupOptions.withInitialUri(await AppLinks().getInitialLink());
} catch (_) {}
}
await AppInitializer.ensureStorageInitialized();
await AppWindowBootstrap.setupMainWindow(hidden: startupOptions.hidden);
runApp(const ProviderScope(child: GopeedApp()));
}