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_list/chat_list_view.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/pangea_room_extension/pangea_room_extension.dart';
import 'package:fluffychat/pangea/utils/chat_list_handle_space_tap.dart';
@ -1016,7 +1015,7 @@ class ChatListController extends State<ChatList>
}
// #Pangea
await _initPangeaControllers(client);
_initPangeaControllers(client);
// Pangea#
if (!mounted) return;
setState(() {
@ -1025,22 +1024,12 @@ class ChatListController extends State<ChatList>
}
// #Pangea
Future<void> _initPangeaControllers(Client client) async {
MatrixState.pangeaController.putAnalytics.initialize();
MatrixState.pangeaController.getAnalytics.initialize();
void _initPangeaControllers(Client client) {
GoogleAnalytics.analyticsUserUpdate(client.userID);
client.migrateAnalyticsRooms();
MatrixState.pangeaController.initControllers();
if (mounted) {
final PangeaController pangeaController = MatrixState.pangeaController;
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",
);
MatrixState.pangeaController.classController.joinCachedSpaceCode(context);
}
}
// 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(
PLocalKey.cachedClassCodeToJoin,
isAccountData: false,
@ -53,6 +53,7 @@ class ClassController extends BaseController {
context,
classCode,
);
await _pangeaController.pStoreService.delete(
PLocalKey.cachedClassCodeToJoin,
isAccountData: false,

@ -25,6 +25,7 @@ class GetAnalyticsController {
StreamController.broadcast();
ConstructListModel constructListModel = ConstructListModel(uses: []);
Completer<void>? initCompleter;
GetAnalyticsController(PangeaController pangeaController) {
_pangeaController = pangeaController;
@ -50,20 +51,23 @@ class GetAnalyticsController {
return progress >= 0 ? progress : 0;
}
void initialize() {
Future<void> initialize() async {
if (initCompleter != null) return;
initCompleter = Completer<void>();
_analyticsUpdateSubscription ??= _pangeaController
.putAnalytics.analyticsUpdateStream.stream
.listen(_onAnalyticsUpdate);
_pangeaController.putAnalytics.lastUpdatedCompleter.future.then((_) {
_getConstructs().then((_) {
constructListModel.updateConstructs([
...(_getConstructsLocal() ?? []),
..._locallyCachedConstructs,
]);
_updateAnalyticsStream();
});
});
await _pangeaController.putAnalytics.lastUpdatedCompleter.future;
await _getConstructs();
constructListModel.updateConstructs([
...(_getConstructsLocal() ?? []),
..._locallyCachedConstructs,
]);
_updateAnalyticsStream();
initCompleter!.complete();
}
/// Clear all cached analytics data.
@ -71,6 +75,8 @@ class GetAnalyticsController {
constructListModel.dispose();
_analyticsUpdateSubscription?.cancel();
_analyticsUpdateSubscription = null;
analyticsStream.close();
initCompleter = null;
_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/instructions.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:matrix/matrix.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
@ -80,11 +79,19 @@ class PangeaController {
_addRefInObjects();
}
Future<void> afterSyncAndFirstLoginInitialization(
BuildContext context,
) async {
await classController.checkForClassCodeAndSubscription(context);
/// Initializes various controllers and settings.
/// While many of these functions are asynchronous, they are not awaited here,
/// because of order of execution does not matter,
/// and running them at the same times speeds them up.
void initControllers() {
putAnalytics.initialize();
getAnalytics.initialize();
subscriptionController.initialize();
classController.fixClassPowerLevels();
startChatWithBotIfNotPresent();
inviteBotToExistingSpaces();
setPangeaPushRules();
}
/// Initialize controllers

@ -36,6 +36,13 @@ class LearningProgressIndicatorsState
@override
void 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
.pangeaController.getAnalytics.analyticsStream.stream
.listen(updateData);
@ -48,7 +55,7 @@ class LearningProgressIndicatorsState
super.dispose();
}
void updateData(AnalyticsStreamUpdate _) {
void updateData(AnalyticsStreamUpdate? _) {
if (_loading) _loading = false;
if (mounted) setState(() {});
}

Loading…
Cancel
Save