diff --git a/.github/workflows/check_duplicates.yaml b/.github/workflows/check_duplicates.yaml new file mode 100644 index 000000000..0f37d621c --- /dev/null +++ b/.github/workflows/check_duplicates.yaml @@ -0,0 +1,30 @@ +# #Pangea +# name: Check duplicates + +# on: +# issues: +# types: [opened] + +# jobs: +# check_duplicates: +# runs-on: ubuntu-latest +# env: +# title: ${{ github.event.issue.title }} +# author: ${{ github.event.issue.user.login }} +# number: ${{ github.event.issue.number }} +# GH_TOKEN: ${{ github.token }} +# steps: +# - uses: actions/checkout@v4 +# - name: Check duplicates +# run: | +# issues=$(gh issue list --search '${{ env.title }}' --json number,title,url) +# number=${{ env.number }} +# issues_filtered=$(echo "$issues" | jq --arg num "$number" 'map(select(.number != ($num | tonumber)))') +# if [ "$(echo "$issues_filtered" | jq length)" -eq 0 ]; then +# echo "No duplicates found." +# else +# issues_markdown=$(echo "$issues_filtered" | jq -r '.[] | "- [" + .title + "](" + .url + ")"') +# formatted_body=$(echo -e "@${{ env.author }}\nPossible duplication of:\n$issues_markdown") +# gh issue comment ${{ github.event.issue.number }} --body "$formatted_body" +# fi +# Pangea# \ No newline at end of file diff --git a/assets/l10n/intl_de.arb b/assets/l10n/intl_de.arb index 77735f142..b78da3386 100644 --- a/assets/l10n/intl_de.arb +++ b/assets/l10n/intl_de.arb @@ -3291,5 +3291,99 @@ "notSupportedOnThisDevice": "Nicht unterstützt auf diesem Gerät", "@notSupportedOnThisDevice": {}, "ignoreUser": "Nutzer ignorieren", - "@ignoreUser": {} + "@ignoreUser": {}, + "notificationRuleEncryptedRoomOneToOneDescription": "Benachrichtigt den Benutzer über Nachrichten in verschlüsselten Eins-zu-Eins-Chats.", + "@notificationRuleEncryptedRoomOneToOneDescription": {}, + "commandHint_roomupgrade": "Aktualisieren Sie diesen Raum auf die angegebene Raumversion", + "@commandHint_roomupgrade": {}, + "notificationRuleMemberEvent": "Mitgliederveranstaltung", + "@notificationRuleMemberEvent": {}, + "notificationRuleInviteForMeDescription": "Benachrichtigt den Benutzer, wenn er in einen Raum eingeladen wird.", + "@notificationRuleInviteForMeDescription": {}, + "notificationRuleIsUserMentionDescription": "Benachrichtigt den Benutzer, wenn er in einer Nachricht direkt erwähnt wird.", + "@notificationRuleIsUserMentionDescription": {}, + "notificationRuleRoomnotifDescription": "Benachrichtigt den Benutzer, wenn eine Nachricht „@room“ enthält.", + "@notificationRuleRoomnotifDescription": {}, + "notificationRuleRoomOneToOneDescription": "Benachrichtigt den Benutzer über Nachrichten in Einzelchats.", + "@notificationRuleRoomOneToOneDescription": {}, + "notificationRuleEncryptedDescription": "Benachrichtigt den Benutzer über Nachrichten in verschlüsselten Räumen.", + "@notificationRuleEncryptedDescription": {}, + "notificationRuleJitsiDescription": "Benachrichtigt den Benutzer über Jitsi-Widget-Ereignisse.", + "@notificationRuleJitsiDescription": {}, + "checkList": "Checkliste", + "@checkList": {}, + "countInvited": "{count} invited", + "@countInvited": { + "type": "String", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "notificationRuleIsUserMention": "Benutzererwähnung", + "@notificationRuleIsUserMention": {}, + "notificationRuleContainsDisplayName": "Enthält den Anzeigenamen", + "@notificationRuleContainsDisplayName": {}, + "notificationRuleContainsDisplayNameDescription": "Benachrichtigt den Benutzer, wenn eine Nachricht seinen Anzeigenamen enthält.", + "@notificationRuleContainsDisplayNameDescription": {}, + "notificationRuleIsRoomMention": "Chat-Erwähnung", + "@notificationRuleIsRoomMention": {}, + "notificationRuleRoomnotif": "Chat-Benachritigung", + "@notificationRuleRoomnotif": {}, + "notificationRuleTombstoneDescription": "Benachrichtigt den Benutzer über Nachrichten zur Raumdeaktivierung.", + "@notificationRuleTombstoneDescription": {}, + "notificationRuleEncryptedRoomOneToOne": "Verschlüsselter Einzelchat", + "@notificationRuleEncryptedRoomOneToOne": {}, + "notificationRuleRoomOneToOne": "Einzelchat", + "@notificationRuleRoomOneToOne": {}, + "notificationRuleServerAclDescription": "Unterdrückt Benachrichtigungen für Server-ACL-Ereignisse.", + "@notificationRuleServerAclDescription": {}, + "unknownPushRule": "Unbekannte Push-Regel '{rule}'", + "@unknownPushRule": { + "type": "String", + "placeholders": { + "rule": { + "type": "String" + } + } + }, + "deletePushRuleCanNotBeUndone": "Wenn Sie diese Benachrichtigungseinstellung löschen, kann dies nicht rückgängig gemacht werden.", + "@deletePushRuleCanNotBeUndone": {}, + "crossVerifiedDevices": "Cross-verifizierte Geräte", + "@crossVerifiedDevices": {}, + "notificationRuleIsRoomMentionDescription": "Benachrichtigt den Benutzer, wenn ein Raum erwähnt wird.", + "@notificationRuleIsRoomMentionDescription": {}, + "notificationRuleRoomServerAcl": "Raumserver-ACL", + "@notificationRuleRoomServerAcl": {}, + "crossVerifiedDevicesIfEnabled": "Cross-verifizierte Geräte, falls aktiviert", + "@crossVerifiedDevicesIfEnabled": {}, + "notificationRuleServerAcl": "Unterdrücken von Server-ACL-Ereignissen", + "@notificationRuleServerAcl": {}, + "notificationRuleMemberEventDescription": "Unterdrückt Benachrichtigungen zu Mitgliedschaftsereignissen.", + "@notificationRuleMemberEventDescription": {}, + "sentVoiceMessage": "🎙️ {duration} - {sender}", + "@sentVoiceMessage": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "duration": { + "type": "String" + } + } + }, + "normalUser": "Normaler Benutzer", + "@normalUser": {}, + "setCustomPermissionLevel": "Benutzerdefinierte Berechtigungsstufe festlegen", + "@setCustomPermissionLevel": {}, + "setPermissionsLevelDescription": "Bitte wählen Sie unten eine vordefinierte Rolle aus oder geben Sie eine benutzerdefinierte Berechtigungsstufe zwischen 0 und 100 ein.", + "@setPermissionsLevelDescription": {}, + "approve": "Genehmigen", + "@approve": {}, + "youHaveKnocked": "Du hast geklopft", + "@youHaveKnocked": {}, + "pleaseWaitUntilInvited": "Bitte warte nun, bis dich jemand aus dem Raum auffordert.", + "@pleaseWaitUntilInvited": {} } diff --git a/lib/utils/error_reporter.dart b/lib/utils/error_reporter.dart index 60c64067b..c2b678622 100644 --- a/lib/utils/error_reporter.dart +++ b/lib/utils/error_reporter.dart @@ -1,9 +1,15 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:flutter_highlighter/flutter_highlighter.dart'; +import 'package:flutter_highlighter/themes/shades-of-purple.dart'; import 'package:matrix/matrix.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; class ErrorReporter { final BuildContext context; @@ -35,49 +41,45 @@ class ErrorReporter { ); } } - // final text = '$error\n${stackTrace ?? ''}'; - // await showAdaptiveDialog( - // context: context, - // builder: (context) => AlertDialog.adaptive( - // title: Text(L10n.of(context).reportErrorDescription), - // content: SizedBox( - // height: 256, - // width: 256, - // child: SingleChildScrollView( - // child: HighlightView( - // text, - // language: 'sh', - // theme: shadesOfPurpleTheme, - // ), - // ), - // ), - // actions: [ - // AdaptiveDialogAction( - // onPressed: () => Navigator.of(context).pop(), - // child: Text(L10n.of(context).close), - // ), - // AdaptiveDialogAction( - // onPressed: () => Clipboard.setData( - // ClipboardData(text: text), - // ), - // child: Text(L10n.of(context).copy), - // ), - // AdaptiveDialogAction( - // onPressed: () => launchUrl( - // AppConfig.newIssueUrl.resolveUri( - // Uri( - // queryParameters: { - // 'template': 'bug_report.yaml', - // 'title': '[BUG]: ${message ?? error.toString()}', - // }, - // ), + // final text = '$error\n${stackTrace ?? ''}'; + // await showAdaptiveDialog( + // context: context, + // builder: (context) => AlertDialog.adaptive( + // title: Text(L10n.of(context).reportErrorDescription), + // content: SizedBox( + // height: 256, + // width: 256, + // child: SingleChildScrollView( + // child: HighlightView( + // text, + // language: 'sh', + // theme: shadesOfPurpleTheme, // ), - // mode: LaunchMode.externalApplication, // ), - // child: Text(L10n.of(context).report), // ), - // ], - // ), - // ); - // #Pangea + // actions: [ + // AdaptiveDialogAction( + // onPressed: () => Navigator.of(context).pop(), + // child: Text(L10n.of(context).close), + // ), + // AdaptiveDialogAction( + // onPressed: () => Clipboard.setData( + // ClipboardData(text: text), + // ), + // child: Text(L10n.of(context).copy), + // ), + // AdaptiveDialogAction( + // onPressed: () => launchUrl( + // AppConfig.newIssueUrl.resolveUri( + // Uri(queryParameters: {'template': 'bug_report.yaml'}), + // ), + // mode: LaunchMode.externalApplication, + // ), + // child: Text(L10n.of(context).report), + // ), + // ], + // ), + // ); + // } + // Pangea# }