Skip to content

Commit bbbfed9

Browse files
committed
Update _client and _sliding-sync
1 parent 8c5705e commit bbbfed9

File tree

4 files changed

+59
-53
lines changed

4 files changed

+59
-53
lines changed

packages/host/app/services/matrix-service.ts

+3-8
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import type Owner from '@ember/owner';
22
import type RouterService from '@ember/routing/router-service';
33
import { debounce } from '@ember/runloop';
44
import Service, { service } from '@ember/service';
5-
import { buildWaiter } from '@ember/test-waiters';
65
import { cached, tracked } from '@glimmer/tracking';
76

87
import { restartableTask, task } from 'ember-concurrency';
@@ -129,7 +128,6 @@ const SLIDING_SYNC_LIST_RANGE_END = 9;
129128
const SLIDING_SYNC_LIST_TIMELINE_LIMIT = 1;
130129

131130
const realmEventsLogger = logger('realm:events');
132-
const waiter = buildWaiter('matrix-service:waiter');
133131

134132
export type OperatorModeContext = {
135133
submode: Submode;
@@ -201,8 +199,7 @@ export default class MatrixService extends Service {
201199
set currentRoomId(value: string | undefined) {
202200
this._currentRoomId = value;
203201
if (value) {
204-
this.loadAllTimelineEvents(value);
205-
window.localStorage.setItem(CurrentRoomIdPersistenceKey, value);
202+
this.loadAllTimelineEvents.perform(value);
206203
} else {
207204
window.localStorage.removeItem(CurrentRoomIdPersistenceKey);
208205
}
@@ -1226,7 +1223,7 @@ export default class MatrixService extends Service {
12261223
return await this.client.isUsernameAvailable(username);
12271224
}
12281225

1229-
private async loadAllTimelineEvents(roomId: string) {
1226+
private loadAllTimelineEvents = restartableTask(async (roomId: string) => {
12301227
let roomData = this.ensureRoomData(roomId);
12311228
let room = this.client.getRoom(roomId);
12321229

@@ -1238,7 +1235,6 @@ export default class MatrixService extends Service {
12381235
return;
12391236
}
12401237

1241-
let token = waiter.beginAsync();
12421238
this.timelineLoadingState.set(roomId, true);
12431239
try {
12441240
while (room.oldState.paginationToken != null) {
@@ -1287,9 +1283,8 @@ export default class MatrixService extends Service {
12871283
});
12881284
} finally {
12891285
this.timelineLoadingState.set(roomId, false);
1290-
waiter.endAsync(token);
12911286
}
1292-
}
1287+
});
12931288

12941289
get isLoadingTimeline() {
12951290
if (!this.currentRoomId) {

packages/host/tests/acceptance/ai-assistant-test.gts

+1
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ module('Acceptance | AI Assistant tests', function (hooks) {
183183
],
184184
});
185185
await click('[data-test-open-ai-assistant]');
186+
await waitFor('[data-test-message-field]');
186187
const testCard = `${testRealmURL}Person/hassan`;
187188

188189
for (let i = 1; i <= 3; i++) {

packages/host/tests/helpers/mock-matrix/_client.ts

+45-41
Original file line numberDiff line numberDiff line change
@@ -634,59 +634,63 @@ export class MockClient implements ExtendedClient {
634634
_proxyBaseUrl: string,
635635
_signal: AbortSignal,
636636
): Promise<MSC3575SlidingSyncResponse> {
637-
let listKey = Object.keys(req.lists || {})[0];
638-
if (!listKey || !req.lists?.[listKey]?.ranges?.[0]) {
639-
return Promise.resolve({
640-
pos: '0',
641-
lists: {},
642-
rooms: {},
643-
extensions: {},
644-
});
645-
}
637+
let lists: MSC3575SlidingSyncResponse['lists'] = {};
638+
let rooms: MSC3575SlidingSyncResponse['rooms'] = {};
639+
Object.entries(req.lists || {}).forEach(([listKey, list]) => {
640+
list.ranges.forEach((range) => {
641+
let [start, end] = range;
642+
//currently we only filter rooms using is_dm
643+
let dmRooms =
644+
this.getAccountData('m.direct')?.getContent()?.rooms ?? [];
645+
let roomsInRange = this.serverState.rooms
646+
.filter((r) => r.id.includes('mock'))
647+
.filter((r) =>
648+
list.filters?.is_dm
649+
? dmRooms.includes(r.id)
650+
: !dmRooms.includes(r.id),
651+
)
652+
.slice(start, end + 1);
653+
654+
roomsInRange.forEach((room) => {
655+
let timeline = this.serverState.getRoomEvents(room.id);
656+
rooms[room.id] = {
657+
name:
658+
this.serverState.getRoomState(room.id, 'm.room.name', '')?.content
659+
?.name ?? 'room',
660+
required_state: [],
661+
timeline,
662+
notification_count: 0,
663+
highlight_count: 0,
664+
joined_count: 1,
665+
invited_count: 0,
666+
initial: true,
667+
};
646668

647-
let [start, end] = req.lists[listKey].ranges[0];
648-
let roomsInRange = this.serverState.rooms
649-
.filter((r) => r.id.includes('mock'))
650-
.slice(start, end + 1);
669+
timeline.forEach((event: MatrixSDK.IRoomEvent) => {
670+
this.emitEvent(new MatrixEvent(event));
671+
});
672+
});
651673

652-
let response: MSC3575SlidingSyncResponse = {
653-
pos: String(Date.now()),
654-
lists: {
655-
[listKey]: {
656-
count: this.serverState.rooms.length,
674+
lists[listKey] = {
675+
count: roomsInRange.length,
657676
ops: [
658677
{
659678
op: 'SYNC',
660679
range: [start, end],
661680
room_ids: roomsInRange.map((r) => r.id),
662681
},
663682
],
664-
},
665-
},
666-
rooms: {},
667-
extensions: {},
668-
};
669-
670-
roomsInRange.forEach((room) => {
671-
let timeline = this.serverState.getRoomEvents(room.id);
672-
response.rooms[room.id] = {
673-
name:
674-
this.serverState.getRoomState(room.id, 'm.room.name', '')?.content
675-
?.name ?? 'room',
676-
required_state: [],
677-
timeline,
678-
notification_count: 0,
679-
highlight_count: 0,
680-
joined_count: 1,
681-
invited_count: 0,
682-
initial: true,
683-
};
684-
685-
timeline.forEach((event: MatrixSDK.IRoomEvent) => {
686-
this.emitEvent(new MatrixEvent(event));
683+
};
687684
});
688685
});
689686

687+
let response: MSC3575SlidingSyncResponse = {
688+
pos: String(Date.now()),
689+
lists,
690+
rooms,
691+
extensions: {},
692+
};
693+
690694
return Promise.resolve(response);
691695
}
692696

packages/host/tests/helpers/mock-matrix/_sliding-sync.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99

1010
export class MockSlidingSync extends SlidingSync {
1111
private _client: MatrixSDK.MatrixClient;
12+
private _lists: Record<string, MSC3575List>;
1213
private lifecycleCallbacks: Function[] = [];
1314
private listCallbacks: Function[] = [];
1415

@@ -21,6 +22,7 @@ export class MockSlidingSync extends SlidingSync {
2122
) {
2223
super(proxyBaseUrl, lists, roomSubscriptionInfo, client, timeoutMS);
2324
this._client = client;
25+
this._lists = Object.fromEntries(lists);
2426
}
2527

2628
on(event: string, callback: Function) {
@@ -44,13 +46,12 @@ export class MockSlidingSync extends SlidingSync {
4446
}
4547

4648
async start() {
47-
let aiRoomList = this.getListParams('ai-room');
48-
if (!aiRoomList) {
49+
if (!this._lists) {
4950
return;
5051
}
5152
let slidingResponse = await this._client.slidingSync(
5253
{
53-
lists: { ['ai-room']: aiRoomList },
54+
lists: this._lists,
5455
room_subscriptions: undefined,
5556
},
5657
'',
@@ -64,8 +65,13 @@ export class MockSlidingSync extends SlidingSync {
6465
);
6566
}
6667

68+
async setListRanges(listKey: string, ranges: number[][]) {
69+
this._lists[listKey].ranges = ranges;
70+
return await this.resend();
71+
}
72+
6773
async resend() {
6874
await this.start();
69-
return '';
75+
return Promise.resolve('');
7076
}
7177
}

0 commit comments

Comments
 (0)