<feat: New project structure>

<feat: New release>
This commit is contained in:
Alessandro Autiero
2023-09-02 15:26:55 +02:00
parent 69f2dcd527
commit b279d8954c
103 changed files with 3866 additions and 4611 deletions

View File

@@ -1,25 +1,30 @@
import 'dart:async';
import 'package:app_links/app_links.dart';
import 'package:fluent_ui/fluent_ui.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:reboot_launcher/src/util/error.dart';
import 'package:reboot_launcher/src/util/os.dart';
import 'package:reboot_launcher/src/ui/controller/build_controller.dart';
import 'package:reboot_launcher/src/ui/controller/game_controller.dart';
import 'package:reboot_launcher/src/ui/controller/hosting_controller.dart';
import 'package:reboot_launcher/src/ui/controller/server_controller.dart';
import 'package:reboot_launcher/src/ui/controller/settings_controller.dart';
import 'package:reboot_launcher/src/ui/page/home_page.dart';
import 'package:reboot_launcher/supabase.dart';
import 'package:reboot_common/common.dart';
import 'package:reboot_launcher/src/controller/matchmaker_controller.dart';
import 'package:reboot_launcher/src/controller/update_controller.dart';
import 'package:reboot_launcher/src/dialog/message.dart';
import 'package:reboot_launcher/src/interactive/error.dart';
import 'package:reboot_launcher/src/controller/build_controller.dart';
import 'package:reboot_launcher/src/controller/game_controller.dart';
import 'package:reboot_launcher/src/controller/hosting_controller.dart';
import 'package:reboot_launcher/src/controller/authenticator_controller.dart';
import 'package:reboot_launcher/src/controller/settings_controller.dart';
import 'package:reboot_launcher/src/interactive/server.dart';
import 'package:reboot_launcher/src/page/home_page.dart';
import 'package:reboot_launcher/src/util/watch.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:system_theme/system_theme.dart';
import 'package:flutter_acrylic/flutter_acrylic.dart';
import 'package:window_manager/window_manager.dart';
import 'package:url_protocol/url_protocol.dart';
const double kDefaultWindowWidth = 1024;
const double kDefaultWindowWidth = 1536;
const double kDefaultWindowHeight = 1024;
final GlobalKey appKey = GlobalKey();
const String kCustomUrlSchema = "reboot";
void main() async {
runZonedGuarded(() async {
@@ -30,44 +35,109 @@ void main() async {
);
WidgetsFlutterBinding.ensureInitialized();
await SystemTheme.accentColor.load();
await GetStorage.init("reboot_game");
await GetStorage.init("reboot_server");
await GetStorage.init("reboot_update");
await GetStorage.init("reboot_settings");
await GetStorage.init("reboot_hosting");
var gameController = GameController();
Get.put(gameController);
Get.put(ServerController());
Get.put(BuildController());
Get.put(SettingsController());
Get.put(HostingController());
await windowManager.ensureInitialized();
var controller = Get.find<SettingsController>();
var size = Size(controller.width, controller.height);
await windowManager.setSize(size);
if(controller.offsetX != null && controller.offsetY != null){
await windowManager.setPosition(Offset(controller.offsetX!, controller.offsetY!));
}else {
await windowManager.setAlignment(Alignment.center);
};
await Window.initialize();
await Window.setEffect(
effect: WindowEffect.acrylic,
color: Colors.transparent,
dark: SystemTheme.isDarkMode
);
var supabase = Supabase.instance.client;
await supabase.from('hosts')
.delete()
.match({'id': gameController.uuid});
var storageError = await _initStorage();
var urlError = await _initUrlHandler();
var windowError = await _initWindow();
var observerError = _initObservers();
runApp(const RebootApplication());
WidgetsBinding.instance.addPostFrameCallback((timeStamp) => _handleErrors([urlError, storageError, windowError, observerError]));
},
(error, stack) => onError(error, stack, false),
zoneSpecification: ZoneSpecification(
handleUncaughtError: (self, parent, zone, error, stacktrace) => onError(error, stacktrace, false)
handleUncaughtError: (self, parent, zone, error, stacktrace) => onError(error, stacktrace, false)
));
}
void _handleErrors(List<Object?> errors) => errors.where((element) => element != null).forEach((element) => onError(element, null, false));
Future<Object?> _initUrlHandler() async {
try {
registerProtocolHandler(kCustomUrlSchema, arguments: ['%s']);
var appLinks = AppLinks();
var initialUrl = await appLinks.getInitialAppLink();
if(initialUrl != null) {
}
var gameController = Get.find<GameController>();
var matchmakerController = Get.find<MatchmakerController>();
appLinks.uriLinkStream.listen((uri) {
var uuid = _parseCustomUrl(uri);
var server = gameController.findServerById(uuid);
if(server != null) {
matchmakerController.joinServer(server);
return;
}
showMessage(
"No server found: invalid or expired link",
duration: snackbarLongDuration,
severity: InfoBarSeverity.error
);
});
return null;
}catch(error) {
return error;
}
}
String _parseCustomUrl(Uri uri) => uri.host;
Future<Object?> _initWindow() async {
try {
await windowManager.ensureInitialized();
var settingsController = Get.find<SettingsController>();
var size = Size(settingsController.width, settingsController.height);
await windowManager.setSize(size);
if(settingsController.offsetX != null && settingsController.offsetY != null){
await windowManager.setPosition(Offset(settingsController.offsetX!, settingsController.offsetY!));
}else {
await windowManager.setAlignment(Alignment.center);
}
return null;
}catch(error) {
return error;
}
}
Object? _initObservers() {
try {
var gameController = Get.find<GameController>();
var gameInstance = gameController.instance.value;
gameInstance?.startObserver();
var hostingController = Get.find<HostingController>();
var hostingInstance = hostingController.instance.value;
hostingInstance?.startObserver();
return null;
}catch(error) {
return error;
}
}
Future<Object?> _initStorage() async {
try {
await GetStorage("reboot_game", settingsDirectory.path).initStorage;
await GetStorage("reboot_authenticator", settingsDirectory.path).initStorage;
await GetStorage("reboot_matchmaker", settingsDirectory.path).initStorage;
await GetStorage("reboot_update", settingsDirectory.path).initStorage;
await GetStorage("reboot_settings", settingsDirectory.path).initStorage;
await GetStorage("reboot_hosting", settingsDirectory.path).initStorage;
Get.put(GameController());
Get.put(AuthenticatorController());
Get.put(MatchmakerController());
Get.put(BuildController());
Get.put(SettingsController());
Get.put(HostingController());
var updateController = UpdateController();
Get.put(updateController);
updateController.update();
return null;
}catch(error) {
print(error);
return error;
}
}
class RebootApplication extends StatefulWidget {
const RebootApplication({Key? key}) : super(key: key);