1
Fork 0
mirror of https://github.com/redstrate/Astra.git synced 2025-04-21 04:07:46 +00:00
astra/launcher/src/accountmanager.cpp

130 lines
3.2 KiB
C++
Raw Normal View History

// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-3.0-or-later
#include "accountmanager.h"
#include "astra_log.h"
#include <KSharedConfig>
using namespace Qt::StringLiterals;
AccountManager::AccountManager(LauncherCore &launcher, QObject *parent)
: QAbstractListModel(parent)
, m_launcher(launcher)
{
}
void AccountManager::load()
{
auto config = KSharedConfig::openStateConfig();
for (const auto &id : config->groupList()) {
if (id.contains("account-"_L1)) {
const QString uuid = QString(id).remove("account-"_L1);
qInfo(ASTRA_LOG) << "Loading account" << uuid;
auto account = new Account(m_launcher, uuid, this);
2023-07-30 10:11:14 -04:00
m_accounts.append(account);
Q_EMIT accountsChanged();
}
}
}
int AccountManager::rowCount(const QModelIndex &index) const
{
Q_UNUSED(index)
2023-09-17 09:02:11 -04:00
return static_cast<int>(m_accounts.size());
}
QVariant AccountManager::data(const QModelIndex &index, int role) const
{
if (!checkIndex(index)) {
return {};
}
const int row = index.row();
if (role == AccountRole) {
return QVariant::fromValue(m_accounts[row]);
}
return {};
}
QHash<int, QByteArray> AccountManager::roleNames() const
{
return {{AccountRole, QByteArrayLiteral("account")}};
}
Account *AccountManager::createSquareEnixAccount(const QString &username, int licenseType, bool isFreeTrial)
{
auto account = new Account(m_launcher, QUuid::createUuid().toString(), this);
account->setIsSapphire(false);
account->setLicense(static_cast<Account::GameLicense>(licenseType));
account->setIsFreeTrial(isFreeTrial);
account->setName(username);
insertAccount(account);
return account;
}
Account *AccountManager::createSapphireAccount(const QString &lobbyUrl, const QString &username)
{
auto account = new Account(m_launcher, QUuid::createUuid().toString(), this);
account->setIsSapphire(true);
account->setName(username);
account->setLobbyUrl(lobbyUrl);
insertAccount(account);
return account;
}
Account *AccountManager::getByUuid(const QString &uuid) const
{
2023-09-16 21:23:58 -04:00
for (const auto &account : m_accounts) {
if (account->uuid() == uuid) {
return account;
}
}
return nullptr;
}
bool AccountManager::canDelete(Account *account) const
{
Q_UNUSED(account)
return m_accounts.size() != 1;
}
void AccountManager::deleteAccount(Account *account)
{
auto config = KSharedConfig::openStateConfig();
2023-09-16 21:23:58 -04:00
config->deleteGroup(QStringLiteral("account-%1").arg(account->uuid()));
config->sync();
2023-09-17 09:02:11 -04:00
const int row = static_cast<int>(m_accounts.indexOf(account));
beginRemoveRows(QModelIndex(), row, row);
m_accounts.removeAll(account);
endRemoveRows();
Q_EMIT accountsChanged();
}
void AccountManager::insertAccount(Account *account)
{
2023-09-17 09:02:11 -04:00
beginInsertRows(QModelIndex(), static_cast<int>(m_accounts.size()), static_cast<int>(m_accounts.size()));
m_accounts.append(account);
endInsertRows();
Q_EMIT accountsChanged();
}
bool AccountManager::hasAnyAccounts() const
{
return !m_accounts.empty();
}
int AccountManager::numAccounts() const
{
2023-12-17 13:38:23 -05:00
return static_cast<int>(m_accounts.count());
}
#include "moc_accountmanager.cpp"