forked from mystiq/hydrogen-web
split up create code into separate files
This commit is contained in:
parent
15eecbb463
commit
8526461d3c
17 changed files with 82 additions and 77 deletions
|
@ -16,7 +16,7 @@ limitations under the License.
|
||||||
|
|
||||||
import {ViewModel} from "../ViewModel.js";
|
import {ViewModel} from "../ViewModel.js";
|
||||||
import {imageToInfo} from "./common.js";
|
import {imageToInfo} from "./common.js";
|
||||||
import {RoomType} from "../../matrix/room/create";
|
import {RoomType} from "../../matrix/room/common";
|
||||||
|
|
||||||
export class CreateRoomViewModel extends ViewModel {
|
export class CreateRoomViewModel extends ViewModel {
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
|
|
|
@ -15,7 +15,7 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {ObservableValue} from "../../observable/ObservableValue";
|
import {ObservableValue} from "../../observable/ObservableValue";
|
||||||
import {RoomStatus} from "../../matrix/room/RoomStatus";
|
import {RoomStatus} from "../../matrix/room/common";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Depending on the status of a room (invited, joined, archived, or none),
|
Depending on the status of a room (invited, joined, archived, or none),
|
||||||
|
|
|
@ -15,7 +15,7 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {ViewModel} from "../../ViewModel.js";
|
import {ViewModel} from "../../ViewModel.js";
|
||||||
import {RoomType} from "../../../matrix/room/create";
|
import {RoomType} from "../../../matrix/room/common";
|
||||||
import {avatarInitials, getIdentifierColorNumber, getAvatarHttpUrl} from "../../avatar.js";
|
import {avatarInitials, getIdentifierColorNumber, getAvatarHttpUrl} from "../../avatar.js";
|
||||||
|
|
||||||
export class MemberDetailsViewModel extends ViewModel {
|
export class MemberDetailsViewModel extends ViewModel {
|
||||||
|
|
|
@ -17,8 +17,8 @@ limitations under the License.
|
||||||
|
|
||||||
import {Room} from "./room/Room.js";
|
import {Room} from "./room/Room.js";
|
||||||
import {ArchivedRoom} from "./room/ArchivedRoom.js";
|
import {ArchivedRoom} from "./room/ArchivedRoom.js";
|
||||||
import {RoomStatus} from "./room/RoomStatus";
|
import {RoomStatus} from "./room/common";
|
||||||
import {RoomBeingCreated} from "./room/create";
|
import {RoomBeingCreated} from "./room/RoomBeingCreated";
|
||||||
import {Invite} from "./room/Invite.js";
|
import {Invite} from "./room/Invite.js";
|
||||||
import {Pusher} from "./push/Pusher";
|
import {Pusher} from "./push/Pusher";
|
||||||
import { ObservableMap } from "../observable/index.js";
|
import { ObservableMap } from "../observable/index.js";
|
||||||
|
|
|
@ -34,4 +34,4 @@ export function tests() {
|
||||||
assert(!isTxnId("$yS_n5n3cIO2aTtek0_2ZSlv-7g4YYR2zKrk2mFCW_rm"));
|
assert(!isTxnId("$yS_n5n3cIO2aTtek0_2ZSlv-7g4YYR2zKrk2mFCW_rm"));
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
51
src/matrix/profile.ts
Normal file
51
src/matrix/profile.ts
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
Copyright 2020 Bruno Windels <bruno@windels.cloud>
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type {HomeServerApi} from "./net/HomeServerApi";
|
||||||
|
import type {ILogItem} from "../logging/types";
|
||||||
|
|
||||||
|
export async function loadProfiles(userIds: string[], hsApi: HomeServerApi, log: ILogItem): Promise<Profile[]> {
|
||||||
|
const profiles = await Promise.all(userIds.map(async userId => {
|
||||||
|
const response = await hsApi.profile(userId, {log}).response();
|
||||||
|
return new Profile(userId, response.displayname as string, response.avatar_url as string);
|
||||||
|
}));
|
||||||
|
profiles.sort((a, b) => a.name.localeCompare(b.name));
|
||||||
|
return profiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IProfile {
|
||||||
|
get userId(): string;
|
||||||
|
get displayName(): string | undefined;
|
||||||
|
get avatarUrl(): string | undefined;
|
||||||
|
get name(): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Profile implements IProfile {
|
||||||
|
constructor(
|
||||||
|
public readonly userId: string,
|
||||||
|
public readonly displayName: string,
|
||||||
|
public readonly avatarUrl: string | undefined
|
||||||
|
) {}
|
||||||
|
|
||||||
|
get name() { return this.displayName || this.userId; }
|
||||||
|
}
|
||||||
|
|
||||||
|
export class UserIdProfile implements IProfile {
|
||||||
|
constructor(public readonly userId: string) {}
|
||||||
|
get displayName() { return undefined; }
|
||||||
|
get name() { return this.userId; }
|
||||||
|
get avatarUrl() { return undefined; }
|
||||||
|
}
|
|
@ -19,6 +19,8 @@ import {createRoomEncryptionEvent} from "../e2ee/common";
|
||||||
import {MediaRepository} from "../net/MediaRepository";
|
import {MediaRepository} from "../net/MediaRepository";
|
||||||
import {EventEmitter} from "../../utils/EventEmitter";
|
import {EventEmitter} from "../../utils/EventEmitter";
|
||||||
import {AttachmentUpload} from "./AttachmentUpload";
|
import {AttachmentUpload} from "./AttachmentUpload";
|
||||||
|
import {loadProfiles, Profile, UserIdProfile} from "../profile";
|
||||||
|
import {RoomType} from "./common";
|
||||||
|
|
||||||
import type {HomeServerApi} from "../net/HomeServerApi";
|
import type {HomeServerApi} from "../net/HomeServerApi";
|
||||||
import type {ILogItem} from "../../logging/types";
|
import type {ILogItem} from "../../logging/types";
|
||||||
|
@ -60,12 +62,6 @@ type Options = {
|
||||||
alias?: string;
|
alias?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum RoomType {
|
|
||||||
DirectMessage,
|
|
||||||
Private,
|
|
||||||
Public
|
|
||||||
}
|
|
||||||
|
|
||||||
function defaultE2EEStatusForType(type: RoomType): boolean {
|
function defaultE2EEStatusForType(type: RoomType): boolean {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case RoomType.DirectMessage:
|
case RoomType.DirectMessage:
|
||||||
|
@ -222,36 +218,3 @@ export class RoomBeingCreated extends EventEmitter<{change: never}> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function loadProfiles(userIds: string[], hsApi: HomeServerApi, log: ILogItem): Promise<Profile[]> {
|
|
||||||
const profiles = await Promise.all(userIds.map(async userId => {
|
|
||||||
const response = await hsApi.profile(userId, {log}).response();
|
|
||||||
return new Profile(userId, response.displayname as string, response.avatar_url as string);
|
|
||||||
}));
|
|
||||||
profiles.sort((a, b) => a.name.localeCompare(b.name));
|
|
||||||
return profiles;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface IProfile {
|
|
||||||
get userId(): string;
|
|
||||||
get displayName(): string | undefined;
|
|
||||||
get avatarUrl(): string | undefined;
|
|
||||||
get name(): string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class Profile implements IProfile {
|
|
||||||
constructor(
|
|
||||||
public readonly userId: string,
|
|
||||||
public readonly displayName: string,
|
|
||||||
public readonly avatarUrl: string | undefined
|
|
||||||
) {}
|
|
||||||
|
|
||||||
get name() { return this.displayName || this.userId; }
|
|
||||||
}
|
|
||||||
|
|
||||||
class UserIdProfile implements IProfile {
|
|
||||||
constructor(public readonly userId: string) {}
|
|
||||||
get displayName() { return undefined; }
|
|
||||||
get name() { return this.userId; }
|
|
||||||
get avatarUrl() { return undefined; }
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2021 The Matrix.org Foundation C.I.C.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
export enum RoomStatus {
|
|
||||||
None = 1 << 0,
|
|
||||||
BeingCreated = 1 << 1,
|
|
||||||
Invited = 1 << 2,
|
|
||||||
Joined = 1 << 3,
|
|
||||||
Replaced = 1 << 4,
|
|
||||||
Archived = 1 << 5,
|
|
||||||
}
|
|
|
@ -25,3 +25,18 @@ export const REDACTION_TYPE = "m.room.redaction";
|
||||||
export function isRedacted(event) {
|
export function isRedacted(event) {
|
||||||
return !!event?.unsigned?.redacted_because;
|
return !!event?.unsigned?.redacted_because;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum RoomStatus {
|
||||||
|
None = 1 << 0,
|
||||||
|
BeingCreated = 1 << 1,
|
||||||
|
Invited = 1 << 2,
|
||||||
|
Joined = 1 << 3,
|
||||||
|
Replaced = 1 << 4,
|
||||||
|
Archived = 1 << 5,
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum RoomType {
|
||||||
|
DirectMessage,
|
||||||
|
Private,
|
||||||
|
Public
|
||||||
|
}
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {getPrevContentFromStateEvent} from "../common.js";
|
import {getPrevContentFromStateEvent} from "../common";
|
||||||
|
|
||||||
export const EVENT_TYPE = "m.room.member";
|
export const EVENT_TYPE = "m.room.member";
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
import {createEnum} from "../../../utils/enum";
|
import {createEnum} from "../../../utils/enum";
|
||||||
import {AbortError} from "../../../utils/error";
|
import {AbortError} from "../../../utils/error";
|
||||||
import {REDACTION_TYPE} from "../common.js";
|
import {REDACTION_TYPE} from "../common";
|
||||||
import {getRelationFromContent, getRelationTarget, setRelationTarget} from "../timeline/relations.js";
|
import {getRelationFromContent, getRelationTarget, setRelationTarget} from "../timeline/relations.js";
|
||||||
|
|
||||||
export const SendStatus = createEnum(
|
export const SendStatus = createEnum(
|
||||||
|
|
|
@ -18,7 +18,7 @@ import {SortedArray} from "../../../observable/list/SortedArray";
|
||||||
import {ConnectionError} from "../../error.js";
|
import {ConnectionError} from "../../error.js";
|
||||||
import {PendingEvent, SendStatus} from "./PendingEvent.js";
|
import {PendingEvent, SendStatus} from "./PendingEvent.js";
|
||||||
import {makeTxnId, isTxnId} from "../../common.js";
|
import {makeTxnId, isTxnId} from "../../common.js";
|
||||||
import {REDACTION_TYPE} from "../common.js";
|
import {REDACTION_TYPE} from "../common";
|
||||||
import {getRelationFromContent, getRelationTarget, setRelationTarget, REACTION_TYPE, ANNOTATION_RELATION_TYPE} from "../timeline/relations.js";
|
import {getRelationFromContent, getRelationTarget, setRelationTarget, REACTION_TYPE, ANNOTATION_RELATION_TYPE} from "../timeline/relations.js";
|
||||||
|
|
||||||
export class SendQueue {
|
export class SendQueue {
|
||||||
|
|
|
@ -22,7 +22,7 @@ import {TimelineReader} from "./persistence/TimelineReader.js";
|
||||||
import {PendingEventEntry} from "./entries/PendingEventEntry.js";
|
import {PendingEventEntry} from "./entries/PendingEventEntry.js";
|
||||||
import {RoomMember} from "../members/RoomMember.js";
|
import {RoomMember} from "../members/RoomMember.js";
|
||||||
import {getRelation, ANNOTATION_RELATION_TYPE} from "./relations.js";
|
import {getRelation, ANNOTATION_RELATION_TYPE} from "./relations.js";
|
||||||
import {REDACTION_TYPE} from "../common.js";
|
import {REDACTION_TYPE} from "../common";
|
||||||
import {NonPersistedEventEntry} from "./entries/NonPersistedEventEntry.js";
|
import {NonPersistedEventEntry} from "./entries/NonPersistedEventEntry.js";
|
||||||
import {DecryptionSource} from "../../e2ee/common.js";
|
import {DecryptionSource} from "../../e2ee/common.js";
|
||||||
import {EVENT_TYPE as MEMBER_EVENT_TYPE} from "../members/RoomMember.js";
|
import {EVENT_TYPE as MEMBER_EVENT_TYPE} from "../members/RoomMember.js";
|
||||||
|
|
|
@ -15,7 +15,7 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseEntry} from "./BaseEntry";
|
import {BaseEntry} from "./BaseEntry";
|
||||||
import {REDACTION_TYPE} from "../../common.js";
|
import {REDACTION_TYPE} from "../../common";
|
||||||
import {createAnnotation, ANNOTATION_RELATION_TYPE, getRelationFromContent} from "../relations.js";
|
import {createAnnotation, ANNOTATION_RELATION_TYPE, getRelationFromContent} from "../relations.js";
|
||||||
import {PendingAnnotation} from "../PendingAnnotation.js";
|
import {PendingAnnotation} from "../PendingAnnotation.js";
|
||||||
import {createReplyContent} from "./reply.js"
|
import {createReplyContent} from "./reply.js"
|
||||||
|
|
|
@ -15,7 +15,7 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {BaseEventEntry} from "./BaseEventEntry.js";
|
import {BaseEventEntry} from "./BaseEventEntry.js";
|
||||||
import {getPrevContentFromStateEvent, isRedacted} from "../../common.js";
|
import {getPrevContentFromStateEvent, isRedacted} from "../../common";
|
||||||
import {getRelationFromContent, getRelatedEventId} from "../relations.js";
|
import {getRelationFromContent, getRelatedEventId} from "../relations.js";
|
||||||
|
|
||||||
export class EventEntry extends BaseEventEntry {
|
export class EventEntry extends BaseEventEntry {
|
||||||
|
|
|
@ -15,7 +15,7 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {EventEntry} from "../entries/EventEntry.js";
|
import {EventEntry} from "../entries/EventEntry.js";
|
||||||
import {REDACTION_TYPE, isRedacted} from "../../common.js";
|
import {REDACTION_TYPE, isRedacted} from "../../common";
|
||||||
import {ANNOTATION_RELATION_TYPE, getRelation} from "../relations.js";
|
import {ANNOTATION_RELATION_TYPE, getRelation} from "../relations.js";
|
||||||
import {redactEvent} from "../common.js";
|
import {redactEvent} from "../common.js";
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {REDACTION_TYPE} from "../common.js";
|
import {REDACTION_TYPE} from "../common";
|
||||||
|
|
||||||
export const REACTION_TYPE = "m.reaction";
|
export const REACTION_TYPE = "m.reaction";
|
||||||
export const ANNOTATION_RELATION_TYPE = "m.annotation";
|
export const ANNOTATION_RELATION_TYPE = "m.annotation";
|
||||||
|
|
Loading…
Reference in a new issue