list rooms
This commit is contained in:
parent
4821e08b80
commit
95b8e38dd4
@ -1,13 +1,13 @@
|
||||
import matrix from 'matrix-js-sdk';
|
||||
|
||||
export let client = undefined;
|
||||
|
||||
export class MatrixHandler {
|
||||
constructor(clientDisplayName = 'matrix-chat') {
|
||||
this.clientDisplayName = clientDisplayName;
|
||||
this.accessToken;
|
||||
this.client = undefined;
|
||||
this.rooms = undefined;
|
||||
this.rooms = [];
|
||||
this.loading = undefined;
|
||||
this.user = undefined;
|
||||
}
|
||||
login(user, password, baseUrl, onError, callback = ()=>{}){
|
||||
if (this.client){ console.log('there is already an active session'); return; }
|
||||
@ -26,8 +26,9 @@ export class MatrixHandler {
|
||||
}
|
||||
if (response.access_token){
|
||||
console.log(`access token => ${response.access_token}`);
|
||||
console.log(this.client.getRooms());
|
||||
callback(response.access_token);
|
||||
this.user = user;
|
||||
this.startSync()
|
||||
}
|
||||
}).catch(error => {
|
||||
this.logout();
|
||||
@ -37,16 +38,27 @@ export class MatrixHandler {
|
||||
}
|
||||
tokenLogin(baseUrl, accessToken, userId){
|
||||
if (this.client){ console.log('there is already an active session'); return; }
|
||||
this.client = new matrix.createClient({baseUrl, accessToken, userId}).then(response => {
|
||||
console.log(response);
|
||||
});
|
||||
this.client.startClient();
|
||||
this.client.once('sync', (state) => {
|
||||
console.log(state);
|
||||
});
|
||||
this.client = new matrix.createClient({baseUrl, accessToken, userId});
|
||||
this.user = userId;
|
||||
this.startSync();
|
||||
}
|
||||
logout(){
|
||||
this.client.stopClient();
|
||||
this.client = undefined;
|
||||
}
|
||||
startSync(callback = ()=>{}){
|
||||
this.loading = true;
|
||||
this.client.startClient();
|
||||
this.client.once('sync', (state) => {
|
||||
console.log(state);
|
||||
this.rooms = this.client.getRooms();
|
||||
this.loading = false;
|
||||
callback();
|
||||
});
|
||||
this.client.on('event', (event) => {
|
||||
if (event.getType() === 'm.room.create') {
|
||||
console.log(event)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<div @scroll="scrollHandler()" ref="msgContainer" id="messagesContainer" class="messagesContainer">
|
||||
<div id="messages" class="messages">
|
||||
<p v-if="session.currentRoom.messages.length === 0" class="info">this room is empty</p>
|
||||
<p v-if="room.messages.length === 0" class="info">this room is empty</p>
|
||||
<!--<div v-for="(message, i) in session.currentRoom.messages" :key="message.origin_server_ts" class="event">
|
||||
<div v-if="i===0 || getDate(session.currentRoom.messages[i-1].origin_server_ts)!==getDate(message.origin_server_ts)"
|
||||
style="margin-left: 2rem; margin-top: 1rem" class="info">{{getDate(message.origin_server_ts)}}
|
||||
@ -16,10 +16,10 @@
|
||||
<userThumbnail v-if="(message.sender !== session.user) && (i===session.currentRoom.messages.length-1 || session.currentRoom.messages[i+1].sender!==message.sender)"
|
||||
:userId="message.sender" width="64" height="64" resizeMethod="scale" class="userThumbnail" />
|
||||
</div>-->
|
||||
<div class="eventGroup" v-for="group in splitEventsToGroups(session.currentRoom.messages)" :key="group[0].origin_server_ts">
|
||||
<div class="eventGroup" v-for="group in splitEventsToGroups(room.messages)" :key="group[0].origin_server_ts">
|
||||
<div class="username" v-if="group[0].sender !== session.user">{{group[0].sender}}</div>
|
||||
<div class="thumbnailContainer">
|
||||
<userThumbnail v-if="group[0].sender !== session.user && session.currentRoom.members.length > 2" :userId="group[0].sender" width="64" height="64" resizeMethod="scale" class="userThumbnail" />
|
||||
<userThumbnail v-if="group[0].sender !== session.user && room.members.length > 2" :userId="group[0].sender" width="64" height="64" resizeMethod="scale" class="userThumbnail" />
|
||||
</div>
|
||||
<div class="event" v-for="message in group" :key="message.origin_server_ts">
|
||||
<message :type="message.sender === session.user?'send':'receive'"
|
||||
@ -39,9 +39,7 @@
|
||||
import message from '@/components/message.vue';
|
||||
import newMessage from '@/components/newMessage.vue';
|
||||
import topBanner from '@/components/topBanner.vue';
|
||||
import main from '@/main.js';
|
||||
import Icon from "@/components/icon";
|
||||
import matrix from '@/matrix.js';
|
||||
import userThumbnail from '@/components/userThumbnail';
|
||||
|
||||
export default {
|
||||
@ -53,6 +51,10 @@ export default {
|
||||
topBanner,
|
||||
userThumbnail
|
||||
},
|
||||
props: {
|
||||
room: {},
|
||||
user: String
|
||||
},
|
||||
methods:{
|
||||
scrollToBottom(){
|
||||
let msgContainer = document.getElementById("messagesContainer")
|
||||
@ -90,8 +92,6 @@ export default {
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
chatroom: main.data().chatroom,
|
||||
session: matrix.data().session,
|
||||
showScrollBtn: false,
|
||||
scrollOnUpdate: true
|
||||
}
|
||||
|
@ -1,31 +1,33 @@
|
||||
<template>
|
||||
<div>
|
||||
<div v-if="matrix.loading">
|
||||
loading...
|
||||
</div>
|
||||
<div v-else>
|
||||
<div id="roomList" class="roomList">
|
||||
<h1>[chat]</h1>
|
||||
<h2>{{session.rooms.length}} rooms:</h2>
|
||||
<div v-for="room in session.rooms" :key="room.roomId" @click="openChat(room)" class="roomListElement">
|
||||
<div v-for="room in matrix.rooms" :key="room.roomId" @click="openChat(room)" class="roomListElement">
|
||||
<div class="roomImgPlaceholder">{{room.name.substr(0,2)}}</div>
|
||||
<div class="roomListName">{{room.name}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<chat class="chat" v-if="session.currentRoom" />
|
||||
<chat class="chat" v-if="currentRoom" :room="currentRoom" :user="matrix.user" />
|
||||
<div class="noRoomSelected" v-else>Please select a room to be displayed.</div>
|
||||
<div class="roomListSmall">
|
||||
<h1>[c]</h1>
|
||||
<h2>—</h2>
|
||||
<div v-for="(room, index) in session.rooms" :key="index" @click="openChat(room)" class="roomListElement" :title="room.name">
|
||||
<div v-for="(room, index) in matrix.rooms" :key="index" @click="openChat(room)" class="roomListElement" :title="room.name">
|
||||
<div class="roomImgPlaceholder">{{room.name.substr(0,2)}}</div>
|
||||
<div class="roomListName">{{room.name}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<chatInformation v-if="session.currentRoom" :room="session.currentRoom"/>
|
||||
<chatInformation v-if="currentRoom" :room="currentRoom"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import matrix from '@/matrix.js';
|
||||
import chat from '@/views/chat.vue';
|
||||
import chatInformation from "@/components/chatInformation";
|
||||
import {matrix} from "@/main";
|
||||
|
||||
export default {
|
||||
name: "rooms",
|
||||
@ -35,17 +37,21 @@ export default {
|
||||
},
|
||||
methods:{
|
||||
openChat(room){
|
||||
this.session.currentRoom = room;
|
||||
this.$router.push(`/rooms/${room.roomId}`)
|
||||
this.$forceUpdate()
|
||||
let msgContainer = document.getElementById("messagesContainer")
|
||||
setTimeout(() => {msgContainer.scrollTo(0, msgContainer.scrollHeight)}, 50)
|
||||
this.currentRoom = room;
|
||||
chat.data().room = room;
|
||||
chat.data().user = matrix.user;
|
||||
this.$router.push(`/rooms/${room.roomId}`);
|
||||
this.$forceUpdate();
|
||||
}
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
session: matrix.data().session
|
||||
matrix,
|
||||
currentRoom: undefined
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
if (matrix.client === undefined) this.$router.push('/login');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
Loading…
Reference in New Issue
Block a user