File indexing completed on 2024-05-12 05:02:00

0001 /*
0002    SPDX-FileCopyrightText: 2023-2024 Laurent Montel <montel.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "localaccountdatabase.h"
0008 #include "config-ruqola.h"
0009 #include "localdatabaseutils.h"
0010 #include "ruqola_database_debug.h"
0011 #include <QSqlDatabase>
0012 #include <QSqlError>
0013 #include <QSqlQuery>
0014 #include <QSqlRecord>
0015 
0016 static const char s_schemaAccountDataBase[] = "CREATE TABLE ACCOUNT (accountName TEXT PRIMARY KEY NOT NULL, json TEXT)";
0017 enum class AccountFields {
0018     AccountName,
0019     TimeStamp,
0020     Json,
0021 }; // in the same order as the table
0022 
0023 LocalAccountDatabase::LocalAccountDatabase()
0024     : LocalDatabaseBase(LocalDatabaseUtils::localAccountDatabasePath(), LocalDatabaseBase::DatabaseType::Account)
0025 {
0026 }
0027 
0028 LocalAccountDatabase::~LocalAccountDatabase() = default;
0029 
0030 QString LocalAccountDatabase::schemaDataBase() const
0031 {
0032     return QString::fromLatin1(s_schemaAccountDataBase);
0033 }
0034 
0035 void LocalAccountDatabase::updateAccount(const QString &accountName, const QByteArray &ba)
0036 {
0037     QSqlDatabase db;
0038     if (initializeDataBase(accountName, db)) {
0039         QSqlQuery query(LocalDatabaseUtils::updateAccount(), db);
0040         query.addBindValue(accountName);
0041         query.addBindValue(ba);
0042         if (!query.exec()) {
0043             qCWarning(RUQOLA_DATABASE_LOG) << "Couldn't insert-or-replace in ACCOUNT table" << db.databaseName() << query.lastError();
0044         }
0045     }
0046 }
0047 
0048 void LocalAccountDatabase::deleteAccount(const QString &accountName)
0049 {
0050     QSqlDatabase db;
0051     if (!checkDataBase(accountName, db)) {
0052         return;
0053     }
0054     QSqlQuery query(LocalDatabaseUtils::deleteAccount(), db);
0055     query.addBindValue(accountName);
0056     if (!query.exec()) {
0057         qCWarning(RUQOLA_DATABASE_LOG) << "Couldn't insert-or-replace in ACCOUNT table" << db.databaseName() << query.lastError();
0058     }
0059 }
0060 
0061 QByteArray LocalAccountDatabase::jsonAccount(const QString &accountName)
0062 {
0063     QSqlDatabase db;
0064     if (!initializeDataBase(accountName, db)) {
0065         return {};
0066     }
0067     QSqlQuery query(QStringLiteral("SELECT json FROM ACCOUNT WHERE accountName = \"%1\"").arg(accountName), db);
0068     QByteArray value;
0069     // We have one element
0070     if (query.first()) {
0071         value = query.value(0).toByteArray();
0072     }
0073     return value;
0074 }