mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-04 15:49:49 +00:00
98 lines
2.9 KiB
Dart
98 lines
2.9 KiB
Dart
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:window_manager/window_manager.dart';
|
|
|
|
import 'api/api.dart' as api;
|
|
import 'app/modules/app/controllers/app_controller.dart';
|
|
import 'app/modules/app/views/app_view.dart';
|
|
import 'core/libgopeed_boot.dart';
|
|
import 'i18n/message.dart';
|
|
import 'util/locale_manager.dart';
|
|
import 'util/log_util.dart';
|
|
import 'util/mac_secure_util.dart';
|
|
import 'util/package_info.dart';
|
|
import 'util/util.dart';
|
|
import 'util/window_util.dart' as windows_util;
|
|
|
|
void main() async {
|
|
await init();
|
|
onStart();
|
|
|
|
runApp(const AppView());
|
|
}
|
|
|
|
Future<void> init() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
if (Util.isDesktop()) {
|
|
await windowManager.ensureInitialized();
|
|
final windowState = await windows_util.loadState();
|
|
final windowOptions = WindowOptions(
|
|
size: Size(windowState.width, windowState.height),
|
|
center: true,
|
|
skipTaskbar: false,
|
|
);
|
|
await windowManager.waitUntilReadyToShow(windowOptions, () async {
|
|
await windowManager.show();
|
|
await windowManager.focus();
|
|
await windowManager.setPreventClose(true);
|
|
// windows_manager has a bug where when window to be maximized, it will be unmaximized immediately, so can't implement this feature currently.
|
|
// https://github.com/leanflutter/window_manager/issues/412
|
|
// if (windowState.isMaximized) {
|
|
// await windowManager.maximize();
|
|
// }
|
|
});
|
|
}
|
|
|
|
if (!Util.isWeb()) {
|
|
await Util.initStorageDir();
|
|
}
|
|
initLogger();
|
|
|
|
final controller = Get.put(AppController());
|
|
try {
|
|
await controller.loadStartConfig();
|
|
final startCfg = controller.startConfig.value;
|
|
controller.runningPort.value = await LibgopeedBoot.instance.start(startCfg);
|
|
api.init(startCfg.network, controller.runningAddress(), startCfg.apiToken);
|
|
} catch (e) {
|
|
logger.e("libgopeed init fail", e);
|
|
}
|
|
|
|
try {
|
|
await controller.loadDownloaderConfig();
|
|
MacSecureUtil.loadBookmark();
|
|
} catch (e) {
|
|
logger.e("load config fail", e);
|
|
}
|
|
|
|
try {
|
|
await initPackageInfo();
|
|
} catch (e) {
|
|
logger.e("init package info fail", e);
|
|
}
|
|
}
|
|
|
|
Future<void> onStart() async {
|
|
final appController = Get.find<AppController>();
|
|
await appController.trackerUpdateOnStart();
|
|
|
|
// if is debug mode, check language message is complete,change debug locale to your comfortable language if you want
|
|
if (kDebugMode) {
|
|
final debugLang = getLocaleKey(debugLocale);
|
|
final fullMessages = messages.keys[debugLang];
|
|
messages.keys.keys.where((e) => e != debugLang).forEach((lang) {
|
|
final langMessages = messages.keys[lang];
|
|
if (langMessages == null) {
|
|
logger.w("missing language: $lang");
|
|
return;
|
|
}
|
|
final missingKeys =
|
|
fullMessages!.keys.where((key) => langMessages[key] == null);
|
|
if (missingKeys.isNotEmpty) {
|
|
logger.w("missing language: $lang, keys: $missingKeys");
|
|
}
|
|
});
|
|
}
|
|
}
|