Skip to content

Commit

Permalink
Allow knocking if join failed and via matrix uris
Browse files Browse the repository at this point in the history
  • Loading branch information
deepbluev7 committed Mar 31, 2022
1 parent 6417dcd commit 6f8babc
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 9 deletions.
48 changes: 40 additions & 8 deletions src/ChatPage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,12 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QObject *parent)
}
});

connect(this,
&ChatPage::internalKnock,
this,
qOverload<const QString &, const std::vector<std::string> &, QString, bool>(
&ChatPage::knockRoom),
Qt::QueuedConnection);
connect(this, &ChatPage::leftRoom, this, &ChatPage::removeRoom);
connect(this, &ChatPage::changeToRoom, this, &ChatPage::changeRoom, Qt::QueuedConnection);
connect(this, &ChatPage::notificationsRetrieved, this, &ChatPage::sendNotifications);
Expand Down Expand Up @@ -659,17 +665,34 @@ ChatPage::trySync()
}

void
ChatPage::knockRoom(const QString &room, const QString &reason)
ChatPage::knockRoom(const QString &room,
const std::vector<std::string> &via,
QString reason,
bool failedJoin)
{
const auto room_id = room.toStdString();
if (QMessageBox::Yes !=
QMessageBox::question(
nullptr, tr("Confirm knock"), tr("Do you really want to ask to join %1?").arg(room)))
bool confirmed = false;
reason = QInputDialog::getText(
nullptr,
tr("Knock on room"),
failedJoin
? tr(
"You failed to join %1. You can try to knock, so that others can invite you in. Do you "
"want to do so?\nYou may optionally provide a reason for others to accept your knock:")
.arg(room)
: tr("Do you really want to knock on %1? You may optionally provide a reason for others to "
"accept your knock:")
.arg(room),
QLineEdit::Normal,
reason,
&confirmed);
if (!confirmed) {
return;
}

http::client()->knock_room(
room_id,
{},
via,
[this, room_id](const mtx::responses::RoomId &, mtx::http::RequestErr err) {
if (err) {
emit showNotification(tr("Failed to knock room: %1")
Expand Down Expand Up @@ -704,10 +727,13 @@ ChatPage::joinRoomVia(const std::string &room_id,
http::client()->join_room(
room_id,
via,
[this, room_id](const mtx::responses::RoomId &, mtx::http::RequestErr err) {
[this, room_id, reason, via](const mtx::responses::RoomId &, mtx::http::RequestErr err) {
if (err) {
emit showNotification(
tr("Failed to join room: %1").arg(QString::fromStdString(err->matrix_error.error)));
if (err->matrix_error.errcode == mtx::errors::ErrorCode::M_FORBIDDEN)
emit internalKnock(QString::fromStdString(room_id), via, reason, true);
else
emit showNotification(tr("Failed to join room: %1")
.arg(QString::fromStdString(err->matrix_error.error)));
return;
}

Expand Down Expand Up @@ -1388,6 +1414,9 @@ ChatPage::handleMatrixUri(QString uri)
if (action == u"join" || action.isEmpty()) {
joinRoomVia(targetRoomId, vias);
return true;
} else if (action == u"knock" || action.isEmpty()) {
knockRoom(mxid1, vias);
return true;
}
return false;
} else if (sigil1 == u"r") {
Expand All @@ -1409,6 +1438,9 @@ ChatPage::handleMatrixUri(QString uri)
if (action == u"join" || action.isEmpty()) {
joinRoomVia(mxid1.toStdString(), vias);
return true;
} else if (action == u"knock" || action.isEmpty()) {
knockRoom(mxid1, vias);
return true;
}
return false;
}
Expand Down
11 changes: 10 additions & 1 deletion src/ChatPage.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,11 @@ public slots:
void leaveRoom(const QString &room_id, const QString &reason);
void createRoom(const mtx::requests::CreateRoom &req);
void joinRoom(const QString &room, const QString &reason = "");
void knockRoom(const QString &room, const QString &reason = "");
void knockRoom(const QString &room, QString reason = "") { knockRoom(room, {}, reason, false); }
void knockRoom(const QString &room,
const std::vector<std::string> &via,
QString reason = "",
bool failedJoin = false);
void joinRoomVia(const std::string &room_id,
const std::vector<std::string> &via,
bool promptForConfirmation = true,
Expand Down Expand Up @@ -161,6 +165,11 @@ public slots:
void downloadedSecrets(mtx::secret_storage::AesHmacSha2KeyDescription keyDesc,
const SecretsToDecrypt &secrets);

void internalKnock(const QString &room,
const std::vector<std::string> &via,
QString reason = "",
bool failedJoin = false);

private slots:
void logout();
void removeRoom(const QString &room_id);
Expand Down

0 comments on commit 6f8babc

Please sign in to comment.