90 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
| import 'dart:convert';
 | |
| 
 | |
| import 'package:famedlysdk/famedlysdk.dart';
 | |
| 
 | |
| class FakeStore implements StoreAPI {
 | |
|   /// Whether this is a simple store which only stores the client credentials and
 | |
|   /// end to end encryption stuff or the whole sync payloads.
 | |
|   final bool extended = false;
 | |
| 
 | |
|   Map<String, dynamic> storeMap = {};
 | |
| 
 | |
|   /// Link back to the client.
 | |
|   Client client;
 | |
| 
 | |
|   FakeStore(this.client, this.storeMap) {
 | |
|     _init();
 | |
|   }
 | |
| 
 | |
|   _init() async {
 | |
|     final credentialsStr = await getItem(client.clientName);
 | |
| 
 | |
|     if (credentialsStr == null || credentialsStr.isEmpty) {
 | |
|       client.onLoginStateChanged.add(LoginState.loggedOut);
 | |
|       return;
 | |
|     }
 | |
|     print("[Matrix] Restoring account credentials");
 | |
|     final Map<String, dynamic> credentials = json.decode(credentialsStr);
 | |
|     client.connect(
 | |
|       newDeviceID: credentials["deviceID"],
 | |
|       newDeviceName: credentials["deviceName"],
 | |
|       newHomeserver: credentials["homeserver"],
 | |
|       newLazyLoadMembers: credentials["lazyLoadMembers"],
 | |
|       newMatrixVersions: List<String>.from(credentials["matrixVersions"]),
 | |
|       newToken: credentials["token"],
 | |
|       newUserID: credentials["userID"],
 | |
|       newPrevBatch: credentials["prev_batch"],
 | |
|       newOlmAccount: credentials["olmAccount"],
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   /// Will be automatically called when the client is logged in successfully.
 | |
|   Future<void> storeClient() async {
 | |
|     final Map<String, dynamic> credentials = {
 | |
|       "deviceID": client.deviceID,
 | |
|       "deviceName": client.deviceName,
 | |
|       "homeserver": client.homeserver,
 | |
|       "lazyLoadMembers": client.lazyLoadMembers,
 | |
|       "matrixVersions": client.matrixVersions,
 | |
|       "token": client.accessToken,
 | |
|       "userID": client.userID,
 | |
|       "olmAccount": client.pickledOlmAccount,
 | |
|     };
 | |
|     await setItem(client.clientName, json.encode(credentials));
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   /// Clears all tables from the database.
 | |
|   Future<void> clear() async {
 | |
|     storeMap = {};
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   Future<dynamic> getItem(String key) async {
 | |
|     return storeMap[key];
 | |
|   }
 | |
| 
 | |
|   Future<void> setItem(String key, String value) async {
 | |
|     storeMap[key] = value;
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   String get _UserDeviceKeysKey => "${client.clientName}.user_device_keys";
 | |
| 
 | |
|   Future<Map<String, DeviceKeysList>> getUserDeviceKeys() async {
 | |
|     final deviceKeysListString = await getItem(_UserDeviceKeysKey);
 | |
|     if (deviceKeysListString == null) return {};
 | |
|     Map<String, dynamic> rawUserDeviceKeys = json.decode(deviceKeysListString);
 | |
|     Map<String, DeviceKeysList> userDeviceKeys = {};
 | |
|     for (final entry in rawUserDeviceKeys.entries) {
 | |
|       userDeviceKeys[entry.key] = DeviceKeysList.fromJson(entry.value);
 | |
|     }
 | |
|     return userDeviceKeys;
 | |
|   }
 | |
| 
 | |
|   Future<void> storeUserDeviceKeys(
 | |
|       Map<String, DeviceKeysList> userDeviceKeys) async {
 | |
|     await setItem(_UserDeviceKeysKey, json.encode(userDeviceKeys));
 | |
|   }
 | |
| }
 |