main.dart 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import 'package:adaptive_theme/adaptive_theme.dart';
  2. import 'package:computer/computer.dart';
  3. import "package:ente_auth/app/view/app.dart";
  4. import 'package:ente_auth/core/configuration.dart';
  5. import 'package:ente_auth/core/constants.dart';
  6. import 'package:ente_auth/core/logging/super_logging.dart';
  7. import 'package:ente_auth/core/network.dart';
  8. import 'package:ente_auth/ente_theme_data.dart';
  9. import 'package:ente_auth/locale.dart';
  10. import 'package:ente_auth/services/authenticator_service.dart';
  11. import 'package:ente_auth/services/billing_service.dart';
  12. import 'package:ente_auth/services/notification_service.dart';
  13. import 'package:ente_auth/services/preference_service.dart';
  14. import 'package:ente_auth/services/update_service.dart';
  15. import 'package:ente_auth/services/user_remote_flag_service.dart';
  16. import 'package:ente_auth/services/user_service.dart';
  17. import 'package:ente_auth/store/code_store.dart';
  18. import 'package:ente_auth/ui/tools/app_lock.dart';
  19. import 'package:ente_auth/ui/tools/lock_screen.dart';
  20. import 'package:ente_auth/utils/crypto_util.dart';
  21. import 'package:flutter/foundation.dart';
  22. import "package:flutter/material.dart";
  23. import 'package:logging/logging.dart';
  24. import 'package:path_provider/path_provider.dart';
  25. final _logger = Logger("main");
  26. void main() async {
  27. WidgetsFlutterBinding.ensureInitialized();
  28. final savedThemeMode = await AdaptiveTheme.getThemeMode();
  29. await _runInForeground(savedThemeMode);
  30. }
  31. Future<void> _runInForeground(AdaptiveThemeMode? savedThemeMode) async {
  32. return await _runWithLogs(() async {
  33. _logger.info("Starting app in foreground");
  34. await _init(false, via: 'mainMethod');
  35. final Locale locale = await getLocale();
  36. UpdateService.instance.showUpdateNotification();
  37. runApp(
  38. AppLock(
  39. builder: (args) => App(locale: locale),
  40. lockScreen: const LockScreen(),
  41. enabled: Configuration.instance.shouldShowLockScreen(),
  42. locale: locale,
  43. lightTheme: lightThemeData,
  44. darkTheme: darkThemeData,
  45. savedThemeMode: _themeMode(savedThemeMode),
  46. ),
  47. );
  48. });
  49. }
  50. ThemeMode _themeMode(AdaptiveThemeMode? savedThemeMode) {
  51. if (savedThemeMode == null) return ThemeMode.system;
  52. if (savedThemeMode.isLight) return ThemeMode.light;
  53. if (savedThemeMode.isDark) return ThemeMode.dark;
  54. return ThemeMode.system;
  55. }
  56. Future _runWithLogs(Function() function, {String prefix = ""}) async {
  57. await SuperLogging.main(
  58. LogConfig(
  59. body: function,
  60. logDirPath: (await getApplicationSupportDirectory()).path + "/logs",
  61. maxLogFiles: 5,
  62. sentryDsn: sentryDSN,
  63. enableInDebugMode: true,
  64. prefix: prefix,
  65. ),
  66. );
  67. }
  68. Future<void> _init(bool bool, {String? via}) async {
  69. // Start workers asynchronously. No need to wait for them to start
  70. Computer.shared().turnOn(workersCount: 4, verbose: kDebugMode);
  71. CryptoUtil.init();
  72. await PreferenceService.instance.init();
  73. await CodeStore.instance.init();
  74. await Configuration.instance.init();
  75. await Network.instance.init();
  76. await UserService.instance.init();
  77. await UserRemoteFlagService.instance.init();
  78. await AuthenticatorService.instance.init();
  79. await BillingService.instance.init();
  80. await NotificationService.instance.init();
  81. await UpdateService.instance.init();
  82. }