polfan-server-js-client 0.2.48 → 0.2.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/workspace.xml +53 -49
- package/build/index.cjs.js +68 -5
- package/build/index.cjs.js.map +1 -1
- package/build/index.umd.js +1 -1
- package/build/index.umd.js.map +1 -1
- package/build/types/AbstractChatClient.d.ts +2 -1
- package/build/types/state-tracker/RoomMessagesHistory.d.ts +2 -0
- package/build/types/state-tracker/SpacesManager.d.ts +1 -0
- package/build/types/state-tracker/TopicHistoryWindow.d.ts +6 -0
- package/build/types/types/src/index.d.ts +4 -2
- package/build/types/types/src/schemes/Message.d.ts +1 -1
- package/build/types/types/src/schemes/Room.d.ts +2 -0
- package/build/types/types/src/schemes/RoomHistory.d.ts +5 -0
- package/build/types/types/src/schemes/RoomSummary.d.ts +1 -0
- package/build/types/types/src/schemes/commands/CreateTopic.d.ts +5 -2
- package/build/types/types/src/schemes/commands/UpdateRoom.d.ts +2 -0
- package/build/types/types/src/schemes/events/RoomSummaryUpdated.d.ts +7 -0
- package/package.json +1 -1
- package/src/AbstractChatClient.ts +17 -2
- package/src/state-tracker/MessagesManager.ts +2 -3
- package/src/state-tracker/RoomMessagesHistory.ts +20 -3
- package/src/state-tracker/SpacesManager.ts +28 -1
- package/src/state-tracker/TopicHistoryWindow.ts +35 -0
- package/src/types/src/index.ts +9 -3
- package/src/types/src/schemes/Message.ts +1 -1
- package/src/types/src/schemes/Room.ts +2 -0
- package/src/types/src/schemes/RoomHistory.ts +6 -0
- package/src/types/src/schemes/RoomSummary.ts +1 -0
- package/src/types/src/schemes/commands/CreateTopic.ts +6 -2
- package/src/types/src/schemes/commands/UpdateRoom.ts +2 -0
- package/src/types/src/schemes/events/RoomSummaryUpdated.ts +8 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetPermissionOverwrites, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetPermissionOverwrites, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope, PermissionOverwrites, PermissionOverwritesUpdated, RoomMemberUpdated, UpdateRole, RoleUpdated, Ack, UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated, PermissionOverwriteTargets, GetPermissionOverwriteTargets, Owners, Ok, GetOwners, CreateOwner, RoleDeleted, FollowedTopicUpdated, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowTopic, UnfollowTopic, GetFollowedTopics, Messages, GetMessages, Topics, GetTopics, TopicUpdated, UpdateTopic, GetDiscoverableSpaces, DiscoverableSpaces, CreateEmoticon, DeleteEmoticon, GetEmoticons, Emoticons, EmoticonDeleted, NewEmoticon, Bans, GetBans, Ban, Unban, Kick, ClientData, GetClientData, SetClientData, GetRoomSummary, GetSpaceSummary, RoomSummaryEvent, SpaceSummaryEvent, SetCustomNick, Relationships, RelationshipDeleted, NewRelationship, DeleteRelationship, CreateRelationship } from "./types/src/index";
|
|
1
|
+
import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetPermissionOverwrites, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetPermissionOverwrites, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope, PermissionOverwrites, PermissionOverwritesUpdated, RoomMemberUpdated, UpdateRole, RoleUpdated, Ack, UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated, PermissionOverwriteTargets, GetPermissionOverwriteTargets, Owners, Ok, GetOwners, CreateOwner, RoleDeleted, FollowedTopicUpdated, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowTopic, UnfollowTopic, GetFollowedTopics, Messages, GetMessages, Topics, GetTopics, TopicUpdated, UpdateTopic, GetDiscoverableSpaces, DiscoverableSpaces, CreateEmoticon, DeleteEmoticon, GetEmoticons, Emoticons, EmoticonDeleted, NewEmoticon, Bans, GetBans, Ban, Unban, Kick, ClientData, GetClientData, SetClientData, GetRoomSummary, GetSpaceSummary, RoomSummaryEvent, SpaceSummaryEvent, SetCustomNick, Relationships, RelationshipDeleted, NewRelationship, DeleteRelationship, CreateRelationship, RoomSummaryUpdated } from "./types/src/index";
|
|
2
2
|
import { EventTarget } from "./EventTarget";
|
|
3
3
|
import { GetRelationships } from "./types/src/schemes/commands/GetRelationships";
|
|
4
4
|
type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
|
|
@@ -62,6 +62,7 @@ export type EventsMap = {
|
|
|
62
62
|
RoomDeleted: RoomDeleted;
|
|
63
63
|
RoomUpdated: RoomUpdated;
|
|
64
64
|
RoomSummaryEvent: RoomSummaryEvent;
|
|
65
|
+
RoomSummaryUpdated: RoomSummaryUpdated;
|
|
65
66
|
NewTopic: NewTopic;
|
|
66
67
|
TopicDeleted: TopicDeleted;
|
|
67
68
|
NewMessage: NewMessage;
|
|
@@ -5,6 +5,7 @@ export declare class RoomMessagesHistory {
|
|
|
5
5
|
private room;
|
|
6
6
|
private tracker;
|
|
7
7
|
private historyWindows;
|
|
8
|
+
private traverseLock;
|
|
8
9
|
constructor(room: Room, tracker: ChatStateTracker);
|
|
9
10
|
/**
|
|
10
11
|
* Returns a history window object for the given topic ID, allowing you to view message history.
|
|
@@ -14,4 +15,5 @@ export declare class RoomMessagesHistory {
|
|
|
14
15
|
private handleNewTopic;
|
|
15
16
|
private handleTopicDeleted;
|
|
16
17
|
private createHistoryWindowForTopic;
|
|
18
|
+
private updateTraverseLock;
|
|
17
19
|
}
|
|
@@ -58,7 +58,13 @@ export declare class TopicHistoryWindow extends TraversableRemoteCollection<Mess
|
|
|
58
58
|
* Reexported available window modes enum.
|
|
59
59
|
*/
|
|
60
60
|
readonly WindowState: typeof WindowState;
|
|
61
|
+
private traverseLock;
|
|
61
62
|
constructor(roomId: string, topicId: string, tracker: ChatStateTracker);
|
|
63
|
+
get isTraverseLocked(): boolean;
|
|
64
|
+
setTraverseLock(lock: boolean): Promise<void>;
|
|
65
|
+
resetToLatest(): Promise<void>;
|
|
66
|
+
fetchNext(): Promise<void>;
|
|
67
|
+
fetchPrevious(): Promise<void>;
|
|
62
68
|
/**
|
|
63
69
|
* For internal use.
|
|
64
70
|
* @internal
|
|
@@ -57,7 +57,7 @@ import { LeaveRoom } from "./schemes/commands/LeaveRoom";
|
|
|
57
57
|
import { CreateRoom } from "./schemes/commands/CreateRoom";
|
|
58
58
|
import { DeleteRoom } from "./schemes/commands/DeleteRoom";
|
|
59
59
|
import { GetRoomMembers } from "./schemes/commands/GetRoomMembers";
|
|
60
|
-
import { CreateTopic } from "./schemes/commands/CreateTopic";
|
|
60
|
+
import { CreateTopic, CreateTopicInitialMessage } from "./schemes/commands/CreateTopic";
|
|
61
61
|
import { DeleteTopic } from "./schemes/commands/DeleteTopic";
|
|
62
62
|
import { CreateMessage } from "./schemes/commands/CreateMessage";
|
|
63
63
|
import { UpdateRole } from "./schemes/commands/UpdateRole";
|
|
@@ -111,6 +111,7 @@ import { GetClientData } from "./schemes/commands/GetClientData";
|
|
|
111
111
|
import { SetClientData } from "./schemes/commands/SetClientData";
|
|
112
112
|
import { ClientData } from "./schemes/events/ClientData";
|
|
113
113
|
import { RoomStream, RoomStreamType } from "./schemes/RoomStream";
|
|
114
|
+
import { RoomHistory, RoomHistoryMode } from "./schemes/RoomHistory";
|
|
114
115
|
import { GetRoomSummary } from "./schemes/commands/GetRoomSummary";
|
|
115
116
|
import { GetSpaceSummary } from "./schemes/commands/GetSpaceSummary";
|
|
116
117
|
import { SpaceFlag } from "./schemes/Space";
|
|
@@ -123,4 +124,5 @@ import { UserRelationship, UserRelationshipType } from "./schemes/UserRelationsh
|
|
|
123
124
|
import { DeleteRelationship } from "./schemes/commands/DeleteRelationship";
|
|
124
125
|
import { Relationships } from "./schemes/events/Relationships";
|
|
125
126
|
import { CreateRelationship } from "./schemes/commands/CreateRelationship";
|
|
126
|
-
|
|
127
|
+
import { RoomSummaryUpdated } from "./schemes/events/RoomSummaryUpdated";
|
|
128
|
+
export { Envelope, Message, MessageType, MessageAuthor, Role, Room, RoomFlag, RoomType, RoomStream, RoomStreamType, RoomHistory, RoomHistoryMode, RoomMember, RoomSummary, RoomSummaryExtras, Space, SpaceFlag, SpaceMember, Topic, FollowedTopic, User, UserState, PermissionOverwritesValue, ChatLocation, SpaceSummary, SpaceDiscoverable, Emoticon, PermissionOverwritesTarget, BanObject, LeaveReason, UserRelationship, UserRelationshipType, CreateTopicInitialMessage, Bye, Error, Messages, NewMessage, NewRole, NewRoom, NewTopic, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowedTopicUpdated, ComputedPermissions, PermissionOverwrites, PermissionOverwritesUpdated, RoleDeleted, RoleUpdated, RoomDeleted, RoomUpdated, RoomJoined, RoomLeft, RoomMemberJoined, RoomMemberLeft, RoomMembers, RoomMemberUpdated, UserUpdated, Session, SpaceDeleted, SpaceUpdated, SpaceJoined, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms, TopicDeleted, TopicUpdated, PermissionOverwriteTargets, Owners, Ok, DiscoverableSpaces, Emoticons, EmoticonDeleted, NewEmoticon, Bans, ClientData, SpaceSummaryEvent, RoomSummaryEvent, NewRelationship, RelationshipDeleted, Relationships, RoomSummaryUpdated, AssignRole, GetMessages, CreateMessage, Ack, CreateRole, CreateRoom, CreateSpace, CreateTopic, FollowTopic, UnfollowTopic, GetFollowedTopics, DeassignRole, DeleteRole, DeleteRoom, DeleteSpace, DeleteTopic, SetPermissionOverwrites, GetPermissionOverwrites, GetComputedPermissions, GetRoomMembers, GetSession, GetSpaceMembers, GetSpaceRooms, JoinRoom, JoinSpace, LeaveRoom, LeaveSpace, UpdateRole, UpdateSpace, UpdateRoom, UpdateTopic, GetPermissionOverwriteTargets, CreateOwner, DeleteOwner, GetOwners, Topics, GetTopics, GetDiscoverableSpaces, GetEmoticons, CreateEmoticon, DeleteEmoticon, Ban, Unban, GetBans, Kick, GetClientData, SetClientData, GetSpaceSummary, GetRoomSummary, SetCustomNick, CreateRelationship, DeleteRelationship };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { User } from "./User";
|
|
2
2
|
import { ChatLocation } from "./ChatLocation";
|
|
3
|
-
export type MessageType = 'Text' | 'RoomJoin' | 'RoomLeave' | 'SpaceJoin' | 'SpaceLeave' | 'TopicChange' | 'CustomNickChange' | '
|
|
3
|
+
export type MessageType = 'Text' | 'RoomJoin' | 'RoomLeave' | 'SpaceJoin' | 'SpaceLeave' | 'TopicChange' | 'CustomNickChange' | 'Ephemeral';
|
|
4
4
|
export interface MessageAuthor {
|
|
5
5
|
user: User;
|
|
6
6
|
customNick?: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Topic } from "./Topic";
|
|
2
2
|
import { User } from "./User";
|
|
3
3
|
import { RoomStream } from "./RoomStream";
|
|
4
|
+
import { RoomHistory } from "./RoomHistory";
|
|
4
5
|
export type RoomType = 'Text' | 'ClassicText' | 'Pm';
|
|
5
6
|
export declare enum RoomFlag {
|
|
6
7
|
AllowSystemMessages = 1,
|
|
@@ -16,4 +17,5 @@ export interface Room {
|
|
|
16
17
|
recipients: User[] | null;
|
|
17
18
|
flags: number;
|
|
18
19
|
stream: RoomStream | null;
|
|
20
|
+
history: RoomHistory | null;
|
|
19
21
|
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { ChatLocation } from "../ChatLocation";
|
|
2
|
-
|
|
2
|
+
export interface CreateTopicInitialMessage {
|
|
3
|
+
content?: string;
|
|
4
|
+
attachments?: string[];
|
|
5
|
+
}
|
|
3
6
|
export interface CreateTopic {
|
|
4
7
|
location: ChatLocation;
|
|
5
8
|
name: string;
|
|
6
9
|
refMessageId?: string;
|
|
7
|
-
initialMessage?:
|
|
10
|
+
initialMessage?: CreateTopicInitialMessage;
|
|
8
11
|
}
|
package/package.json
CHANGED
|
@@ -82,12 +82,26 @@ import {
|
|
|
82
82
|
GetEmoticons,
|
|
83
83
|
Emoticons,
|
|
84
84
|
EmoticonDeleted,
|
|
85
|
-
NewEmoticon,
|
|
85
|
+
NewEmoticon,
|
|
86
|
+
Bans,
|
|
87
|
+
GetBans,
|
|
88
|
+
Ban,
|
|
89
|
+
Unban,
|
|
90
|
+
Kick,
|
|
91
|
+
ClientData,
|
|
92
|
+
GetClientData,
|
|
93
|
+
SetClientData,
|
|
86
94
|
GetRoomSummary,
|
|
87
95
|
GetSpaceSummary,
|
|
88
96
|
RoomSummaryEvent,
|
|
89
97
|
SpaceSummaryEvent,
|
|
90
|
-
SetCustomNick,
|
|
98
|
+
SetCustomNick,
|
|
99
|
+
Relationships,
|
|
100
|
+
RelationshipDeleted,
|
|
101
|
+
NewRelationship,
|
|
102
|
+
DeleteRelationship,
|
|
103
|
+
CreateRelationship,
|
|
104
|
+
RoomSummaryUpdated,
|
|
91
105
|
} from "./types/src/index";
|
|
92
106
|
import {EventTarget} from "./EventTarget";
|
|
93
107
|
import {GetRelationships} from "./types/src/schemes/commands/GetRelationships";
|
|
@@ -195,6 +209,7 @@ export type EventsMap = {
|
|
|
195
209
|
RoomDeleted: RoomDeleted,
|
|
196
210
|
RoomUpdated: RoomUpdated,
|
|
197
211
|
RoomSummaryEvent: RoomSummaryEvent,
|
|
212
|
+
RoomSummaryUpdated: RoomSummaryUpdated,
|
|
198
213
|
// Topic events
|
|
199
214
|
NewTopic: NewTopic,
|
|
200
215
|
TopicDeleted: TopicDeleted,
|
|
@@ -209,10 +209,9 @@ export class MessagesManager {
|
|
|
209
209
|
private updateLocallyFollowedTopicOnNewMessage(ev: NewMessage): void {
|
|
210
210
|
const roomFollowedTopics = this.followedTopics.get(ev.message.location.roomId);
|
|
211
211
|
const followedTopic = roomFollowedTopics?.get(ev.message.location.topicId);
|
|
212
|
-
const ephemeralMessageTypes = ['System'] as MessageType[];
|
|
213
212
|
|
|
214
|
-
if (!roomFollowedTopics || !followedTopic ||
|
|
215
|
-
// Skip if we don't follow this room or targeted topic or message is ephemeral
|
|
213
|
+
if (!roomFollowedTopics || !followedTopic || ev.message.type === 'Ephemeral') {
|
|
214
|
+
// Skip if we don't follow this room or targeted topic or the message is ephemeral
|
|
216
215
|
return;
|
|
217
216
|
}
|
|
218
217
|
|
|
@@ -5,6 +5,7 @@ import {TopicHistoryWindow} from "./TopicHistoryWindow";
|
|
|
5
5
|
|
|
6
6
|
export class RoomMessagesHistory {
|
|
7
7
|
private historyWindows = new IndexedCollection<string, TopicHistoryWindow>();
|
|
8
|
+
private traverseLock: boolean = false;
|
|
8
9
|
|
|
9
10
|
public constructor(
|
|
10
11
|
private room: Room,
|
|
@@ -14,6 +15,8 @@ export class RoomMessagesHistory {
|
|
|
14
15
|
this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));
|
|
15
16
|
this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));
|
|
16
17
|
|
|
18
|
+
this.updateTraverseLock(this.room);
|
|
19
|
+
|
|
17
20
|
if (this.room.defaultTopic) {
|
|
18
21
|
this.createHistoryWindowForTopic(this.room.defaultTopic);
|
|
19
22
|
}
|
|
@@ -25,7 +28,7 @@ export class RoomMessagesHistory {
|
|
|
25
28
|
public async getMessagesWindow(topicId: string): Promise<TopicHistoryWindow | undefined> {
|
|
26
29
|
let historyWindow = this.historyWindows.get(topicId);
|
|
27
30
|
|
|
28
|
-
if (!
|
|
31
|
+
if (!historyWindow) {
|
|
29
32
|
const topic = (await this.tracker.rooms.getTopics(this.room.id, [topicId])).get(topicId);
|
|
30
33
|
|
|
31
34
|
if (topic) {
|
|
@@ -36,13 +39,19 @@ export class RoomMessagesHistory {
|
|
|
36
39
|
return this.historyWindows.get(topicId);
|
|
37
40
|
}
|
|
38
41
|
|
|
39
|
-
private handleRoomUpdated(ev: RoomUpdated): void {
|
|
42
|
+
private async handleRoomUpdated(ev: RoomUpdated): Promise<void> {
|
|
40
43
|
if (this.room.id === ev.room.id) {
|
|
41
44
|
this.room = ev.room;
|
|
42
45
|
|
|
46
|
+
this.updateTraverseLock(ev.room);
|
|
47
|
+
|
|
43
48
|
if (ev.room.defaultTopic) {
|
|
44
49
|
this.createHistoryWindowForTopic(ev.room.defaultTopic);
|
|
45
50
|
}
|
|
51
|
+
|
|
52
|
+
for (const [, window] of Array.from(this.historyWindows.items)) {
|
|
53
|
+
await window.setTraverseLock(this.traverseLock);
|
|
54
|
+
}
|
|
46
55
|
}
|
|
47
56
|
}
|
|
48
57
|
|
|
@@ -63,7 +72,11 @@ export class RoomMessagesHistory {
|
|
|
63
72
|
return;
|
|
64
73
|
}
|
|
65
74
|
|
|
66
|
-
|
|
75
|
+
const historyWindow = new TopicHistoryWindow(this.room.id, topic.id, this.tracker);
|
|
76
|
+
|
|
77
|
+
historyWindow.setTraverseLock(this.traverseLock);
|
|
78
|
+
|
|
79
|
+
this.historyWindows.set([topic.id, historyWindow]);
|
|
67
80
|
|
|
68
81
|
// If new topic refers to some message from this room, update other structures
|
|
69
82
|
if (topic.refMessage) {
|
|
@@ -71,4 +84,8 @@ export class RoomMessagesHistory {
|
|
|
71
84
|
refHistoryWindow?._updateMessageReference(topic);
|
|
72
85
|
}
|
|
73
86
|
}
|
|
87
|
+
|
|
88
|
+
private updateTraverseLock(room: Room): void {
|
|
89
|
+
this.traverseLock = room.history.mode === 'Ephemeral';
|
|
90
|
+
}
|
|
74
91
|
}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
RoleUpdated,
|
|
9
9
|
RoomDeleted,
|
|
10
10
|
RoomSummary,
|
|
11
|
+
RoomSummaryUpdated,
|
|
11
12
|
RoomUpdated,
|
|
12
13
|
Session,
|
|
13
14
|
Space,
|
|
@@ -48,6 +49,7 @@ export class SpacesManager {
|
|
|
48
49
|
this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));
|
|
49
50
|
this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));
|
|
50
51
|
this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));
|
|
52
|
+
this.tracker.client.on('RoomSummaryUpdated', ev => this.handleRoomSummaryUpdated(ev));
|
|
51
53
|
this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));
|
|
52
54
|
this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));
|
|
53
55
|
this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));
|
|
@@ -229,12 +231,37 @@ export class SpacesManager {
|
|
|
229
231
|
}
|
|
230
232
|
|
|
231
233
|
private handleSpaceRooms(ev: SpaceRooms): void {
|
|
232
|
-
if (!
|
|
234
|
+
if (!this.rooms.has(ev.id)) {
|
|
233
235
|
this.rooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);
|
|
234
236
|
ev.summaries.forEach(summary => this.roomIdToSpaceId.set([summary.id, ev.id]));
|
|
235
237
|
}
|
|
236
238
|
}
|
|
237
239
|
|
|
240
|
+
private async handleRoomSummaryUpdated(ev: RoomSummaryUpdated): Promise<void> {
|
|
241
|
+
const spaceId = this.roomIdToSpaceId.get(ev.summary.id);
|
|
242
|
+
const summariesPromise = this.roomsPromises.get(spaceId);
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Update summary only if the list was already loaded.
|
|
246
|
+
* RoomSummaryUpdated event has a partial summary, so we need to update the existing summary by merging it.
|
|
247
|
+
*/
|
|
248
|
+
if (spaceId && summariesPromise) {
|
|
249
|
+
await summariesPromise;
|
|
250
|
+
|
|
251
|
+
const summaries = this.rooms.get(spaceId);
|
|
252
|
+
const oldSummary = summaries.get(ev.summary.id);
|
|
253
|
+
let newSummary: RoomSummary;
|
|
254
|
+
|
|
255
|
+
if (oldSummary) {
|
|
256
|
+
newSummary = {...oldSummary, ...ev.summary};
|
|
257
|
+
} else {
|
|
258
|
+
newSummary = ev.summary;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
summaries.set(newSummary);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
238
265
|
private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {
|
|
239
266
|
if (this.members.has(ev.spaceId)) {
|
|
240
267
|
const members = this.members.get(ev.spaceId);
|
|
@@ -187,6 +187,8 @@ export class TopicHistoryWindow extends TraversableRemoteCollection<Message> {
|
|
|
187
187
|
*/
|
|
188
188
|
public readonly WindowState: typeof WindowState = WindowState;
|
|
189
189
|
|
|
190
|
+
private traverseLock: boolean = false;
|
|
191
|
+
|
|
190
192
|
public constructor(
|
|
191
193
|
private roomId: string,
|
|
192
194
|
private topicId: string,
|
|
@@ -197,6 +199,39 @@ export class TopicHistoryWindow extends TraversableRemoteCollection<Message> {
|
|
|
197
199
|
this.tracker.client.on('NewMessage', ev => this.handleNewMessage(ev));
|
|
198
200
|
}
|
|
199
201
|
|
|
202
|
+
public get isTraverseLocked(): boolean {
|
|
203
|
+
return this.traverseLock;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
public async setTraverseLock(lock: boolean): Promise<void> {
|
|
207
|
+
this.traverseLock = lock;
|
|
208
|
+
|
|
209
|
+
if (lock && (this.state !== WindowState.LIVE && this.state !== WindowState.LATEST)) {
|
|
210
|
+
await super.resetToLatest();
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
public async resetToLatest(): Promise<void> {
|
|
215
|
+
if (this.traverseLock) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
return super.resetToLatest();
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
public async fetchNext(): Promise<void> {
|
|
222
|
+
if (this.traverseLock) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
return super.fetchNext();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
public async fetchPrevious(): Promise<void> {
|
|
229
|
+
if (this.traverseLock) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
return super.fetchPrevious();
|
|
233
|
+
}
|
|
234
|
+
|
|
200
235
|
/**
|
|
201
236
|
* For internal use.
|
|
202
237
|
* @internal
|
package/src/types/src/index.ts
CHANGED
|
@@ -57,7 +57,7 @@ import {LeaveRoom} from "./schemes/commands/LeaveRoom";
|
|
|
57
57
|
import {CreateRoom} from "./schemes/commands/CreateRoom";
|
|
58
58
|
import {DeleteRoom} from "./schemes/commands/DeleteRoom";
|
|
59
59
|
import {GetRoomMembers} from "./schemes/commands/GetRoomMembers";
|
|
60
|
-
import {CreateTopic} from "./schemes/commands/CreateTopic";
|
|
60
|
+
import {CreateTopic, CreateTopicInitialMessage} from "./schemes/commands/CreateTopic";
|
|
61
61
|
import {DeleteTopic} from "./schemes/commands/DeleteTopic";
|
|
62
62
|
import {CreateMessage} from "./schemes/commands/CreateMessage";
|
|
63
63
|
import {UpdateRole} from "./schemes/commands/UpdateRole";
|
|
@@ -111,6 +111,7 @@ import {GetClientData} from "./schemes/commands/GetClientData";
|
|
|
111
111
|
import {SetClientData} from "./schemes/commands/SetClientData";
|
|
112
112
|
import {ClientData} from "./schemes/events/ClientData";
|
|
113
113
|
import {RoomStream, RoomStreamType} from "./schemes/RoomStream";
|
|
114
|
+
import {RoomHistory, RoomHistoryMode} from "./schemes/RoomHistory";
|
|
114
115
|
import {GetRoomSummary} from "./schemes/commands/GetRoomSummary";
|
|
115
116
|
import {GetSpaceSummary} from "./schemes/commands/GetSpaceSummary";
|
|
116
117
|
import {SpaceFlag} from "./schemes/Space";
|
|
@@ -123,6 +124,7 @@ import {UserRelationship, UserRelationshipType} from "./schemes/UserRelationship
|
|
|
123
124
|
import {DeleteRelationship} from "./schemes/commands/DeleteRelationship";
|
|
124
125
|
import {Relationships} from "./schemes/events/Relationships";
|
|
125
126
|
import {CreateRelationship} from "./schemes/commands/CreateRelationship";
|
|
127
|
+
import {RoomSummaryUpdated} from "./schemes/events/RoomSummaryUpdated";
|
|
126
128
|
|
|
127
129
|
export {
|
|
128
130
|
// objects
|
|
@@ -134,6 +136,10 @@ export {
|
|
|
134
136
|
Room,
|
|
135
137
|
RoomFlag,
|
|
136
138
|
RoomType,
|
|
139
|
+
RoomStream,
|
|
140
|
+
RoomStreamType,
|
|
141
|
+
RoomHistory,
|
|
142
|
+
RoomHistoryMode,
|
|
137
143
|
RoomMember,
|
|
138
144
|
RoomSummary,
|
|
139
145
|
RoomSummaryExtras,
|
|
@@ -152,10 +158,9 @@ export {
|
|
|
152
158
|
PermissionOverwritesTarget,
|
|
153
159
|
BanObject,
|
|
154
160
|
LeaveReason,
|
|
155
|
-
RoomStream,
|
|
156
|
-
RoomStreamType,
|
|
157
161
|
UserRelationship,
|
|
158
162
|
UserRelationshipType,
|
|
163
|
+
CreateTopicInitialMessage,
|
|
159
164
|
// events
|
|
160
165
|
Bye,
|
|
161
166
|
Error,
|
|
@@ -208,6 +213,7 @@ export {
|
|
|
208
213
|
NewRelationship,
|
|
209
214
|
RelationshipDeleted,
|
|
210
215
|
Relationships,
|
|
216
|
+
RoomSummaryUpdated,
|
|
211
217
|
// commands
|
|
212
218
|
AssignRole,
|
|
213
219
|
GetMessages,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {User} from "./User";
|
|
2
2
|
import {ChatLocation} from "./ChatLocation";
|
|
3
3
|
|
|
4
|
-
export type MessageType = 'Text'|'RoomJoin'|'RoomLeave'|'SpaceJoin'|'SpaceLeave'|'TopicChange'|'CustomNickChange'|'
|
|
4
|
+
export type MessageType = 'Text'|'RoomJoin'|'RoomLeave'|'SpaceJoin'|'SpaceLeave'|'TopicChange'|'CustomNickChange'|'Ephemeral';
|
|
5
5
|
|
|
6
6
|
export interface MessageAuthor {
|
|
7
7
|
user: User;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {Topic} from "./Topic";
|
|
2
2
|
import {User} from "./User";
|
|
3
3
|
import {RoomStream} from "./RoomStream";
|
|
4
|
+
import {RoomHistory} from "./RoomHistory";
|
|
4
5
|
|
|
5
6
|
export type RoomType = 'Text' | 'ClassicText' | 'Pm';
|
|
6
7
|
|
|
@@ -19,4 +20,5 @@ export interface Room {
|
|
|
19
20
|
recipients: User[] | null;
|
|
20
21
|
flags: number;
|
|
21
22
|
stream: RoomStream | null;
|
|
23
|
+
history: RoomHistory | null;
|
|
22
24
|
}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import {ChatLocation} from "../ChatLocation";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
export interface CreateTopicInitialMessage {
|
|
4
|
+
content?: string;
|
|
5
|
+
attachments?: string[];
|
|
6
|
+
}
|
|
3
7
|
|
|
4
8
|
export interface CreateTopic {
|
|
5
9
|
location: ChatLocation;
|
|
6
10
|
name: string;
|
|
7
11
|
refMessageId?: string;
|
|
8
|
-
initialMessage?:
|
|
12
|
+
initialMessage?: CreateTopicInitialMessage;
|
|
9
13
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {RoomStream} from "../RoomStream";
|
|
2
|
+
import {RoomHistory} from "../RoomHistory";
|
|
2
3
|
|
|
3
4
|
export interface UpdateRoom {
|
|
4
5
|
id: string;
|
|
@@ -6,4 +7,5 @@ export interface UpdateRoom {
|
|
|
6
7
|
description?: string;
|
|
7
8
|
flags?: number;
|
|
8
9
|
stream?: RoomStream | null;
|
|
10
|
+
history?: RoomHistory;
|
|
9
11
|
}
|