EventIndex: Check if a newly encrypted room is indexed before adding a checkpoint.
This commit is contained in:
parent
ea35fc2881
commit
7a2bb4b112
2 changed files with 38 additions and 8 deletions
|
@ -134,6 +134,19 @@ export default abstract class BaseEventIndexManager {
|
||||||
throw new Error("Unimplemented");
|
throw new Error("Unimplemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the room with the given id is already indexed.
|
||||||
|
*
|
||||||
|
* @param {string} roomId The ID of the room which we want to check if it
|
||||||
|
* has been already indexed.
|
||||||
|
*
|
||||||
|
* @return {Promise<boolean>} Returns true if the index contains events for
|
||||||
|
* the given room, false otherwise.
|
||||||
|
*/
|
||||||
|
isRoomIndexed(roomId: string): Promise<boolean> {
|
||||||
|
throw new Error("Unimplemented");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get statistical information of the index.
|
* Get statistical information of the index.
|
||||||
*
|
*
|
||||||
|
|
|
@ -62,6 +62,7 @@ export default class EventIndex extends EventEmitter {
|
||||||
client.on('Event.decrypted', this.onEventDecrypted);
|
client.on('Event.decrypted', this.onEventDecrypted);
|
||||||
client.on('Room.timelineReset', this.onTimelineReset);
|
client.on('Room.timelineReset', this.onTimelineReset);
|
||||||
client.on('Room.redaction', this.onRedaction);
|
client.on('Room.redaction', this.onRedaction);
|
||||||
|
client.on('RoomState.events', this.onRoomStateEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -76,6 +77,7 @@ export default class EventIndex extends EventEmitter {
|
||||||
client.removeListener('Event.decrypted', this.onEventDecrypted);
|
client.removeListener('Event.decrypted', this.onEventDecrypted);
|
||||||
client.removeListener('Room.timelineReset', this.onTimelineReset);
|
client.removeListener('Room.timelineReset', this.onTimelineReset);
|
||||||
client.removeListener('Room.redaction', this.onRedaction);
|
client.removeListener('Room.redaction', this.onRedaction);
|
||||||
|
client.removeListener('RoomState.events', this.onRoomStateEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -182,14 +184,6 @@ export default class EventIndex extends EventEmitter {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ev.getType() === "m.room.encryption") {
|
|
||||||
console.log("EventIndex: Adding checkpoint for newly encrypted room",
|
|
||||||
room.roomId);
|
|
||||||
|
|
||||||
this.addRoomCheckpoint(room.roomId, true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the event is not yet decrypted mark it for the
|
// If the event is not yet decrypted mark it for the
|
||||||
// Event.decrypted callback.
|
// Event.decrypted callback.
|
||||||
if (ev.isBeingDecrypted()) {
|
if (ev.isBeingDecrypted()) {
|
||||||
|
@ -202,6 +196,15 @@ export default class EventIndex extends EventEmitter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onRoomStateEvent = async (ev, state) => {
|
||||||
|
if (!MatrixClientPeg.get().isRoomEncrypted(state.roomId)) return;
|
||||||
|
|
||||||
|
if (ev.getType() === "m.room.encryption" && !await this.isRoomIndexed(state.roomId)) {
|
||||||
|
console.log("EventIndex: Adding a checkpoint for a newly encrypted room", room.roomId);
|
||||||
|
this.addRoomCheckpoint(state.roomId, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The Event.decrypted listener.
|
* The Event.decrypted listener.
|
||||||
*
|
*
|
||||||
|
@ -847,6 +850,20 @@ export default class EventIndex extends EventEmitter {
|
||||||
return indexManager.getStats();
|
return indexManager.getStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the room with the given id is already indexed.
|
||||||
|
*
|
||||||
|
* @param {string} roomId The ID of the room which we want to check if it
|
||||||
|
* has been already indexed.
|
||||||
|
*
|
||||||
|
* @return {Promise<boolean>} Returns true if the index contains events for
|
||||||
|
* the given room, false otherwise.
|
||||||
|
*/
|
||||||
|
async isRoomIndexed(roomId) {
|
||||||
|
const indexManager = PlatformPeg.get().getEventIndexingManager();
|
||||||
|
return indexManager.isRoomIndexed(roomId);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the room that we are currently crawling.
|
* Get the room that we are currently crawling.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue