updated initPangeaControllers function, don't check mounted for functions that don't rely on context

pull/1490/head
ggurdin 1 year ago
parent 6a7ad14d91
commit a061535bbe
No known key found for this signature in database
GPG Key ID: A01CB41737CBB478

@ -7,7 +7,6 @@ import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/pages/chat/send_file_dialog.dart'; import 'package:fluffychat/pages/chat/send_file_dialog.dart';
import 'package:fluffychat/pages/chat_list/chat_list_view.dart'; import 'package:fluffychat/pages/chat_list/chat_list_view.dart';
import 'package:fluffychat/pangea/constants/pangea_room_types.dart'; import 'package:fluffychat/pangea/constants/pangea_room_types.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart'; import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart';
import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart';
import 'package:fluffychat/pangea/utils/chat_list_handle_space_tap.dart'; import 'package:fluffychat/pangea/utils/chat_list_handle_space_tap.dart';
@ -1016,7 +1015,7 @@ class ChatListController extends State<ChatList>
} }
// #Pangea // #Pangea
await _initPangeaControllers(client); _initPangeaControllers(client);
// Pangea# // Pangea#
if (!mounted) return; if (!mounted) return;
setState(() { setState(() {
@ -1025,22 +1024,12 @@ class ChatListController extends State<ChatList>
} }
// #Pangea // #Pangea
Future<void> _initPangeaControllers(Client client) async { void _initPangeaControllers(Client client) {
MatrixState.pangeaController.putAnalytics.initialize(); GoogleAnalytics.analyticsUserUpdate(client.userID);
MatrixState.pangeaController.getAnalytics.initialize(); client.migrateAnalyticsRooms();
MatrixState.pangeaController.initControllers();
if (mounted) { if (mounted) {
final PangeaController pangeaController = MatrixState.pangeaController; MatrixState.pangeaController.classController.joinCachedSpaceCode(context);
GoogleAnalytics.analyticsUserUpdate(client.userID);
pangeaController.startChatWithBotIfNotPresent();
await pangeaController.subscriptionController.initialize();
pangeaController.afterSyncAndFirstLoginInitialization(context);
await pangeaController.inviteBotToExistingSpaces();
await pangeaController.setPangeaPushRules();
client.migrateAnalyticsRooms();
} else {
ErrorHandler.logError(
m: "didn't run afterSyncAndFirstLoginInitialization because not mounted",
);
} }
} }
// Pangea# // Pangea#

@ -42,7 +42,7 @@ class ClassController extends BaseController {
); );
} }
Future<void> checkForClassCodeAndSubscription(BuildContext context) async { Future<void> joinCachedSpaceCode(BuildContext context) async {
final String? classCode = _pangeaController.pStoreService.read( final String? classCode = _pangeaController.pStoreService.read(
PLocalKey.cachedClassCodeToJoin, PLocalKey.cachedClassCodeToJoin,
isAccountData: false, isAccountData: false,
@ -53,6 +53,7 @@ class ClassController extends BaseController {
context, context,
classCode, classCode,
); );
await _pangeaController.pStoreService.delete( await _pangeaController.pStoreService.delete(
PLocalKey.cachedClassCodeToJoin, PLocalKey.cachedClassCodeToJoin,
isAccountData: false, isAccountData: false,

@ -25,6 +25,7 @@ class GetAnalyticsController {
StreamController.broadcast(); StreamController.broadcast();
ConstructListModel constructListModel = ConstructListModel(uses: []); ConstructListModel constructListModel = ConstructListModel(uses: []);
Completer<void>? initCompleter;
GetAnalyticsController(PangeaController pangeaController) { GetAnalyticsController(PangeaController pangeaController) {
_pangeaController = pangeaController; _pangeaController = pangeaController;
@ -50,20 +51,23 @@ class GetAnalyticsController {
return progress >= 0 ? progress : 0; return progress >= 0 ? progress : 0;
} }
void initialize() { Future<void> initialize() async {
if (initCompleter != null) return;
initCompleter = Completer<void>();
_analyticsUpdateSubscription ??= _pangeaController _analyticsUpdateSubscription ??= _pangeaController
.putAnalytics.analyticsUpdateStream.stream .putAnalytics.analyticsUpdateStream.stream
.listen(_onAnalyticsUpdate); .listen(_onAnalyticsUpdate);
_pangeaController.putAnalytics.lastUpdatedCompleter.future.then((_) { await _pangeaController.putAnalytics.lastUpdatedCompleter.future;
_getConstructs().then((_) { await _getConstructs();
constructListModel.updateConstructs([ constructListModel.updateConstructs([
...(_getConstructsLocal() ?? []), ...(_getConstructsLocal() ?? []),
..._locallyCachedConstructs, ..._locallyCachedConstructs,
]); ]);
_updateAnalyticsStream(); _updateAnalyticsStream();
});
}); initCompleter!.complete();
} }
/// Clear all cached analytics data. /// Clear all cached analytics data.
@ -71,6 +75,8 @@ class GetAnalyticsController {
constructListModel.dispose(); constructListModel.dispose();
_analyticsUpdateSubscription?.cancel(); _analyticsUpdateSubscription?.cancel();
_analyticsUpdateSubscription = null; _analyticsUpdateSubscription = null;
analyticsStream.close();
initCompleter = null;
_cache.clear(); _cache.clear();
} }

@ -28,7 +28,6 @@ import 'package:fluffychat/pangea/utils/bot_name.dart';
import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart';
import 'package:fluffychat/pangea/utils/instructions.dart'; import 'package:fluffychat/pangea/utils/instructions.dart';
import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:matrix/matrix.dart'; import 'package:matrix/matrix.dart';
import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:sentry_flutter/sentry_flutter.dart';
@ -80,11 +79,19 @@ class PangeaController {
_addRefInObjects(); _addRefInObjects();
} }
Future<void> afterSyncAndFirstLoginInitialization( /// Initializes various controllers and settings.
BuildContext context, /// While many of these functions are asynchronous, they are not awaited here,
) async { /// because of order of execution does not matter,
await classController.checkForClassCodeAndSubscription(context); /// and running them at the same times speeds them up.
void initControllers() {
putAnalytics.initialize();
getAnalytics.initialize();
subscriptionController.initialize();
classController.fixClassPowerLevels(); classController.fixClassPowerLevels();
startChatWithBotIfNotPresent();
inviteBotToExistingSpaces();
setPangeaPushRules();
} }
/// Initialize controllers /// Initialize controllers

@ -36,6 +36,13 @@ class LearningProgressIndicatorsState
@override @override
void initState() { void initState() {
super.initState(); super.initState();
// if getAnalytics has already finished initializing,
// the data is loaded and should be displayed.
if (MatrixState.pangeaController.getAnalytics.initCompleter?.isCompleted ??
false) {
updateData(null);
}
_analyticsSubscription = MatrixState _analyticsSubscription = MatrixState
.pangeaController.getAnalytics.analyticsStream.stream .pangeaController.getAnalytics.analyticsStream.stream
.listen(updateData); .listen(updateData);
@ -48,7 +55,7 @@ class LearningProgressIndicatorsState
super.dispose(); super.dispose();
} }
void updateData(AnalyticsStreamUpdate _) { void updateData(AnalyticsStreamUpdate? _) {
if (_loading) _loading = false; if (_loading) _loading = false;
if (mounted) setState(() {}); if (mounted) setState(() {});
} }

Loading…
Cancel
Save