From 695374ee46be9e7e7478f5923dc3753cac9801f7 Mon Sep 17 00:00:00 2001 From: William Jordan-Cooley Date: Thu, 18 Jan 2024 08:13:10 -0500 Subject: [PATCH 1/8] handling no tokens in pangea message event --- .vscode/settings.json | 6 +- lib/pages/chat/chat_view.dart | 33 +++++------ lib/pangea/models/pangea_message_event.dart | 59 ++++++++++++------- .../models/pangea_representation_event.dart | 29 +++++---- lib/pangea/utils/error_handler.dart | 7 +-- 5 files changed, 77 insertions(+), 57 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index dd15e28ee..59cdec5c9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,9 +1,9 @@ { "dart.previewLsp": true, "editor.codeActionsOnSave": { - "source.fixAll": true, - "source.organizeImports": true, - "source.sortMembers": false + "source.fixAll": "explicit", + "source.organizeImports": "explicit", + "source.sortMembers": "never" }, "editor.formatOnSave": true } \ No newline at end of file diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 149055eb0..f801df69e 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -1,13 +1,7 @@ // Flutter imports: -import 'package:flutter/material.dart'; - import 'package:badges/badges.dart'; import 'package:desktop_drop/desktop_drop.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:future_loading_dialog/future_loading_dialog.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/chat.dart'; @@ -26,6 +20,11 @@ import 'package:fluffychat/widgets/chat_settings_popup_menu.dart'; import 'package:fluffychat/widgets/connection_status_header.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/unread_rooms_badge.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:future_loading_dialog/future_loading_dialog.dart'; +import 'package:matrix/matrix.dart'; + import '../../utils/stream_extension.dart'; import 'chat_emoji_picker.dart'; import 'chat_input_row.dart'; @@ -90,17 +89,17 @@ class ChatView extends StatelessWidget { }, itemBuilder: (context) => [ // #Pangea - // PopupMenuItem( - // value: _EventContextAction.info, - // child: Row( - // mainAxisSize: MainAxisSize.min, - // children: [ - // const Icon(Icons.info_outlined), - // const SizedBox(width: 12), - // Text(L10n.of(context)!.messageInfo), - // ], - // ), - // ), + PopupMenuItem( + value: _EventContextAction.info, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.info_outlined), + const SizedBox(width: 12), + Text(L10n.of(context)!.messageInfo), + ], + ), + ), // Pangea# if (controller.selectedEvents.single.status.isSent) PopupMenuItem( diff --git a/lib/pangea/models/pangea_message_event.dart b/lib/pangea/models/pangea_message_event.dart index d515c046f..9a8a45d44 100644 --- a/lib/pangea/models/pangea_message_event.dart +++ b/lib/pangea/models/pangea_message_event.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + import 'package:collection/collection.dart'; import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/constants/pangea_message_types.dart'; @@ -6,6 +8,7 @@ import 'package:fluffychat/pangea/models/choreo_record.dart'; import 'package:fluffychat/pangea/models/message_data_models.dart'; import 'package:fluffychat/pangea/models/pangea_representation_event.dart'; import 'package:fluffychat/pangea/utils/bot_name.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; @@ -84,10 +87,7 @@ class PangeaMessageEvent { _representations = []; - final bool latestHasTokens = - _latestEdit.content[ModelKey.tokensSent] != null; - - if (_latestEdit.content[ModelKey.originalSent] != null && latestHasTokens) { + if (_latestEdit.content[ModelKey.originalSent] != null) { try { _representations!.add( RepresentationEvent( @@ -95,9 +95,12 @@ class PangeaMessageEvent { _latestEdit.content[ModelKey.originalSent] as Map, ), - tokens: PangeaMessageTokens.fromJson( - _latestEdit.content[ModelKey.tokensSent] as Map, - ), + tokens: _latestEdit.content[ModelKey.tokensSent] != null + ? PangeaMessageTokens.fromJson( + _latestEdit.content[ModelKey.tokensSent] + as Map, + ) + : null, choreo: _latestEdit.content[ModelKey.choreoRecord] != null ? ChoreoRecord.fromJson( _latestEdit.content[ModelKey.choreoRecord] @@ -109,26 +112,37 @@ class PangeaMessageEvent { ); } catch (err, s) { ErrorHandler.logError( + m: "error parsing originalSent", e: err, s: s, ); } } - if (_latestEdit.content[ModelKey.originalWritten] != null && - latestHasTokens) { - _representations!.add( - RepresentationEvent( - content: PangeaRepresentation.fromJson( - _latestEdit.content[ModelKey.originalWritten] - as Map, + if (_latestEdit.content[ModelKey.originalWritten] != null) { + try { + _representations!.add( + RepresentationEvent( + content: PangeaRepresentation.fromJson( + _latestEdit.content[ModelKey.originalWritten] + as Map, + ), + tokens: _latestEdit.content[ModelKey.tokensWritten] != null + ? PangeaMessageTokens.fromJson( + _latestEdit.content[ModelKey.tokensWritten] + as Map, + ) + : null, + timeline: timeline, ), - tokens: PangeaMessageTokens.fromJson( - _latestEdit.content[ModelKey.tokensWritten] as Map, - ), - timeline: timeline, - ), - ); + ); + } catch (err, s) { + ErrorHandler.logError( + m: "error parsing originalWritten", + e: err, + s: s, + ); + } } _representations!.addAll( @@ -174,6 +188,11 @@ class PangeaMessageEvent { RepresentationEvent? rep = representationByLanguage(langCode); + //if event is less than 1 minute old, then print new event + if (isNew) { + debugger(when: kDebugMode); + } + while ((isNew || eventId.contains("web")) && tries < 20) { if (rep != null) return rep; await Future.delayed(const Duration(milliseconds: 500)); diff --git a/lib/pangea/models/pangea_representation_event.dart b/lib/pangea/models/pangea_representation_event.dart index 49e0f9358..b43979c45 100644 --- a/lib/pangea/models/pangea_representation_event.dart +++ b/lib/pangea/models/pangea_representation_event.dart @@ -1,15 +1,14 @@ import 'dart:developer'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; - import 'package:fluffychat/pangea/extensions/pangea_event_extension.dart'; import 'package:fluffychat/pangea/models/pangea_choreo_event.dart'; import 'package:fluffychat/pangea/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/repo/tokens_repo.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; + import '../../widgets/matrix.dart'; import '../constants/language_keys.dart'; import '../constants/pangea_event_types.dart'; @@ -70,8 +69,11 @@ class RepresentationEvent { return null; } - final Set tokenEvents = - _event!.aggregatedEvents(timeline, PangeaEventTypes.tokens); + final Set tokenEvents = _event?.aggregatedEvents( + timeline, + PangeaEventTypes.tokens, + ) ?? + {}; if (tokenEvents.isEmpty) return null; @@ -79,13 +81,13 @@ class RepresentationEvent { debugger(when: kDebugMode); Sentry.addBreadcrumb( Breadcrumb( - message: "Token events for representation ${_event!.eventId}: " + message: "Token events for representation ${_event?.eventId}: " "Content: ${tokenEvents.map((e) => e.content).toString()}" "Type: ${tokenEvents.map((e) => e.type).toString()}", ), ); ErrorHandler.logError( - m: 'should not have more than one tokenEvent per representation ${_event!.eventId}', + m: 'should not have more than one tokenEvent per representation ${_event?.eventId}', s: StackTrace.current, ); } @@ -97,6 +99,7 @@ class RepresentationEvent { Future?> tokensGlobal(BuildContext context) async { if (tokens != null) return tokens!; + if (_event == null) { debugger(when: kDebugMode); ErrorHandler.logError( @@ -141,16 +144,16 @@ class RepresentationEvent { } final Set choreoMatrixEvents = - _event!.aggregatedEvents(timeline, PangeaEventTypes.choreoRecord); + _event?.aggregatedEvents(timeline, PangeaEventTypes.choreoRecord) ?? {}; if (choreoMatrixEvents.isEmpty) return null; if (choreoMatrixEvents.length > 1) { debugger(when: kDebugMode); ErrorHandler.logError( - m: 'should not have more than one choreoEvent per representation ${_event!.eventId}', + m: 'should not have more than one choreoEvent per representation ${_event?.eventId}', s: StackTrace.current, - data: _event!.toJson(), + data: _event?.toJson(), ); } diff --git a/lib/pangea/utils/error_handler.dart b/lib/pangea/utils/error_handler.dart index 7784b1614..874ad4170 100644 --- a/lib/pangea/utils/error_handler.dart +++ b/lib/pangea/utils/error_handler.dart @@ -1,14 +1,12 @@ import 'dart:async'; +import 'package:fluffychat/pangea/config/environment.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; - import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:http/http.dart' as http; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/pangea/config/environment.dart'; - class ErrorHandler { ErrorHandler(); @@ -68,7 +66,8 @@ class ErrorHandler { String? m, Map? data, }) async { - if ((e ?? m) != null) debugPrint("error: ${e?.toString() ?? m}"); + if (m != null) debugPrint("error message: $m"); + if ((e ?? m) != null) debugPrint("error to string: ${e?.toString() ?? m}"); if (data != null) { Sentry.addBreadcrumb(Breadcrumb.fromJson(data)); } From f43c45dc496589032e52e04cce125ed8d41b2c62 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Mon, 22 Jan 2024 23:09:36 +0100 Subject: [PATCH 2/8] removed google patch again --- .github/workflows/release.yaml | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index d7275b990..fdc6acdf6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -57,8 +57,10 @@ jobs: with: flutter-version: ${{ env.FLUTTER_VERSION }} cache: true - - name: Apply Google Services Patch - run: git apply ./scripts/enable-android-google-services.patch + # #Pangea + #- name: Apply Google Services Patch + # run: git apply ./scripts/enable-android-google-services.patch + # Pangea# - name: Remove Emoji Font run: | rm -rf fonts/NotoEmoji @@ -126,8 +128,10 @@ jobs: ruby-version: 2.7 - name: Install Fastlane run: gem install fastlane -NV - - name: Apply Google Services Patch - run: git apply ./scripts/enable-android-google-services.patch + # #Pangea + #- name: Apply Google Services Patch + # run: git apply ./scripts/enable-android-google-services.patch + # Pangea# - name: Remove Emoji Font run: | rm -rf fonts/NotoEmoji @@ -162,7 +166,7 @@ jobs: deploy_web: runs-on: ubuntu-latest needs: build_web - environment: staging + environment: production steps: - uses: actions/checkout@v2 - name: Download web @@ -175,4 +179,10 @@ jobs: with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: ${{ secrets.AWS_DEFAULT_REGION }} \ No newline at end of file + aws-region: ${{ secrets.AWS_DEFAULT_REGION }} + - name: Copy files to the production website with the AWS CLI + run: | + aws s3 sync ./build/web s3://$WEBAPP_S3_BUCKET + - name: AWS CloudFront Invalidation + run: | + aws cloudfront create-invalidation --distribution-id $CF_DISTRIBUTION_ID --paths "/*" From 7662f40c57a40c384d6463f09eef8b8c374d1c50 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Mon, 22 Jan 2024 23:24:03 +0100 Subject: [PATCH 3/8] ... --- .github/workflows/release.yaml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index fdc6acdf6..c2f735775 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -57,10 +57,8 @@ jobs: with: flutter-version: ${{ env.FLUTTER_VERSION }} cache: true - # #Pangea - #- name: Apply Google Services Patch - # run: git apply ./scripts/enable-android-google-services.patch - # Pangea# + - name: Apply Google Services Patch + run: git apply ./scripts/enable-android-google-services.patch - name: Remove Emoji Font run: | rm -rf fonts/NotoEmoji @@ -128,10 +126,8 @@ jobs: ruby-version: 2.7 - name: Install Fastlane run: gem install fastlane -NV - # #Pangea - #- name: Apply Google Services Patch - # run: git apply ./scripts/enable-android-google-services.patch - # Pangea# + - name: Apply Google Services Patch + run: git apply ./scripts/enable-android-google-services.patch - name: Remove Emoji Font run: | rm -rf fonts/NotoEmoji From 8f718fbb2b12bd2337ed9d82bc4ef6fea1637cb6 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Mon, 22 Jan 2024 23:43:16 +0100 Subject: [PATCH 4/8] fix patch,added file upload for deploy web --- .github/workflows/release.yaml | 5 +++++ scripts/enable-android-google-services.patch | 14 ++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index c2f735775..6040ba7ed 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -34,6 +34,11 @@ jobs: with: name: Web Build path: pangeachat-web.tar.gz + - name: Upload files for deploy stage + uses: actions/upload-artifact@v3 + with: + name: web + path: build/web - name: Upload to release uses: actions/upload-release-asset@v1 env: diff --git a/scripts/enable-android-google-services.patch b/scripts/enable-android-google-services.patch index 7895a16eb..db9d5c3e0 100644 --- a/scripts/enable-android-google-services.patch +++ b/scripts/enable-android-google-services.patch @@ -1,5 +1,5 @@ diff --git a/android/app/build.gradle b/android/app/build.gradle -index 001fbd72..339b35af 100644 +index bf972f30..46cebdc6 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -70,6 +70,10 @@ @@ -28,13 +28,15 @@ index 001fbd72..339b35af 100644 -//apply plugin: 'com.google.gms.google-services' +apply plugin: 'com.google.gms.google-services' diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro -new file mode 100644 -index 00000000..40570865 ---- /dev/null +index d0e0fbc9..0a546da0 100644 +--- a/android/app/proguard-rules.pro +++ b/android/app/proguard-rules.pro -@@ -0,0 +1,41 @@ +@@ -1 +1,42 @@ +--keep class net.sqlcipher.** { *; } +\ No newline at end of file +-optimizationpasses 5 +## Flutter wrapper ++-keep class net.sqlcipher.** { *; } +-keep class io.flutter.app.** { *; } +-keep class io.flutter.plugin.** { *; } +-keep class io.flutter.util.** { *; } @@ -108,4 +110,4 @@ index 1afc4606..894d1571 100644 - override fun provideFlutterEngine(context: Context): FlutterEngine? { return provideEngine(this) - } \ No newline at end of file + } From 1126860ab1d0b192e5846be828a3c68e0a8ebaf5 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Tue, 23 Jan 2024 02:07:27 +0100 Subject: [PATCH 5/8] missing env vars --- .github/workflows/release.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 6040ba7ed..a6b5cb959 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -168,6 +168,9 @@ jobs: runs-on: ubuntu-latest needs: build_web environment: production + env: + WEBAPP_S3_BUCKET: ${{ vars.WEBAPP_S3_BUCKET }} + CF_DISTRIBUTION_ID: ${{ secrets.CF_DISTRIBUTION_ID }} steps: - uses: actions/checkout@v2 - name: Download web From 6ad0ca154d99bc8f9d163a5c508e5e0769bc9500 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Tue, 23 Jan 2024 02:25:12 +0100 Subject: [PATCH 6/8] missing env vars2 --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index a6b5cb959..a78ec2574 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -170,7 +170,7 @@ jobs: environment: production env: WEBAPP_S3_BUCKET: ${{ vars.WEBAPP_S3_BUCKET }} - CF_DISTRIBUTION_ID: ${{ secrets.CF_DISTRIBUTION_ID }} + CF_DISTRIBUTION_ID: ${{ vars.CF_DISTRIBUTION_ID }} steps: - uses: actions/checkout@v2 - name: Download web From 8f0f61d20573b2dc89e7b6c65323d8c71cb3434d Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 24 Jan 2024 12:06:56 -0500 Subject: [PATCH 7/8] commented out message info popup --- lib/pages/chat/chat_view.dart | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index f801df69e..d058dea52 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -89,17 +89,17 @@ class ChatView extends StatelessWidget { }, itemBuilder: (context) => [ // #Pangea - PopupMenuItem( - value: _EventContextAction.info, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Icon(Icons.info_outlined), - const SizedBox(width: 12), - Text(L10n.of(context)!.messageInfo), - ], - ), - ), + // PopupMenuItem( + // value: _EventContextAction.info, + // child: Row( + // mainAxisSize: MainAxisSize.min, + // children: [ + // const Icon(Icons.info_outlined), + // const SizedBox(width: 12), + // Text(L10n.of(context)!.messageInfo), + // ], + // ), + // ), // Pangea# if (controller.selectedEvents.single.status.isSent) PopupMenuItem( From 20be3b79ef5a25eb1eace9aa15b85c74566c3ec4 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 24 Jan 2024 12:31:01 -0500 Subject: [PATCH 8/8] some fixes --- lib/pangea/models/pangea_message_event.dart | 9 +++------ .../models/pangea_representation_event.dart | 20 +++++++++---------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/lib/pangea/models/pangea_message_event.dart b/lib/pangea/models/pangea_message_event.dart index 9a8a45d44..aa4b745cd 100644 --- a/lib/pangea/models/pangea_message_event.dart +++ b/lib/pangea/models/pangea_message_event.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:collection/collection.dart'; import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/constants/pangea_message_types.dart'; @@ -8,7 +6,6 @@ import 'package:fluffychat/pangea/models/choreo_record.dart'; import 'package:fluffychat/pangea/models/message_data_models.dart'; import 'package:fluffychat/pangea/models/pangea_representation_event.dart'; import 'package:fluffychat/pangea/utils/bot_name.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; @@ -189,9 +186,9 @@ class PangeaMessageEvent { RepresentationEvent? rep = representationByLanguage(langCode); //if event is less than 1 minute old, then print new event - if (isNew) { - debugger(when: kDebugMode); - } + // if (isNew) { + // debugger(when: kDebugMode); + // } while ((isNew || eventId.contains("web")) && tries < 20) { if (rep != null) return rep; diff --git a/lib/pangea/models/pangea_representation_event.dart b/lib/pangea/models/pangea_representation_event.dart index b43979c45..64b16fa79 100644 --- a/lib/pangea/models/pangea_representation_event.dart +++ b/lib/pangea/models/pangea_representation_event.dart @@ -61,11 +61,11 @@ class RepresentationEvent { if (_tokens != null) return _tokens!.tokens; if (_event == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: '_event and _tokens both null', - s: StackTrace.current, - ); + // debugger(when: kDebugMode); + // ErrorHandler.logError( + // m: '_event and _tokens both null', + // s: StackTrace.current, + // ); return null; } @@ -101,11 +101,11 @@ class RepresentationEvent { if (tokens != null) return tokens!; if (_event == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: '_event and _tokens both null', - s: StackTrace.current, - ); + // debugger(when: kDebugMode); + // ErrorHandler.logError( + // m: '_event and _tokens both null', + // s: StackTrace.current, + // ); return null; }