56 lines
1.2 KiB
TypeScript
56 lines
1.2 KiB
TypeScript
import { APIClient } from "../ApiClient";
|
|
import type { UserInfo } from "../AuthApi";
|
|
import type { MatrixEvent } from "./MatrixApiEvent";
|
|
import type { UsersMap } from "./MatrixApiProfile";
|
|
|
|
export interface Room {
|
|
id: string;
|
|
name?: string;
|
|
members: string[];
|
|
avatar?: string;
|
|
is_space?: boolean;
|
|
parents: string[];
|
|
number_unread_messages: number;
|
|
latest_event?: MatrixEvent;
|
|
}
|
|
|
|
/**
|
|
* Find main member of room
|
|
*/
|
|
export function mainRoomMember(user: UserInfo, r: Room): string | undefined {
|
|
if (r.members.length <= 1) return r.members[0];
|
|
|
|
if (r.members.length < 2)
|
|
return r.members[0] == user.matrix_user_id ? r.members[1] : r.members[0];
|
|
|
|
return undefined;
|
|
}
|
|
|
|
/**
|
|
* Find room name
|
|
*/
|
|
export function roomName(user: UserInfo, r: Room, users: UsersMap): string {
|
|
if (r.name) return r.name;
|
|
|
|
const name = r.members
|
|
.filter((m) => m !== user.matrix_user_id)
|
|
.map((m) => users.get(m)?.display_name ?? m)
|
|
.join(",");
|
|
|
|
return name === "" ? "Empty room" : name;
|
|
}
|
|
|
|
export class MatrixApiRoom {
|
|
/**
|
|
* Get the list of joined rooms
|
|
*/
|
|
static async ListJoined(): Promise<Room[]> {
|
|
return (
|
|
await APIClient.exec({
|
|
method: "GET",
|
|
uri: "/matrix/room/joined",
|
|
})
|
|
).data;
|
|
}
|
|
}
|