From 140d27ff7bbd0b020930b8f8280abe93aea60a22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Fri, 25 Jul 2025 18:52:52 +0200 Subject: [PATCH 1/5] chore: Better error handling for push notifications --- lib/pages/chat_list/chat_list.dart | 3 +++ lib/utils/error_reporter.dart | 38 +++++++++++++++++++++++++++--- lib/utils/push_helper.dart | 6 ++++- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 7d64f13d1..9aa98047a 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -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 _checkTorBrowser(); + ErrorReporter(context).consumeTemporaryErrorLogFile(); + super.initState(); } diff --git a/lib/utils/error_reporter.dart b/lib/utils/error_reporter.dart index ad7d0b92a..e68f5cdea 100644 --- a/lib/utils/error_reporter.dart +++ b/lib/utils/error_reporter.dart @@ -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 _getTemporaryErrorLogFile() async { + final tempDir = await getTemporaryDirectory(); + return File(path.join(tempDir.path, 'error_log.txt')); + } + + Future 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 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( diff --git a/lib/utils/push_helper.dart b/lib/utils/push_helper.dart index 7133ad301..e5601fa70 100644 --- a/lib/utils/push_helper.dart +++ b/lib/utils/push_helper.dart @@ -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 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( From d0a0ff68cd45552678ec2528a3a795088b71a28b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Jul 2025 21:29:23 +0000 Subject: [PATCH 2/5] build: (deps): bump chewie from 1.11.3 to 1.12.1 Bumps [chewie](https://github.com/fluttercommunity/chewie) from 1.11.3 to 1.12.1. - [Changelog](https://github.com/fluttercommunity/chewie/blob/master/CHANGELOG.md) - [Commits](https://github.com/fluttercommunity/chewie/compare/v1.11.3...v1.12.1) --- updated-dependencies: - dependency-name: chewie dependency-version: 1.12.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pubspec.lock | 8 ++++---- pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index df1ef4786..af5e1bd39 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -186,10 +186,10 @@ packages: dependency: "direct main" description: name: chewie - sha256: "4d9554a8f87cc2dc6575dfd5ad20a4375015a29edd567fd6733febe6365e2566" + sha256: "19b93a1e60e4ba640a792208a6543f1c7d5b124d011ce0199e2f18802199d984" url: "https://pub.dev" source: hosted - version: "1.11.3" + version: "1.12.1" cli_config: dependency: transitive description: @@ -2117,10 +2117,10 @@ packages: dependency: "direct main" description: name: video_player - sha256: "7d78f0cfaddc8c19d4cb2d3bebe1bfef11f2103b0a03e5398b303a1bf65eeb14" + sha256: "0d55b1f1a31e5ad4c4967bfaa8ade0240b07d20ee4af1dfef5f531056512961a" url: "https://pub.dev" source: hosted - version: "2.9.5" + version: "2.10.0" video_player_android: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 026228670..a82599a9c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: async: ^2.11.0 badges: ^3.1.2 blurhash_dart: ^1.2.1 - chewie: ^1.11.3 + chewie: ^1.12.1 collection: ^1.18.0 cross_file: ^0.3.4+2 cupertino_icons: any From 8d0fb438847d047ec0509e901353d41e34a49b3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Jul 2025 21:29:28 +0000 Subject: [PATCH 3/5] build: (deps): bump sqflite_common_ffi from 2.3.5 to 2.3.6 Bumps [sqflite_common_ffi](https://github.com/tekartik/sqflite) from 2.3.5 to 2.3.6. - [Commits](https://github.com/tekartik/sqflite/commits) --- updated-dependencies: - dependency-name: sqflite_common_ffi dependency-version: 2.3.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pubspec.lock | 8 ++++---- pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index df1ef4786..69ee0733a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1805,10 +1805,10 @@ packages: dependency: "direct main" description: name: sqflite_common_ffi - sha256: "1f3ef3888d3bfbb47785cc1dda0dc7dd7ebd8c1955d32a9e8e9dae1e38d1c4c1" + sha256: "9faa2fedc5385ef238ce772589f7718c24cdddd27419b609bb9c6f703ea27988" url: "https://pub.dev" source: hosted - version: "2.3.5" + version: "2.3.6" sqlcipher_flutter_libs: dependency: "direct main" description: @@ -1821,10 +1821,10 @@ packages: dependency: transitive description: name: sqlite3 - sha256: "310af39c40dd0bb2058538333c9d9840a2725ae0b9f77e4fd09ad6696aa8f66e" + sha256: "608b56d594e4c8498c972c8f1507209f9fd74939971b948ddbbfbfd1c9cb3c15" url: "https://pub.dev" source: hosted - version: "2.7.5" + version: "2.7.7" stack_trace: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 026228670..1d8fd0a97 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -76,7 +76,7 @@ dependencies: share_plus: ^10.0.2 shared_preferences: ^2.2.0 # Pinned because https://github.com/flutter/flutter/issues/118401 slugify: ^2.0.0 - sqflite_common_ffi: ^2.3.3 + sqflite_common_ffi: ^2.3.6 sqlcipher_flutter_libs: ^0.6.1 swipe_to_action: ^0.3.0 tor_detector_web: ^1.1.0 From 9a2665830e5d77ad79aaa7e270e9c3bc2e43fcdc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Jul 2025 21:29:34 +0000 Subject: [PATCH 4/5] build: (deps): bump just_audio from 0.9.46 to 0.10.4 Bumps [just_audio](https://github.com/ryanheise/just_audio) from 0.9.46 to 0.10.4. - [Release notes](https://github.com/ryanheise/just_audio/releases) - [Commits](https://github.com/ryanheise/just_audio/compare/just_audio-v0.9.46...just_audio-v0.10.4) --- updated-dependencies: - dependency-name: just_audio dependency-version: 0.10.4 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pubspec.lock | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index df1ef4786..7aca1c9bd 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1032,10 +1032,10 @@ packages: dependency: "direct main" description: name: just_audio - sha256: f978d5b4ccea08f267dae0232ec5405c1b05d3f3cd63f82097ea46c015d5c09e + sha256: "679637a3ec5b6e00f36472f5a3663667df00ee4822cbf5dafca0f568c710960a" url: "https://pub.dev" source: hosted - version: "0.9.46" + version: "0.10.4" just_audio_platform_interface: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 026228670..0ab177ece 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -54,7 +54,7 @@ dependencies: image: ^4.1.7 image_picker: ^1.1.0 intl: any - just_audio: ^0.9.39 + just_audio: ^0.10.4 latlong2: ^0.9.1 linkify: ^5.0.0 matrix: ^1.0.1 From 8efab75db60e07907f8fb8107d82b29a4c012bde Mon Sep 17 00:00:00 2001 From: xabirequejo Date: Fri, 25 Jul 2025 15:53:29 +0200 Subject: [PATCH 5/5] chore(translations): Translated using Weblate (Basque) Currently translated at 100.0% (781 of 781 strings) Translation: FluffyChat/Translations Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/eu/ --- lib/l10n/intl_eu.arb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/l10n/intl_eu.arb b/lib/l10n/intl_eu.arb index fa723cc58..3cc9d8d4a 100644 --- a/lib/l10n/intl_eu.arb +++ b/lib/l10n/intl_eu.arb @@ -1911,7 +1911,7 @@ "type": "String", "description": "Usage hint for the command /invite" }, - "commandHint_join": "Batu gelara", + "commandHint_join": "Batu adierazitako gelara", "@commandHint_join": { "type": "String", "description": "Usage hint for the command /join" @@ -2608,9 +2608,9 @@ "@invite": {}, "invalidInput": "Sartu duzunak ez du balio!", "@invalidInput": {}, - "inviteGroupChat": "📨 Gonbidatu taldeko txatera", + "inviteGroupChat": "📨 Taldeko txatera gonbidapena", "@inviteGroupChat": {}, - "invitePrivateChat": "📨 Gonbidatu txat pribatura", + "invitePrivateChat": "📨 Txat pribatura gonbidapena", "@invitePrivateChat": {}, "banUserDescription": "Erabiltzailea txatetik kanporatu eta berriro sartzeko debekua ezarriko zaio; ezingo da berriro sartu debekua kendu arte.", "@banUserDescription": {}, @@ -3379,5 +3379,11 @@ "commandHint_logoutall": "Amaitu saioa aktibo dauden gailu guztietan", "@commandHint_logoutall": {}, "moreEvents": "Gertaera gehiago", - "@moreEvents": {} + "@moreEvents": {}, + "displayNavigationRail": "Erakutsi nabigazio-barra mugikorrean", + "@displayNavigationRail": {}, + "customReaction": "Erreakzio pertsonalizatua", + "@customReaction": {}, + "declineInvitation": "Uko egin gonbidapenari", + "@declineInvitation": {} }