main.dart 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:path_provider/path_provider.dart';
  4. import 'package:photos/core/constants.dart';
  5. import 'package:photos/core/configuration.dart';
  6. import 'package:photos/favorite_files_repository.dart';
  7. import 'package:photos/folder_service.dart';
  8. import 'package:photos/memories_service.dart';
  9. import 'package:photos/photo_sync_manager.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. import 'package:worker_manager/worker_manager.dart';
  15. final logger = Logger("main");
  16. void main() async {
  17. WidgetsFlutterBinding.ensureInitialized();
  18. await SuperLogging.main(LogConfig(
  19. body: _main,
  20. logDirPath: (await getTemporaryDirectory()).path + "/logs",
  21. enableInDebugMode: true,
  22. ));
  23. }
  24. void _main() async {
  25. await Executor().warmUp();
  26. await Configuration.instance.init();
  27. await PhotoSyncManager.instance.init();
  28. await MemoriesService.instance.init();
  29. await FavoriteFilesRepository.instance.init();
  30. _sync();
  31. final SentryClient sentry = new SentryClient(dsn: SENTRY_DSN);
  32. FlutterError.onError = (FlutterErrorDetails details) async {
  33. FlutterError.dumpErrorToConsole(details, forceReport: true);
  34. _sendErrorToSentry(sentry, details.exception, details.stack);
  35. };
  36. runZoned(
  37. () => runApp(MyApp()),
  38. onError: (Object error, StackTrace stackTrace) =>
  39. _sendErrorToSentry(sentry, error, stackTrace),
  40. );
  41. }
  42. void _sync() async {
  43. FolderSharingService.instance.sync().catchError((e) {
  44. logger.warning(e);
  45. });
  46. PhotoSyncManager.instance.sync().catchError((e) {
  47. logger.warning(e);
  48. });
  49. }
  50. void _sendErrorToSentry(SentryClient sentry, Object error, StackTrace stack) {
  51. logger.shout("Uncaught error", error, stack);
  52. try {
  53. sentry.captureException(
  54. exception: error,
  55. stackTrace: stack,
  56. );
  57. print('Error sent to sentry.io: $error');
  58. } catch (e) {
  59. print('Sending report to sentry.io failed: $e');
  60. print('Original error: $error');
  61. }
  62. }
  63. class MyApp extends StatelessWidget with WidgetsBindingObserver {
  64. final _title = 'ente';
  65. @override
  66. Widget build(BuildContext context) {
  67. WidgetsBinding.instance.addObserver(this);
  68. return MaterialApp(
  69. title: _title,
  70. theme: ThemeData.dark(),
  71. home: HomeWidget(_title),
  72. );
  73. }
  74. @override
  75. void didChangeAppLifecycleState(AppLifecycleState state) {
  76. if (state == AppLifecycleState.resumed) {
  77. _sync();
  78. }
  79. }
  80. }