Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion lib/image_library/model/saved_image_model.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import '../../util/app_logger.dart';

class SavedImage {
final String id;
Expand Down Expand Up @@ -49,7 +50,7 @@ class SavedImage {
}
return null;
} catch (e) {
debugPrint('Error reading image file: $e');
AppLogger.error('Error reading image file: $e');
return null;
}
}
Expand Down
37 changes: 19 additions & 18 deletions lib/image_library/provider/image_library_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:magicepaperapp/image_library/model/saved_image_model.dart';
import 'dart:convert';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import '../../util/app_logger.dart';

class ImageLibraryProvider extends ChangeNotifier {
List<SavedImage> _savedImages = [];
Expand Down Expand Up @@ -82,10 +83,10 @@ class ImageLibraryProvider extends ChangeNotifier {
_searchQuery = '';
_selectedSource = 'all';

debugPrint('All data cleared successfully');
AppLogger.info('All data cleared successfully');
notifyListeners();
} catch (e) {
debugPrint('Error clearing all data: $e');
AppLogger.error('Error clearing all data: $e');
rethrow;
}
}
Expand All @@ -107,30 +108,30 @@ class ImageLibraryProvider extends ChangeNotifier {
if (await image.fileExists()) {
_savedImages.add(image);
} else {
debugPrint('Image file not found: ${image.filePath}');
AppLogger.warning('Image file not found: ${image.filePath}');
}
} catch (e) {
debugPrint('Error parsing individual image metadata: $e');
AppLogger.error('Error parsing individual image metadata: $e');
}
}
} catch (e) {
debugPrint('Error parsing JSON metadata file: $e');
AppLogger.error('Error parsing JSON metadata file: $e');
}
}
}
if (_savedImages.isNotEmpty) {
const encoder = JsonEncoder.withIndent(' ');
final imageJsonList = _savedImages.map((img) => img.toJson()).toList();
final prettyJson = encoder.convert(imageJsonList);
debugPrint('Loaded image metadata (JSON):\n$prettyJson');
AppLogger.debug('Loaded image metadata (JSON):\n$prettyJson');
} else {
debugPrint('No saved images to print.');
AppLogger.debug('No saved images to print.');
}
await _cleanupOrphanedFiles();
debugPrint('Loaded ${_savedImages.length} images successfully');
AppLogger.info('Loaded ${_savedImages.length} images successfully');
_isInitialized = true;
} catch (e) {
debugPrint('Error loading saved images: $e');
AppLogger.error('Error loading saved images: $e');
} finally {
_isLoading = false;
notifyListeners();
Expand Down Expand Up @@ -162,10 +163,10 @@ class ImageLibraryProvider extends ChangeNotifier {
);
_savedImages.add(savedImage);
await _persistMetadata();
debugPrint('Successfully saved image: $name (${imageData.length} bytes)');
AppLogger.info('Successfully saved image: $name (${imageData.length} bytes)');
notifyListeners();
} catch (e) {
debugPrint('Error saving image: $e');
AppLogger.error('Error saving image: $e');
rethrow;
}
}
Expand All @@ -184,7 +185,7 @@ class ImageLibraryProvider extends ChangeNotifier {
await _persistMetadata();
notifyListeners();
} catch (e) {
debugPrint('Error deleting image: $e');
AppLogger.error('Error deleting image: $e');
rethrow;
}
}
Expand All @@ -206,7 +207,7 @@ class ImageLibraryProvider extends ChangeNotifier {
await _persistMetadata();
notifyListeners();
} catch (e) {
debugPrint('Error renaming image: $e');
AppLogger.error('Error renaming image: $e');
rethrow;
}
}
Expand All @@ -229,10 +230,10 @@ class ImageLibraryProvider extends ChangeNotifier {
final jsonString = jsonEncode(imageJsonList);
await _metadataFile!.writeAsString(jsonString);
final fileSize = await _metadataFile!.length();
debugPrint('Metadata file size: $fileSize bytes');
debugPrint('Metadata saved to: ${_metadataFile!.path}');
AppLogger.debug('Metadata file size: $fileSize bytes');
AppLogger.debug('Metadata saved to: ${_metadataFile!.path}');
} catch (e) {
debugPrint('Error persisting metadata: $e');
AppLogger.error('Error persisting metadata: $e');
rethrow;
}
}
Expand All @@ -244,12 +245,12 @@ class ImageLibraryProvider extends ChangeNotifier {
final validFilePaths = _savedImages.map((img) => img.filePath).toSet();
for (final file in files) {
if (file is File && !validFilePaths.contains(file.path)) {
debugPrint('Deleting orphaned file: ${file.path}');
AppLogger.debug('Deleting orphaned file: ${file.path}');
await file.delete();
}
}
} catch (e) {
debugPrint('Error cleaning up orphaned files: $e');
AppLogger.error('Error cleaning up orphaned files: $e');
}
}
}
3 changes: 2 additions & 1 deletion lib/image_library/services/image_operations_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import 'package:image/image.dart' as img;
import 'dart:typed_data';
import 'package:magicepaperapp/l10n/app_localizations.dart';
import 'package:magicepaperapp/provider/getitlocator.dart';
import '../../util/app_logger.dart';

AppLocalizations appLocalizations = getIt.get<AppLocalizations>();

Expand Down Expand Up @@ -234,7 +235,7 @@ class ImageOperationsService {
imageFrame.dispose();
return properties;
} catch (e) {
debugPrint('Error loading image properties: $e');
AppLogger.error('Error loading image properties: $e');
return null;
}
}
Expand Down
5 changes: 3 additions & 2 deletions lib/image_library/services/image_save_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:permission_handler/permission_handler.dart';
import 'package:magicepaperapp/image_library/provider/image_library_provider.dart';
import 'package:magicepaperapp/image_library/services/image_operations_service.dart';
import 'package:magicepaperapp/image_library/widgets/dialogs/image_save_dialog.dart';
import '../../util/app_logger.dart';

class ImageSaveHandler {
final BuildContext context;
Expand Down Expand Up @@ -87,7 +88,7 @@ class ImageSaveHandler {
}
return _hasStoragePermission;
} catch (e) {
debugPrint('Error requesting storage permission: $e');
AppLogger.error('Error requesting storage permission: $e');
_hasStoragePermission = false;
return false;
}
Expand All @@ -100,7 +101,7 @@ class ImageSaveHandler {
await requestStoragePermission();
},
onCancel: () {
debugPrint('Storage permission dialog cancelled');
AppLogger.debug('Storage permission dialog cancelled');
},
colorAccent: colorAccent,
colorBlack: colorBlack,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:magicepaperapp/image_library/utils/date_utils.dart' as dt;
import 'package:magicepaperapp/image_library/utils/filter_utils.dart';
import 'package:magicepaperapp/image_library/utils/source_utils.dart';
import 'package:magicepaperapp/constants/color_constants.dart';
import '../../../util/app_logger.dart';

class ImagePropertiesDialog extends StatefulWidget {
final SavedImage image;
Expand Down Expand Up @@ -41,7 +42,7 @@ class _ImagePropertiesDialogState extends State<ImagePropertiesDialog> {
_isLoadingProperties = false;
});
} catch (e) {
debugPrint('Error in dialog loading image properties: $e');
AppLogger.error('Error in dialog loading image properties: $e');
setState(() {
_isLoadingProperties = false;
});
Expand Down
1 change: 1 addition & 0 deletions lib/ndef_screen/controller/nfc_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:magicepaperapp/ndef_screen/services/ndef_record_parser.dart';
import 'package:magicepaperapp/ndef_screen/services/nfc_availability_service.dart';
import 'package:magicepaperapp/ndef_screen/services/nfc_operations_service.dart';
import 'package:ndef/ndef.dart' as ndef;
import '../../util/app_logger.dart';

AppLocalizations appLocalizations = getIt.get<AppLocalizations>();

Expand Down
3 changes: 2 additions & 1 deletion lib/ndef_screen/ndef_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import 'package:magicepaperapp/ndef_screen/widgets/nfc_read_card.dart';
import 'package:magicepaperapp/ndef_screen/app_launcher_card.dart';
import 'package:magicepaperapp/view/widget/common_scaffold_widget.dart';
import 'dart:async';
import '../util/app_logger.dart';

AppLocalizations appLocalizations = getIt.get<AppLocalizations>();

Expand Down Expand Up @@ -106,7 +107,7 @@ class _NDEFScreenState extends State<NDEFScreen> with WidgetsBindingObserver {
previousAvailability, _nfcController.availability);
}
} catch (e) {
debugPrint('Error checking NFC availability: $e');
AppLogger.error('Error checking NFC availability: $e');
}
}

Expand Down
3 changes: 2 additions & 1 deletion lib/ndef_screen/nfc_read_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:magicepaperapp/ndef_screen/widgets/nfc_status_card.dart';
import 'package:magicepaperapp/ndef_screen/widgets/nfc_read_card.dart';
import 'package:magicepaperapp/view/widget/common_scaffold_widget.dart';
import 'dart:async';
import '../util/app_logger.dart';

AppLocalizations appLocalizations = getIt.get<AppLocalizations>();

Expand Down Expand Up @@ -84,7 +85,7 @@ class _NFCReadScreenState extends State<NFCReadScreen>
);
}
} catch (e) {
debugPrint('Error checking NFC availability: $e');
AppLogger.error('Error checking NFC availability: $e');
}
}

Expand Down
3 changes: 2 additions & 1 deletion lib/ndef_screen/nfc_write_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import 'package:magicepaperapp/ndef_screen/widgets/nfc_status_card.dart';
import 'package:magicepaperapp/ndef_screen/widgets/nfc_write_card.dart';
import 'package:magicepaperapp/view/widget/common_scaffold_widget.dart';
import 'dart:async';
import '../util/app_logger.dart';

AppLocalizations appLocalizations = getIt.get<AppLocalizations>();

Expand Down Expand Up @@ -107,7 +108,7 @@ class _NFCWriteScreenState extends State<NFCWriteScreen>
);
}
} catch (e) {
debugPrint('Error checking NFC availability: $e');
AppLogger.error('Error checking NFC availability: $e');
}
}

Expand Down
5 changes: 3 additions & 2 deletions lib/ndef_screen/services/nfc_session_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';
import 'package:magicepaperapp/l10n/app_localizations.dart';
import 'package:magicepaperapp/provider/getitlocator.dart';
import '../../util/app_logger.dart';

AppLocalizations appLocalizations = getIt.get<AppLocalizations>();

Expand All @@ -14,11 +15,11 @@ class NFCSessionManager {
await FlutterNfcKit.finish();
}
} catch (e) {
debugPrint('${appLocalizations.errorFinishingNfcSession}$e');
AppLogger.error('${appLocalizations.errorFinishingNfcSession}$e');
try {
await FlutterNfcKit.finish();
} catch (e2) {
debugPrint('${appLocalizations.secondaryCleanupAlsoFailed}$e2');
AppLogger.error('${appLocalizations.secondaryCleanupAlsoFailed}$e2');
}
}
}
Expand Down
37 changes: 37 additions & 0 deletions lib/util/app_logger.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import 'package:logger/logger.dart';

class AppLogger {
static final Logger _logger = Logger(
printer: PrettyPrinter(
methodCount: 2,
errorMethodCount: 8,
lineLength: 120,
colors: true,
printEmojis: true,
),
);

static void debug(String message, [dynamic error, StackTrace? stackTrace]) {
_logger.d(message, error: error, stackTrace: stackTrace);
}

static void info(String message, [dynamic error, StackTrace? stackTrace]) {
_logger.i(message, error: error, stackTrace: stackTrace);
}

static void warning(String message, [dynamic error, StackTrace? stackTrace]) {
_logger.w(message, error: error, stackTrace: stackTrace);
}

static void error(String message, [dynamic error, StackTrace? stackTrace]) {
_logger.e(message, error: error, stackTrace: stackTrace);
}

static void verbose(String message, [dynamic error, StackTrace? stackTrace]) {
_logger.t(message, error: error, stackTrace: stackTrace);
}

static void fatal(String message, [dynamic error, StackTrace? stackTrace]) {
_logger.f(message, error: error, stackTrace: stackTrace);
}
}
3 changes: 2 additions & 1 deletion lib/util/nfc_settings_launcher.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'app_logger.dart';

class NFCSettingsLauncher {
static const platform = MethodChannel('org.fossasia.magicepaperapp/settings');
Expand All @@ -8,7 +9,7 @@ class NFCSettingsLauncher {
try {
await platform.invokeMethod('openNFCSettings');
} on PlatformException catch (e) {
debugPrint("Failed to open NFC settings: ${e.message}");
AppLogger.error("Failed to open NFC settings: ${e.message}");
}
}
}
9 changes: 5 additions & 4 deletions lib/util/protocol.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import 'package:magicepaperapp/util/magic_epaper_firmware.dart';
import 'package:magicepaperapp/util/nfc_settings_launcher.dart';
import 'package:magicepaperapp/l10n/app_localizations.dart';
import 'package:magicepaperapp/provider/getitlocator.dart';
import 'app_logger.dart';

AppLocalizations appLocalizations = getIt.get<AppLocalizations>();

Expand Down Expand Up @@ -84,7 +85,7 @@ class Protocol {
await _sleep();
for (int i = 0; i < chunks.length; i++) {
Uint8List chunk = chunks[i];
debugPrint(
AppLogger.debug(
"${appLocalizations.writingChunk}${i + 1}/${chunks.length} len ${chunk.lengthInBytes}: ${chunk.map((e) => e.toRadixString(16)).toList()}");

await writeMsg(chunk);
Expand All @@ -95,7 +96,7 @@ class Protocol {
"${appLocalizations.writingChunk}${i + 1}/${chunks.length}");
}
}
debugPrint(appLocalizations.transferredSuccessfully);
AppLogger.info(appLocalizations.transferredSuccessfully);
}

List<Uint8List> _split({required Uint8List data, int chunkSize = 220}) {
Expand Down Expand Up @@ -137,10 +138,10 @@ class Protocol {
onProgress?.call(0.0, appLocalizations.waitingForNfcTag);
Fluttertoast.showToast(
msg: appLocalizations.bringPhoneNearMagicEpaperHardware);
debugPrint(appLocalizations.bringPhoneNearMagicEpaperHardware);
AppLogger.info(appLocalizations.bringPhoneNearMagicEpaperHardware);

final tag = await FlutterNfcKit.poll(timeout: timeout);
debugPrint(appLocalizations.gotTag);
AppLogger.info(appLocalizations.gotTag);
onTagDetected?.call();
onProgress?.call(0.1, appLocalizations.tagDetectedInitializing);

Expand Down
5 changes: 3 additions & 2 deletions lib/view/image_editor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import 'package:magicepaperapp/provider/image_loader.dart';
import 'package:magicepaperapp/util/epd/epd.dart';
import 'package:magicepaperapp/constants/color_constants.dart';
import 'package:magicepaperapp/l10n/app_localizations.dart';
import '../util/app_logger.dart';
import 'package:magicepaperapp/provider/getitlocator.dart';

AppLocalizations appLocalizations = getIt.get<AppLocalizations>();
Expand Down Expand Up @@ -75,7 +76,7 @@ class _ImageEditorState extends State<ImageEditor> {
await loadDefaultImage(imgLoader);
}
} catch (e) {
debugPrint('Error loading initial image: $e');
AppLogger.error('Error loading initial image: $e');
}
}

Expand All @@ -90,7 +91,7 @@ class _ImageEditorState extends State<ImageEditor> {
height: widget.device.height,
);
} catch (e) {
debugPrint('Error loading default image: $e');
AppLogger.error('Error loading default image: $e');
}
}

Expand Down
Loading
Loading