feat: Allow loading of multiple clients in main.dart

This commit is contained in:
Christian Pauly 2021-09-18 11:24:21 +02:00
parent e6948d25f2
commit fdb5345412
2 changed files with 54 additions and 23 deletions

View File

@ -2,7 +2,7 @@
import 'dart:async';
import 'package:adaptive_theme/adaptive_theme.dart';
import 'package:matrix/encryption/utils/key_verification.dart';
import 'package:fluffychat/utils/client_manager.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/config/routes.dart';
import 'package:fluffychat/utils/platform_infos.dart';
@ -18,7 +18,6 @@ import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:universal_html/html.dart' as html;
import 'package:vrouter/vrouter.dart';
import 'utils/matrix_sdk_extensions.dart/flutter_matrix_hive_database.dart';
import 'widgets/layouts/wait_for_login.dart';
import 'widgets/lock_screen.dart';
import 'widgets/matrix.dart';
@ -35,27 +34,10 @@ void main() async {
FlutterError.onError = (FlutterErrorDetails details) =>
Zone.current.handleUncaughtError(details.exception, details.stack);
final client = Client(
PlatformInfos.clientName,
enableE2eeRecovery: true,
verificationMethods: {
KeyVerificationMethod.numbers,
if (PlatformInfos.isMobile || PlatformInfos.isLinux)
KeyVerificationMethod.emoji,
},
importantStateEvents: <String>{
'im.ponies.room_emotes', // we want emotes to work properly
},
databaseBuilder: FlutterMatrixHiveStore.hiveDatabaseBuilder,
supportedLoginTypes: {
AuthenticationTypes.password,
if (PlatformInfos.isMobile || PlatformInfos.isWeb) AuthenticationTypes.sso
},
compute: compute,
);
final clients = await ClientManager.getClients();
if (PlatformInfos.isMobile) {
BackgroundPush.clientOnly(client);
BackgroundPush.clientOnly(clients.first);
}
final queryParameters = <String, String>{};
@ -68,13 +50,14 @@ void main() async {
() => runApp(PlatformInfos.isMobile
? AppLock(
builder: (args) => FluffyChatApp(
client: client,
client: clients.first,
queryParameters: queryParameters,
),
lockScreen: LockScreen(),
enabled: false,
)
: FluffyChatApp(client: client, queryParameters: queryParameters)),
: FluffyChatApp(
client: clients.first, queryParameters: queryParameters)),
SentryController.captureException,
);
}

View File

@ -0,0 +1,48 @@
import 'dart:convert';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:flutter/foundation.dart';
import 'package:matrix/encryption/utils/key_verification.dart';
import 'package:matrix/matrix.dart';
import 'famedlysdk_store.dart';
import 'matrix_sdk_extensions.dart/flutter_matrix_hive_database.dart';
abstract class ClientManager {
static const String clientNamespace = 'im.fluffychat.store.clients';
static Future<List<Client>> getClients() async {
final store = Store();
final clientNames = <String>{PlatformInfos.clientName};
try {
final rawClientNames = await store.getItem(clientNamespace);
if (rawClientNames != null) {
final clientNamesList =
(jsonDecode(rawClientNames) as List).cast<String>();
clientNames.addAll(clientNamesList);
}
} catch (e, s) {
Logs().w('Client names in store are corrupted', e, s);
}
return clientNames
.map((clientName) => Client(
clientName,
enableE2eeRecovery: true,
verificationMethods: {
KeyVerificationMethod.numbers,
if (PlatformInfos.isMobile || PlatformInfos.isLinux)
KeyVerificationMethod.emoji,
},
importantStateEvents: <String>{
'im.ponies.room_emotes', // we want emotes to work properly
},
databaseBuilder: FlutterMatrixHiveStore.hiveDatabaseBuilder,
supportedLoginTypes: {
AuthenticationTypes.password,
if (PlatformInfos.isMobile || PlatformInfos.isWeb)
AuthenticationTypes.sso
},
compute: compute,
))
.toList();
}
}