mirror of
https://github.com/element-hq/element-web.git
synced 2024-12-01 11:03:18 +03:00
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 {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.
|
||||
*/
|
||||
|
@ -411,4 +417,66 @@ export default class EventIndex {
|
|||
const indexManager = PlatformPeg.get().getEventIndexingManager();
|
||||
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