cinny/src/util/matrixUtil.js
Gero Gerke fa10a67811
Implement Profile Viewer (#130)
* Implement Profile Viewer

Fixes #111

* Make user avatar in chat clickable

* design progress

* Refactored code

* progress

* Updated chip comp

Signed-off-by: Ajay Bura <ajbura@gmail.com>

* Refactored ProfileViewer comp

Signed-off-by: Ajay Bura <ajbura@gmail.com>

* Added msg functionality in ProfileViewer

Signed-off-by: Ajay Bura <ajbura@gmail.com>

* Added Ignore functionality in ProfileViewer

Signed-off-by: Ajay Bura <ajbura@gmail.com>

* Fixed Ignore btn bug

Signed-off-by: Ajay Bura <ajbura@gmail.com>

* Refectored ProfileViewer comp

Signed-off-by: Ajay Bura <ajbura@gmail.com>

Co-authored-by: Ajay Bura <ajbura@gmail.com>
2021-10-18 20:55:52 +05:30

83 lines
2.4 KiB
JavaScript

import initMatrix from '../client/initMatrix';
const WELL_KNOWN_URI = '/.well-known/matrix/client';
async function getBaseUrl(homeserver) {
const serverDiscoveryUrl = `https://${homeserver}${WELL_KNOWN_URI}`;
try {
const result = await fetch(serverDiscoveryUrl, { method: 'GET' });
const data = await result.json();
return data?.['m.homeserver']?.base_url;
} catch (e) {
throw new Error('Homeserver not found');
}
}
function getUsername(userId) {
const mx = initMatrix.matrixClient;
const user = mx.getUser(userId);
if (user === null) return userId;
let username = user.displayName;
if (typeof username === 'undefined') {
username = userId;
}
return username;
}
function getUsernameOfRoomMember(roomMember) {
return roomMember.name || roomMember.userId;
}
async function isRoomAliasAvailable(alias) {
try {
const myUserId = initMatrix.matrixClient.getUserId();
const myServer = myUserId.slice(myUserId.indexOf(':') + 1);
const result = await initMatrix.matrixClient.resolveRoomAlias(alias);
const aliasIsRegisteredOnMyServer = typeof result.servers.find((server) => server === myServer) === 'string';
if (aliasIsRegisteredOnMyServer) return false;
return true;
} catch (e) {
if (e.errcode === 'M_NOT_FOUND') return true;
if (e.errcode === 'M_INVALID_PARAM') throw new Error(e);
return false;
}
}
function doesRoomHaveUnread(room) {
const userId = initMatrix.matrixClient.getUserId();
const readUpToId = room.getEventReadUpTo(userId);
const supportEvents = ['m.room.message', 'm.room.encrypted', 'm.sticker'];
if (room.timeline.length
&& room.timeline[room.timeline.length - 1].sender
&& room.timeline[room.timeline.length - 1].sender.userId === userId
&& room.timeline[room.timeline.length - 1].getType() !== 'm.room.member') {
return false;
}
for (let i = room.timeline.length - 1; i >= 0; i -= 1) {
const event = room.timeline[i];
if (event.getId() === readUpToId) return false;
if (supportEvents.includes(event.getType())) {
return true;
}
}
return true;
}
function getPowerLabel(powerLevel) {
if (powerLevel > 9000) return 'Goku';
if (powerLevel > 100) return 'Founder';
if (powerLevel === 100) return 'Admin';
if (powerLevel >= 50) return 'Mod';
return null;
}
export {
getBaseUrl, getUsername, getUsernameOfRoomMember,
isRoomAliasAvailable, doesRoomHaveUnread, getPowerLabel,
};