aboutsummaryrefslogtreecommitdiff
path: root/lib/connection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/connection.cpp')
-rw-r--r--lib/connection.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/connection.cpp b/lib/connection.cpp
index c4587f30..853053bd 100644
--- a/lib/connection.cpp
+++ b/lib/connection.cpp
@@ -804,11 +804,11 @@ PostReceiptJob* Connection::postReceipt(Room* room, RoomEvent* event)
JoinRoomJob* Connection::joinRoom(const QString& roomAlias,
const QStringList& serverNames)
{
- auto job = callApi<JoinRoomJob>(roomAlias, serverNames);
- // Upon completion, ensure a room object in Join state is created
- // (or it might already be there due to a sync completing earlier).
- // finished() is used here instead of success() to overtake clients
- // that may add their own slots to finished().
+ auto* const job = callApi<JoinRoomJob>(roomAlias, serverNames);
+ // Upon completion, ensure a room object is created in case it hasn't come
+ // with a sync yet. If the room object is not there, provideRoom() will
+ // create it in Join state. finished() is used here instead of success()
+ // to overtake clients that may add their own slots to finished().
connect(job, &BaseJob::finished, this, [this, job] {
if (job->status().good())
provideRoom(job->roomId());
@@ -1474,11 +1474,13 @@ Room* Connection::provideRoom(const QString& id, Omittable<JoinState> joinState)
room = d->roomMap.value({ id, true }, nullptr);
if (room)
return room;
- // No Invite either, setup a new room object below
+ // No Invite either, setup a new room object in Join state
+ joinState = JoinState::Join;
}
if (!room) {
- room = roomFactory()(this, id, joinState.value_or(JoinState::Join));
+ Q_ASSERT(joinState.has_value());
+ room = roomFactory()(this, id, *joinState);
if (!room) {
qCCritical(MAIN) << "Failed to create a room" << id;
return nullptr;