// SPDX-FileCopyrightText: Kitsune Ral // SPDX-FileCopyrightText: Tobias Fella // 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 AccountRegistry::roleNames() const { return {{ConnectionRole, "connection"}}; } bool AccountRegistry::isEmpty() const { return m_accounts.isEmpty(); } int AccountRegistry::count() const { return m_accounts.count(); } const QVector 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; }