chore: Better error handling for push notifications
This commit is contained in:
parent
ce9d21a203
commit
140d27ff7b
3 changed files with 43 additions and 4 deletions
|
|
@ -15,6 +15,7 @@ import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
|||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pages/chat_list/chat_list_view.dart';
|
||||
import 'package:fluffychat/utils/error_reporter.dart';
|
||||
import 'package:fluffychat/utils/localized_exception_extension.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
import 'package:fluffychat/utils/platform_infos.dart';
|
||||
|
|
@ -420,6 +421,8 @@ class ChatListController extends State<ChatList>
|
|||
|
||||
_checkTorBrowser();
|
||||
|
||||
ErrorReporter(context).consumeTemporaryErrorLogFile();
|
||||
|
||||
super.initState();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,13 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import 'package:flutter_highlighter/flutter_highlighter.dart';
|
||||
import 'package:flutter_highlighter/themes/shades-of-purple.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
|
|
@ -11,16 +15,44 @@ import 'package:fluffychat/l10n/l10n.dart';
|
|||
import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
|
||||
|
||||
class ErrorReporter {
|
||||
final BuildContext context;
|
||||
final BuildContext? context;
|
||||
final String? message;
|
||||
|
||||
const ErrorReporter(this.context, [this.message]);
|
||||
|
||||
void onErrorCallback(Object error, [StackTrace? stackTrace]) async {
|
||||
Future<File> _getTemporaryErrorLogFile() async {
|
||||
final tempDir = await getTemporaryDirectory();
|
||||
return File(path.join(tempDir.path, 'error_log.txt'));
|
||||
}
|
||||
|
||||
Future<void> writeToTemporaryErrorLogFile(
|
||||
Object error, [
|
||||
StackTrace? stackTrace,
|
||||
]) async {
|
||||
final file = await _getTemporaryErrorLogFile();
|
||||
if (await file.exists()) await file.delete();
|
||||
await file.writeAsString(
|
||||
'[${DateTime.now().toIso8601String()}] $message - $error\n$stackTrace',
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> consumeTemporaryErrorLogFile() async {
|
||||
final file = await _getTemporaryErrorLogFile();
|
||||
if (!(await file.exists())) return;
|
||||
final content = await file.readAsString();
|
||||
|
||||
_onErrorCallback(content);
|
||||
}
|
||||
|
||||
void onErrorCallback(Object error, [StackTrace? stackTrace]) {
|
||||
Logs().e(message ?? 'Error caught', error, stackTrace);
|
||||
final text = '$error\n${stackTrace ?? ''}';
|
||||
return _onErrorCallback(text);
|
||||
}
|
||||
|
||||
void _onErrorCallback(String text) async {
|
||||
await showAdaptiveDialog(
|
||||
context: context,
|
||||
context: context!,
|
||||
builder: (context) => AlertDialog.adaptive(
|
||||
title: Text(L10n.of(context).reportErrorDescription),
|
||||
content: SizedBox(
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import 'package:fluffychat/config/app_config.dart';
|
|||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/utils/client_download_content_extension.dart';
|
||||
import 'package:fluffychat/utils/client_manager.dart';
|
||||
import 'package:fluffychat/utils/error_reporter.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
import 'package:fluffychat/utils/platform_infos.dart';
|
||||
|
||||
|
|
@ -35,7 +36,10 @@ Future<void> pushHelper(
|
|||
flutterLocalNotificationsPlugin: flutterLocalNotificationsPlugin,
|
||||
);
|
||||
} catch (e, s) {
|
||||
Logs().v('Push Helper has crashed!', e, s);
|
||||
Logs().e('Push Helper has crashed! Writing into temporary file', e, s);
|
||||
|
||||
const ErrorReporter(null, 'Push Helper has crashed!')
|
||||
.writeToTemporaryErrorLogFile(e, s);
|
||||
|
||||
l10n ??= await lookupL10n(const Locale('en'));
|
||||
flutterLocalNotificationsPlugin.show(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue