From b46e18a06c354a74d9e417f82bf2d20dc888e7ab Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Mon, 27 Nov 2023 19:54:37 +0100 Subject: [PATCH 01/33] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..9ea517492 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +app.staging.pangea.chat \ No newline at end of file From 0bcc0c1a1a6ef81654a28a18cd3113ccbcec0b15 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Mon, 27 Nov 2023 19:56:07 +0100 Subject: [PATCH 02/33] Delete CNAME --- CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 CNAME diff --git a/CNAME b/CNAME deleted file mode 100644 index 9ea517492..000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -app.staging.pangea.chat \ No newline at end of file From 749daca14b76fc61d56b38b81b615bd9eeceea16 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 28 Nov 2023 14:55:49 -0500 Subject: [PATCH 03/33] grant trial to users in their first week --- android/app/build.gradle | 6 +- assets/l10n/intl_en.arb | 15 +- lib/config/app_config.dart | 6 +- .../controllers/subscription_controller.dart | 61 ++++++-- lib/pangea/models/base_subscription_info.dart | 15 ++ .../settings_subscription.dart | 16 +- .../settings_subscription_view.dart | 85 ++++++----- needed-translations.txt | 138 ++++++++++++------ 8 files changed, 224 insertions(+), 118 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index ef59c2ac4..304191471 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -66,8 +66,10 @@ android { buildTypes { debug { signingConfig signingConfigs.debug - applicationIdSuffix ".debug" - versionNameSuffix "-debug" + // #Pangea - this causes errors with android debug build + // applicationIdSuffix ".debug" + // versionNameSuffix "-debug" + // Pangea# } release { signingConfig signingConfigs.release diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 6d31bf6f9..56e2c09cc 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -3339,7 +3339,12 @@ "downloadTxtFile": "Download Text File", "downloadCSVFile": "Download CSV File", "promotionalSubscriptionDesc": "You currently have a lifetime promotional subscription. Message support@pangea.chat for help changing your subscription.", - "originalSubscriptionPlatform": "Subscription purchased through", + "originalSubscriptionPlatform": "Subscription purchased through {purchasePlatform}", + "@originalSubscriptionPlatform": { + "placeholders": { + "purchasePlatform": {} + } + }, "oneWeekTrial": "One Week Trial", "creatingSpacePleaseWait": "Creating space. Please wait...", "downloadXLSXFile": "Download Excel File", @@ -3937,5 +3942,11 @@ "searchChatsRooms": "Search for #chats, @users...", "groupName": "Group name", "createGroupAndInviteUsers": "Create a group and invite users", - "groupCanBeFoundViaSearch": "Group can be found via search" + "groupCanBeFoundViaSearch": "Group can be found via search", + "trialExpiration": "Your free trial expires on {expiration}", + "@trialExpiration": { + "placeholders": { + "expiration": {} + } + } } diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index 6b10cd43f..e93fd1891 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -1,11 +1,10 @@ // Dart imports: import 'dart:ui'; -// Package imports: -import 'package:matrix/matrix.dart'; - // Project imports: import 'package:fluffychat/pangea/config/environment.dart'; +// Package imports: +import 'package:matrix/matrix.dart'; abstract class AppConfig { // #Pangea @@ -124,6 +123,7 @@ abstract class AppConfig { "https://buy.stripe.com/test_bIY6ssd8z5Uz8ec8ww"; static String iosPromoCode = "https://apps.apple.com/redeem?ctx=offercodes&id=1445118630&code="; + static String trialSubscriptionId = "pangea_new_user_trial"; // Pangea# static void loadFromJson(Map json) { diff --git a/lib/pangea/controllers/subscription_controller.dart b/lib/pangea/controllers/subscription_controller.dart index 1ade5895a..a3b05b8b3 100644 --- a/lib/pangea/controllers/subscription_controller.dart +++ b/lib/pangea/controllers/subscription_controller.dart @@ -2,17 +2,8 @@ import 'dart:async'; import 'dart:convert'; -// Flutter imports: -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - // Package imports: import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:http/http.dart'; -import 'package:purchases_flutter/purchases_flutter.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - // Project imports: import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/controllers/base_controller.dart'; @@ -26,6 +17,12 @@ import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; import 'package:fluffychat/pangea/widgets/subscription/subscription_paywall.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:http/http.dart'; +import 'package:purchases_flutter/purchases_flutter.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class SubscriptionController extends BaseController { late PangeaController _pangeaController; @@ -63,6 +60,9 @@ class SubscriptionController extends BaseController { : MobileSubscriptionInfo(pangeaController: _pangeaController); await subscription!.configure(); + if (!isSubscribed) { + addNewAccountTrial(); + } initialized = true; @@ -78,6 +78,33 @@ class SubscriptionController extends BaseController { } } + void addNewAccountTrial() { + // determine when profile was created + final String? profileCreatedAt = + _pangeaController.userController.userModel?.profile?.createdAt; + if (profileCreatedAt == null) { + ErrorHandler.logError( + m: "Null profileCreatedAt in addNewAccountTrial", + s: StackTrace.current, + ); + return; + } + + final DateTime creationTimestamp = DateTime.parse(profileCreatedAt); + final bool accountIsNew = creationTimestamp.isAfter( + DateTime.now().subtract(const Duration(days: 7)), + ); + + // if account qualifies, grant trial + if (accountIsNew) { + final int daysRemaining = DateTime.now() + .add(const Duration(days: 7)) + .difference(creationTimestamp) + .inDays; + subscription?.setTrial(daysRemaining); + } + } + Future updateCustomerInfo() async { if (subscription == null) { ErrorHandler.logError( @@ -91,8 +118,10 @@ class SubscriptionController extends BaseController { setState(); } - Future showPaywall(BuildContext context, - [bool forceShow = false]) async { + Future showPaywall( + BuildContext context, [ + bool forceShow = false, + ]) async { try { if (!initialized) { await initialize(); @@ -160,8 +189,10 @@ class SubscriptionController extends BaseController { } void submitSubscriptionChange( - SubscriptionDetails? selectedSubscription, BuildContext context, - {bool isPromo = false}) async { + SubscriptionDetails? selectedSubscription, + BuildContext context, { + bool isPromo = false, + }) async { if (selectedSubscription != null) { if (kIsWeb) { if (selectedSubscription.duration == null) { @@ -191,7 +222,9 @@ class SubscriptionController extends BaseController { } try { GoogleAnalytics.beginPurchaseSubscription( - selectedSubscription, context); + selectedSubscription, + context, + ); await Purchases.purchasePackage(selectedSubscription.package!); GoogleAnalytics.updateUserSubscriptionStatus(true); } catch (err) { diff --git a/lib/pangea/models/base_subscription_info.dart b/lib/pangea/models/base_subscription_info.dart index 82540cecc..a6e7a1934 100644 --- a/lib/pangea/models/base_subscription_info.dart +++ b/lib/pangea/models/base_subscription_info.dart @@ -1,4 +1,5 @@ // Project imports: +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; import 'package:fluffychat/pangea/repo/subscription_repo.dart'; @@ -45,6 +46,9 @@ class SubscriptionInfo { allProducts = await SubscriptionRepo.getAllProducts(); } + bool get isNewUserTrial => + currentSubscriptionId == AppConfig.trialSubscriptionId; + bool get currentSubscriptionIsPromotional => currentSubscriptionId?.startsWith("rc_promo") ?? false; @@ -71,5 +75,16 @@ class SubscriptionInfo { currentSubscriptionId = null; } + void setTrial(int daysRemaining) { + if (currentSubscription != null) return; + expirationDate = DateTime.now().add(Duration(days: daysRemaining)); + currentSubscriptionId = AppConfig.trialSubscriptionId; + currentSubscription = SubscriptionDetails( + price: 0, + id: AppConfig.trialSubscriptionId, + periodType: 'trial', + ); + } + Future setCustomerInfo() async {} } diff --git a/lib/pangea/pages/settings_subscription/settings_subscription.dart b/lib/pangea/pages/settings_subscription/settings_subscription.dart index ddd67ff87..ca68bbf59 100644 --- a/lib/pangea/pages/settings_subscription/settings_subscription.dart +++ b/lib/pangea/pages/settings_subscription/settings_subscription.dart @@ -1,12 +1,6 @@ // Dart imports: import 'dart:async'; -// Flutter imports: -import 'package:flutter/material.dart'; - -// Package imports: -import 'package:url_launcher/url_launcher_string.dart'; - // Project imports: import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/config/environment.dart'; @@ -15,9 +9,13 @@ import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; import 'package:fluffychat/pangea/pages/settings_subscription/settings_subscription_view.dart'; import 'package:fluffychat/pangea/utils/subscription_app_id.dart'; import 'package:fluffychat/widgets/matrix.dart'; +// Flutter imports: +import 'package:flutter/material.dart'; +// Package imports: +import 'package:url_launcher/url_launcher_string.dart'; class SubscriptionManagement extends StatefulWidget { - const SubscriptionManagement({Key? key}) : super(key: key); + const SubscriptionManagement({super.key}); @override SubscriptionManagementController createState() => @@ -57,6 +55,10 @@ class SubscriptionManagementController extends State { ?.currentSubscriptionIsPromotional ?? false; + bool get isNewUserTrial => + pangeaController.subscriptionController.subscription?.isNewUserTrial ?? + false; + bool get showManagementOptions { if (!currentSubscriptionAvailable) { return false; diff --git a/lib/pangea/pages/settings_subscription/settings_subscription_view.dart b/lib/pangea/pages/settings_subscription/settings_subscription_view.dart index dbcdf4166..538aa8bc9 100644 --- a/lib/pangea/pages/settings_subscription/settings_subscription_view.dart +++ b/lib/pangea/pages/settings_subscription/settings_subscription_view.dart @@ -1,10 +1,4 @@ // Flutter imports: -import 'package:flutter/material.dart'; - -// Package imports: -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:intl/intl.dart'; - // Project imports: import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; @@ -12,11 +6,15 @@ import 'package:fluffychat/pangea/pages/settings_subscription/change_subscriptio import 'package:fluffychat/pangea/pages/settings_subscription/settings_subscription.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +// Package imports: +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:intl/intl.dart'; class SettingsSubscriptionView extends StatelessWidget { final SubscriptionManagementController controller; final PangeaController pangeaController = MatrixState.pangeaController; - SettingsSubscriptionView(this.controller, {Key? key}) : super(key: key); + SettingsSubscriptionView(this.controller, {super.key}); @override Widget build(BuildContext context) { @@ -87,7 +85,7 @@ class SettingsSubscriptionView extends StatelessWidget { controller: controller, subscriptionController: pangeaController.subscriptionController, - ) + ), ], ), ), @@ -103,50 +101,49 @@ class ManagementNotAvailableWarning extends StatelessWidget { const ManagementNotAvailableWarning({ required this.controller, required this.subscriptionController, - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context) { - final bool currentSubscriptionAvailable = - controller.currentSubscriptionAvailable; - final bool currentSubscriptionIsPromotional = - controller.currentSubscriptionIsPromotional; - final String? purchasePlatformDisplayName = - controller.purchasePlatformDisplayName; - final bool isLifetimeSubscription = - subscriptionController.subscription?.isLifetimeSubscription ?? false; - final DateTime? expirationDate = - subscriptionController.subscription?.expirationDate; - - String warningText = L10n.of(context)!.subscriptionManagementUnavailable; - final DateFormat formatter = DateFormat('yyyy-MM-dd'); - - if (currentSubscriptionAvailable) { - warningText = L10n.of(context)!.subsciptionPlatformTooltip; - } else if (currentSubscriptionIsPromotional) { - if (isLifetimeSubscription) { - warningText = L10n.of(context)!.promotionalSubscriptionDesc; - } else { - warningText = L10n.of(context)!.promoSubscriptionExpirationDesc( - formatter.format(expirationDate!), + String getWarningText() { + final DateFormat formatter = DateFormat('yyyy-MM-dd'); + if (controller.isNewUserTrial) { + return L10n.of(context)!.trialExpiration( + formatter.format( + subscriptionController.subscription!.expirationDate!, + ), + ); + } + if (controller.currentSubscriptionAvailable) { + String warningText = L10n.of(context)!.subsciptionPlatformTooltip; + if (controller.purchasePlatformDisplayName != null) { + warningText += + "\n${L10n.of(context)!.originalSubscriptionPlatform(controller.purchasePlatformDisplayName!)}"; + } + return warningText; + } + if (controller.currentSubscriptionIsPromotional) { + if (subscriptionController.subscription?.isLifetimeSubscription ?? + false) { + return L10n.of(context)!.promotionalSubscriptionDesc; + } + return L10n.of(context)!.promoSubscriptionExpirationDesc( + formatter.format( + subscriptionController.subscription!.expirationDate!, + ), ); } + return L10n.of(context)!.subscriptionManagementUnavailable; } return Center( - child: Column( - children: [ - Text( - warningText, - textAlign: TextAlign.center, - ), - if (purchasePlatformDisplayName != null) - Text( - "${L10n.of(context)!.originalSubscriptionPlatform} $purchasePlatformDisplayName", - textAlign: TextAlign.center, - ), - ], + child: Padding( + padding: const EdgeInsets.all(20), + child: Text( + getWarningText(), + textAlign: TextAlign.center, + ), ), ); } diff --git a/needed-translations.txt b/needed-translations.txt index 0aa15d865..4014d92ab 100644 --- a/needed-translations.txt +++ b/needed-translations.txt @@ -755,7 +755,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "bn": [ @@ -1519,7 +1520,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "bo": [ @@ -2283,7 +2285,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ca": [ @@ -3042,7 +3045,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "cs": [ @@ -3801,7 +3805,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "de": [ @@ -4560,7 +4565,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "el": [ @@ -5324,7 +5330,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "eo": [ @@ -6083,7 +6090,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "es": [ @@ -6106,7 +6114,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "et": [ @@ -6865,7 +6874,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "eu": [ @@ -7624,7 +7634,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "fa": [ @@ -8383,7 +8394,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "fi": [ @@ -9142,7 +9154,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "fr": [ @@ -9901,7 +9914,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ga": [ @@ -10660,7 +10674,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "gl": [ @@ -11419,7 +11434,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "he": [ @@ -12178,7 +12194,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "hi": [ @@ -12942,7 +12959,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "hr": [ @@ -13701,7 +13719,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "hu": [ @@ -14460,7 +14479,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "id": [ @@ -15219,7 +15239,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ie": [ @@ -15980,7 +16001,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "it": [ @@ -16739,7 +16761,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ja": [ @@ -17498,7 +17521,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ko": [ @@ -18257,7 +18281,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "lt": [ @@ -19016,7 +19041,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "lv": [ @@ -19780,7 +19806,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "nb": [ @@ -20539,7 +20566,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "nl": [ @@ -21298,7 +21326,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "pl": [ @@ -22057,7 +22086,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "pt": [ @@ -22821,7 +22851,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "pt_BR": [ @@ -23580,7 +23611,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "pt_PT": [ @@ -24339,7 +24371,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ro": [ @@ -25098,7 +25131,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ru": [ @@ -25857,7 +25891,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "sk": [ @@ -26617,7 +26652,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "sl": [ @@ -27379,7 +27415,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "sr": [ @@ -28138,7 +28175,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "sv": [ @@ -28897,7 +28935,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ta": [ @@ -29661,7 +29700,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "th": [ @@ -30425,7 +30465,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "tr": [ @@ -31184,7 +31225,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "uk": [ @@ -31943,7 +31985,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "vi": [ @@ -32705,7 +32748,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "zh": [ @@ -33464,7 +33508,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "zh_Hant": [ @@ -34223,6 +34268,7 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ] } From 46ff2f3d4c888d46beb5a4b863d35c90280e94d6 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 28 Nov 2023 16:30:41 -0500 Subject: [PATCH 04/33] activate trial with button on paywall --- assets/l10n/intl_en.arb | 4 +- .../controllers/subscription_controller.dart | 45 ++--- lib/pangea/controllers/user_controller.dart | 16 +- .../subscription/subscription_paywall.dart | 94 +++++++-- needed-translations.txt | 184 +++++++++++++----- 5 files changed, 247 insertions(+), 96 deletions(-) diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 56e2c09cc..3ed3d90fa 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -3948,5 +3948,7 @@ "placeholders": { "expiration": {} } - } + }, + "freeTrialDesc": "New users recieve a one week free trial of Pangea Chat", + "activateTrial": "Activate Trial" } diff --git a/lib/pangea/controllers/subscription_controller.dart b/lib/pangea/controllers/subscription_controller.dart index a3b05b8b3..895a1fce4 100644 --- a/lib/pangea/controllers/subscription_controller.dart +++ b/lib/pangea/controllers/subscription_controller.dart @@ -60,8 +60,8 @@ class SubscriptionController extends BaseController { : MobileSubscriptionInfo(pangeaController: _pangeaController); await subscription!.configure(); - if (!isSubscribed) { - addNewAccountTrial(); + if (activatedNewUserTrial) { + setNewUserTrial(); } initialized = true; @@ -78,31 +78,26 @@ class SubscriptionController extends BaseController { } } - void addNewAccountTrial() { - // determine when profile was created - final String? profileCreatedAt = - _pangeaController.userController.userModel?.profile?.createdAt; - if (profileCreatedAt == null) { - ErrorHandler.logError( - m: "Null profileCreatedAt in addNewAccountTrial", - s: StackTrace.current, - ); - return; - } + final String activatedTrialKey = 'activatedTrial'; - final DateTime creationTimestamp = DateTime.parse(profileCreatedAt); - final bool accountIsNew = creationTimestamp.isAfter( - DateTime.now().subtract(const Duration(days: 7)), - ); + bool get activatedNewUserTrial => + _pangeaController.userController.inTrialWindow && + (_pangeaController.pStoreService.read(activatedTrialKey) ?? false); - // if account qualifies, grant trial - if (accountIsNew) { - final int daysRemaining = DateTime.now() - .add(const Duration(days: 7)) - .difference(creationTimestamp) - .inDays; - subscription?.setTrial(daysRemaining); - } + void activateNewUserTrial() { + _pangeaController.pStoreService.save(activatedTrialKey, true); + setNewUserTrial(); + } + + void setNewUserTrial() { + final String profileCreatedAt = + _pangeaController.userController.userModel!.profile!.createdAt; + final DateTime creationTimestamp = DateTime.parse(profileCreatedAt); + final int daysRemaining = DateTime.now() + .add(const Duration(days: 7)) + .difference(creationTimestamp) + .inDays; + subscription?.setTrial(daysRemaining); } Future updateCustomerInfo() async { diff --git a/lib/pangea/controllers/user_controller.dart b/lib/pangea/controllers/user_controller.dart index 33ac91b16..ec16defe6 100644 --- a/lib/pangea/controllers/user_controller.dart +++ b/lib/pangea/controllers/user_controller.dart @@ -4,14 +4,14 @@ import 'dart:developer'; // Package imports: import 'package:collection/collection.dart'; -import 'package:jwt_decode/jwt_decode.dart'; -import 'package:matrix/matrix.dart' as matrix; - // Project imports: import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/controllers/base_controller.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/widgets/fluffy_chat_app.dart'; +import 'package:jwt_decode/jwt_decode.dart'; +import 'package:matrix/matrix.dart' as matrix; + import '../constants/local.key.dart'; import '../models/user_model.dart'; import '../repo/user_repo.dart'; @@ -111,6 +111,16 @@ class UserController extends BaseController { } } + bool get inTrialWindow { + final String? createdAt = userModel?.profile?.createdAt; + if (createdAt == null) { + return false; + } + return DateTime.parse(createdAt).isAfter( + DateTime.now().subtract(const Duration(days: 7)), + ); + } + redirectToUserInfo() { // _pangeaController.matrix.router!.currentState!.to( // "/home/connect/user_age", diff --git a/lib/pangea/widgets/subscription/subscription_paywall.dart b/lib/pangea/widgets/subscription/subscription_paywall.dart index cc97871cc..87ab6941b 100644 --- a/lib/pangea/widgets/subscription/subscription_paywall.dart +++ b/lib/pangea/widgets/subscription/subscription_paywall.dart @@ -1,19 +1,18 @@ // Flutter imports: -import 'package:flutter/material.dart'; - -// Package imports: -import 'package:flutter_gen/gen_l10n/l10n.dart'; - // Project imports: +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/widgets/subscription/subscription_options.dart'; +import 'package:flutter/material.dart'; +// Package imports: +import 'package:flutter_gen/gen_l10n/l10n.dart'; class SubscriptionPaywall extends StatelessWidget { final PangeaController pangeaController; const SubscriptionPaywall({ - Key? key, + super.key, required this.pangeaController, - }) : super(key: key); + }); @override Widget build(BuildContext context) { @@ -31,26 +30,79 @@ class SubscriptionPaywall extends StatelessWidget { ), body: Padding( padding: const EdgeInsets.all(20), - child: Column( - children: [ - if (pangeaController.matrixState.client.rooms.length > 1) ...[ + child: SingleChildScrollView( + child: Column( + children: [ + if (pangeaController.matrixState.client.rooms.length > 1) ...[ + Text( + L10n.of(context)!.welcomeBack, + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 16), + ), + const SizedBox(height: 20), + ], Text( - L10n.of(context)!.welcomeBack, + L10n.of(context)!.subscriptionDesc, textAlign: TextAlign.center, style: const TextStyle(fontSize: 16), ), const SizedBox(height: 20), + pangeaController.userController.inTrialWindow + ? FreeTrialCard( + pangeaController: pangeaController, + ) + : SubscriptionOptions( + pangeaController: pangeaController, + ), + ], + ), + ), + ), + ); + } +} + +class FreeTrialCard extends StatelessWidget { + final PangeaController pangeaController; + const FreeTrialCard({super.key, required this.pangeaController}); + + @override + Widget build(BuildContext context) { + return Card( + shape: RoundedRectangleBorder( + side: BorderSide( + color: AppConfig.primaryColorLight.withAlpha(64), + ), + borderRadius: const BorderRadius.all(Radius.zero), + ), + child: SizedBox( + height: 250, + width: AppConfig.columnWidth * 0.75, + child: Padding( + padding: const EdgeInsets.all(25), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + L10n.of(context)!.freeTrial, + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 24), + ), + Text( + L10n.of(context)!.freeTrialDesc, + textAlign: TextAlign.center, + ), + OutlinedButton( + onPressed: () { + pangeaController.subscriptionController + .activateNewUserTrial(); + Navigator.of(context).pop(); + }, + child: Text(L10n.of(context)!.activateTrial), + ), ], - Text( - L10n.of(context)!.subscriptionDesc, - textAlign: TextAlign.center, - style: const TextStyle(fontSize: 16), - ), - const SizedBox(height: 20), - SubscriptionOptions( - pangeaController: pangeaController, - ), - ], + ), ), ), ); diff --git a/needed-translations.txt b/needed-translations.txt index 4014d92ab..3eebab64d 100644 --- a/needed-translations.txt +++ b/needed-translations.txt @@ -756,7 +756,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "bn": [ @@ -1521,7 +1523,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "bo": [ @@ -2286,7 +2290,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "ca": [ @@ -3046,7 +3052,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "cs": [ @@ -3806,7 +3814,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "de": [ @@ -4566,7 +4576,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "el": [ @@ -5331,7 +5343,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "eo": [ @@ -6091,7 +6105,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "es": [ @@ -6115,7 +6131,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "et": [ @@ -6875,7 +6893,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "eu": [ @@ -7635,7 +7655,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "fa": [ @@ -8395,7 +8417,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "fi": [ @@ -9155,7 +9179,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "fr": [ @@ -9915,7 +9941,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "ga": [ @@ -10675,7 +10703,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "gl": [ @@ -11435,7 +11465,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "he": [ @@ -12195,7 +12227,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "hi": [ @@ -12960,7 +12994,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "hr": [ @@ -13720,7 +13756,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "hu": [ @@ -14480,7 +14518,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "id": [ @@ -15240,7 +15280,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "ie": [ @@ -16002,7 +16044,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "it": [ @@ -16762,7 +16806,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "ja": [ @@ -17522,7 +17568,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "ko": [ @@ -18282,7 +18330,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "lt": [ @@ -19042,7 +19092,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "lv": [ @@ -19807,7 +19859,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "nb": [ @@ -20567,7 +20621,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "nl": [ @@ -21327,7 +21383,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "pl": [ @@ -22087,7 +22145,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "pt": [ @@ -22852,7 +22912,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "pt_BR": [ @@ -23612,7 +23674,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "pt_PT": [ @@ -24372,7 +24436,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "ro": [ @@ -25132,7 +25198,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "ru": [ @@ -25892,7 +25960,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "sk": [ @@ -26653,7 +26723,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "sl": [ @@ -27416,7 +27488,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "sr": [ @@ -28176,7 +28250,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "sv": [ @@ -28936,7 +29012,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "ta": [ @@ -29701,7 +29779,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "th": [ @@ -30466,7 +30546,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "tr": [ @@ -31226,7 +31308,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "uk": [ @@ -31986,7 +32070,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "vi": [ @@ -32749,7 +32835,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "zh": [ @@ -33509,7 +33597,9 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ], "zh_Hant": [ @@ -34269,6 +34359,8 @@ "groupName", "createGroupAndInviteUsers", "groupCanBeFoundViaSearch", - "trialExpiration" + "trialExpiration", + "freeTrialDesc", + "activateTrial" ] } From 03de12e3b9c4d2ea42d22ae73ff324c60e576139 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 29 Nov 2023 15:34:02 -0500 Subject: [PATCH 05/33] fixes from testing --- .../controllers/subscription_controller.dart | 9 +- lib/pangea/models/base_subscription_info.dart | 4 +- lib/pangea/models/mobile_subscriptions.dart | 37 +++--- .../subscription/subscription_options.dart | 43 +++---- .../subscription/subscription_paywall.dart | 106 +++++++++--------- 5 files changed, 98 insertions(+), 101 deletions(-) diff --git a/lib/pangea/controllers/subscription_controller.dart b/lib/pangea/controllers/subscription_controller.dart index 895a1fce4..cb9416a3c 100644 --- a/lib/pangea/controllers/subscription_controller.dart +++ b/lib/pangea/controllers/subscription_controller.dart @@ -93,11 +93,10 @@ class SubscriptionController extends BaseController { final String profileCreatedAt = _pangeaController.userController.userModel!.profile!.createdAt; final DateTime creationTimestamp = DateTime.parse(profileCreatedAt); - final int daysRemaining = DateTime.now() - .add(const Duration(days: 7)) - .difference(creationTimestamp) - .inDays; - subscription?.setTrial(daysRemaining); + final DateTime expirationDate = creationTimestamp.add( + const Duration(days: 7), + ); + subscription?.setTrial(expirationDate); } Future updateCustomerInfo() async { diff --git a/lib/pangea/models/base_subscription_info.dart b/lib/pangea/models/base_subscription_info.dart index a6e7a1934..cb04dd57b 100644 --- a/lib/pangea/models/base_subscription_info.dart +++ b/lib/pangea/models/base_subscription_info.dart @@ -75,9 +75,9 @@ class SubscriptionInfo { currentSubscriptionId = null; } - void setTrial(int daysRemaining) { + void setTrial(DateTime expiration) { if (currentSubscription != null) return; - expirationDate = DateTime.now().add(Duration(days: daysRemaining)); + expirationDate = expiration; currentSubscriptionId = AppConfig.trialSubscriptionId; currentSubscription = SubscriptionDetails( price: 0, diff --git a/lib/pangea/models/mobile_subscriptions.dart b/lib/pangea/models/mobile_subscriptions.dart index 7988fee18..81526137f 100644 --- a/lib/pangea/models/mobile_subscriptions.dart +++ b/lib/pangea/models/mobile_subscriptions.dart @@ -1,19 +1,17 @@ // Dart imports: import 'dart:io'; -// Flutter imports: -import 'package:flutter/material.dart'; - // Package imports: import 'package:collection/collection.dart'; -import 'package:purchases_flutter/purchases_flutter.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; - // Project imports: import 'package:fluffychat/pangea/config/environment.dart'; import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; import 'package:fluffychat/pangea/models/base_subscription_info.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; +// Flutter imports: +import 'package:flutter/material.dart'; +import 'package:purchases_flutter/purchases_flutter.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; class MobileSubscriptionInfo extends SubscriptionInfo { MobileSubscriptionInfo({required super.pangeaController}) : super(); @@ -161,17 +159,22 @@ class MobileSubscriptionInfo extends SubscriptionInfo { ); } - final List activeEntitlements = info - .entitlements.all.entries - .where((MapEntry entry) => - entry.value.expirationDate == null || - DateTime.parse(entry.value.expirationDate!).isAfter(DateTime.now())) - .map((MapEntry entry) => entry.value) - .toList(); + final List activeEntitlements = + info.entitlements.all.entries + .where( + (MapEntry entry) => + entry.value.expirationDate == null || + DateTime.parse(entry.value.expirationDate!) + .isAfter(DateTime.now()), + ) + .map((MapEntry entry) => entry.value) + .toList(); allEntitlements = info.entitlements.all.entries - .map((MapEntry entry) => - entry.value.productIdentifier) + .map( + (MapEntry entry) => + entry.value.productIdentifier, + ) .cast() .toList(); @@ -181,7 +184,9 @@ class MobileSubscriptionInfo extends SubscriptionInfo { ); } else if (activeEntitlements.isEmpty) { debugPrint("User has no active entitlements"); - resetSubscription(); + if (!isNewUserTrial) { + resetSubscription(); + } return; } final EntitlementInfo activeEntitlement = activeEntitlements[0]; diff --git a/lib/pangea/widgets/subscription/subscription_options.dart b/lib/pangea/widgets/subscription/subscription_options.dart index 5c3343930..78ff47bad 100644 --- a/lib/pangea/widgets/subscription/subscription_options.dart +++ b/lib/pangea/widgets/subscription/subscription_options.dart @@ -1,13 +1,11 @@ // Flutter imports: -import 'package:flutter/material.dart'; - -// Package imports: -import 'package:flutter_gen/gen_l10n/l10n.dart'; - // Project imports: import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; +import 'package:flutter/material.dart'; +// Package imports: +import 'package:flutter_gen/gen_l10n/l10n.dart'; class SubscriptionOptions extends StatelessWidget { final PangeaController pangeaController; @@ -19,23 +17,18 @@ class SubscriptionOptions extends StatelessWidget { @override Widget build(BuildContext context) { return Expanded( - child: ListView( - children: [ - const SizedBox(height: 20), - Wrap( - alignment: WrapAlignment.center, - direction: Axis.horizontal, - children: pangeaController - .subscriptionController.subscription!.availableSubscriptions - .map( - (subscription) => SubscriptionCard( - subscription: subscription, - pangeaController: pangeaController, - ), - ) - .toList(), - ), - ], + child: Wrap( + alignment: WrapAlignment.center, + direction: Axis.horizontal, + children: pangeaController + .subscriptionController.subscription!.availableSubscriptions + .map( + (subscription) => SubscriptionCard( + subscription: subscription, + pangeaController: pangeaController, + ), + ) + .toList(), ), ); } @@ -46,10 +39,10 @@ class SubscriptionCard extends StatelessWidget { final PangeaController pangeaController; const SubscriptionCard({ - Key? key, + super.key, required this.subscription, required this.pangeaController, - }) : super(key: key); + }); @override Widget build(BuildContext context) { @@ -86,7 +79,7 @@ class SubscriptionCard extends StatelessWidget { .submitSubscriptionChange(subscription, context); }, child: Text(L10n.of(context)!.subscribe), - ) + ), ], ), ), diff --git a/lib/pangea/widgets/subscription/subscription_paywall.dart b/lib/pangea/widgets/subscription/subscription_paywall.dart index 87ab6941b..9de144bd0 100644 --- a/lib/pangea/widgets/subscription/subscription_paywall.dart +++ b/lib/pangea/widgets/subscription/subscription_paywall.dart @@ -30,32 +30,30 @@ class SubscriptionPaywall extends StatelessWidget { ), body: Padding( padding: const EdgeInsets.all(20), - child: SingleChildScrollView( - child: Column( - children: [ - if (pangeaController.matrixState.client.rooms.length > 1) ...[ - Text( - L10n.of(context)!.welcomeBack, - textAlign: TextAlign.center, - style: const TextStyle(fontSize: 16), - ), - const SizedBox(height: 20), - ], + child: ListView( + children: [ + if (pangeaController.matrixState.client.rooms.length > 1) ...[ Text( - L10n.of(context)!.subscriptionDesc, + L10n.of(context)!.welcomeBack, textAlign: TextAlign.center, style: const TextStyle(fontSize: 16), ), const SizedBox(height: 20), - pangeaController.userController.inTrialWindow - ? FreeTrialCard( - pangeaController: pangeaController, - ) - : SubscriptionOptions( - pangeaController: pangeaController, - ), ], - ), + Text( + L10n.of(context)!.subscriptionDesc, + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 16), + ), + const SizedBox(height: 20), + pangeaController.userController.inTrialWindow + ? FreeTrialCard( + pangeaController: pangeaController, + ) + : SubscriptionOptions( + pangeaController: pangeaController, + ), + ], ), ), ); @@ -68,40 +66,42 @@ class FreeTrialCard extends StatelessWidget { @override Widget build(BuildContext context) { - return Card( - shape: RoundedRectangleBorder( - side: BorderSide( - color: AppConfig.primaryColorLight.withAlpha(64), + return Align( + child: Card( + shape: RoundedRectangleBorder( + side: BorderSide( + color: AppConfig.primaryColorLight.withAlpha(64), + ), + borderRadius: const BorderRadius.all(Radius.zero), ), - borderRadius: const BorderRadius.all(Radius.zero), - ), - child: SizedBox( - height: 250, - width: AppConfig.columnWidth * 0.75, - child: Padding( - padding: const EdgeInsets.all(25), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - L10n.of(context)!.freeTrial, - textAlign: TextAlign.center, - style: const TextStyle(fontSize: 24), - ), - Text( - L10n.of(context)!.freeTrialDesc, - textAlign: TextAlign.center, - ), - OutlinedButton( - onPressed: () { - pangeaController.subscriptionController - .activateNewUserTrial(); - Navigator.of(context).pop(); - }, - child: Text(L10n.of(context)!.activateTrial), - ), - ], + child: SizedBox( + height: 250, + width: AppConfig.columnWidth * 0.75, + child: Padding( + padding: const EdgeInsets.all(25), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + L10n.of(context)!.freeTrial, + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 24), + ), + Text( + L10n.of(context)!.freeTrialDesc, + textAlign: TextAlign.center, + ), + OutlinedButton( + onPressed: () { + pangeaController.subscriptionController + .activateNewUserTrial(); + Navigator.of(context).pop(); + }, + child: Text(L10n.of(context)!.activateTrial), + ), + ], + ), ), ), ), From 710ed42b62550bebc68c11b70baa5fed73156c92 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Thu, 30 Nov 2023 14:59:16 -0500 Subject: [PATCH 06/33] inital work for redirect and snackbar on mobile --- assets/l10n/intl_en.arb | 4 +- lib/pages/chat_list/chat_list.dart | 39 ++-- .../controllers/subscription_controller.dart | 41 ++-- .../settings_subscription.dart | 22 ++- .../subscription/subscription_options.dart | 20 +- .../subscription/subscription_snackbar.dart | 34 ++++ needed-translations.txt | 184 +++++++++++++----- 7 files changed, 251 insertions(+), 93 deletions(-) create mode 100644 lib/pangea/widgets/subscription/subscription_snackbar.dart diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 6d31bf6f9..f97973848 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -3937,5 +3937,7 @@ "searchChatsRooms": "Search for #chats, @users...", "groupName": "Group name", "createGroupAndInviteUsers": "Create a group and invite users", - "groupCanBeFoundViaSearch": "Group can be found via search" + "groupCanBeFoundViaSearch": "Group can be found via search", + "successfullySubscribed": "You have successfully subscribed!", + "clickToManageSubscription": "Click here to manage your subscription." } diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 5cbd6783b..293f39b91 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -2,21 +2,9 @@ import 'dart:async'; import 'dart:io'; -// Flutter imports: -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - // Package imports: import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:future_loading_dialog/future_loading_dialog.dart'; -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; -import 'package:receive_sharing_intent/receive_sharing_intent.dart'; -import 'package:uni_links/uni_links.dart'; - // Project imports: import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; @@ -28,10 +16,24 @@ import 'package:fluffychat/pangea/utils/add_to_space.dart'; import 'package:fluffychat/pangea/utils/chat_list_handle_space_tap.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/widgets/subscription/subscription_snackbar.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/client_stories_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/utils/tor_stub.dart' + if (dart.library.html) 'package:tor_detector_web/tor_detector_web.dart'; +// Flutter imports: +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:future_loading_dialog/future_loading_dialog.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; +import 'package:receive_sharing_intent/receive_sharing_intent.dart'; +import 'package:uni_links/uni_links.dart'; + import '../../../utils/account_bundles.dart'; import '../../utils/matrix_sdk_extensions/matrix_file_extension.dart'; import '../../utils/url_launcher.dart'; @@ -39,9 +41,6 @@ import '../../utils/voip/callkeep_manager.dart'; import '../../widgets/fluffy_chat_app.dart'; import '../../widgets/matrix.dart'; -import 'package:fluffychat/utils/tor_stub.dart' - if (dart.library.html) 'package:tor_detector_web/tor_detector_web.dart'; - enum SelectMode { normal, share, @@ -449,6 +448,7 @@ class ChatListController extends State //#Pangea StreamSubscription? classStream; StreamSubscription? _invitedSpaceSubscription; + StreamSubscription? _subscriptionStatusStream; //Pangea# @override @@ -506,6 +506,14 @@ class ChatListController extends State } } }); + + _subscriptionStatusStream = pangeaController + .subscriptionController.subscriptionStream.stream + .listen((event) { + if (mounted) { + showSubscribedSnackbar(context); + } + }); //Pangea# super.initState(); @@ -519,6 +527,7 @@ class ChatListController extends State //#Pangea classStream?.cancel(); _invitedSpaceSubscription?.cancel(); + _subscriptionStatusStream?.cancel(); //Pangea# scrollController.removeListener(_onScroll); super.dispose(); diff --git a/lib/pangea/controllers/subscription_controller.dart b/lib/pangea/controllers/subscription_controller.dart index 1ade5895a..7f9fde149 100644 --- a/lib/pangea/controllers/subscription_controller.dart +++ b/lib/pangea/controllers/subscription_controller.dart @@ -2,17 +2,8 @@ import 'dart:async'; import 'dart:convert'; -// Flutter imports: -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - // Package imports: import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:http/http.dart'; -import 'package:purchases_flutter/purchases_flutter.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - // Project imports: import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/controllers/base_controller.dart'; @@ -26,6 +17,13 @@ import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; import 'package:fluffychat/pangea/widgets/subscription/subscription_paywall.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +// Flutter imports: +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:http/http.dart'; +import 'package:purchases_flutter/purchases_flutter.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class SubscriptionController extends BaseController { late PangeaController _pangeaController; @@ -33,6 +31,7 @@ class SubscriptionController extends BaseController { //convert this logic to use completer bool initialized = false; + final StreamController subscriptionStream = StreamController.broadcast(); SubscriptionController(PangeaController pangeaController) : super() { _pangeaController = pangeaController; @@ -68,7 +67,13 @@ class SubscriptionController extends BaseController { if (!kIsWeb) { Purchases.addCustomerInfoUpdateListener( - (CustomerInfo info) => updateCustomerInfo(), + (CustomerInfo info) async { + final bool wasSubscribed = isSubscribed; + await updateCustomerInfo(); + if (!wasSubscribed && isSubscribed) { + subscriptionStream.add(true); + } + }, ); } setState(); @@ -91,8 +96,10 @@ class SubscriptionController extends BaseController { setState(); } - Future showPaywall(BuildContext context, - [bool forceShow = false]) async { + Future showPaywall( + BuildContext context, [ + bool forceShow = false, + ]) async { try { if (!initialized) { await initialize(); @@ -160,8 +167,10 @@ class SubscriptionController extends BaseController { } void submitSubscriptionChange( - SubscriptionDetails? selectedSubscription, BuildContext context, - {bool isPromo = false}) async { + SubscriptionDetails? selectedSubscription, + BuildContext context, { + bool isPromo = false, + }) async { if (selectedSubscription != null) { if (kIsWeb) { if (selectedSubscription.duration == null) { @@ -191,7 +200,9 @@ class SubscriptionController extends BaseController { } try { GoogleAnalytics.beginPurchaseSubscription( - selectedSubscription, context); + selectedSubscription, + context, + ); await Purchases.purchasePackage(selectedSubscription.package!); GoogleAnalytics.updateUserSubscriptionStatus(true); } catch (err) { diff --git a/lib/pangea/pages/settings_subscription/settings_subscription.dart b/lib/pangea/pages/settings_subscription/settings_subscription.dart index ddd67ff87..5c62491ea 100644 --- a/lib/pangea/pages/settings_subscription/settings_subscription.dart +++ b/lib/pangea/pages/settings_subscription/settings_subscription.dart @@ -1,12 +1,6 @@ // Dart imports: import 'dart:async'; -// Flutter imports: -import 'package:flutter/material.dart'; - -// Package imports: -import 'package:url_launcher/url_launcher_string.dart'; - // Project imports: import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/config/environment.dart'; @@ -14,10 +8,16 @@ import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; import 'package:fluffychat/pangea/pages/settings_subscription/settings_subscription_view.dart'; import 'package:fluffychat/pangea/utils/subscription_app_id.dart'; +import 'package:fluffychat/pangea/widgets/subscription/subscription_snackbar.dart'; import 'package:fluffychat/widgets/matrix.dart'; +// Flutter imports: +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +// Package imports: +import 'package:url_launcher/url_launcher_string.dart'; class SubscriptionManagement extends StatefulWidget { - const SubscriptionManagement({Key? key}) : super(key: key); + const SubscriptionManagement({super.key}); @override SubscriptionManagementController createState() => @@ -28,6 +28,7 @@ class SubscriptionManagementController extends State { final PangeaController pangeaController = MatrixState.pangeaController; SubscriptionDetails? selectedSubscription; late StreamSubscription _settingsSubscription; + StreamSubscription? _subscriptionStatusStream; @override void initState() { @@ -44,6 +45,7 @@ class SubscriptionManagementController extends State { void dispose() { super.dispose(); _settingsSubscription.cancel(); + _subscriptionStatusStream?.cancel(); } bool get currentSubscriptionAvailable => @@ -120,6 +122,12 @@ class SubscriptionManagementController extends State { @override Widget build(BuildContext context) { + _subscriptionStatusStream ??= pangeaController + .subscriptionController.subscriptionStream.stream + .listen((_) { + showSubscribedSnackbar(context); + context.go('/rooms'); + }); return SettingsSubscriptionView(this); } } diff --git a/lib/pangea/widgets/subscription/subscription_options.dart b/lib/pangea/widgets/subscription/subscription_options.dart index 5c3343930..a4c388059 100644 --- a/lib/pangea/widgets/subscription/subscription_options.dart +++ b/lib/pangea/widgets/subscription/subscription_options.dart @@ -1,13 +1,11 @@ // Flutter imports: -import 'package:flutter/material.dart'; - -// Package imports: -import 'package:flutter_gen/gen_l10n/l10n.dart'; - // Project imports: import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; +import 'package:flutter/material.dart'; +// Package imports: +import 'package:flutter_gen/gen_l10n/l10n.dart'; class SubscriptionOptions extends StatelessWidget { final PangeaController pangeaController; @@ -46,10 +44,10 @@ class SubscriptionCard extends StatelessWidget { final PangeaController pangeaController; const SubscriptionCard({ - Key? key, + super.key, required this.subscription, required this.pangeaController, - }) : super(key: key); + }); @override Widget build(BuildContext context) { @@ -83,10 +81,14 @@ class SubscriptionCard extends StatelessWidget { OutlinedButton( onPressed: () { pangeaController.subscriptionController - .submitSubscriptionChange(subscription, context); + .submitSubscriptionChange( + subscription, + context, + ); + Navigator.of(context).pop(); }, child: Text(L10n.of(context)!.subscribe), - ) + ), ], ), ), diff --git a/lib/pangea/widgets/subscription/subscription_snackbar.dart b/lib/pangea/widgets/subscription/subscription_snackbar.dart new file mode 100644 index 000000000..46283a8be --- /dev/null +++ b/lib/pangea/widgets/subscription/subscription_snackbar.dart @@ -0,0 +1,34 @@ +import 'package:fluffychat/config/app_config.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:go_router/go_router.dart'; + +void showSubscribedSnackbar(BuildContext context) { + final Widget text = RichText( + text: TextSpan( + children: [ + TextSpan( + text: L10n.of(context)!.successfullySubscribed, + style: TextStyle( + color: Theme.of(context).brightness == Brightness.light + ? Colors.white + : Colors.black, + ), + ), + const TextSpan(text: " "), + TextSpan( + text: L10n.of(context)!.clickToManageSubscription, + style: const TextStyle(color: AppConfig.primaryColor), + recognizer: TapGestureRecognizer() + ..onTap = () => context.go('/rooms/settings/subscription'), + ), + ], + ), + ); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: text, + ), + ); +} diff --git a/needed-translations.txt b/needed-translations.txt index 0aa15d865..daf4e7b9c 100644 --- a/needed-translations.txt +++ b/needed-translations.txt @@ -755,7 +755,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "bn": [ @@ -1519,7 +1521,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "bo": [ @@ -2283,7 +2287,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "ca": [ @@ -3042,7 +3048,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "cs": [ @@ -3801,7 +3809,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "de": [ @@ -4560,7 +4570,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "el": [ @@ -5324,7 +5336,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "eo": [ @@ -6083,7 +6097,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "es": [ @@ -6106,7 +6122,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "et": [ @@ -6865,7 +6883,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "eu": [ @@ -7624,7 +7644,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "fa": [ @@ -8383,7 +8405,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "fi": [ @@ -9142,7 +9166,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "fr": [ @@ -9901,7 +9927,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "ga": [ @@ -10660,7 +10688,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "gl": [ @@ -11419,7 +11449,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "he": [ @@ -12178,7 +12210,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "hi": [ @@ -12942,7 +12976,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "hr": [ @@ -13701,7 +13737,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "hu": [ @@ -14460,7 +14498,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "id": [ @@ -15219,7 +15259,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "ie": [ @@ -15980,7 +16022,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "it": [ @@ -16739,7 +16783,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "ja": [ @@ -17498,7 +17544,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "ko": [ @@ -18257,7 +18305,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "lt": [ @@ -19016,7 +19066,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "lv": [ @@ -19780,7 +19832,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "nb": [ @@ -20539,7 +20593,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "nl": [ @@ -21298,7 +21354,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "pl": [ @@ -22057,7 +22115,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "pt": [ @@ -22821,7 +22881,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "pt_BR": [ @@ -23580,7 +23642,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "pt_PT": [ @@ -24339,7 +24403,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "ro": [ @@ -25098,7 +25164,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "ru": [ @@ -25857,7 +25925,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "sk": [ @@ -26617,7 +26687,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "sl": [ @@ -27379,7 +27451,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "sr": [ @@ -28138,7 +28212,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "sv": [ @@ -28897,7 +28973,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "ta": [ @@ -29661,7 +29739,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "th": [ @@ -30425,7 +30505,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "tr": [ @@ -31184,7 +31266,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "uk": [ @@ -31943,7 +32027,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "vi": [ @@ -32705,7 +32791,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "zh": [ @@ -33464,7 +33552,9 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ], "zh_Hant": [ @@ -34223,6 +34313,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "successfullySubscribed", + "clickToManageSubscription" ] } From 1d3f2a73d40aec6b921e5ff6e76b58f93d7d71ea Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 6 Dec 2023 12:34:24 -0500 Subject: [PATCH 07/33] fix for numbers running together on analytics chart --- .../pages/analytics/messages_bar_chart.dart | 70 ++++++++++++++----- 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/lib/pangea/pages/analytics/messages_bar_chart.dart b/lib/pangea/pages/analytics/messages_bar_chart.dart index 21192ec30..5f80577db 100644 --- a/lib/pangea/pages/analytics/messages_bar_chart.dart +++ b/lib/pangea/pages/analytics/messages_bar_chart.dart @@ -1,13 +1,13 @@ import 'dart:developer'; +import 'package:fl_chart/fl_chart.dart'; +import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/pangea/pages/analytics/bar_chart_placeholder_data.dart'; +import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; - -import 'package:fl_chart/fl_chart.dart'; import 'package:intl/intl.dart'; -import 'package:fluffychat/pangea/pages/analytics/bar_chart_placeholder_data.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; import '../../enum/time_span.dart'; import '../../enum/use_type.dart'; import '../../models/chart_analytics_model.dart'; @@ -102,39 +102,73 @@ class MessagesBarChartState extends State { ); } + bool showLabelBasedOnTimeSpan( + TimeSpan timeSpan, + TimeSeriesInterval current, + TimeSeriesInterval? last, + int labelIndex, + ) { + switch (timeSpan) { + case TimeSpan.day: + return current.end.hour % 3 == 0; + case TimeSpan.month: + if (current.end.month != last?.end.month) { + return true; + } + double width = MediaQuery.of(context).size.width; + if (FluffyThemes.isColumnMode(context)) { + width = width - FluffyThemes.navRailWidth - FluffyThemes.columnWidth; + } + const int numDays = 28; + const int minSpacePerDay = 20; + final int availableSpaces = width ~/ minSpacePerDay; + final int showAtInterval = (numDays / availableSpaces).floor() + 1; + + final int lastDayOfCurrentMonth = + DateTime(current.end.year, current.end.month + 1, 0).day; + final bool isNextToMonth = labelIndex == 1 || + current.end.day == 2 || + current.end.day == lastDayOfCurrentMonth; + final bool shouldShowNextToMonth = showAtInterval <= 1; + return (current.end.day % showAtInterval == 0) && + (!isNextToMonth || shouldShowNextToMonth); + case TimeSpan.week: + case TimeSpan.sixmonths: + case TimeSpan.year: + default: + return true; + } + } + String getLabelBasedOnTimeSpan( TimeSpan timeSpan, TimeSeriesInterval current, TimeSeriesInterval? last, int labelIndex, ) { - if (widget.chartAnalytics == null) { + final bool showLabel = showLabelBasedOnTimeSpan( + timeSpan, + current, + last, + labelIndex, + ); + + if (widget.chartAnalytics == null || !showLabel) { return ""; } if (isInSameGroup(last, current, timeSpan)) { return "-"; } + switch (widget.chartAnalytics?.timeSpan ?? TimeSpan.month) { case TimeSpan.day: - return current.end.hour % 3 == 0 - ? DateFormat(DateFormat.HOUR).format(current.end) - : ""; - // return current.end.hour.toString(); + return DateFormat(DateFormat.HOUR).format(current.end); case TimeSpan.week: return DateFormat(DateFormat.ABBR_WEEKDAY).format(current.end); case TimeSpan.month: - // return current.end.month != last?.end.month - // ? DateFormat(DateFormat.ABBR_MONTH_DAY).format(current.end) - // : current.end.day % 5 == 0 && - // labelIndex != 1 && - // current.end.day != 30 - // ? DateFormat(DateFormat.DAY).format(current.end) - // : "'"; return current.end.month != last?.end.month ? DateFormat(DateFormat.ABBR_MONTH).format(current.end) : DateFormat(DateFormat.DAY).format(current.end); - // return current.end.day.toString(); - // text = DateFormat('DAY').format(timeSeriesIntervalStart); case TimeSpan.sixmonths: case TimeSpan.year: return DateFormat(DateFormat.ABBR_STANDALONE_MONTH).format(current.end); From 19df8255511ee01606f11d47806f6d975d90c65d Mon Sep 17 00:00:00 2001 From: ggurdin Date: Thu, 7 Dec 2023 12:54:06 -0500 Subject: [PATCH 08/33] change lockk icon based on locked status --- lib/pages/chat_details/chat_details_view.dart | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/pages/chat_details/chat_details_view.dart b/lib/pages/chat_details/chat_details_view.dart index bfd22fbcf..ecebb9dd8 100644 --- a/lib/pages/chat_details/chat_details_view.dart +++ b/lib/pages/chat_details/chat_details_view.dart @@ -1,10 +1,3 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:future_loading_dialog/future_loading_dialog.dart'; -import 'package:go_router/go_router.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat_details/chat_details.dart'; import 'package:fluffychat/pages/chat_details/participant_list_item.dart'; @@ -26,6 +19,11 @@ import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/chat_settings_popup_menu.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.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:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; class ChatDetailsView extends StatelessWidget { final ChatDetailsController controller; @@ -546,8 +544,10 @@ class ChatDetailsView extends StatelessWidget { backgroundColor: Theme.of(context).scaffoldBackgroundColor, foregroundColor: iconColor, - child: const Icon( - Icons.lock_outlined, + child: Icon( + room.locked + ? Icons.lock_outlined + : Icons.no_encryption_outlined, ), ), value: room.locked, From 61e1259a24473adc700f955e2fd8e38bcd5046a7 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Thu, 7 Dec 2023 15:59:43 -0500 Subject: [PATCH 09/33] updates to UI of add to space toggles, makes all class options visible without scrolling --- .../widgets/class/add_space_toggles.dart | 98 ++++++++++--------- 1 file changed, 51 insertions(+), 47 deletions(-) diff --git a/lib/pangea/widgets/class/add_space_toggles.dart b/lib/pangea/widgets/class/add_space_toggles.dart index 7409a2355..ca9cba14e 100644 --- a/lib/pangea/widgets/class/add_space_toggles.dart +++ b/lib/pangea/widgets/class/add_space_toggles.dart @@ -1,15 +1,12 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - import 'package:collection/collection.dart'; +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/utils/error_handler.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 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; import '../../../widgets/matrix.dart'; import '../../utils/firebase_analytics.dart'; import 'add_class_and_invite.dart'; @@ -192,24 +189,49 @@ class AddToSpaceState extends State { ), ), ), - if (parents.any((r) => r.room.id == possibleParent.id)) - SwitchListTile.adaptive( - title: Text( - L10n.of(context)!.suggestTo(possibleParentName), - style: TextStyle( - color: Theme.of(context).colorScheme.secondary, - ), - ), - subtitle: Text( - widget.mode == AddToClassMode.chat - ? L10n.of(context)!.suggestChatDesc(possibleParentName) - : L10n.of(context)!.suggestExchangeDesc(possibleParentName), - ), - activeColor: AppConfig.activeToggleColor, - value: isSuggestedInSpace(possibleParent), - onChanged: (bool suggest) => - setSuggested(suggest, possibleParent), - ), + AnimatedSize( + duration: const Duration(milliseconds: 300), + curve: Curves.easeInOut, + child: parents.any((r) => r.room.id == possibleParent.id) + ? SwitchListTile.adaptive( + title: Row( + children: [ + const SizedBox(width: 32), + Text( + L10n.of(context)!.suggestTo(possibleParentName), + style: TextStyle( + color: Theme.of(context).colorScheme.secondary, + ), + ), + ], + ), + subtitle: Row( + children: [ + const SizedBox(width: 32), + Expanded( + child: Text( + widget.mode == AddToClassMode.chat + ? L10n.of(context)! + .suggestChatDesc(possibleParentName) + : L10n.of(context)!.suggestExchangeDesc( + possibleParentName, + ), + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + activeColor: AppConfig.activeToggleColor, + value: isSuggestedInSpace(possibleParent), + onChanged: (bool suggest) => + setSuggested(suggest, possibleParent), + ) + : Container(), + ), + Divider( + height: 0.5, + color: Theme.of(context).colorScheme.secondary.withAlpha(25), + ), ], ), ); @@ -223,7 +245,6 @@ class AddToSpaceState extends State { final String subtitle = widget.mode == AddToClassMode.exchange ? L10n.of(context)!.addToClassDesc : L10n.of(context)!.addToClassOrExchangeDesc; - final scrollController = ScrollController(); return Column( children: [ @@ -253,27 +274,10 @@ class AddToSpaceState extends State { if (isOpen) ...[ const Divider(height: 1), possibleParents.isNotEmpty - ? Scrollbar( - controller: scrollController, - thumbVisibility: true, - child: SingleChildScrollView( - controller: scrollController, - child: Column( - children: [ - const Divider(height: 1), - SizedBox( - height: min(possibleParents.length * 55, 500), - child: ListView.builder( - shrinkWrap: true, - itemCount: possibleParents.length, - itemBuilder: (BuildContext context, int i) { - return getAddToSpaceToggleItem(i); - }, - ), - ), - ], - ), - ), + ? Column( + children: possibleParents + .mapIndexed((index, _) => getAddToSpaceToggleItem(index)) + .toList(), ) : Center( child: Padding( From e75ca95b58079fcc06d9ecee3b011af7e1aa71ca Mon Sep 17 00:00:00 2001 From: ggurdin Date: Fri, 8 Dec 2023 10:54:39 -0500 Subject: [PATCH 10/33] updated back button on login page to make it more prominent --- lib/pages/login/login_view.dart | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/pages/login/login_view.dart b/lib/pages/login/login_view.dart index 084e05476..259210113 100644 --- a/lib/pages/login/login_view.dart +++ b/lib/pages/login/login_view.dart @@ -1,11 +1,10 @@ // Flutter imports: +import 'package:fluffychat/pangea/utils/password_forgotten.dart'; +import 'package:fluffychat/widgets/layouts/login_scaffold.dart'; import 'package:flutter/material.dart'; - import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:fluffychat/pangea/utils/password_forgotten.dart'; -import 'package:fluffychat/widgets/layouts/login_scaffold.dart'; import 'login.dart'; class LoginView extends StatelessWidget { @@ -20,7 +19,30 @@ class LoginView extends StatelessWidget { // enforceMobileMode: Matrix.of(context).client.isLogged(), // Pangea# appBar: AppBar( - leading: controller.loading ? null : const BackButton(), + // #Pangea + // leading: controller.loading ? null : const BackButton(), + leading: controller.loading + ? null + : Padding( + padding: const EdgeInsets.only(left: 10), + child: ElevatedButton( + onPressed: () => Navigator.of(context).pop(), + style: ButtonStyle( + padding: MaterialStateProperty.all(EdgeInsets.zero), + backgroundColor: MaterialStateProperty.all( + Theme.of(context) + .colorScheme + .background + .withOpacity(0.75), + ), + shape: MaterialStateProperty.all( + const CircleBorder(), + ), + ), + child: const Icon(Icons.arrow_back), + ), + ), + // Pangea# automaticallyImplyLeading: !controller.loading, centerTitle: true, // #Pangea From fbb937ea286f8df02136d356bbc184bc5ea089d9 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Fri, 8 Dec 2023 19:14:12 +0100 Subject: [PATCH 11/33] updated buildscript to configure --- .github/workflows/main_deploy.yaml | 2 +- scripts/build-web.sh | 3 ++- scripts/upload-sentry.sh | 0 3 files changed, 3 insertions(+), 2 deletions(-) mode change 100755 => 100644 scripts/upload-sentry.sh diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index b21a1dab4..0415a95bd 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -23,7 +23,7 @@ jobs: - name: Prepare web run: ./scripts/prepare-web.sh - name: Build Release Web - run: flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --release --source-maps --base-href "/client/" + run: ./scripts/build-web.sh - name: Build Website run: | mv build/web public diff --git a/scripts/build-web.sh b/scripts/build-web.sh index e4c85b254..08595f978 100755 --- a/scripts/build-web.sh +++ b/scripts/build-web.sh @@ -2,4 +2,5 @@ flutter config --enable-web flutter clean flutter pub get -flutter build web --release --verbose --source-maps --dart-define=SENTRY_RELEASE=$CI_COMMIT_SHA +flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --release --source-maps --base-href "/client/" +# flutter build web --release --verbose --source-maps --dart-define=SENTRY_RELEASE=$CI_COMMIT_SHA diff --git a/scripts/upload-sentry.sh b/scripts/upload-sentry.sh old mode 100755 new mode 100644 From 7f0108e9a7aae9e277387288a1c2e6f35fc85b86 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sat, 9 Dec 2023 17:50:51 +0100 Subject: [PATCH 12/33] config and deploy --- .github/workflows/main_deploy.yaml | 2 ++ config.sample.json | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 0415a95bd..c3ad2ffe0 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -12,6 +12,7 @@ jobs: steps: - uses: actions/checkout@v2 - run: cat .github/workflows/versions.env >> $GITHUB_ENV + - run: echo "$WEB_APP_ENV" - run: echo "$WEB_APP_ENV" > .env - uses: subosito/flutter-action@v2 with: @@ -28,6 +29,7 @@ jobs: run: | mv build/web public mv .env public/.env + - run: cat public/.env - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: diff --git a/config.sample.json b/config.sample.json index ff37ec238..03ac42a6a 100644 --- a/config.sample.json +++ b/config.sample.json @@ -1,9 +1,9 @@ { - "application_name": "FluffyChat", + "application_name": "PangeaChat", "application_welcome_message": null, - "default_homeserver": "matrix.org", - "web_base_url": "https://fluffychat.im/web", - "privacy_url": "https://fluffychat.im/en/privacy.html", + "default_homeserver": "matrix.pangea.chat", + "web_base_url": "https://web.pangea.chat", + "privacy_url": "https://pangea.chat/privacy", "render_html": false, "hide_redacted_events": false, "hide_unknown_events": false From 02295057610aeef2b1820dd22e86d1624eabf0a6 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sat, 9 Dec 2023 18:04:12 +0100 Subject: [PATCH 13/33] env test --- .github/workflows/main_deploy.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index c3ad2ffe0..d00c12328 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -5,7 +5,9 @@ on: branches: - main - pangea-merge - + +environment: staging + jobs: deploy_web: runs-on: ubuntu-latest From 386e225b802529525fd0576f9531ef54e573536b Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sat, 9 Dec 2023 18:08:01 +0100 Subject: [PATCH 14/33] env test2 --- .github/workflows/main_deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index d00c12328..8f445cc26 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -6,11 +6,11 @@ on: - main - pangea-merge -environment: staging jobs: deploy_web: runs-on: ubuntu-latest + environment: staging steps: - uses: actions/checkout@v2 - run: cat .github/workflows/versions.env >> $GITHUB_ENV From 8483721a8710cee065c84094ceab011c8c5d0b7a Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sat, 9 Dec 2023 22:29:13 +0100 Subject: [PATCH 15/33] env test3 --- .github/workflows/main_deploy.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 8f445cc26..825b43e92 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -13,6 +13,10 @@ jobs: environment: staging steps: - uses: actions/checkout@v2 + - name: Dump GitHub context + env: + GITHUB_CONTEXT: ${{ toJson(github) }} + run: echo "$GITHUB_CONTEXT" - run: cat .github/workflows/versions.env >> $GITHUB_ENV - run: echo "$WEB_APP_ENV" - run: echo "$WEB_APP_ENV" > .env From 0225ba169c08fabf1ccbc384e7cfa213b1f2057b Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 01:23:43 +0100 Subject: [PATCH 16/33] env test4 --- .github/workflows/main_deploy.yaml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 825b43e92..077ffb3b9 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -13,13 +13,12 @@ jobs: environment: staging steps: - uses: actions/checkout@v2 - - name: Dump GitHub context - env: - GITHUB_CONTEXT: ${{ toJson(github) }} - run: echo "$GITHUB_CONTEXT" - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - run: echo "$WEB_APP_ENV" - - run: echo "$WEB_APP_ENV" > .env + - name: 'Create env file' + run: | + touch .env + echo ${{ variables.WEB_APP_ENV }} >> .env + cat .env - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} @@ -35,6 +34,10 @@ jobs: run: | mv build/web public mv .env public/.env + - name: Build Website + run: | + mv build/web public + cp public/.env public/.env-staging - run: cat public/.env - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 From 05cc28d41570134c80a8391743ff202b4ac32fe6 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 01:25:34 +0100 Subject: [PATCH 17/33] env test5 --- .github/workflows/main_deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 077ffb3b9..29e95f70a 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -17,7 +17,7 @@ jobs: - name: 'Create env file' run: | touch .env - echo ${{ variables.WEB_APP_ENV }} >> .env + echo $WEB_APP_ENV >> .env cat .env - uses: subosito/flutter-action@v2 with: From 87326e1cf03e1db9ec6a1bd5b27b7a39a90cebdc Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 01:31:07 +0100 Subject: [PATCH 18/33] env test6 --- .github/workflows/main_deploy.yaml | 4 ---- .gitignore | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 29e95f70a..be8c27110 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -34,11 +34,7 @@ jobs: run: | mv build/web public mv .env public/.env - - name: Build Website - run: | - mv build/web public cp public/.env public/.env-staging - - run: cat public/.env - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: diff --git a/.gitignore b/.gitignore index 6f1d4f585..ef7038f03 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ .svn/ prime *.env +!/public/.env # libolm package /assets/js/package From 59be9ba709777334b8bb0211c9103906df0ed38a Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 02:04:48 +0100 Subject: [PATCH 19/33] env test7 --- .github/workflows/main_deploy.yaml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index be8c27110..5ea85c426 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -5,7 +5,10 @@ on: branches: - main - pangea-merge - + +env: + # Setting an environment variable with the value of a configuration variable + env_var: ${{ vars.WEB_APP_ENV }} jobs: deploy_web: @@ -17,8 +20,14 @@ jobs: - name: 'Create env file' run: | touch .env - echo $WEB_APP_ENV >> .env - cat .env + echo $ENV >> .env + cat .env | + echo "$ENV : $ENV" + echo "env_var : $env_var" + echo "STAGE : $STAGE" + env: + ENV: ${{ vars.WEB_APP_ENV }} + STAGE: ${{ vars.ENVIRONMENT_STAGE }} - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} From 735faac5682f12d47e5c104039e16c27be858d00 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 02:14:48 +0100 Subject: [PATCH 20/33] env test8 --- .github/workflows/main_deploy.yaml | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 5ea85c426..a49582f47 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -8,7 +8,7 @@ on: env: # Setting an environment variable with the value of a configuration variable - env_var: ${{ vars.WEB_APP_ENV }} + WEB_APP_ENV: ${{ vars.WEB_APP_ENV }} jobs: deploy_web: @@ -20,14 +20,8 @@ jobs: - name: 'Create env file' run: | touch .env - echo $ENV >> .env - cat .env | - echo "$ENV : $ENV" - echo "env_var : $env_var" - echo "STAGE : $STAGE" - env: - ENV: ${{ vars.WEB_APP_ENV }} - STAGE: ${{ vars.ENVIRONMENT_STAGE }} + echo $WEB_APP_ENV >> .env + cat .env - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} @@ -43,7 +37,6 @@ jobs: run: | mv build/web public mv .env public/.env - cp public/.env public/.env-staging - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: From 072b6d68807d398ce089f39651006cfabf7c9734 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 02:35:03 +0100 Subject: [PATCH 21/33] env test9 --- .github/workflows/main_deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index a49582f47..9b39306a7 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -20,7 +20,7 @@ jobs: - name: 'Create env file' run: | touch .env - echo $WEB_APP_ENV >> .env + echo "$WEB_APP_ENV" >> .env cat .env - uses: subosito/flutter-action@v2 with: From 5f1c666dc96dee932c65e8270a244dacd28956de Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 14:56:34 +0100 Subject: [PATCH 22/33] last changes1 --- .github/workflows/main_deploy.yaml | 11 +++-------- .github/workflows/old.yml | 6 ------ .github/workflows/release.yaml | 8 ++++---- scripts/build-web.sh | 2 +- 4 files changed, 8 insertions(+), 19 deletions(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 9b39306a7..4800aa0c5 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -4,7 +4,6 @@ on: push: branches: - main - - pangea-merge env: # Setting an environment variable with the value of a configuration variable @@ -17,11 +16,6 @@ jobs: steps: - uses: actions/checkout@v2 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - name: 'Create env file' - run: | - touch .env - echo "$WEB_APP_ENV" >> .env - cat .env - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} @@ -36,14 +30,15 @@ jobs: - name: Build Website run: | mv build/web public - mv .env public/.env + touch public/.env + echo "$WEB_APP_ENV" >> public/.env - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: personal_token: ${{ secrets.PAGES_DEPLOY_TOKEN }} publish_dir: ./public publish_branch: gh-pages - # cname: app.staging.pangea.chat.im + # cname: app.staging.pangea.chat update_sentry: runs-on: ubuntu-latest diff --git a/.github/workflows/old.yml b/.github/workflows/old.yml index 21250a3ea..11bd03c39 100644 --- a/.github/workflows/old.yml +++ b/.github/workflows/old.yml @@ -1,11 +1,5 @@ name: Old Release Workflow -on: - push: - branches: - - main - - pangea-merge - concurrency: group: release_workflow cancel-in-progress: true diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 3c87c2c94..e26c8f2fa 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -27,20 +27,20 @@ jobs: - name: Build Release Web run: flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --release --source-maps - name: Create archive - run: tar -czf fluffychat-web.tar.gz build/web/ + run: tar -czf pangeachat-web.tar.gz build/web/ - name: Upload Web Build uses: actions/upload-artifact@v2 with: name: Web Build - path: fluffychat-web.tar.gz + path: pangeachat-web.tar.gz - name: Upload to release uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.PAGES_DEPLOY_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} - asset_path: fluffychat-web.tar.gz - asset_name: fluffychat-web.tar.gz + asset_path: pangeachat-web.tar.gz + asset_name: pangeachat-web.tar.gz asset_content_type: application/gzip build_apk: diff --git a/scripts/build-web.sh b/scripts/build-web.sh index 08595f978..603a84301 100755 --- a/scripts/build-web.sh +++ b/scripts/build-web.sh @@ -2,5 +2,5 @@ flutter config --enable-web flutter clean flutter pub get -flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --release --source-maps --base-href "/client/" +flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --source-maps --base-href "/client/" # flutter build web --release --verbose --source-maps --dart-define=SENTRY_RELEASE=$CI_COMMIT_SHA From ba673382a5c3e4103e9df2d58d0d8ae67d125ffe Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 15:29:53 +0100 Subject: [PATCH 23/33] last changes2 --- .github/workflows/old.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/old.yml b/.github/workflows/old.yml index 11bd03c39..04bfb0a8c 100644 --- a/.github/workflows/old.yml +++ b/.github/workflows/old.yml @@ -1,5 +1,8 @@ name: Old Release Workflow +on: + push: + concurrency: group: release_workflow cancel-in-progress: true From 9f39ab4128b8843dc5173629e287c1b0fd61ffe3 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 15:32:59 +0100 Subject: [PATCH 24/33] last changes3 --- .github/workflows/old.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/old.yml b/.github/workflows/old.yml index 04bfb0a8c..a701797de 100644 --- a/.github/workflows/old.yml +++ b/.github/workflows/old.yml @@ -2,6 +2,8 @@ name: Old Release Workflow on: push: + branches: + - master-unused concurrency: group: release_workflow From e853a5aefdf8cd99d2fa81d219db95f3903d46b7 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 18:22:10 +0100 Subject: [PATCH 25/33] undid format --- .github/workflows/integrate.yaml | 1 - scripts/upload-sentry.sh | 0 2 files changed, 1 deletion(-) mode change 100644 => 100755 scripts/upload-sentry.sh diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 786a92380..943e15ad8 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -10,7 +10,6 @@ jobs: steps: - uses: actions/checkout@v2 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - run: echo "$WEB_APP_ENV" > .env - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} diff --git a/scripts/upload-sentry.sh b/scripts/upload-sentry.sh old mode 100644 new mode 100755 From 270258fc52ba48cfca84d1a35f3d9cc7ee3fd990 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 18:36:28 +0100 Subject: [PATCH 26/33] removed env stuff again --- .github/workflows/integrate.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 943e15ad8..a4a85d250 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -30,7 +30,6 @@ jobs: steps: - uses: actions/checkout@v2 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - run: echo "$WEB_APP_ENV" > .env - uses: actions/setup-java@v1 with: java-version: ${{ env.JAVA_VERSION }} @@ -46,7 +45,6 @@ jobs: steps: - uses: actions/checkout@v2 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - run: echo "$WEB_APP_ENV" > .env - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} @@ -61,7 +59,6 @@ jobs: steps: - uses: actions/checkout@v2 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - run: echo "$WEB_APP_ENV" > .env - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} @@ -76,7 +73,6 @@ jobs: steps: - uses: actions/checkout@v2 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - run: echo "$WEB_APP_ENV" > .env - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} From d5784a0831d24e787b7130edcca2773a7e307d9b Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 19:26:36 +0100 Subject: [PATCH 27/33] new web build test... --- .github/workflows/main_deploy.yaml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 4800aa0c5..1207580ad 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -4,6 +4,7 @@ on: push: branches: - main + - fix-main-deploy env: # Setting an environment variable with the value of a configuration variable @@ -16,6 +17,11 @@ jobs: steps: - uses: actions/checkout@v2 - run: cat .github/workflows/versions.env >> $GITHUB_ENV + - name: 'Create env file' + run: | + touch .env + echo "$WEB_APP_ENV" >> .env + cat .env - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} @@ -27,11 +33,10 @@ jobs: run: ./scripts/prepare-web.sh - name: Build Release Web run: ./scripts/build-web.sh - - name: Build Website + - name: Move Website run: | mv build/web public - touch public/.env - echo "$WEB_APP_ENV" >> public/.env + mv .env public/.env - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: @@ -42,6 +47,8 @@ jobs: update_sentry: runs-on: ubuntu-latest + environment: staging + needs: deploy_web steps: - uses: actions/checkout@v3 with: @@ -53,6 +60,4 @@ jobs: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_ORG: ${{ secrets.SENTRY_ORG }} SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} - # SENTRY_URL: https://sentry.io/ - with: - environment: staging + # SENTRY_URL: https://sentry.io/ \ No newline at end of file From 30a6cb561096b4e35dddd0198d67a1481f53070b Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 23:10:02 +0100 Subject: [PATCH 28/33] new web build test...2 --- pubspec.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index f0275779f..395299f12 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -132,7 +132,6 @@ flutter: generate: true uses-material-design: true assets: - - .env - assets/ - assets/pangea/ - assets/pangea/bot_faces/ From 5de94392941605f7fb190409f4f2b010cd2ff17b Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 23:10:09 +0100 Subject: [PATCH 29/33] new web build test...2 --- .github/workflows/main_deploy.yaml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 1207580ad..3abd9d18d 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -17,11 +17,6 @@ jobs: steps: - uses: actions/checkout@v2 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - name: 'Create env file' - run: | - touch .env - echo "$WEB_APP_ENV" >> .env - cat .env - uses: subosito/flutter-action@v2 with: flutter-version: ${{ env.FLUTTER_VERSION }} @@ -33,10 +28,11 @@ jobs: run: ./scripts/prepare-web.sh - name: Build Release Web run: ./scripts/build-web.sh - - name: Move Website + - name: Build Website run: | mv build/web public - mv .env public/.env + touch public/.env + echo "$WEB_APP_ENV" >> public/.env - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: @@ -47,8 +43,6 @@ jobs: update_sentry: runs-on: ubuntu-latest - environment: staging - needs: deploy_web steps: - uses: actions/checkout@v3 with: @@ -60,4 +54,6 @@ jobs: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_ORG: ${{ secrets.SENTRY_ORG }} SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} - # SENTRY_URL: https://sentry.io/ \ No newline at end of file + # SENTRY_URL: https://sentry.io/ + with: + environment: staging From 9c117800264357b32c305ab12f20694516d12089 Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Sun, 10 Dec 2023 23:22:03 +0100 Subject: [PATCH 30/33] dumb quickfix --- .github/workflows/main_deploy.yaml | 1 + scripts/build-web.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 3abd9d18d..328bba665 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -33,6 +33,7 @@ jobs: mv build/web public touch public/.env echo "$WEB_APP_ENV" >> public/.env + cp public/.env public/assets/.env - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: diff --git a/scripts/build-web.sh b/scripts/build-web.sh index 603a84301..8e46ed749 100755 --- a/scripts/build-web.sh +++ b/scripts/build-web.sh @@ -2,5 +2,5 @@ flutter config --enable-web flutter clean flutter pub get -flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --source-maps --base-href "/client/" +flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=canvaskit/ --profile --source-maps --base-href "/client/" # flutter build web --release --verbose --source-maps --dart-define=SENTRY_RELEASE=$CI_COMMIT_SHA From 9c6b12d8103289f48a0b2647ded81ee3070678f1 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Mon, 11 Dec 2023 14:07:36 -0500 Subject: [PATCH 31/33] move local keys to local keys file, use local storage to show web subscription success snackbar --- lib/pages/chat_list/chat_list.dart | 10 ++++++++++ lib/pangea/constants/local.key.dart | 4 ++++ lib/pangea/controllers/subscription_controller.dart | 12 ++++++++---- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 662de6b01..05d5e276e 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -8,6 +8,7 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat_list/chat_list_view.dart'; import 'package:fluffychat/pages/settings_security/settings_security.dart'; +import 'package:fluffychat/pangea/constants/local.key.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/utils/add_to_space.dart'; @@ -757,6 +758,15 @@ class ChatListController extends State await pangeaController.subscriptionController.initialize(); pangeaController.afterSyncAndFirstLoginInitialization(context); await pangeaController.inviteBotToExistingSpaces(); + final bool? beganWebPayment = pangeaController.pStoreService.read( + PLocalKey.beganWebPayment, + ); + if (beganWebPayment ?? false) { + pangeaController.pStoreService.delete(PLocalKey.beganWebPayment); + if (pangeaController.subscriptionController.isSubscribed) { + showSubscribedSnackbar(context); + } + } } else { ErrorHandler.logError( m: "didn't run afterSyncAndFirstLoginInitialization because not mounted", diff --git a/lib/pangea/constants/local.key.dart b/lib/pangea/constants/local.key.dart index 238a3ecc9..b5f118aab 100644 --- a/lib/pangea/constants/local.key.dart +++ b/lib/pangea/constants/local.key.dart @@ -4,4 +4,8 @@ class PLocalKey { static const String classes = 'classes'; static const String cachedClassCodeToJoin = "cachedclasscodetojoin"; + static const String beganWebPayment = "beganWebPayment"; + + // making this a random string so that it's harder to guess + static const String activatedTrialKey = '7C4EuKIsph'; } diff --git a/lib/pangea/controllers/subscription_controller.dart b/lib/pangea/controllers/subscription_controller.dart index 20bd73328..85bc6e30e 100644 --- a/lib/pangea/controllers/subscription_controller.dart +++ b/lib/pangea/controllers/subscription_controller.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pangea/constants/local.key.dart'; import 'package:fluffychat/pangea/controllers/base_controller.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/models/base_subscription_info.dart'; @@ -82,14 +83,13 @@ class SubscriptionController extends BaseController { } } - final String activatedTrialKey = 'activatedTrial'; - bool get activatedNewUserTrial => _pangeaController.userController.inTrialWindow && - (_pangeaController.pStoreService.read(activatedTrialKey) ?? false); + (_pangeaController.pStoreService.read(PLocalKey.activatedTrialKey) ?? + false); void activateNewUserTrial() { - _pangeaController.pStoreService.save(activatedTrialKey, true); + _pangeaController.pStoreService.save(PLocalKey.activatedTrialKey, true); setNewUserTrial(); } @@ -204,6 +204,10 @@ class SubscriptionController extends BaseController { selectedSubscription.duration!, isPromo: isPromo, ); + _pangeaController.pStoreService.save( + PLocalKey.beganWebPayment, + true, + ); setState(); launchUrlString( paymentLink, From 92915f05ad19db9901509f34a8ce315cf1105274 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Mon, 11 Dec 2023 15:01:48 -0500 Subject: [PATCH 32/33] moved where web subscription local storage is read to be more consistent with how the snackbar is managed for mobile --- lib/pages/chat_list/chat_list.dart | 10 ---------- lib/pangea/controllers/subscription_controller.dart | 10 ++++++++++ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 05d5e276e..662de6b01 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -8,7 +8,6 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat_list/chat_list_view.dart'; import 'package:fluffychat/pages/settings_security/settings_security.dart'; -import 'package:fluffychat/pangea/constants/local.key.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/utils/add_to_space.dart'; @@ -758,15 +757,6 @@ class ChatListController extends State await pangeaController.subscriptionController.initialize(); pangeaController.afterSyncAndFirstLoginInitialization(context); await pangeaController.inviteBotToExistingSpaces(); - final bool? beganWebPayment = pangeaController.pStoreService.read( - PLocalKey.beganWebPayment, - ); - if (beganWebPayment ?? false) { - pangeaController.pStoreService.delete(PLocalKey.beganWebPayment); - if (pangeaController.subscriptionController.isSubscribed) { - showSubscribedSnackbar(context); - } - } } else { ErrorHandler.logError( m: "didn't run afterSyncAndFirstLoginInitialization because not mounted", diff --git a/lib/pangea/controllers/subscription_controller.dart b/lib/pangea/controllers/subscription_controller.dart index 85bc6e30e..f8e932865 100644 --- a/lib/pangea/controllers/subscription_controller.dart +++ b/lib/pangea/controllers/subscription_controller.dart @@ -75,6 +75,16 @@ class SubscriptionController extends BaseController { } }, ); + } else { + final bool? beganWebPayment = _pangeaController.pStoreService.read( + PLocalKey.beganWebPayment, + ); + if (beganWebPayment ?? false) { + _pangeaController.pStoreService.delete(PLocalKey.beganWebPayment); + if (_pangeaController.subscriptionController.isSubscribed) { + subscriptionStream.add(true); + } + } } setState(); } catch (e, s) { From 716de94ec8ea50aa7efb1cf9d510fa557d4287ec Mon Sep 17 00:00:00 2001 From: Brord van Wierst Date: Tue, 12 Dec 2023 18:42:18 +0100 Subject: [PATCH 33/33] revert test branch --- .github/workflows/main_deploy.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main_deploy.yaml b/.github/workflows/main_deploy.yaml index 328bba665..d3567e06e 100644 --- a/.github/workflows/main_deploy.yaml +++ b/.github/workflows/main_deploy.yaml @@ -4,7 +4,6 @@ on: push: branches: - main - - fix-main-deploy env: # Setting an environment variable with the value of a configuration variable