main.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import 'dart:async';
  2. import 'package:computer/computer.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:path_provider/path_provider.dart';
  5. import 'package:photos/core/constants.dart';
  6. import 'package:photos/core/configuration.dart';
  7. import 'package:photos/services/favorites_service.dart';
  8. import 'package:photos/services/memories_service.dart';
  9. import 'package:photos/services/sync_service.dart';
  10. import 'package:photos/ui/home_widget.dart';
  11. import 'package:sentry/sentry.dart';
  12. import 'package:super_logging/super_logging.dart';
  13. import 'package:logging/logging.dart';
  14. final _logger = Logger("main");
  15. void main() async {
  16. WidgetsFlutterBinding.ensureInitialized();
  17. await SuperLogging.main(LogConfig(
  18. body: _main,
  19. logDirPath: (await getTemporaryDirectory()).path + "/logs",
  20. enableInDebugMode: true,
  21. ));
  22. }
  23. void _main() async {
  24. Computer().turnOn(
  25. workersCount: 4,
  26. areLogsEnabled: false,
  27. );
  28. await Configuration.instance.init();
  29. await SyncService.instance.init();
  30. await MemoriesService.instance.init();
  31. await FavoritesService.instance.init();
  32. _sync();
  33. final SentryClient sentry = new SentryClient(dsn: SENTRY_DSN);
  34. FlutterError.onError = (FlutterErrorDetails details) async {
  35. FlutterError.dumpErrorToConsole(details, forceReport: true);
  36. _sendErrorToSentry(sentry, details.exception, details.stack);
  37. };
  38. runZoned(
  39. () => runApp(MyApp()),
  40. onError: (Object error, StackTrace stackTrace) =>
  41. _sendErrorToSentry(sentry, error, stackTrace),
  42. );
  43. }
  44. void _sync() async {
  45. SyncService.instance.sync().catchError((e, s) {
  46. _logger.severe("Sync error", e, s);
  47. });
  48. }
  49. void _sendErrorToSentry(SentryClient sentry, Object error, StackTrace stack) {
  50. _logger.shout("Uncaught error", error, stack);
  51. try {
  52. sentry.captureException(
  53. exception: error,
  54. stackTrace: stack,
  55. );
  56. print('Error sent to sentry.io: $error');
  57. } catch (e) {
  58. print('Sending report to sentry.io failed: $e');
  59. print('Original error: $error');
  60. }
  61. }
  62. class MyApp extends StatelessWidget with WidgetsBindingObserver {
  63. final _title = 'ente';
  64. @override
  65. Widget build(BuildContext context) {
  66. WidgetsBinding.instance.addObserver(this);
  67. return MaterialApp(
  68. title: _title,
  69. theme: ThemeData.dark().copyWith(
  70. hintColor: Colors.grey,
  71. accentColor: Colors.pink[400],
  72. buttonColor: Colors.pink,
  73. buttonTheme: ButtonThemeData().copyWith(
  74. buttonColor: Colors.pink,
  75. ),
  76. toggleableActiveColor: Colors.pink[400],
  77. ),
  78. home: HomeWidget(_title),
  79. );
  80. }
  81. @override
  82. void didChangeAppLifecycleState(AppLifecycleState state) {
  83. if (state == AppLifecycleState.resumed) {
  84. _sync();
  85. }
  86. }
  87. }