diff --git a/src/components/Chat.vue b/src/components/Chat.vue index 2015ec0..b73fce3 100644 --- a/src/components/Chat.vue +++ b/src/components/Chat.vue @@ -7,54 +7,10 @@ v-on:scroll="onScroll" >
- - - - - - - - - - - - - - - - - - - - - - - +
@@ -134,6 +90,8 @@ import RoomNameChanged from './messages/RoomNameChanged.vue'; import RoomTopicChanged from './messages/RoomTopicChanged.vue'; import RoomAvatarChanged from './messages/RoomAvatarChanged.vue'; import DebugEvent from "./messages/DebugEvent.vue"; +import MessageOutgoingImage from "./messages/MessageOutgoingImage.vue"; +import MessageIncomingImage from "./messages/MessageIncomingImage.vue"; // from https://kirbysayshi.com/2013/08/19/maintaining-scroll-position-knockoutjs-list.html function ScrollPosition(node) { @@ -174,7 +132,9 @@ export default { RoomNameChanged, RoomTopicChanged, RoomAvatarChanged, - DebugEvent + DebugEvent, + MessageOutgoingImage, + MessageIncomingImage }, data() { return { @@ -247,6 +207,45 @@ export default { }, methods: { + componentForEvent(event) { + switch (event.getType()) { + case 'm.room.member': + if (event.event.state_key != this.myUserId) { + if (event.getContent().membership == 'join') { + return ContactJoin; + } else if (event.getContent().membership == 'leave') { + return ContactLeave; + } else if (event.getContent().membership == 'invite') { + return ContactInvited; + } + } + break; + + case 'm.room.message': + if (event.getSender() != this.myUserId) { + if (event.getContent().msgtype == 'm.image') { + return MessageIncomingImage; + } + return MessageIncomingText; + } else { + if (event.getContent().msgtype == 'm.image') { + return MessageOutgoingImage; + } + return MessageOutgoingText; + } + + case 'm.room.name': + return RoomNameChanged; + + case 'm.room.topic': + return RoomTopicChanged; + + case 'm.room.avatar': + return RoomAvatarChanged; + } + return DebugEvent; + }, + paginateBackIfNeeded() { this.$nextTick(() => { const container = this.$refs.chatContainer; @@ -405,22 +404,6 @@ export default { ); }, - formatTime(time) { - const date = new Date(); - date.setTime(time); - - const today = new Date(); - if ( - date.getDate() == today.getDate() && - date.getMonth() == today.getMonth() && - date.getFullYear() == today.getFullYear() - ) { - // For today, skip the date part - return date.toLocaleTimeString(); - } - return date.toLocaleString(); - }, - handleScrolledToTop() { console.log("@top"); if ( @@ -484,40 +467,6 @@ export default { } }); }, - - /** - * Get a display name given an event. - */ - stateEventDisplayName(event) { - if (this.room) { - const member = this.room.getMember(event.getSender()); - if (member) { - return member.name; - } - } - return event.getContent().displayname || event.event.state_key; - }, - - messageEventDisplayName(event) { - return this.stateEventDisplayName(event); - }, - - messageEventAvatar(event) { - if (this.room) { - const member = this.room.getMember(event.getSender()); - if (member) { - return member.getAvatarUrl( - this.$matrix.matrixClient.getHomeserverUrl(), - 40, - 40, - "scale", - true - ); - } - } - return null; - }, - }, }; diff --git a/src/components/messages/ContactInvited.vue b/src/components/messages/ContactInvited.vue index 8363b66..8739607 100644 --- a/src/components/messages/ContactInvited.vue +++ b/src/components/messages/ContactInvited.vue @@ -1,13 +1,6 @@ diff --git a/src/components/messages/ContactJoin.vue b/src/components/messages/ContactJoin.vue index cae7d83..e63f5fb 100644 --- a/src/components/messages/ContactJoin.vue +++ b/src/components/messages/ContactJoin.vue @@ -1,13 +1,6 @@ diff --git a/src/components/messages/ContactLeave.vue b/src/components/messages/ContactLeave.vue index 5f6ae6c..61f4875 100644 --- a/src/components/messages/ContactLeave.vue +++ b/src/components/messages/ContactLeave.vue @@ -1,13 +1,6 @@ diff --git a/src/components/messages/MessageIncomingImage.vue b/src/components/messages/MessageIncomingImage.vue new file mode 100644 index 0000000..4a7e5ad --- /dev/null +++ b/src/components/messages/MessageIncomingImage.vue @@ -0,0 +1,60 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/MessageOutgoingImage.vue b/src/components/messages/MessageOutgoingImage.vue new file mode 100644 index 0000000..9475425 --- /dev/null +++ b/src/components/messages/MessageOutgoingImage.vue @@ -0,0 +1,36 @@ + + + + + \ No newline at end of file