File indexing completed on 2025-03-16 13:27:30
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 }