Error handling improvements

This commit is contained in:
Yegor Vialov 2020-05-01 16:24:13 +00:00
parent 7a0ce93cfd
commit 46ca1948e2
8 changed files with 24 additions and 25 deletions

View File

@ -65,8 +65,8 @@ class CardData {
}
return CardData(rawData);
}
} catch (error) {
Logger.e('Error parsing card: $error');
} catch (error, stacktrace) {
Logger.e('Parsing ${rawData['type']} card: $error', stacktrace: stacktrace);
return ErrorCardData(rawData);
}
}
@ -148,9 +148,8 @@ class CardData {
break;
}
}
} catch (e) {
Logger.e('Error filtering ${entityWrapper.entity.entityId} by $allowedState');
Logger.e('$e');
} catch (e, stacktrace) {
Logger.e('Error filtering ${entityWrapper.entity.entityId} by $allowedState: $e', stacktrace: stacktrace);
}
}
}

View File

@ -29,8 +29,8 @@ class TimerEntity extends Entity {
Logger.e("Strange $entityId duration format: $durationSource");
duration = Duration(seconds: 0);
}
} catch (e) {
Logger.e("Error parsing duration for $entityId: ${e.toString()}");
} catch (e, stacktrace) {
Logger.e("Error parsing duration for $entityId: $e", stacktrace: stacktrace);
duration = Duration(seconds: 0);
}
} else {

View File

@ -30,8 +30,8 @@ class _TimerStateState extends State<TimerState> {
.difference(entity.lastUpdatedTimestamp)
.inSeconds;
remaining = Duration(seconds: entity.duration.inSeconds - passed);
} catch (e) {
Logger.e("Error calculating ${entity.entityId} remaining time: ${e.toString()}");
} catch (e, stacktrace) {
Logger.e("Error calculating ${entity.entityId} remaining time: $e", stacktrace: stacktrace);
remaining = Duration(seconds: 0);
}
});

View File

@ -163,7 +163,7 @@ const appVersion = "$appVersionNumber-$appVersionAdd";
Future<void> _reportError(dynamic error, dynamic stackTrace) async {
// Print the exception to the console.
if (Logger.isInDebugMode) {
Logger.e('Caught error: $error');
Logger.e('Caught error: $error', skipCrashlytics: true);
Logger.p(stackTrace);
}
Crashlytics.instance.recordError(error, stackTrace);
@ -175,7 +175,7 @@ void main() async {
SyncfusionLicense.registerLicense(secrets['syncfusion_license_key']);
FlutterError.onError = (FlutterErrorDetails details) {
Logger.e("Caut Flutter runtime error: ${details.exception}");
Logger.e("Caut Flutter runtime error: ${details.exception}", skipCrashlytics: true);
if (Logger.isInDebugMode) {
FlutterError.dumpErrorToConsole(details);
}

View File

@ -31,7 +31,7 @@ class AuthManager {
eventBus.fire(StartAuthEvent(oauthUrl, false));
completer.complete(tempToken);
}).catchError((e) {
Logger.e("Error getting temp token: ${e.toString()}");
Logger.e("Error getting temp token: $e");
eventBus.fire(StartAuthEvent(oauthUrl, false));
completer.completeError(HACException("Error getting temp token"));
}).whenComplete(() => flutterWebviewPlugin.close());

View File

@ -65,9 +65,9 @@ class ConnectionManager {
.encodeComponent(
'https://ha-client.app/service/auth_callback.html')}";
settingsLoaded = true;
} catch (e) {
} catch (e, stacktrace) {
completer.completeError(HACException("Error reading login details", actions: [HAErrorAction.tryAgain(type: HAErrorActionType.FULL_RELOAD), HAErrorAction.loginAgain()]));
Logger.e("Cannt read secure storage. Need to relogin.");
Logger.e("Error reading secure storage: $e", stacktrace: stacktrace);
stopInit = true;
}
}
@ -212,7 +212,7 @@ class ConnectionManager {
//Logger.d("[Received] <== Request id ${data['id']} was successful");
_messageResolver["${data["id"]}"]?.complete(data["result"]);
} else if (data["id"] != null) {
Logger.e("[Received] <== Error received on request id ${data['id']}: ${data['error']}");
Logger.e("[Received] <== Error received on request id ${data['id']}: ${data['error']}", skipCrashlytics: true);
_messageResolver["${data["id"]}"]?.completeError("${data["error"]["code"]}: ${data["error"]["message"]}");
}
_messageResolver.remove("${data["id"]}");
@ -243,7 +243,7 @@ class ConnectionManager {
}
void _handleSocketError(e, Completer connectionCompleter) {
Logger.e("Socket stream Error: $e");
Logger.e("Socket stream Error: $e", skipCrashlytics: true);
_disconnect().then((_) {
if (!connectionCompleter.isCompleted) {
isConnected = false;

View File

@ -56,7 +56,7 @@ class MobileAppIntegrationManager {
});
}).catchError((e) {
completer.complete();
Logger.e("Error registering the app: ${e.toString()}");
Logger.e("Error registering the app: $e");
});
return completer.future;
} else {
@ -98,10 +98,10 @@ class MobileAppIntegrationManager {
completer.complete();
}).catchError((e) {
if (e is http.Response && e.statusCode == 410) {
Logger.e("MobileApp integration was removed");
Logger.e("MobileApp integration was removed", skipCrashlytics: true);
_askToRegisterApp();
} else {
Logger.e("Error updating app registration: ${e.toString()}");
Logger.e("Error updating app registration: $e");
eventBus.fire(ShowPopupDialogEvent(
title: "App integration is not working properly",
body: "Something wrong with HA Client integration on your Home Assistant server. Please report this issue.",

View File

@ -29,22 +29,22 @@ class Logger {
print(data);
}
static void e(String message, {dynamic stacktrace}) {
_writeToLog(ErrorLevel.ERROR, message, stacktrace);
static void e(String message, {dynamic stacktrace, bool skipCrashlytics: false}) {
_writeToLog(ErrorLevel.ERROR, message, stacktrace, skipCrashlytics);
}
static void w(String message) {
_writeToLog(ErrorLevel.WARNING, message, null);
_writeToLog(ErrorLevel.WARNING, message, null, true);
}
static void d(String message) {
_writeToLog(ErrorLevel.DEBUG, message, null);
_writeToLog(ErrorLevel.DEBUG, message, null, true);
}
static void _writeToLog(ErrorLevel level, String message, dynamic stacktrace) {
static void _writeToLog(ErrorLevel level, String message, dynamic stacktrace, bool skipCrashlytics) {
if (isInDebugMode) {
debugPrint('$message');
} else if (level == ErrorLevel.ERROR) {
} else if (!skipCrashlytics) {
Crashlytics.instance.recordError('$message', stacktrace);
}
DateTime t = DateTime.now();