diff --git a/lib/core/constants.dart b/lib/core/constants.dart index b4b641167..7a4b630cd 100644 --- a/lib/core/constants.dart +++ b/lib/core/constants.dart @@ -1,2 +1,4 @@ const int THUMBNAIL_SMALL_SIZE = 128; const int THUMBNAIL_LARGE_SIZE = 512; +const String SENTRY_DSN = + "http://96780dc0b00f4c69a16c02e90d379996@3.211.17.56/2"; diff --git a/lib/face_search_manager.dart b/lib/face_search_manager.dart index 3fe395edb..c18ac63a8 100644 --- a/lib/face_search_manager.dart +++ b/lib/face_search_manager.dart @@ -1,13 +1,13 @@ import 'package:dio/dio.dart'; -import 'package:logger/logger.dart'; import 'core/configuration.dart'; import 'db/db_helper.dart'; +import 'package:logging/logging.dart'; import 'models/face.dart'; import 'models/photo.dart'; class FaceSearchManager { - final _logger = Logger(); + final logger = Logger("FaceSearchManager"); final _dio = Dio(); FaceSearchManager._privateConstructor(); @@ -37,6 +37,6 @@ class FaceSearchManager { } void _onError(error) { - _logger.e(error); + logger.severe(error); } } diff --git a/lib/main.dart b/lib/main.dart index a26c433e4..86b72b98b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,24 +1,38 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:logger/logger.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:photos/core/constants.dart'; import 'core/configuration.dart'; import 'photo_loader.dart'; import 'photo_sync_manager.dart'; import 'ui/home_widget.dart'; import 'package:provider/provider.dart'; import 'package:sentry/sentry.dart'; +import 'package:super_logging/super_logging.dart'; +import 'package:logging/logging.dart'; + +final logger = Logger("main"); void main() async { WidgetsFlutterBinding.ensureInitialized(); + SuperLogging.main(LogConfig( + body: _main, + sentryDsn: SENTRY_DSN, + logDirPath: (await getTemporaryDirectory()).path + "/logs", + enableInDebugMode: true, + )); +} + +void _main() { + WidgetsFlutterBinding.ensureInitialized(); + Configuration.instance.init(); PhotoSyncManager.instance.sync(); - final SentryClient sentry = new SentryClient( - dsn: "http://96780dc0b00f4c69a16c02e90d379996@sentry.ente.io/2"); + final SentryClient sentry = new SentryClient(dsn: SENTRY_DSN); FlutterError.onError = (FlutterErrorDetails details) async { - print('Flutter error caught by Sentry'); FlutterError.dumpErrorToConsole(details, forceReport: true); _sendErrorToSentry(sentry, details.exception, details.stack); }; @@ -30,12 +44,12 @@ void main() async { ); } -void _sendErrorToSentry( - SentryClient sentry, Object error, StackTrace stackTrace) { +void _sendErrorToSentry(SentryClient sentry, Object error, StackTrace stack) { + logger.shout("Uncaught error", error, stack); try { sentry.captureException( exception: error, - stackTrace: stackTrace, + stackTrace: stack, ); print('Error sent to sentry.io: $error'); } catch (e) { diff --git a/lib/photo_loader.dart b/lib/photo_loader.dart index e8954ba5a..e0bf0d5b0 100644 --- a/lib/photo_loader.dart +++ b/lib/photo_loader.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:logger/logger.dart'; +import 'package:logging/logging.dart'; import 'db/db_helper.dart'; import 'models/photo.dart'; class PhotoLoader extends ChangeNotifier { - final logger = Logger(); + final logger = Logger("PhotoLoader"); final _photos = List(); PhotoLoader._privateConstructor(); @@ -26,7 +26,7 @@ class PhotoLoader extends ChangeNotifier { void reloadPhotos() async { await loadPhotos(); - logger.i("Reloading..."); + logger.info("Reloading..."); notifyListeners(); } } diff --git a/lib/photo_sync_manager.dart b/lib/photo_sync_manager.dart index d7b2478bc..8dd30407f 100644 --- a/lib/photo_sync_manager.dart +++ b/lib/photo_sync_manager.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:io'; -import 'package:logger/logger.dart'; +import 'package:logging/logging.dart'; import 'core/event_bus.dart'; import 'db/db_helper.dart'; import 'events/user_authenticated_event.dart'; @@ -18,7 +18,7 @@ import 'core/configuration.dart'; import 'events/remote_sync_event.dart'; class PhotoSyncManager { - final _logger = Logger(); + final _logger = Logger("PhotoSyncManager"); final _dio = Dio(); bool _isSyncInProgress = false; @@ -36,11 +36,11 @@ class PhotoSyncManager { Future sync() async { if (_isSyncInProgress) { - _logger.w("Sync already in progress, skipping."); + _logger.warning("Sync already in progress, skipping."); return; } _isSyncInProgress = true; - _logger.i("Syncing..."); + _logger.info("Syncing..."); final prefs = await SharedPreferences.getInstance(); var lastDBUpdateTimestamp = prefs.getInt(_lastDBUpdateTimestampKey); @@ -62,7 +62,7 @@ class PhotoSyncManager { try { photos.add(await Photo.fromAsset(pathEntity, entity)); } catch (e) { - _logger.e(e); + _logger.severe(e); } } } @@ -103,7 +103,7 @@ class PhotoSyncManager { if (lastSyncTimestamp == null) { lastSyncTimestamp = 0; } - _logger.i("Last sync timestamp: " + lastSyncTimestamp.toString()); + _logger.info("Last sync timestamp: " + lastSyncTimestamp.toString()); _getDiff(lastSyncTimestamp).then((diff) { if (diff != null) { @@ -140,7 +140,7 @@ class PhotoSyncManager { .download( Configuration.instance.getHttpEndpoint() + "/" + photo.remotePath, localPath) - .catchError((e) => _logger.e(e)); + .catchError((e) => _logger.severe(e)); // TODO: Save path photo.pathName = localPath; await DatabaseHelper.instance.insertPhoto(photo); @@ -155,7 +155,7 @@ class PhotoSyncManager { queryParameters: { "token": Configuration.instance.getToken(), "lastSyncTimestamp": lastSyncTimestamp - }).catchError((e) => _logger.e(e)); + }).catchError((e) => _logger.severe(e)); if (response != null) { Bus.instance.fire(RemoteSyncEvent(true)); return (response.data["diff"] as List) @@ -179,10 +179,10 @@ class PhotoSyncManager { .post(Configuration.instance.getHttpEndpoint() + "/upload", data: formData) .then((response) { - _logger.i(response.toString()); + _logger.info(response.toString()); var photo = Photo.fromJson(response.data); return photo; - }).catchError((e) => _logger.e(e)); + }).catchError((e) => _logger.severe(e)); } Future _deletePhotos() async { @@ -199,7 +199,7 @@ class PhotoSyncManager { queryParameters: { "token": Configuration.instance.getToken(), "fileID": photo.uploadedFileId - }).catchError((e) => _logger.e(e)); + }).catchError((e) => _logger.severe(e)); } Future _initializeDirectories() async { @@ -211,7 +211,7 @@ class PhotoSyncManager { Future _insertPhotosToDB( List photos, SharedPreferences prefs, int timestamp) async { await DatabaseHelper.instance.insertPhotos(photos); - _logger.i("Inserted " + photos.length.toString() + " photos."); + _logger.info("Inserted " + photos.length.toString() + " photos."); PhotoLoader.instance.reloadPhotos(); return await prefs.setInt(_lastDBUpdateTimestampKey, timestamp); } diff --git a/lib/ui/album_widget.dart b/lib/ui/album_widget.dart index fc4e0148b..bd882048a 100644 --- a/lib/ui/album_widget.dart +++ b/lib/ui/album_widget.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:logger/logger.dart'; import 'package:photos/models/album.dart'; import 'package:photos/models/photo.dart'; import 'package:photos/ui/gallery.dart'; import 'package:photos/ui/gallery_app_bar_widget.dart'; +import 'package:logging/logging.dart'; class AlbumPage extends StatefulWidget { final Album album; @@ -15,6 +15,7 @@ class AlbumPage extends StatefulWidget { } class _AlbumPageState extends State { + final logger = Logger("AlbumPageState"); Set _selectedPhotos = Set(); @override @@ -32,7 +33,7 @@ class _AlbumPageState extends State { setState(() { for (Photo deletedPhoto in deletedPhotos) { var index = widget.album.photos.indexOf(deletedPhoto); - Logger().i("Deleting " + index.toString()); + logger.info("Deleting " + index.toString()); widget.album.photos.removeAt(index); } _selectedPhotos.clear(); diff --git a/lib/ui/detail_page.dart b/lib/ui/detail_page.dart index fd1a9f785..1d16f79bf 100644 --- a/lib/ui/detail_page.dart +++ b/lib/ui/detail_page.dart @@ -1,11 +1,11 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:logger/logger.dart'; import 'package:photos/core/lru_map.dart'; import 'package:photos/models/photo.dart'; import 'extents_page_view.dart'; import 'zoomable_image.dart'; import 'package:photos/utils/share_util.dart'; +import 'package:logging/logging.dart'; class DetailPage extends StatefulWidget { final List photos; @@ -18,6 +18,7 @@ class DetailPage extends StatefulWidget { } class _DetailPageState extends State { + final logger = Logger("DetailPageState"); bool _shouldDisableScroll = false; List _photos; int _selectedIndex = 0; @@ -34,7 +35,7 @@ class _DetailPageState extends State { @override Widget build(BuildContext context) { - Logger().i("Opening " + + logger.info("Opening " + _photos[_selectedIndex].toString() + ". " + _selectedIndex.toString() + @@ -72,7 +73,7 @@ class _DetailPageState extends State { }, extents: 1, onPageChanged: (int index) { - Logger().i("onPageChanged to " + index.toString()); + logger.info("onPageChanged to " + index.toString()); _selectedIndex = index; }, physics: _shouldDisableScroll diff --git a/lib/ui/gallery.dart b/lib/ui/gallery.dart index a2d296e3f..a1b171241 100644 --- a/lib/ui/gallery.dart +++ b/lib/ui/gallery.dart @@ -3,7 +3,6 @@ import 'dart:collection'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:logger/logger.dart'; import 'package:photos/core/thumbnail_cache.dart'; import 'package:photos/models/photo.dart'; import 'package:photos/photo_loader.dart'; diff --git a/lib/ui/gallery_app_bar_widget.dart b/lib/ui/gallery_app_bar_widget.dart index a318ff1bf..6131b5ec5 100644 --- a/lib/ui/gallery_app_bar_widget.dart +++ b/lib/ui/gallery_app_bar_widget.dart @@ -1,6 +1,5 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:logger/logger.dart'; import 'package:photos/core/event_bus.dart'; import 'package:photos/db/db_helper.dart'; import 'package:photos/events/remote_sync_event.dart'; @@ -67,6 +66,8 @@ class _GalleryAppBarWidgetState extends State { actions.add(IconButton( icon: Icon(Icons.sync_problem), onPressed: () { + final list = new List(); + print(list[0]); _openSyncConfiguration(context); }, )); diff --git a/lib/ui/zoomable_image.dart b/lib/ui/zoomable_image.dart index 4e098d7cb..9bb4c6c93 100644 --- a/lib/ui/zoomable_image.dart +++ b/lib/ui/zoomable_image.dart @@ -1,6 +1,5 @@ import 'dart:typed_data'; import 'package:flutter/widgets.dart'; -import 'package:logger/logger.dart'; import 'package:photos/core/image_cache.dart'; import 'package:photos/core/thumbnail_cache.dart'; import 'package:photos/models/photo.dart'; diff --git a/lib/user_authenticator.dart b/lib/user_authenticator.dart index e6fcb3630..d2a87ad3a 100644 --- a/lib/user_authenticator.dart +++ b/lib/user_authenticator.dart @@ -1,5 +1,5 @@ import 'package:dio/dio.dart'; -import 'package:logger/logger.dart'; +import 'package:logging/logging.dart'; import 'core/configuration.dart'; import 'core/event_bus.dart'; @@ -7,7 +7,7 @@ import 'events/user_authenticated_event.dart'; class UserAuthenticator { final _dio = Dio(); - final _logger = Logger(); + final _logger = Logger("UserAuthenticator"); UserAuthenticator._privateConstructor(); @@ -31,7 +31,7 @@ class UserAuthenticator { return false; } }).catchError((e) { - _logger.e(e.toString()); + _logger.severe(e.toString()); return false; }); } @@ -57,7 +57,7 @@ class UserAuthenticator { } } }).catchError((e) { - _logger.e(e.toString()); + _logger.severe(e.toString()); throw e; }); } diff --git a/lib/utils/endpoint_finder.dart b/lib/utils/endpoint_finder.dart index 139e97e21..1575ae172 100644 --- a/lib/utils/endpoint_finder.dart +++ b/lib/utils/endpoint_finder.dart @@ -2,10 +2,11 @@ import 'dart:async'; import 'package:connectivity/connectivity.dart'; import 'package:dio/dio.dart'; -import 'package:logger/logger.dart'; +import 'package:logging/logging.dart'; class EndpointFinder { final _dio = Dio(); + final logger = Logger("EndpointFinder"); EndpointFinder._privateConstructor() { _dio.options = BaseOptions(connectTimeout: 200); @@ -15,7 +16,7 @@ class EndpointFinder { Future findEndpoint() { return (Connectivity().getWifiIP()).then((ip) async { - Logger().i(ip); + logger.info(ip); final ipSplit = ip.split("."); var prefix = ""; for (int index = 0; index < ipSplit.length; index++) { @@ -23,7 +24,7 @@ class EndpointFinder { prefix += ipSplit[index] + "."; } } - Logger().i(prefix); + logger.info(prefix); for (int i = 1; i <= 255; i++) { var endpoint = prefix + i.toString(); @@ -43,7 +44,7 @@ class EndpointFinder { Future ping(String endpoint) async { return _dio.get("http://" + endpoint + ":8080/ping").then((response) { if (response.data["message"] == "pong") { - Logger().i("Found " + endpoint); + logger.info("Found " + endpoint); return true; } else { return false; diff --git a/pubspec.lock b/pubspec.lock index 106a37dbd..eb32f81d2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -85,6 +85,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.3" + device_info: + dependency: transitive + description: + name: device_info + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.2+2" dio: dependency: "direct main" description: @@ -142,6 +149,13 @@ packages: description: flutter source: sdk version: "0.0.0" + get_ip: + dependency: transitive + description: + name: get_ip + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.0" http: dependency: transitive description: @@ -163,13 +177,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.4" - io: + intl: dependency: transitive description: - name: io + name: intl url: "https://pub.dartlang.org" source: hosted - version: "0.3.4" + version: "0.16.1" json_annotation: dependency: transitive description: @@ -184,13 +198,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.0" - logger: - dependency: "direct main" + logging: + dependency: transitive description: - name: logger + name: logging url: "https://pub.dartlang.org" source: hosted - version: "0.8.3" + version: "0.11.4" matcher: dependency: transitive description: @@ -205,6 +219,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.8" + package_info: + dependency: transitive + description: + name: package_info + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.0+17" path: dependency: transitive description: @@ -371,6 +392,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.5" + super_logging: + dependency: "direct main" + description: + name: super_logging + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" synchronized: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index a73584df4..183c1f7fe 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -28,7 +28,6 @@ dependencies: sqflite: ^1.3.0 path_provider: ^1.6.5 shared_preferences: ^0.5.6 - logger: ^0.8.3 dio: ^3.0.9 local_image_provider: ^1.0.0 crypto: ^2.1.3 @@ -42,6 +41,7 @@ dependencies: connectivity: ^0.4.8+2 event_bus: ^1.1.1 sentry: ">=3.0.0 <4.0.0" + super_logging: ^1.0.0 dev_dependencies: flutter_test: