aboutsummaryrefslogtreecommitdiff
path: root/lib/accountregistry.cpp
diff options
context:
space:
mode:
authorTobias Fella <fella@posteo.de>2021-08-24 23:59:48 +0200
committerTobias Fella <fella@posteo.de>2021-08-26 18:16:07 +0200
commit8d21c8a6579ad9c63e331ffb42e3ed81b9c73caf (patch)
treef31b2f3e7217302e4dd37e288be6fa6d219401d1 /lib/accountregistry.cpp
parent6953e55361f600a591c08b9cd287a350230b3ef8 (diff)
downloadlibquotient-8d21c8a6579ad9c63e331ffb42e3ed81b9c73caf.tar.gz
libquotient-8d21c8a6579ad9c63e331ffb42e3ed81b9c73caf.zip
Add AccountRegistry
Basic session management class; Created from Quaternion's AccountRegistry and NeoChat's AccountListModel. The connections can be accessed by the user's id, this technically limits it to one connection for each matrix account.
Diffstat (limited to 'lib/accountregistry.cpp')
-rw-r--r--lib/accountregistry.cpp98
1 files changed, 98 insertions, 0 deletions
diff --git a/lib/accountregistry.cpp b/lib/accountregistry.cpp
new file mode 100644
index 00000000..3a022f14
--- /dev/null
+++ b/lib/accountregistry.cpp
@@ -0,0 +1,98 @@
+// SPDX-FileCopyrightText: Kitsune Ral <Kitsune-Ral@users.sf.net>
+// SPDX-FileCopyrightText: Tobias Fella <fella@posteo.de>
+// SPDX-License-Identifier: LGPL-2.1-or-later
+
+#include "accountregistry.h"
+
+#include "connection.h"
+
+using namespace Quotient;
+
+void AccountRegistry::add(Connection* c)
+{
+ if (m_accounts.contains(c))
+ return;
+ beginInsertRows(QModelIndex(), m_accounts.size(), m_accounts.size());
+ m_accounts += c;
+ endInsertRows();
+}
+
+void AccountRegistry::drop(Connection* c)
+{
+ beginRemoveRows(QModelIndex(), m_accounts.indexOf(c), m_accounts.indexOf(c));
+ m_accounts.removeOne(c);
+ endRemoveRows();
+ Q_ASSERT(!m_accounts.contains(c));
+}
+
+bool AccountRegistry::isLoggedIn(const QString &userId) const
+{
+ return std::any_of(m_accounts.cbegin(), m_accounts.cend(),
+ [&userId](Connection* a) { return a->userId() == userId; });
+}
+
+bool AccountRegistry::contains(Connection *c) const
+{
+ return m_accounts.contains(c);
+}
+
+AccountRegistry::AccountRegistry()
+{}
+
+QVariant AccountRegistry::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid()) {
+ return {};
+ }
+
+ if (index.row() >= m_accounts.count()) {
+ return {};
+ }
+
+ auto account = m_accounts[index.row()];
+
+ if (role == ConnectionRole) {
+ return QVariant::fromValue(account);
+ }
+
+ return {};
+}
+
+int AccountRegistry::rowCount(const QModelIndex &parent) const
+{
+ if (parent.isValid()) {
+ return 0;
+ }
+
+ return m_accounts.count();
+}
+
+QHash<int, QByteArray> AccountRegistry::roleNames() const
+{
+ return {{ConnectionRole, "connection"}};
+}
+
+bool AccountRegistry::isEmpty() const
+{
+ return m_accounts.isEmpty();
+}
+
+int AccountRegistry::count() const
+{
+ return m_accounts.count();
+}
+
+const QVector<Connection*> AccountRegistry::accounts() const
+{
+ return m_accounts;
+}
+
+Connection* AccountRegistry::get(const QString& userId)
+{
+ for (const auto &connection : m_accounts) {
+ if(connection->userId() == userId) {
+ return connection;
+ }
+ }
+ return nullptr;
+} \ No newline at end of file