From 3a4b531edf635468a56d94eb9fd264dafc6d8967 Mon Sep 17 00:00:00 2001 From: James Graham Date: Sat, 10 Feb 2024 14:51:57 +0000 Subject: [PATCH] Remember Space Save the last space entered so it can be recalled on startup --- src/qml/SpaceDrawer.qml | 9 ++++++++- src/roommanager.cpp | 11 +++++++++++ src/roommanager.h | 9 +++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/qml/SpaceDrawer.qml b/src/qml/SpaceDrawer.qml index bfa084280..be522718b 100644 --- a/src/qml/SpaceDrawer.qml +++ b/src/qml/SpaceDrawer.qml @@ -21,7 +21,14 @@ QQC2.Control { topPadding: 0 bottomPadding: 0 - property string selectedSpaceId + property string selectedSpaceId: RoomManager.lastSpaceId + Connections { + target: RoomManager + function onConnectionChanged() { + // We need to rebind as any previous change will have been overwritten. + selectedSpaceId = RoomManager.lastSpaceId + } + } property bool showDirectChats: false diff --git a/src/roommanager.cpp b/src/roommanager.cpp index 029bec00c..813525d41 100644 --- a/src/roommanager.cpp +++ b/src/roommanager.cpp @@ -35,6 +35,7 @@ RoomManager::RoomManager(QObject *parent) , m_mediaMessageFilterModel(new MediaMessageFilterModel(this, m_messageFilterModel)) { m_lastRoomConfig = m_config->group(QStringLiteral("LastOpenRoom")); + m_lastSpaceConfig = m_config->group(QStringLiteral("LastOpenSpace")); connect(this, &RoomManager::currentRoomChanged, this, [this]() { m_timelineModel->setRoom(m_currentRoom); @@ -172,6 +173,14 @@ void RoomManager::loadInitialRoom() connect(this, &RoomManager::connectionChanged, this, &RoomManager::openRoomForActiveConnection); } +QString RoomManager::lastSpaceId() +{ + if (!m_connection) { + return {}; + } + return m_lastSpaceConfig.readEntry(m_connection->userId(), QString()); +} + void RoomManager::openRoomForActiveConnection() { if (!m_connection) { @@ -248,6 +257,7 @@ void RoomManager::visitRoom(Room *room, const QString &eventId) Q_EMIT currentRoomChanged(); if (neoChatRoom->isSpace()) { + m_lastSpaceConfig.writeEntry(m_connection->userId(), room->id()); Q_EMIT replaceSpaceHome(neoChatRoom); } else { Q_EMIT replaceRoom(neoChatRoom, eventId); @@ -257,6 +267,7 @@ void RoomManager::visitRoom(Room *room, const QString &eventId) m_lastCurrentRoom = std::exchange(m_currentRoom, neoChatRoom); Q_EMIT currentRoomChanged(); if (neoChatRoom->isSpace()) { + m_lastSpaceConfig.writeEntry(m_connection->userId(), room->id()); Q_EMIT pushSpaceHome(neoChatRoom); } else { Q_EMIT pushRoom(neoChatRoom, eventId); diff --git a/src/roommanager.h b/src/roommanager.h index 3ade35567..67d82feb2 100644 --- a/src/roommanager.h +++ b/src/roommanager.h @@ -9,6 +9,7 @@ #include #include #include +#include #include "chatdocumenthandler.h" #include "enums/delegatetype.h" @@ -87,6 +88,11 @@ class RoomManager : public QObject, public UriResolverBase */ Q_PROPERTY(bool hasOpenRoom READ hasOpenRoom NOTIFY currentRoomChanged) + /** + * @brief The room ID of the last space entered. + */ + Q_PROPERTY(QString lastSpaceId READ lastSpaceId CONSTANT) + /** * @brief The ChatDocumentHandler for the open room. * @@ -200,6 +206,8 @@ public: */ void setUrlArgument(const QString &arg); + QString lastSpaceId(); + NeoChatConnection *connection() const; void setConnection(NeoChatConnection *connection); @@ -331,6 +339,7 @@ private: QString m_arg; KSharedConfig::Ptr m_config; KConfigGroup m_lastRoomConfig; + KConfigGroup m_lastSpaceConfig; QPointer m_chatDocumentHandler; TimelineModel *m_timelineModel;