From 0ab77054d5ef542ff9e9620a622f65201f58a0cb Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Mon, 27 Jan 2025 14:50:39 -0500 Subject: [PATCH] fix: clear lemma cache on logout and language change (#1603) --- .../common/controllers/pangea_controller.dart | 28 +++++++++++++++++-- lib/pangea/common/utils/p_store.dart | 9 ------ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/lib/pangea/common/controllers/pangea_controller.dart b/lib/pangea/common/controllers/pangea_controller.dart index 3336a579c..f831e65a4 100644 --- a/lib/pangea/common/controllers/pangea_controller.dart +++ b/lib/pangea/common/controllers/pangea_controller.dart @@ -4,6 +4,7 @@ import 'dart:math'; import 'package:flutter/foundation.dart'; +import 'package:get_storage/get_storage.dart'; import 'package:matrix/matrix.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; @@ -58,6 +59,8 @@ class PangeaController { late PStore pStoreService; final pLanguageStore = PangeaLanguage(); + StreamSubscription? _languageStream; + ///Matrix Variables MatrixState matrixState; Matrix matrix; @@ -65,7 +68,7 @@ class PangeaController { int? randomint; PangeaController({required this.matrix, required this.matrixState}) { _setup(); - _subscribeToMatrixStreams(); + _subscribeToStreams(); randomint = Random().nextInt(2000); } @@ -112,7 +115,17 @@ class PangeaController { _logOutfromPangea() { debugPrint("Pangea logout"); GoogleAnalytics.logout(); - pStoreService.clearStorage(); + _clearCachedData(); + } + + void _clearCachedData() { + GetStorage('mode_list_storage').erase(); + GetStorage('activity_plan_storage').erase(); + GetStorage('bookmarked_activities').erase(); + GetStorage('objective_list_storage').erase(); + GetStorage('topic_list_storage').erase(); + GetStorage('lemma_storage').erase(); + GetStorage().erase(); } Future checkHomeServerAction() async { @@ -147,6 +160,7 @@ class PangeaController { // Reset cached analytics data MatrixState.pangeaController.putAnalytics.dispose(); MatrixState.pangeaController.getAnalytics.dispose(); + _languageStream?.cancel(); break; case LoginState.loggedIn: // Initialize analytics data @@ -324,10 +338,18 @@ class PangeaController { }); } - void _subscribeToMatrixStreams() { + void _subscribeToStreams() { matrixState.client.onLoginStateChanged.stream .listen(_handleLoginStateChange); + // Listen for changes to the user's language settings + _languageStream ??= userController.stateStream.listen((update) { + if (update is Map && + update['prev_target_lang'] != null) { + _clearCachedData(); + } + }); + // matrixState.client.onSyncStatus.stream // .where((SyncStatusUpdate event) => event.status == SyncStatus.finished) // .listen(_handleSyncStatusFinished); diff --git a/lib/pangea/common/utils/p_store.dart b/lib/pangea/common/utils/p_store.dart index a45284bb9..07ccb7bdd 100644 --- a/lib/pangea/common/utils/p_store.dart +++ b/lib/pangea/common/utils/p_store.dart @@ -1,5 +1,4 @@ import 'package:get_storage/get_storage.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; @@ -65,12 +64,4 @@ class PStore { ? pangeaController.matrixState.client.userID! + key : key; } - - /// Clears the storage by erasing all data in the box. - void clearStorage() { - // this could potenitally be interfering with openning database - // at the start of the session, which is causing auto log outs on iOS - Sentry.addBreadcrumb(Breadcrumb(message: 'Clearing local storage')); - _box.erase(); - } }