EventIndex: Move the event listener registration into the EventIndex class.

This commit is contained in:
Damir Jelić 2019-11-19 10:46:18 +01:00
parent d2a9918359
commit 6017473caf
3 changed files with 40 additions and 30 deletions

View file

@ -31,11 +31,45 @@ export default class EventIndex {
this._eventsPerCrawl = 100;
this._crawler = null;
this.liveEventsForIndex = new Set();
this.boundOnSync = async (state, prevState, data) => {
await this.onSync(state, prevState, data);
};
this.boundOnRoomTimeline = async ( ev, room, toStartOfTimeline, removed,
data) => {
await this.onRoomTimeline(ev, room, toStartOfTimeline, removed, data);
};
this.boundOnEventDecrypted = async (ev, err) => {
await this.onEventDecrypted(ev, err);
};
this.boundOnTimelineReset = async (room, timelineSet,
resetAllTimelines) => await this.onTimelineReset(room);
}
async init() {
const indexManager = PlatformPeg.get().getEventIndexingManager();
return indexManager.initEventIndex();
await indexManager.initEventIndex();
this.registerListeners();
}
registerListeners() {
const client = MatrixClientPeg.get();
client.on('sync', this.boundOnSync);
client.on('Room.timeline', this.boundOnRoomTimeline);
client.on('Event.decrypted', this.boundOnEventDecrypted);
client.on('Room.timelineReset', this.boundOnTimelineReset);
}
removeListeners() {
const client = MatrixClientPeg.get();
if (client === null) return;
client.removeListener('sync', this.boundOnSync);
client.removeListener('Room.timeline', this.boundOnRoomTimeline);
client.removeListener('Event.decrypted', this.boundOnEventDecrypted);
client.removeListener('Room.timelineReset', this.boundOnTimelineReset);
}
async onSync(state, prevState, data) {
@ -343,7 +377,9 @@ export default class EventIndex {
console.log("EventIndex: Stopping crawler function");
}
async onLimitedTimeline(room) {
async onTimelineReset(room) {
if (room === null) return;
const indexManager = PlatformPeg.get().getEventIndexingManager();
if (!MatrixClientPeg.get().isRoomEncrypted(room.roomId)) return;
@ -377,6 +413,7 @@ export default class EventIndex {
async close() {
const indexManager = PlatformPeg.get().getEventIndexingManager();
this.removeListeners();
this.stopCrawler();
return indexManager.closeEventIndex();
}

View file

@ -97,10 +97,9 @@ class EventIndexPeg {
const indexManager = PlatformPeg.get().getEventIndexingManager();
if (indexManager !== null) {
this.stop();
this.unset();
console.log("EventIndex: Deleting event index.");
await indexManager.deleteEventIndex();
this.index = null;
}
}
}

View file

@ -31,7 +31,6 @@ import Analytics from "../../Analytics";
import { DecryptionFailureTracker } from "../../DecryptionFailureTracker";
import MatrixClientPeg from "../../MatrixClientPeg";
import PlatformPeg from "../../PlatformPeg";
import EventIndexPeg from "../../EventIndexPeg";
import SdkConfig from "../../SdkConfig";
import * as RoomListSorter from "../../RoomListSorter";
import dis from "../../dispatcher";
@ -1288,31 +1287,6 @@ export default createReactClass({
return self._loggedInView.child.canResetTimelineInRoom(roomId);
});
cli.on('sync', async (state, prevState, data) => {
const eventIndex = EventIndexPeg.get();
if (eventIndex === null) return;
await eventIndex.onSync(state, prevState, data);
});
cli.on("Room.timeline", async (ev, room, toStartOfTimeline, removed, data) => {
const eventIndex = EventIndexPeg.get();
if (eventIndex === null) return;
await eventIndex.onRoomTimeline(ev, room, toStartOfTimeline, removed, data);
});
cli.on("Event.decrypted", async (ev, err) => {
const eventIndex = EventIndexPeg.get();
if (eventIndex === null) return;
await eventIndex.onEventDecrypted(ev, err);
});
cli.on("Room.timelineReset", async (room, timelineSet, resetAllTimelines) => {
const eventIndex = EventIndexPeg.get();
if (eventIndex === null) return;
if (room === null) return;
await eventIndex.onLimitedTimeline(room);
});
cli.on('sync', function(state, prevState, data) {
// LifecycleStore and others cannot directly subscribe to matrix client for
// events because flux only allows store state changes during flux dispatches.