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