Move Controller::createRoom and Controller::createSpace to NeoChatConnection

This commit is contained in:
Tobias Fella
2023-09-05 16:05:11 +02:00
committed by James Graham
parent ff0990bb7c
commit f7d2ffac66
10 changed files with 52 additions and 48 deletions

View File

@@ -371,36 +371,6 @@ void Controller::saveWindowGeometry()
WindowController::instance().saveGeometry();
}
void Controller::createRoom(const QString &name, const QString &topic)
{
auto createRoomJob = m_connection->createRoom(Connection::PublishRoom, QString(), name, topic, QStringList());
connect(createRoomJob, &CreateRoomJob::failure, this, [this, createRoomJob] {
Q_EMIT errorOccured(i18n("Room creation failed: %1", createRoomJob->errorString()));
});
connectSingleShot(this, &Controller::roomAdded, &RoomManager::instance(), &RoomManager::enterRoom, Qt::QueuedConnection);
}
void Controller::createSpace(const QString &name, const QString &topic)
{
auto createRoomJob = m_connection->createRoom(Connection::UnpublishRoom,
{},
name,
topic,
QStringList(),
{},
{},
false,
{},
{},
QJsonObject{
{"type"_ls, "m.space"_ls},
});
connect(createRoomJob, &CreateRoomJob::failure, this, [this, createRoomJob] {
Q_EMIT errorOccured(i18n("Space creation failed: %1", createRoomJob->errorString()));
});
connectSingleShot(this, &Controller::roomAdded, &RoomManager::instance(), &RoomManager::enterRoom, Qt::QueuedConnection);
}
bool Controller::isOnline() const
{
return m_isOnline;

View File

@@ -113,16 +113,6 @@ public:
*/
bool saveAccessTokenToKeyChain(const Quotient::AccountSettings &account, const QByteArray &accessToken);
/**
* @brief Create new room for a group chat.
*/
Q_INVOKABLE void createRoom(const QString &name, const QString &topic);
/**
* @brief Create new space.
*/
Q_INVOKABLE void createSpace(const QString &name, const QString &topic);
/**
* @brief Join a room.
*/
@@ -216,7 +206,6 @@ Q_SIGNALS:
void userConsentRequired(QUrl url);
void isOnlineChanged(bool isOnline);
void activeConnectionIndexChanged();
void roomAdded(NeoChatRoom *room);
public Q_SLOTS:
void saveWindowGeometry();

View File

@@ -144,7 +144,6 @@ void RoomListModel::doAddRoom(Room *r)
m_rooms.append(room);
connectRoomSignals(room);
Q_EMIT roomAdded(room);
Q_EMIT Controller::instance().roomAdded(room);
} else {
qCritical() << "Attempt to add nullptr to the room list";
Q_ASSERT(false);

View File

@@ -8,6 +8,7 @@
#include "controller.h"
#include "jobs/neochatchangepasswordjob.h"
#include "jobs/neochatdeactivateaccountjob.h"
#include "roommanager.h"
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#include <qt5keychain/keychain.h>
@@ -15,8 +16,11 @@
#include <qt6keychain/keychain.h>
#endif
#include <KLocalizedString>
#include <Quotient/csapi/content-repo.h>
#include <Quotient/csapi/profile.h>
#include <Quotient/qt_connection_util.h>
#include <Quotient/settings.h>
#include <Quotient/user.h>
@@ -156,4 +160,26 @@ void NeoChatConnection::deactivateAccount(const QString &password)
});
}
void NeoChatConnection::createRoom(const QString &name, const QString &topic)
{
const auto job = Connection::createRoom(Connection::PublishRoom, {}, name, topic, {});
connect(job, &CreateRoomJob::failure, this, [this, job] {
Q_EMIT Controller::instance().errorOccured(i18n("Room creation failed: %1", job->errorString()));
});
connectSingleShot(this, &Connection::newRoom, this, [](Room *room) {
RoomManager::instance().enterRoom(dynamic_cast<NeoChatRoom *>(room));
});
}
void NeoChatConnection::createSpace(const QString &name, const QString &topic)
{
const auto job = Connection::createRoom(Connection::UnpublishRoom, {}, name, topic, {}, {}, {}, false, {}, {}, QJsonObject{{"type"_ls, "m.space"_ls}});
connect(job, &CreateRoomJob::failure, this, [this, job] {
Q_EMIT Controller::instance().errorOccured(i18n("Space creation failed: %1", job->errorString()));
});
connectSingleShot(this, &Connection::newRoom, this, [](Room *room) {
RoomManager::instance().enterRoom(dynamic_cast<NeoChatRoom *>(room));
});
}
#include "moc_neochatconnection.cpp"

View File

@@ -48,6 +48,16 @@ public:
Q_INVOKABLE void deactivateAccount(const QString &password);
/**
* @brief Create new room for a group chat.
*/
Q_INVOKABLE void createRoom(const QString &name, const QString &topic);
/**
* @brief Create new space.
*/
Q_INVOKABLE void createSpace(const QString &name, const QString &topic);
Q_SIGNALS:
void labelChanged();
};

View File

@@ -12,6 +12,8 @@ FormCard.FormCardPage {
title: i18nc("@title", "Create a Room")
required property NeoChatConnection connection
Component.onCompleted: roomNameField.forceActiveFocus()
FormCard.FormHeader {
@@ -35,7 +37,7 @@ FormCard.FormCardPage {
text: i18nc("@action:button", "Ok")
enabled: roomNameField.text.length > 0
onClicked: {
Controller.createRoom(roomNameField.text, roomTopicField.text);
root.connection.createRoom(roomNameField.text, roomTopicField.text);
root.closeDialog()
}
}

View File

@@ -11,6 +11,8 @@ import org.kde.kirigamiaddons.formcard 1.0 as FormCard
FormCard.FormCardPage {
id: root
required property NeoChatConnection connection
title: i18n("Create a Space")
Kirigami.Theme.colorSet: Kirigami.Theme.Window
@@ -30,7 +32,7 @@ FormCard.FormCardPage {
FormCard.FormButtonDelegate {
text: i18n("Create space")
onClicked: {
Controller.createSpace(nameDelegate.text, topicDelegate.text)
root.connection.createSpace(nameDelegate.text, topicDelegate.text)
root.close()
root.destroy()
}

View File

@@ -14,6 +14,7 @@ RowLayout {
property var desiredWidth
property bool collapsed: false
required property NeoChatConnection connection
property Kirigami.Action exploreAction: Kirigami.Action {
text: i18n("Explore rooms")
@@ -38,7 +39,7 @@ RowLayout {
text: i18n("Create a Room")
icon.name: "system-users"
onTriggered: {
pageStack.pushDialogLayer("qrc:/CreateRoomDialog.qml", {}, {title: i18nc("@title", "Create a Room")})
pageStack.pushDialogLayer("qrc:/CreateRoomDialog.qml", {connection: root.connection}, {title: i18nc("@title", "Create a Room")})
}
shortcut: StandardKey.New
}
@@ -46,7 +47,7 @@ RowLayout {
text: i18n("Create a Space")
icon.name: "list-add"
onTriggered: {
pageStack.pushDialogLayer("qrc:/CreateSpaceDialog.qml", {}, {title: i18nc("@title", "Create a Space")})
pageStack.pushDialogLayer("qrc:/CreateSpaceDialog.qml", {connection: root.connection}, {title: i18nc("@title", "Create a Space")})
}
}

View File

@@ -89,6 +89,7 @@ Kirigami.Page {
Layout.fillWidth: true
desiredWidth: root.width - Kirigami.Units.largeSpacing
collapsed: root.collapsed
connection: root.connection
}
padding: 0

View File

@@ -320,12 +320,16 @@ Kirigami.ApplicationWindow {
Component {
id: createRoomDialog
CreateRoomDialog {}
CreateRoomDialog {
connection: Controller.activeConnection
}
}
Component {
id: createSpaceDialog
CreateSpaceDialog {}
CreateSpaceDialog {
connection: Controller.activeConnection
}
}
Component {