only lazy-load m.room.member, not store presence
This commit is contained in:
parent
2e3d8205b1
commit
b7b369923f
|
@ -651,7 +651,7 @@ class Client {
|
||||||
}
|
}
|
||||||
_sortRooms();
|
_sortRooms();
|
||||||
accountData = await database.getAccountData(id);
|
accountData = await database.getAccountData(id);
|
||||||
presences = await database.getPresences(id);
|
presences.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
onLoginStateChanged.add(LoginState.logged);
|
onLoginStateChanged.add(LoginState.logged);
|
||||||
|
@ -744,14 +744,6 @@ class Client {
|
||||||
}
|
}
|
||||||
if (sync.presence != null) {
|
if (sync.presence != null) {
|
||||||
for (final newPresence in sync.presence) {
|
for (final newPresence in sync.presence) {
|
||||||
if (database != null) {
|
|
||||||
await database.storePresence(
|
|
||||||
id,
|
|
||||||
newPresence.type,
|
|
||||||
newPresence.senderId,
|
|
||||||
jsonEncode(newPresence.toJson()),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
presences[newPresence.senderId] = newPresence;
|
presences[newPresence.senderId] = newPresence;
|
||||||
onPresence.add(newPresence);
|
onPresence.add(newPresence);
|
||||||
}
|
}
|
||||||
|
|
|
@ -192,22 +192,6 @@ class Database extends _$Database {
|
||||||
return newAccountData;
|
return newAccountData;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Map<String, api.Presence>> getPresences(int clientId) async {
|
|
||||||
final newPresences = <String, api.Presence>{};
|
|
||||||
final rawPresences = await getAllPresences(clientId).get();
|
|
||||||
for (final d in rawPresences) {
|
|
||||||
// TODO: Why is this not working?
|
|
||||||
try {
|
|
||||||
final content = sdk.Event.getMapFromPayload(d.content);
|
|
||||||
var presence = api.Presence.fromJson(content);
|
|
||||||
presence.senderId = d.sender;
|
|
||||||
presence.type = d.type;
|
|
||||||
newPresences[d.sender] = api.Presence.fromJson(content);
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
return newPresences;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Stores a RoomUpdate object in the database. Must be called inside of
|
/// Stores a RoomUpdate object in the database. Must be called inside of
|
||||||
/// [transaction].
|
/// [transaction].
|
||||||
final Set<String> _ensuredRooms = {};
|
final Set<String> _ensuredRooms = {};
|
||||||
|
|
|
@ -5999,35 +5999,6 @@ abstract class _$Database extends GeneratedDatabase {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
DbPresence _rowToDbPresence(QueryRow row) {
|
|
||||||
return DbPresence(
|
|
||||||
clientId: row.readInt('client_id'),
|
|
||||||
type: row.readString('type'),
|
|
||||||
sender: row.readString('sender'),
|
|
||||||
content: row.readString('content'),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Selectable<DbPresence> getAllPresences(int client_id) {
|
|
||||||
return customSelect('SELECT * FROM presences WHERE client_id = :client_id',
|
|
||||||
variables: [Variable.withInt(client_id)],
|
|
||||||
readsFrom: {presences}).map(_rowToDbPresence);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<int> storePresence(
|
|
||||||
int client_id, String type, String sender, String content) {
|
|
||||||
return customInsert(
|
|
||||||
'INSERT OR REPLACE INTO presences (client_id, type, sender, content) VALUES (:client_id, :type, :sender, :content)',
|
|
||||||
variables: [
|
|
||||||
Variable.withInt(client_id),
|
|
||||||
Variable.withString(type),
|
|
||||||
Variable.withString(sender),
|
|
||||||
Variable.withString(content)
|
|
||||||
],
|
|
||||||
updates: {presences},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<int> updateEvent(String unsigned, String content, String prev_content,
|
Future<int> updateEvent(String unsigned, String content, String prev_content,
|
||||||
int client_id, String event_id, String room_id) {
|
int client_id, String event_id, String room_id) {
|
||||||
return customUpdate(
|
return customUpdate(
|
||||||
|
@ -6079,7 +6050,7 @@ abstract class _$Database extends GeneratedDatabase {
|
||||||
|
|
||||||
Selectable<DbRoomState> getImportantRoomStates(int client_id) {
|
Selectable<DbRoomState> getImportantRoomStates(int client_id) {
|
||||||
return customSelect(
|
return customSelect(
|
||||||
'SELECT * FROM room_states WHERE client_id = :client_id AND type IN (\'m.room.name\', \'m.room.avatar\', \'m.room.message\', \'m.room.encrypted\', \'m.room.encryption\')',
|
'SELECT * FROM room_states WHERE client_id = :client_id AND type <> \'m.room.member\'',
|
||||||
variables: [Variable.withInt(client_id)],
|
variables: [Variable.withInt(client_id)],
|
||||||
readsFrom: {roomStates}).map(_rowToDbRoomState);
|
readsFrom: {roomStates}).map(_rowToDbRoomState);
|
||||||
}
|
}
|
||||||
|
@ -6091,10 +6062,10 @@ abstract class _$Database extends GeneratedDatabase {
|
||||||
readsFrom: {roomStates}).map(_rowToDbRoomState);
|
readsFrom: {roomStates}).map(_rowToDbRoomState);
|
||||||
}
|
}
|
||||||
|
|
||||||
Selectable<DbRoomState> getAllRoomStatesForRoom(
|
Selectable<DbRoomState> getUnimportantRoomStatesForRoom(
|
||||||
int client_id, String room_id) {
|
int client_id, String room_id) {
|
||||||
return customSelect(
|
return customSelect(
|
||||||
'SELECT * FROM room_states WHERE client_id = :client_id AND room_id = :room_id',
|
'SELECT * FROM room_states WHERE client_id = :client_id AND room_id = :room_id AND type = \'m.room.member\'',
|
||||||
variables: [Variable.withInt(client_id), Variable.withString(room_id)],
|
variables: [Variable.withInt(client_id), Variable.withString(room_id)],
|
||||||
readsFrom: {roomStates}).map(_rowToDbRoomState);
|
readsFrom: {roomStates}).map(_rowToDbRoomState);
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,13 +206,12 @@ setRoomPrevBatch: UPDATE rooms SET prev_batch = :prev_batch WHERE client_id = :c
|
||||||
updateRoomSortOrder: UPDATE rooms SET oldest_sort_order = :oldest_sort_order, newest_sort_order = :newest_sort_order WHERE client_id = :client_id AND room_id = :room_id;
|
updateRoomSortOrder: UPDATE rooms SET oldest_sort_order = :oldest_sort_order, newest_sort_order = :newest_sort_order WHERE client_id = :client_id AND room_id = :room_id;
|
||||||
getAllAccountData: SELECT * FROM account_data WHERE client_id = :client_id;
|
getAllAccountData: SELECT * FROM account_data WHERE client_id = :client_id;
|
||||||
storeAccountData: INSERT OR REPLACE INTO account_data (client_id, type, content) VALUES (:client_id, :type, :content);
|
storeAccountData: INSERT OR REPLACE INTO account_data (client_id, type, content) VALUES (:client_id, :type, :content);
|
||||||
getAllPresences: SELECT * FROM presences WHERE client_id = :client_id;
|
|
||||||
storePresence: INSERT OR REPLACE INTO presences (client_id, type, sender, content) VALUES (:client_id, :type, :sender, :content);
|
|
||||||
updateEvent: UPDATE events SET unsigned = :unsigned, content = :content, prev_content = :prev_content WHERE client_id = :client_id AND event_id = :event_id AND room_id = :room_id;
|
updateEvent: UPDATE events SET unsigned = :unsigned, content = :content, prev_content = :prev_content WHERE client_id = :client_id AND event_id = :event_id AND room_id = :room_id;
|
||||||
updateEventStatus: UPDATE events SET status = :status, event_id = :new_event_id WHERE client_id = :client_id AND event_id = :old_event_id AND room_id = :room_id;
|
updateEventStatus: UPDATE events SET status = :status, event_id = :new_event_id WHERE client_id = :client_id AND event_id = :old_event_id AND room_id = :room_id;
|
||||||
getImportantRoomStates: SELECT * FROM room_states WHERE client_id = :client_id AND type IN ('m.room.name', 'm.room.avatar', 'm.room.message', 'm.room.encrypted', 'm.room.encryption');
|
--getImportantRoomStates: SELECT * FROM room_states WHERE client_id = :client_id AND type IN ('m.room.name', 'm.room.avatar', 'm.room.message', 'm.room.encrypted', 'm.room.encryption', 'im.ponies.room_emotes');
|
||||||
|
getImportantRoomStates: SELECT * FROM room_states WHERE client_id = :client_id AND type <> 'm.room.member';
|
||||||
getAllRoomStates: SELECT * FROM room_states WHERE client_id = :client_id;
|
getAllRoomStates: SELECT * FROM room_states WHERE client_id = :client_id;
|
||||||
getAllRoomStatesForRoom: SELECT * FROM room_states WHERE client_id = :client_id AND room_id = :room_id;
|
getUnimportantRoomStatesForRoom: SELECT * FROM room_states WHERE client_id = :client_id AND room_id = :room_id AND type = 'm.room.member';
|
||||||
storeEvent: INSERT OR REPLACE INTO events (client_id, event_id, room_id, sort_order, origin_server_ts, sender, type, unsigned, content, prev_content, state_key, status) VALUES (:client_id, :event_id, :room_id, :sort_order, :origin_server_ts, :sender, :type, :unsigned, :content, :prev_content, :state_key, :status);
|
storeEvent: INSERT OR REPLACE INTO events (client_id, event_id, room_id, sort_order, origin_server_ts, sender, type, unsigned, content, prev_content, state_key, status) VALUES (:client_id, :event_id, :room_id, :sort_order, :origin_server_ts, :sender, :type, :unsigned, :content, :prev_content, :state_key, :status);
|
||||||
storeRoomState: INSERT OR REPLACE INTO room_states (client_id, event_id, room_id, sort_order, origin_server_ts, sender, type, unsigned, content, prev_content, state_key) VALUES (:client_id, :event_id, :room_id, :sort_order, :origin_server_ts, :sender, :type, :unsigned, :content, :prev_content, :state_key);
|
storeRoomState: INSERT OR REPLACE INTO room_states (client_id, event_id, room_id, sort_order, origin_server_ts, sender, type, unsigned, content, prev_content, state_key) VALUES (:client_id, :event_id, :room_id, :sort_order, :origin_server_ts, :sender, :type, :unsigned, :content, :prev_content, :state_key);
|
||||||
getAllRoomAccountData: SELECT * FROM room_account_data WHERE client_id = :client_id;
|
getAllRoomAccountData: SELECT * FROM room_account_data WHERE client_id = :client_id;
|
||||||
|
|
|
@ -106,8 +106,9 @@ class Room {
|
||||||
if (!partial || client.database == null) {
|
if (!partial || client.database == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final allStates =
|
final allStates = await client.database
|
||||||
await client.database.getAllRoomStatesForRoom(client.id, id).get();
|
.getUnimportantRoomStatesForRoom(client.id, id)
|
||||||
|
.get();
|
||||||
for (final state in allStates) {
|
for (final state in allStates) {
|
||||||
final newState = Event.fromDb(state, this);
|
final newState = Event.fromDb(state, this);
|
||||||
setState(newState);
|
setState(newState);
|
||||||
|
|
Loading…
Reference in a new issue