EventIndex: Add a method to populate an event timeline with file events.
This commit is contained in:
parent
263370c9ae
commit
8a17c73b79
1 changed files with 68 additions and 0 deletions
|
@ -17,6 +17,12 @@ limitations under the License.
|
||||||
import PlatformPeg from "../PlatformPeg";
|
import PlatformPeg from "../PlatformPeg";
|
||||||
import {MatrixClientPeg} from "../MatrixClientPeg";
|
import {MatrixClientPeg} from "../MatrixClientPeg";
|
||||||
|
|
||||||
|
import Matrix from 'matrix-js-sdk';
|
||||||
|
import EventTimelineSet from 'matrix-js-sdk/lib/models/event-timeline-set';
|
||||||
|
import EventTimeline from 'matrix-js-sdk/lib/models/event-timeline';
|
||||||
|
import MatrixEvent from 'matrix-js-sdk/lib/models/event';
|
||||||
|
import RoomMember from 'matrix-js-sdk/lib/models/room-member';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Event indexing class that wraps the platform specific event indexing.
|
* Event indexing class that wraps the platform specific event indexing.
|
||||||
*/
|
*/
|
||||||
|
@ -411,4 +417,66 @@ export default class EventIndex {
|
||||||
const indexManager = PlatformPeg.get().getEventIndexingManager();
|
const indexManager = PlatformPeg.get().getEventIndexingManager();
|
||||||
return indexManager.searchEventIndex(searchArgs);
|
return indexManager.searchEventIndex(searchArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async populateFileTimeline(room, timelineSet) {
|
||||||
|
const client = MatrixClientPeg.get();
|
||||||
|
const indexManager = PlatformPeg.get().getEventIndexingManager();
|
||||||
|
|
||||||
|
// Get our events from the event index.
|
||||||
|
const events = await indexManager.loadFileEvents(
|
||||||
|
{
|
||||||
|
roomId: room.roomId,
|
||||||
|
limit: 10
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
let eventMapper = client.getEventMapper();
|
||||||
|
|
||||||
|
// Turn the events into MatrixEvent objects.
|
||||||
|
const matrixEvents = events.map(e => {
|
||||||
|
const matrixEvent = eventMapper(e.event);
|
||||||
|
|
||||||
|
const member = new RoomMember(room.roomId, matrixEvent.getSender());
|
||||||
|
|
||||||
|
// We can't really reconstruct the whole room state from our
|
||||||
|
// EventIndex to calculate the correct display name. Use the
|
||||||
|
// disambiguated form always instead.
|
||||||
|
member.name = e.profile.displayname + " (" + matrixEvent.getSender() + ")";
|
||||||
|
|
||||||
|
// This is sets the avatar URL.
|
||||||
|
const memberEvent = eventMapper(
|
||||||
|
{
|
||||||
|
content: {
|
||||||
|
membership: "join",
|
||||||
|
avatar_url: e.profile.avatar_url,
|
||||||
|
displayname: e.profile.displayname,
|
||||||
|
},
|
||||||
|
type: "m.room.member",
|
||||||
|
event_id: matrixEvent.getId() + ":eventIndex",
|
||||||
|
room_id: matrixEvent.getRoomId(),
|
||||||
|
sender: matrixEvent.getSender(),
|
||||||
|
origin_server_ts: matrixEvent.getTs(),
|
||||||
|
state_key: matrixEvent.getSender()
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// We set this manually to avoid emitting RoomMember.membership and
|
||||||
|
// RoomMember.name events.
|
||||||
|
member.events.member = memberEvent;
|
||||||
|
matrixEvent.sender = member;
|
||||||
|
|
||||||
|
return matrixEvent;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Add the events to the live timeline of the file panel.
|
||||||
|
matrixEvents.forEach(e => {
|
||||||
|
if (!timelineSet.eventIdToTimeline(e.getId())) {
|
||||||
|
const liveTimeline = timelineSet.getLiveTimeline();
|
||||||
|
timelineSet.addEventToTimeline(e, liveTimeline, true)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Set the pagination token to the oldest event that we retrieved.
|
||||||
|
timelineSet.getLiveTimeline().setPaginationToken("", EventTimeline.BACKWARDS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue