Skip to content

Commit 7bba357

Browse files
committed
separate WorldReadableRoomViewModel out of UnknownRoomViewModel
1 parent e6c4141 commit 7bba357

5 files changed

Lines changed: 33 additions & 74 deletions

File tree

src/domain/session/SessionViewModel.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ limitations under the License.
1818
import {LeftPanelViewModel} from "./leftpanel/LeftPanelViewModel.js";
1919
import {RoomViewModel} from "./room/RoomViewModel.js";
2020
import {UnknownRoomViewModel} from "./room/UnknownRoomViewModel.js";
21+
import {WorldReadableRoomViewModel} from "./room/WorldReadableRoomViewModel.js";
2122
import {InviteViewModel} from "./room/InviteViewModel.js";
2223
import {RoomBeingCreatedViewModel} from "./room/RoomBeingCreatedViewModel.js";
2324
import {LightboxViewModel} from "./room/LightboxViewModel.js";
@@ -231,18 +232,19 @@ export class SessionViewModel extends ViewModel {
231232
return null;
232233
}
233234

234-
async _createUnknownRoomViewModel(roomIdOrAlias) {
235-
const roomVM = new UnknownRoomViewModel(this.childOptions({
235+
_createUnknownRoomViewModel(roomIdOrAlias) {
236+
return new UnknownRoomViewModel(this.childOptions({
236237
roomIdOrAlias,
237238
session: this._client.session,
238239
}));
239-
roomVM.load().then(() => {
240-
if (roomVM.previewPossible) {
241-
console.log('emitting middle');
242-
this.emitChange("activeMiddleViewModel");
243-
this.emitChange();
244-
}
245-
});
240+
}
241+
242+
async _createWorldReadableRoomViewModel(roomIdOrAlias) {
243+
const roomVM = new WorldReadableRoomViewModel(this.childOptions({
244+
room: await this._client.session.loadWorldReadableRoom(roomIdOrAlias),
245+
session: this._client.session,
246+
}));
247+
roomVM.load();
246248
return roomVM;
247249
}
248250

src/domain/session/room/UnknownRoomViewModel.js

Lines changed: 1 addition & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ limitations under the License.
1515
*/
1616

1717
import {ViewModel} from "../../ViewModel";
18-
import {TimelineViewModel} from "./timeline/TimelineViewModel";
19-
import {tileClassForEntry as defaultTileClassForEntry} from "./timeline/tiles/index";
20-
import {getAvatarHttpUrl} from "../../avatar";
2118

2219
export class UnknownRoomViewModel extends ViewModel {
2320
constructor(options) {
@@ -27,12 +24,6 @@ export class UnknownRoomViewModel extends ViewModel {
2724
this.roomIdOrAlias = roomIdOrAlias;
2825
this._error = null;
2926
this._busy = false;
30-
this._worldReadable = false; // won't know until load() finishes with isWorldReadableRoom() call
31-
this._checkingPreviewCapability = false; // won't know until load() finishes with isWorldReadableRoom() call
32-
}
33-
34-
get room() {
35-
return this._room;
3627
}
3728

3829
get error() {
@@ -61,60 +52,7 @@ export class UnknownRoomViewModel extends ViewModel {
6152
return this._busy;
6253
}
6354

64-
// matrix.org can choose not to return messages for a world_readable room
65-
// so this getter is used to render the correct view, if it's possible to preview the room right now
66-
get previewPossible() {
67-
return this._worldReadable && !! this._room;
68-
}
69-
70-
get checkingPreviewCapability() {
71-
return this._checkingPreviewCapability;
72-
}
73-
7455
get kind() {
75-
return this._worldReadable ? "worldReadableRoom" : "unknown";
76-
}
77-
78-
get timelineViewModel() {
79-
return this._timelineVM;
80-
}
81-
82-
avatarUrl(size) {
83-
return getAvatarHttpUrl(this._room.avatarUrl, size, this.platform, this._room.mediaRepository);
84-
}
85-
86-
async load() {
87-
this._checkingPreviewCapability = true;
88-
this._worldReadable = await this._session.isWorldReadableRoom(this.roomIdOrAlias);
89-
this._checkingPreviewCapability = false;
90-
91-
if (!this._worldReadable) {
92-
this.emitChange("checkingPreviewCapability");
93-
return;
94-
}
95-
96-
try {
97-
this._room = await this._session.loadWorldReadableRoom(this.roomIdOrAlias);
98-
const timeline = await this._room.openTimeline();
99-
this._tileOptions = this.childOptions({
100-
roomVM: this,
101-
timeline,
102-
tileClassForEntry: defaultTileClassForEntry,
103-
});
104-
this._timelineVM = this.track(new TimelineViewModel(this.childOptions({
105-
tileOptions: this._tileOptions,
106-
timeline,
107-
})));
108-
this.emitChange("timelineViewModel");
109-
} catch (err) {
110-
console.error(`room.openTimeline(): ${err.message}:\n${err.stack}`);
111-
this._timelineError = err;
112-
this.emitChange("error");
113-
}
114-
}
115-
116-
dispose() {
117-
super.dispose();
118-
void this._session.deleteWorldReadableRoomData(this.roomIdOrAlias);
56+
return "unknown";
11957
}
12058
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import {RoomViewModel} from "./RoomViewModel";
2+
3+
export class WorldReadableRoomViewModel extends RoomViewModel {
4+
constructor(options) {
5+
options.room.isWorldReadable = true;
6+
super(options);
7+
this._session = options.session;
8+
}
9+
10+
get kind() {
11+
return "preview";
12+
}
13+
14+
dispose() {
15+
super.dispose();
16+
void this._session.deleteWorldReadableRoomData(this.roomIdOrAlias);
17+
}
18+
}

src/matrix/Session.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,8 @@ export class Session {
668668
mediaRepository: this._mediaRepository,
669669
pendingEvents: [],
670670
user: this._user,
671-
platform: this._platform
671+
platform: this._platform,
672+
roomStateHandler: this._roomStateHandler
672673
});
673674
}
674675

src/platform/web/ui/session/SessionView.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export class SessionView extends TemplateView {
6060
return new RoomView(vm.currentRoomViewModel, viewClassForTile);
6161
} else if (vm.currentRoomViewModel.kind === "roomBeingCreated") {
6262
return new RoomBeingCreatedView(vm.currentRoomViewModel);
63-
} else if (vm.currentRoomViewModel.kind === "worldReadableRoom") {
63+
} else if (vm.currentRoomViewModel.kind === "preview") {
6464
return new WorldReadableRoomView(vm.currentRoomViewModel);
6565
} else {
6666
return new UnknownRoomView(vm.currentRoomViewModel);

0 commit comments

Comments
 (0)