support isOwn on messages

This commit is contained in:
Bruno Windels 2019-06-16 10:53:23 +02:00
parent a5a333b71a
commit a4bc2dd2b0
6 changed files with 17 additions and 7 deletions

View file

@ -29,7 +29,7 @@ export default class SessionViewModel extends EventEmitter {
if (this._currentRoomViewModel) { if (this._currentRoomViewModel) {
this._currentRoomViewModel.disable(); this._currentRoomViewModel.disable();
} }
this._currentRoomViewModel = new RoomViewModel(room); this._currentRoomViewModel = new RoomViewModel(room, this._session.userId);
this._currentRoomViewModel.enable(); this._currentRoomViewModel.enable();
this.emit("change", "currentRoom"); this.emit("change", "currentRoom");
} }

View file

@ -2,9 +2,10 @@ import EventEmitter from "../../../EventEmitter.js";
import TimelineViewModel from "./timeline/TimelineViewModel.js"; import TimelineViewModel from "./timeline/TimelineViewModel.js";
export default class RoomViewModel extends EventEmitter { export default class RoomViewModel extends EventEmitter {
constructor(room) { constructor(room, ownUserId) {
super(); super();
this._room = room; this._room = room;
this._ownUserId = ownUserId;
this._timeline = null; this._timeline = null;
this._timelineVM = null; this._timelineVM = null;
this._onRoomChange = this._onRoomChange.bind(this); this._onRoomChange = this._onRoomChange.bind(this);
@ -15,7 +16,7 @@ export default class RoomViewModel extends EventEmitter {
this._room.on("change", this._onRoomChange); this._room.on("change", this._onRoomChange);
try { try {
this._timeline = await this._room.openTimeline(); this._timeline = await this._room.openTimeline();
this._timelineVM = new TimelineViewModel(this._timeline); this._timelineVM = new TimelineViewModel(this._timeline, this._ownUserId);
this.emit("change", "timelineViewModel"); this.emit("change", "timelineViewModel");
} catch (err) { } catch (err) {
console.error(`room.openTimeline(): ${err.message}:\n${err.stack}`); console.error(`room.openTimeline(): ${err.message}:\n${err.stack}`);

View file

@ -18,12 +18,12 @@ import TilesCollection from "./TilesCollection.js";
import tilesCreator from "./tilesCreator.js"; import tilesCreator from "./tilesCreator.js";
export default class TimelineViewModel { export default class TimelineViewModel {
constructor(timeline) { constructor(timeline, ownUserId) {
this._timeline = timeline; this._timeline = timeline;
// once we support sending messages we could do // once we support sending messages we could do
// timeline.entries.concat(timeline.pendingEvents) // timeline.entries.concat(timeline.pendingEvents)
// for an ObservableList that also contains local echos // for an ObservableList that also contains local echos
this._tiles = new TilesCollection(timeline.entries, tilesCreator({timeline})); this._tiles = new TilesCollection(timeline.entries, tilesCreator({timeline, ownUserId}));
} }
// doesn't fill gaps, only loads stored entries/tiles // doesn't fill gaps, only loads stored entries/tiles

View file

@ -4,6 +4,7 @@ export default class MessageTile extends SimpleTile {
constructor(options) { constructor(options) {
super(options); super(options);
this._isOwn = this._entry.event.sender === options.ownUserId;
this._date = new Date(this._entry.event.origin_server_ts); this._date = new Date(this._entry.event.origin_server_ts);
} }
@ -23,6 +24,10 @@ export default class MessageTile extends SimpleTile {
return this._date.toLocaleTimeString(); return this._date.toLocaleTimeString();
} }
get isOwn() {
return this._isOwn;
}
_getContent() { _getContent() {
const event = this._entry.event; const event = this._entry.event;
return event && event.content; return event && event.content;

View file

@ -5,9 +5,9 @@ import LocationTile from "./tiles/LocationTile.js";
import RoomNameTile from "./tiles/RoomNameTile.js"; import RoomNameTile from "./tiles/RoomNameTile.js";
import RoomMemberTile from "./tiles/RoomMemberTile.js"; import RoomMemberTile from "./tiles/RoomMemberTile.js";
export default function ({timeline}) { export default function ({timeline, ownUserId}) {
return function tilesCreator(entry, emitUpdate) { return function tilesCreator(entry, emitUpdate) {
const options = {entry, emitUpdate}; const options = {entry, emitUpdate, ownUserId};
if (entry.isGap) { if (entry.isGap) {
return new GapTile(options, timeline); return new GapTile(options, timeline);
} else if (entry.event) { } else if (entry.event) {

View file

@ -59,4 +59,8 @@ export default class Session {
get syncToken() { get syncToken() {
return this._session.syncToken; return this._session.syncToken;
} }
get userId() {
return this._sessionInfo.userId;
}
} }