[Store] Make lightweight store possible

This commit is contained in:
Christian Pauly 2020-01-24 16:42:51 +00:00
parent 7643969db7
commit 653883a22d
2 changed files with 26 additions and 12 deletions

View file

@ -61,10 +61,11 @@ class Client {
Client get connection => this; Client get connection => this;
/// Optional persistent store for all data. /// Optional persistent store for all data.
StoreAPI store; ExtendedStoreAPI get store => (storeAPI?.extended ?? false) ? storeAPI : null;
Client(this.clientName, {this.debug = false, this.store}) { StoreAPI storeAPI;
if (this.clientName != "testclient") store = null; //Store(this);
Client(this.clientName, {this.debug = false, this.storeAPI}) {
this.onLoginStateChanged.stream.listen((loginState) { this.onLoginStateChanged.stream.listen((loginState) {
print("LoginState: ${loginState.toString()}"); print("LoginState: ${loginState.toString()}");
}); });
@ -647,13 +648,15 @@ class Client {
this._lazyLoadMembers = newLazyLoadMembers; this._lazyLoadMembers = newLazyLoadMembers;
this.prevBatch = newPrevBatch; this.prevBatch = newPrevBatch;
if (this.storeAPI != null) {
await this.storeAPI.storeClient();
if (this.store != null) { if (this.store != null) {
await this.store.storeClient();
this._rooms = await this.store.getRoomList(onlyLeft: false); this._rooms = await this.store.getRoomList(onlyLeft: false);
this._sortRooms(); this._sortRooms();
this.accountData = await this.store.getAccountData(); this.accountData = await this.store.getAccountData();
this.presences = await this.store.getPresences(); this.presences = await this.store.getPresences();
} }
}
_userEventSub ??= onUserEvent.stream.listen(this.handleUserUpdate); _userEventSub ??= onUserEvent.stream.listen(this.handleUserUpdate);
@ -666,7 +669,7 @@ class Client {
/// Resets all settings and stops the synchronisation. /// Resets all settings and stops the synchronisation.
void clear() { void clear() {
this.store?.clear(); this.storeAPI?.clear();
this._accessToken = this._homeserver = this._userID = this._deviceID = this this._accessToken = this._homeserver = this._userID = this._deviceID = this
._deviceName = ._deviceName =
this._matrixVersions = this._lazyLoadMembers = this.prevBatch = null; this._matrixVersions = this._lazyLoadMembers = this.prevBatch = null;

View file

@ -33,9 +33,12 @@ import 'sync/event_update.dart';
import 'sync/room_update.dart'; import 'sync/room_update.dart';
import 'sync/user_update.dart'; import 'sync/user_update.dart';
/// Responsible to store all data persistent and to query objects from the
/// database.
abstract class StoreAPI { abstract class 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;
/// Link back to the client.
Client client; Client client;
/// Will be automatically called when the client is logged in successfully. /// Will be automatically called when the client is logged in successfully.
@ -43,6 +46,14 @@ abstract class StoreAPI {
/// Clears all tables from the database. /// Clears all tables from the database.
Future<void> clear(); Future<void> clear();
}
/// Responsible to store all data persistent and to query objects from the
/// database.
abstract class ExtendedStoreAPI extends 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 = true;
/// The current trans /// The current trans
Future<void> setRoomPrevBatch(String roomId, String prevBatch); Future<void> setRoomPrevBatch(String roomId, String prevBatch);