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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -56,7 +56,7 @@ class MobileAppIntegrationManager {
}); });
}).catchError((e) { }).catchError((e) {
completer.complete(); completer.complete();
Logger.e("Error registering the app: ${e.toString()}"); Logger.e("Error registering the app: $e");
}); });
return completer.future; return completer.future;
} else { } else {
@ -98,10 +98,10 @@ class MobileAppIntegrationManager {
completer.complete(); completer.complete();
}).catchError((e) { }).catchError((e) {
if (e is http.Response && e.statusCode == 410) { if (e is http.Response && e.statusCode == 410) {
Logger.e("MobileApp integration was removed"); Logger.e("MobileApp integration was removed", skipCrashlytics: true);
_askToRegisterApp(); _askToRegisterApp();
} else { } else {
Logger.e("Error updating app registration: ${e.toString()}"); Logger.e("Error updating app registration: $e");
eventBus.fire(ShowPopupDialogEvent( eventBus.fire(ShowPopupDialogEvent(
title: "App integration is not working properly", title: "App integration is not working properly",
body: "Something wrong with HA Client integration on your Home Assistant server. Please report this issue.", 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); print(data);
} }
static void e(String message, {dynamic stacktrace}) { static void e(String message, {dynamic stacktrace, bool skipCrashlytics: false}) {
_writeToLog(ErrorLevel.ERROR, message, stacktrace); _writeToLog(ErrorLevel.ERROR, message, stacktrace, skipCrashlytics);
} }
static void w(String message) { static void w(String message) {
_writeToLog(ErrorLevel.WARNING, message, null); _writeToLog(ErrorLevel.WARNING, message, null, true);
} }
static void d(String message) { 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) { if (isInDebugMode) {
debugPrint('$message'); debugPrint('$message');
} else if (level == ErrorLevel.ERROR) { } else if (!skipCrashlytics) {
Crashlytics.instance.recordError('$message', stacktrace); Crashlytics.instance.recordError('$message', stacktrace);
} }
DateTime t = DateTime.now(); DateTime t = DateTime.now();