Error handling improvements
This commit is contained in:
parent
7a0ce93cfd
commit
46ca1948e2
@ -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');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
|
@ -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;
|
||||||
|
@ -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.",
|
||||||
|
@ -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();
|
||||||
|
Reference in New Issue
Block a user