diff --git a/fonts/Inconsolata/Inconsolata-Black.ttf b/fonts/Inconsolata/Inconsolata-Black.ttf deleted file mode 100644 index ab78d8552..000000000 Binary files a/fonts/Inconsolata/Inconsolata-Black.ttf and /dev/null differ diff --git a/fonts/Inconsolata/Inconsolata-Bold.ttf b/fonts/Inconsolata/Inconsolata-Bold.ttf deleted file mode 100644 index 57aa66cc0..000000000 Binary files a/fonts/Inconsolata/Inconsolata-Bold.ttf and /dev/null differ diff --git a/fonts/Inconsolata/Inconsolata-ExtraBold.ttf b/fonts/Inconsolata/Inconsolata-ExtraBold.ttf deleted file mode 100644 index 12b733fad..000000000 Binary files a/fonts/Inconsolata/Inconsolata-ExtraBold.ttf and /dev/null differ diff --git a/fonts/Inconsolata/Inconsolata-ExtraLight.ttf b/fonts/Inconsolata/Inconsolata-ExtraLight.ttf deleted file mode 100644 index 3492bb202..000000000 Binary files a/fonts/Inconsolata/Inconsolata-ExtraLight.ttf and /dev/null differ diff --git a/fonts/Inconsolata/Inconsolata-Light.ttf b/fonts/Inconsolata/Inconsolata-Light.ttf deleted file mode 100644 index b313b1c95..000000000 Binary files a/fonts/Inconsolata/Inconsolata-Light.ttf and /dev/null differ diff --git a/fonts/Inconsolata/Inconsolata-Medium.ttf b/fonts/Inconsolata/Inconsolata-Medium.ttf deleted file mode 100644 index d6ad05e84..000000000 Binary files a/fonts/Inconsolata/Inconsolata-Medium.ttf and /dev/null differ diff --git a/fonts/Inconsolata/Inconsolata-Regular.ttf b/fonts/Inconsolata/Inconsolata-Regular.ttf deleted file mode 100644 index 0d879bf3a..000000000 Binary files a/fonts/Inconsolata/Inconsolata-Regular.ttf and /dev/null differ diff --git a/fonts/Inconsolata/Inconsolata-SemiBold.ttf b/fonts/Inconsolata/Inconsolata-SemiBold.ttf deleted file mode 100644 index 71ba4f997..000000000 Binary files a/fonts/Inconsolata/Inconsolata-SemiBold.ttf and /dev/null differ diff --git a/lib/pangea/instructions/instruction_settings.dart b/lib/pangea/instructions/instruction_settings.dart index e75988261..20933ff5e 100644 --- a/lib/pangea/instructions/instruction_settings.dart +++ b/lib/pangea/instructions/instruction_settings.dart @@ -1,3 +1,5 @@ +import 'package:flutter/foundation.dart'; + import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -54,4 +56,35 @@ class InstructionSettings { InstructionSettings copy() { return InstructionSettings(Map.from(_instructions)); } + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + if (other is! InstructionSettings) return false; + + final entries = _instructions.entries.toList() + ..sort((a, b) => a.key.hashCode.compareTo(b.key.hashCode)); + + final otherEntries = other._instructions.entries.toList() + ..sort((a, b) => a.key.hashCode.compareTo(b.key.hashCode)); + + return listEquals( + entries.map((e) => e.key).toList(), + otherEntries.map((e) => e.key).toList(), + ) && + listEquals( + entries.map((e) => e.value).toList(), + otherEntries.map((e) => e.value).toList(), + ); + } + + @override + int get hashCode { + final entries = _instructions.entries.toList() + ..sort((a, b) => a.key.hashCode.compareTo(b.key.hashCode)); + + return Object.hashAll( + entries.map((e) => Object.hash(e.key, e.value)), + ); + } } diff --git a/lib/pangea/subscription/controllers/subscription_controller.dart b/lib/pangea/subscription/controllers/subscription_controller.dart index 91027f88c..6b21c8c20 100644 --- a/lib/pangea/subscription/controllers/subscription_controller.dart +++ b/lib/pangea/subscription/controllers/subscription_controller.dart @@ -96,19 +96,14 @@ class SubscriptionController extends BaseController { availableSubscriptionInfo = AvailableSubscriptionsInfo(); await availableSubscriptionInfo!.setAvailableSubscriptions(); - final subs = - await SubscriptionRepo.getCurrentSubscriptionInfo(null, null); - currentSubscriptionInfo = kIsWeb ? WebSubscriptionInfo( userID: _userID!, availableSubscriptionInfo: availableSubscriptionInfo!, - history: subs.allSubscriptions, ) : MobileSubscriptionInfo( userID: _userID!, availableSubscriptionInfo: availableSubscriptionInfo!, - history: subs.allSubscriptions, ); await currentSubscriptionInfo!.configure(); @@ -162,13 +157,11 @@ class SubscriptionController extends BaseController { userID: _userID!, availableSubscriptionInfo: availableSubscriptionInfo ?? AvailableSubscriptionsInfo(), - history: {}, ) : MobileSubscriptionInfo( userID: _userID!, availableSubscriptionInfo: availableSubscriptionInfo ?? AvailableSubscriptionsInfo(), - history: {}, ); currentSubscriptionInfo!.currentSubscriptionId = diff --git a/lib/pangea/subscription/models/base_subscription_info.dart b/lib/pangea/subscription/models/base_subscription_info.dart index 0f4e144d4..208df6339 100644 --- a/lib/pangea/subscription/models/base_subscription_info.dart +++ b/lib/pangea/subscription/models/base_subscription_info.dart @@ -10,7 +10,6 @@ import 'package:fluffychat/widgets/matrix.dart'; class CurrentSubscriptionInfo { final String userID; final AvailableSubscriptionsInfo availableSubscriptionInfo; - final Map? history; DateTime? expirationDate; String? currentSubscriptionId; @@ -18,7 +17,6 @@ class CurrentSubscriptionInfo { CurrentSubscriptionInfo({ required this.userID, required this.availableSubscriptionInfo, - required this.history, }); SubscriptionDetails? get currentSubscription { diff --git a/lib/pangea/subscription/models/mobile_subscriptions.dart b/lib/pangea/subscription/models/mobile_subscriptions.dart index 31e541299..8d45469ae 100644 --- a/lib/pangea/subscription/models/mobile_subscriptions.dart +++ b/lib/pangea/subscription/models/mobile_subscriptions.dart @@ -15,7 +15,6 @@ class MobileSubscriptionInfo extends CurrentSubscriptionInfo { MobileSubscriptionInfo({ required super.userID, required super.availableSubscriptionInfo, - required super.history, }); @override diff --git a/lib/pangea/subscription/models/web_subscriptions.dart b/lib/pangea/subscription/models/web_subscriptions.dart index 313d88ee8..6f25f3513 100644 --- a/lib/pangea/subscription/models/web_subscriptions.dart +++ b/lib/pangea/subscription/models/web_subscriptions.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:fluffychat/config/app_config.dart'; @@ -8,7 +10,6 @@ class WebSubscriptionInfo extends CurrentSubscriptionInfo { WebSubscriptionInfo({ required super.userID, required super.availableSubscriptionInfo, - required super.history, }); @override @@ -16,7 +17,6 @@ class WebSubscriptionInfo extends CurrentSubscriptionInfo { if (currentSubscriptionId != null) return; try { final rcResponse = await SubscriptionRepo.getCurrentSubscriptionInfo( - userID, availableSubscriptionInfo.allProducts, ); diff --git a/lib/pangea/subscription/repo/subscription_repo.dart b/lib/pangea/subscription/repo/subscription_repo.dart index ce0d0cd22..24ecfed98 100644 --- a/lib/pangea/subscription/repo/subscription_repo.dart +++ b/lib/pangea/subscription/repo/subscription_repo.dart @@ -91,7 +91,6 @@ class SubscriptionRepo { } static Future getCurrentSubscriptionInfo( - String? userId, List? allProducts, ) async { final Requests req = Requests( diff --git a/lib/pangea/user/controllers/user_controller.dart b/lib/pangea/user/controllers/user_controller.dart index 4cff6bab1..058c71cef 100644 --- a/lib/pangea/user/controllers/user_controller.dart +++ b/lib/pangea/user/controllers/user_controller.dart @@ -84,8 +84,14 @@ class UserController extends BaseController { }) async { final prevTargetLang = _pangeaController.languageController.userL2; final prevBaseLang = _pangeaController.languageController.userL1; + final prevHash = profile.hashCode; final Profile updatedProfile = update(profile); + if (updatedProfile.hashCode == prevHash) { + // no changes were made, so don't save + return; + } + await updatedProfile.saveProfileData(waitForDataInSync: waitForDataInSync); Map? profileUpdate; diff --git a/lib/pangea/user/models/user_model.dart b/lib/pangea/user/models/user_model.dart index fd83cdf4d..38cc1a528 100644 --- a/lib/pangea/user/models/user_model.dart +++ b/lib/pangea/user/models/user_model.dart @@ -128,6 +128,34 @@ class UserSettings { cefrLevel: cefrLevel, ); } + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is UserSettings && + other.dateOfBirth == dateOfBirth && + other.createdAt == createdAt && + other.autoPlayMessages == autoPlayMessages && + other.publicProfile == publicProfile && + other.targetLanguage == targetLanguage && + other.sourceLanguage == sourceLanguage && + other.country == country && + other.hasJoinedHelpSpace == hasJoinedHelpSpace && + other.cefrLevel == cefrLevel; + } + + @override + int get hashCode => + dateOfBirth.hashCode ^ + createdAt.hashCode ^ + autoPlayMessages.hashCode ^ + publicProfile.hashCode ^ + targetLanguage.hashCode ^ + sourceLanguage.hashCode ^ + country.hashCode ^ + hasJoinedHelpSpace.hashCode ^ + cefrLevel.hashCode; } /// The user's language tool settings. @@ -210,6 +238,30 @@ class UserToolSettings { enableAutocorrect: enableAutocorrect, ); } + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is UserToolSettings && + other.interactiveTranslator == interactiveTranslator && + other.interactiveGrammar == interactiveGrammar && + other.immersionMode == immersionMode && + other.definitions == definitions && + other.autoIGC == autoIGC && + other.enableTTS == enableTTS && + other.enableAutocorrect == enableAutocorrect; + } + + @override + int get hashCode => + interactiveTranslator.hashCode ^ + interactiveGrammar.hashCode ^ + immersionMode.hashCode ^ + definitions.hashCode ^ + autoIGC.hashCode ^ + enableTTS.hashCode ^ + enableAutocorrect.hashCode; } /// A wrapper around the matrix account data for the user profile. @@ -329,6 +381,22 @@ class Profile { instructionSettings: instructionSettings.copy(), ); } + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is Profile && + other.userSettings == userSettings && + other.toolSettings == toolSettings && + other.instructionSettings == instructionSettings; + } + + @override + int get hashCode => + userSettings.hashCode ^ + toolSettings.hashCode ^ + instructionSettings.hashCode; } /// Model of data from pangea chat server. Not used anymore, in favor of matrix account data. diff --git a/pubspec.yaml b/pubspec.yaml index ab650ec05..43c0b0d84 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -178,17 +178,6 @@ flutter: - assets/sounds/ - assets/vodozemac/ - # #Pangea - fonts: - - family: Inconsolata - fonts: - - asset: fonts/Inconsolata/Inconsolata-Regular.ttf - - asset: fonts/Inconsolata/Inconsolata-Light.ttf - style: italic - - asset: fonts/Inconsolata/Inconsolata-Bold.ttf - weight: 700 - # Pangea# - msix_config: display_name: FluffyChat publisher_display_name: FluffyChat