SQL refactoring.
This commit is contained in:
parent
4d19853255
commit
eabb9727cb
@ -19,6 +19,11 @@
|
||||
|
||||
#include "services/abstract/category.h"
|
||||
#include "services/abstract/feed.h"
|
||||
#include "services/owncloud/owncloudserviceroot.h"
|
||||
#include "services/owncloud/owncloudcategory.h"
|
||||
#include "services/owncloud/owncloudfeed.h"
|
||||
#include "services/owncloud/network/owncloudnetworkfactory.h"
|
||||
#include "miscellaneous/textfactory.h"
|
||||
#include "miscellaneous/application.h"
|
||||
#include "miscellaneous/iconfactory.h"
|
||||
|
||||
@ -52,15 +57,15 @@ bool DatabaseQueries::markMessageImportant(QSqlDatabase db, int id, RootItem::Im
|
||||
}
|
||||
|
||||
bool DatabaseQueries::markFeedsReadUnread(QSqlDatabase db, const QStringList &ids, int account_id, RootItem::ReadStatus read) {
|
||||
QSqlQuery query_read_msg(db);
|
||||
query_read_msg.setForwardOnly(true);
|
||||
query_read_msg.prepare(QString("UPDATE Messages SET is_read = :read "
|
||||
QSqlQuery q(db);
|
||||
q.setForwardOnly(true);
|
||||
q.prepare(QString("UPDATE Messages SET is_read = :read "
|
||||
"WHERE feed IN (%1) AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;").arg(ids.join(QSL(", "))));
|
||||
|
||||
query_read_msg.bindValue(QSL(":read"), read == RootItem::Read ? 1 : 0);
|
||||
query_read_msg.bindValue(QSL(":account_id"), account_id);
|
||||
q.bindValue(QSL(":read"), read == RootItem::Read ? 1 : 0);
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
return query_read_msg.exec();
|
||||
return q.exec();
|
||||
}
|
||||
|
||||
bool DatabaseQueries::markBinReadUnread(QSqlDatabase db, int account_id, RootItem::ReadStatus read) {
|
||||
@ -142,7 +147,7 @@ bool DatabaseQueries::purgeReadMessages(QSqlDatabase db) {
|
||||
}
|
||||
|
||||
bool DatabaseQueries::purgeOldMessages(QSqlDatabase db, int older_than_days) {
|
||||
QSqlQuery q = QSqlQuery(db);
|
||||
QSqlQuery q(db);
|
||||
const qint64 since_epoch = QDateTime::currentDateTimeUtc().addDays(-older_than_days).toMSecsSinceEpoch();
|
||||
|
||||
q.setForwardOnly(true);
|
||||
@ -156,16 +161,16 @@ bool DatabaseQueries::purgeOldMessages(QSqlDatabase db, int older_than_days) {
|
||||
}
|
||||
|
||||
bool DatabaseQueries::purgeRecycleBin(QSqlDatabase db) {
|
||||
QSqlQuery query = QSqlQuery(db);
|
||||
QSqlQuery q(db);
|
||||
|
||||
query.setForwardOnly(true);
|
||||
query.prepare(QSL("DELETE FROM Messages WHERE is_important = :is_important AND is_deleted = :is_deleted;"));
|
||||
query.bindValue(QSL(":is_deleted"), 1);
|
||||
q.setForwardOnly(true);
|
||||
q.prepare(QSL("DELETE FROM Messages WHERE is_important = :is_important AND is_deleted = :is_deleted;"));
|
||||
q.bindValue(QSL(":is_deleted"), 1);
|
||||
|
||||
// Remove only messages which are NOT starred.
|
||||
query.bindValue(QSL(":is_important"), 0);
|
||||
q.bindValue(QSL(":is_important"), 0);
|
||||
|
||||
return query.exec();
|
||||
return q.exec();
|
||||
}
|
||||
|
||||
QMap<int,int> DatabaseQueries::getMessageCountsForCategory(QSqlDatabase db, int custom_id, int account_id,
|
||||
@ -211,27 +216,27 @@ QMap<int,int> DatabaseQueries::getMessageCountsForCategory(QSqlDatabase db, int
|
||||
|
||||
int DatabaseQueries::getMessageCountsForFeed(QSqlDatabase db, int feed_custom_id,
|
||||
int account_id, bool including_total_counts, bool *ok) {
|
||||
QSqlQuery query_all(db);
|
||||
query_all.setForwardOnly(true);
|
||||
QSqlQuery q(db);
|
||||
q.setForwardOnly(true);
|
||||
|
||||
if (including_total_counts) {
|
||||
query_all.prepare("SELECT count(*) FROM Messages "
|
||||
q.prepare("SELECT count(*) FROM Messages "
|
||||
"WHERE feed = :feed AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;");
|
||||
}
|
||||
else {
|
||||
query_all.prepare("SELECT count(*) FROM Messages "
|
||||
q.prepare("SELECT count(*) FROM Messages "
|
||||
"WHERE feed = :feed AND is_deleted = 0 AND is_pdeleted = 0 AND is_read = 0 AND account_id = :account_id;");
|
||||
}
|
||||
|
||||
query_all.bindValue(QSL(":feed"), feed_custom_id);
|
||||
query_all.bindValue(QSL(":account_id"), account_id);
|
||||
q.bindValue(QSL(":feed"), feed_custom_id);
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
if (query_all.exec() && query_all.next()) {
|
||||
if (q.exec() && q.next()) {
|
||||
if (ok != NULL) {
|
||||
*ok = true;
|
||||
}
|
||||
|
||||
return query_all.value(0).toInt();
|
||||
return q.value(0).toInt();
|
||||
}
|
||||
else {
|
||||
if (ok != NULL) {
|
||||
@ -243,26 +248,26 @@ int DatabaseQueries::getMessageCountsForFeed(QSqlDatabase db, int feed_custom_id
|
||||
}
|
||||
|
||||
int DatabaseQueries::getMessageCountsForBin(QSqlDatabase db, int account_id, bool including_total_counts, bool *ok) {
|
||||
QSqlQuery query_all(db);
|
||||
query_all.setForwardOnly(true);
|
||||
QSqlQuery q(db);
|
||||
q.setForwardOnly(true);
|
||||
|
||||
if (including_total_counts) {
|
||||
query_all.prepare("SELECT count(*) FROM Messages "
|
||||
q.prepare("SELECT count(*) FROM Messages "
|
||||
"WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;");
|
||||
}
|
||||
else {
|
||||
query_all.prepare("SELECT count(*) FROM Messages "
|
||||
q.prepare("SELECT count(*) FROM Messages "
|
||||
"WHERE is_read = 0 AND is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;");
|
||||
}
|
||||
|
||||
query_all.bindValue(QSL(":account_id"), account_id);
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
if (query_all.exec() && query_all.next()) {
|
||||
if (q.exec() && q.next()) {
|
||||
if (ok != NULL) {
|
||||
*ok = true;
|
||||
}
|
||||
|
||||
return query_all.value(0).toInt();
|
||||
return q.value(0).toInt();
|
||||
}
|
||||
else {
|
||||
if (ok != NULL) {
|
||||
@ -560,20 +565,20 @@ int DatabaseQueries::updateMessages(QSqlDatabase db,
|
||||
}
|
||||
|
||||
bool DatabaseQueries::cleanMessagesFromBin(QSqlDatabase db, bool clear_only_read, int account_id) {
|
||||
QSqlQuery query_empty_bin(db);
|
||||
query_empty_bin.setForwardOnly(true);
|
||||
QSqlQuery q(db);
|
||||
q.setForwardOnly(true);
|
||||
|
||||
if (clear_only_read) {
|
||||
query_empty_bin.prepare("UPDATE Messages SET is_pdeleted = 1 "
|
||||
q.prepare("UPDATE Messages SET is_pdeleted = 1 "
|
||||
"WHERE is_read = 1 AND is_deleted = 1 AND account_id = :account_id;");
|
||||
}
|
||||
else {
|
||||
query_empty_bin.prepare(QSL("UPDATE Messages SET is_pdeleted = 1 WHERE is_deleted = 1 AND account_id = :account_id;"));
|
||||
q.prepare(QSL("UPDATE Messages SET is_pdeleted = 1 WHERE is_deleted = 1 AND account_id = :account_id;"));
|
||||
}
|
||||
|
||||
query_empty_bin.bindValue(QSL(":account_id"), account_id);
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
return query_empty_bin.exec();
|
||||
return q.exec();
|
||||
}
|
||||
|
||||
bool DatabaseQueries::deleteAccount(QSqlDatabase db, int account_id) {
|
||||
@ -604,25 +609,25 @@ bool DatabaseQueries::deleteAccount(QSqlDatabase db, int account_id) {
|
||||
|
||||
bool DatabaseQueries::deleteAccountData(QSqlDatabase db, int account_id, bool delete_messages_too) {
|
||||
bool result = true;
|
||||
QSqlQuery query(db);
|
||||
query.setForwardOnly(true);
|
||||
QSqlQuery q(db);
|
||||
q.setForwardOnly(true);
|
||||
|
||||
if (delete_messages_too) {
|
||||
query.prepare(QSL("DELETE FROM Messages WHERE account_id = :account_id;"));
|
||||
query.bindValue(QSL(":account_id"), account_id);
|
||||
q.prepare(QSL("DELETE FROM Messages WHERE account_id = :account_id;"));
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
result &= query.exec();
|
||||
result &= q.exec();
|
||||
}
|
||||
|
||||
query.prepare(QSL("DELETE FROM Feeds WHERE account_id = :account_id;"));
|
||||
query.bindValue(QSL(":account_id"), account_id);
|
||||
q.prepare(QSL("DELETE FROM Feeds WHERE account_id = :account_id;"));
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
result &= query.exec();
|
||||
result &= q.exec();
|
||||
|
||||
query.prepare(QSL("DELETE FROM Categories WHERE account_id = :account_id;"));
|
||||
query.bindValue(QSL(":account_id"), account_id);
|
||||
q.prepare(QSL("DELETE FROM Categories WHERE account_id = :account_id;"));
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
result &= query.exec();
|
||||
result &= q.exec();
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -720,68 +725,255 @@ bool DatabaseQueries::storeAccountTree(QSqlDatabase db, RootItem *tree_root, int
|
||||
}
|
||||
|
||||
QStringList DatabaseQueries::customIdsOfMessagesFromAccount(QSqlDatabase db, int account_id, bool *ok) {
|
||||
QSqlQuery query(db);
|
||||
QSqlQuery q(db);
|
||||
QStringList ids;
|
||||
query.setForwardOnly(true);
|
||||
query.prepare(QSL("SELECT custom_id FROM Messages WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;"));
|
||||
query.bindValue(QSL(":account_id"), account_id);
|
||||
q.setForwardOnly(true);
|
||||
q.prepare(QSL("SELECT custom_id FROM Messages WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;"));
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
if (ok != NULL) {
|
||||
*ok = query.exec();
|
||||
*ok = q.exec();
|
||||
}
|
||||
else {
|
||||
query.exec();
|
||||
q.exec();
|
||||
}
|
||||
|
||||
while (query.next()) {
|
||||
ids.append(query.value(0).toString());
|
||||
while (q.next()) {
|
||||
ids.append(q.value(0).toString());
|
||||
}
|
||||
|
||||
return ids;
|
||||
}
|
||||
|
||||
QStringList DatabaseQueries::customIdsOfMessagesFromBin(QSqlDatabase db, int account_id, bool *ok) {
|
||||
QSqlQuery query(db);
|
||||
QSqlQuery q(db);
|
||||
QStringList ids;
|
||||
query.setForwardOnly(true);
|
||||
query.prepare(QSL("SELECT custom_id FROM Messages WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;"));
|
||||
query.bindValue(QSL(":account_id"), account_id);
|
||||
q.setForwardOnly(true);
|
||||
q.prepare(QSL("SELECT custom_id FROM Messages WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;"));
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
if (ok != NULL) {
|
||||
*ok = query.exec();
|
||||
*ok = q.exec();
|
||||
}
|
||||
else {
|
||||
query.exec();
|
||||
q.exec();
|
||||
}
|
||||
|
||||
while (query.next()) {
|
||||
ids.append(query.value(0).toString());
|
||||
while (q.next()) {
|
||||
ids.append(q.value(0).toString());
|
||||
}
|
||||
|
||||
return ids;
|
||||
}
|
||||
|
||||
QStringList DatabaseQueries::customIdsOfMessagesFromFeed(QSqlDatabase db, int feed_custom_id, int account_id, bool *ok) {
|
||||
QSqlQuery query(db);
|
||||
QSqlQuery q(db);
|
||||
QStringList ids;
|
||||
query.setForwardOnly(true);
|
||||
query.prepare(QSL("SELECT custom_id FROM Messages WHERE is_deleted = 0 AND is_pdeleted = 0 AND feed = :feed AND account_id = :account_id;"));
|
||||
query.bindValue(QSL(":account_id"), account_id);
|
||||
query.bindValue(QSL(":feed"), feed_custom_id);
|
||||
q.setForwardOnly(true);
|
||||
q.prepare(QSL("SELECT custom_id FROM Messages WHERE is_deleted = 0 AND is_pdeleted = 0 AND feed = :feed AND account_id = :account_id;"));
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
q.bindValue(QSL(":feed"), feed_custom_id);
|
||||
|
||||
if (ok != NULL) {
|
||||
*ok = query.exec();
|
||||
*ok = q.exec();
|
||||
}
|
||||
else {
|
||||
query.exec();
|
||||
q.exec();
|
||||
}
|
||||
|
||||
while (query.next()) {
|
||||
ids.append(query.value(0).toString());
|
||||
while (q.next()) {
|
||||
ids.append(q.value(0).toString());
|
||||
}
|
||||
|
||||
return ids;
|
||||
}
|
||||
|
||||
QList<ServiceRoot*> DatabaseQueries::getOwnCloudAccounts(QSqlDatabase db, bool *ok) {
|
||||
QSqlQuery query(db);
|
||||
QList<ServiceRoot*> roots;
|
||||
|
||||
if (query.exec("SELECT * FROM OwnCloudAccounts;")) {
|
||||
while (query.next()) {
|
||||
OwnCloudServiceRoot *root = new OwnCloudServiceRoot();
|
||||
root->setId(query.value(0).toInt());
|
||||
root->setAccountId(query.value(0).toInt());
|
||||
root->network()->setAuthUsername(query.value(1).toString());
|
||||
root->network()->setAuthPassword(TextFactory::decrypt(query.value(2).toString()));
|
||||
root->network()->setUrl(query.value(3).toString());
|
||||
root->network()->setForceServerSideUpdate(query.value(4).toBool());
|
||||
|
||||
root->updateTitle();
|
||||
roots.append(root);
|
||||
}
|
||||
|
||||
if (ok != NULL) {
|
||||
*ok = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
qWarning("OwnCloud: Getting list of activated accounts failed: '%s'.", qPrintable(query.lastError().text()));
|
||||
|
||||
if (ok != NULL) {
|
||||
*ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
return roots;
|
||||
}
|
||||
|
||||
bool DatabaseQueries::deleteOwnCloudAccount(QSqlDatabase db, int account_id) {
|
||||
QSqlQuery q(db);
|
||||
|
||||
q.setForwardOnly(true);
|
||||
q.prepare(QSL("DELETE FROM OwnCloudAccounts WHERE id = :id;"));
|
||||
q.bindValue(QSL(":id"), account_id);
|
||||
|
||||
return q.exec();
|
||||
}
|
||||
|
||||
bool DatabaseQueries::overwriteOwnCloudAccount(QSqlDatabase db, const QString &username, const QString &password,
|
||||
const QString &url, bool force_server_side_feed_update, int account_id) {
|
||||
QSqlQuery query(db);
|
||||
|
||||
query.prepare("UPDATE OwnCloudAccounts "
|
||||
"SET username = :username, password = :password, url = :url, force_update = :force_update "
|
||||
"WHERE id = :id;");
|
||||
query.bindValue(QSL(":username"), username);
|
||||
query.bindValue(QSL(":password"), TextFactory::encrypt(password));
|
||||
query.bindValue(QSL(":url"), url);
|
||||
query.bindValue(QSL(":force_update"), force_server_side_feed_update ? 1 : 0);
|
||||
query.bindValue(QSL(":id"), account_id);
|
||||
|
||||
if (query.exec()) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
qWarning("ownCloud: Updating account failed: '%s'.", qPrintable(query.lastError().text()));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool DatabaseQueries::createOwnCloudAccount(QSqlDatabase db, int id_to_assign, const QString &username,
|
||||
const QString &password, const QString &url,
|
||||
bool force_server_side_feed_update) {
|
||||
QSqlQuery q(db);
|
||||
|
||||
q.prepare("INSERT INTO OwnCloudAccounts (id, username, password, url, force_update) "
|
||||
"VALUES (:id, :username, :password, :url, :force_update);");
|
||||
q.bindValue(QSL(":id"), id_to_assign);
|
||||
q.bindValue(QSL(":username"), username);
|
||||
q.bindValue(QSL(":password"), TextFactory::encrypt(password));
|
||||
q.bindValue(QSL(":url"), url);
|
||||
q.bindValue(QSL(":force_update"), force_server_side_feed_update ? 1 : 0);
|
||||
|
||||
if (q.exec()) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
qWarning("ownCloud: Inserting of new account failed: '%s'.", qPrintable(q.lastError().text()));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int DatabaseQueries::createAccount(QSqlDatabase db, const QString &code, bool *ok) {
|
||||
QSqlQuery q(db);
|
||||
|
||||
// First obtain the ID, which can be assigned to this new account.
|
||||
if (!q.exec("SELECT max(id) FROM Accounts;") || !q.next()) {
|
||||
qWarning("Getting max ID from Accounts table failed: '%s'.", qPrintable(q.lastError().text()));
|
||||
|
||||
if (ok != NULL) {
|
||||
*ok = false;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int id_to_assign = q.value(0).toInt() + 1;
|
||||
|
||||
q.prepare(QSL("INSERT INTO Accounts (id, type) VALUES (:id, :type);"));
|
||||
q.bindValue(QSL(":id"), id_to_assign);
|
||||
q.bindValue(QSL(":type"), code);
|
||||
|
||||
if (q.exec()) {
|
||||
if (ok != NULL) {
|
||||
*ok = true;
|
||||
}
|
||||
|
||||
return id_to_assign;
|
||||
}
|
||||
else {
|
||||
if (ok != NULL) {
|
||||
*ok = false;
|
||||
}
|
||||
|
||||
qWarning("Inserting of new account failed: '%s'.", qPrintable(q.lastError().text()));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
Assignment DatabaseQueries::getOwnCloudCategories(QSqlDatabase db, int account_id, bool *ok) {
|
||||
Assignment categories;
|
||||
|
||||
// Obtain data for categories from the database.
|
||||
QSqlQuery q(db);
|
||||
q.setForwardOnly(true);
|
||||
q.prepare(QSL("SELECT * FROM Categories WHERE account_id = :account_id;"));
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
if (!q.exec()) {
|
||||
qFatal("ownCloud: Query for obtaining categories failed. Error message: '%s'.", qPrintable(q.lastError().text()));
|
||||
|
||||
if (ok != NULL) {
|
||||
*ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
while (q.next()) {
|
||||
AssignmentItem pair;
|
||||
pair.first = q.value(CAT_DB_PARENT_ID_INDEX).toInt();
|
||||
pair.second = new OwnCloudCategory(q.record());
|
||||
|
||||
categories << pair;
|
||||
}
|
||||
|
||||
if (ok != NULL) {
|
||||
*ok = true;
|
||||
}
|
||||
|
||||
return categories;
|
||||
}
|
||||
|
||||
Assignment DatabaseQueries::getOwnCloudFeeds(QSqlDatabase db, int account_id, bool *ok) {
|
||||
Assignment feeds;
|
||||
|
||||
QSqlQuery q(db);
|
||||
q.setForwardOnly(true);
|
||||
q.prepare(QSL("SELECT * FROM Feeds WHERE account_id = :account_id;"));
|
||||
q.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
if (!q.exec()) {
|
||||
qFatal("ownCloud: Query for obtaining feeds failed. Error message: '%s'.", qPrintable(q.lastError().text()));
|
||||
|
||||
if (ok != NULL) {
|
||||
*ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
while (q.next()) {
|
||||
AssignmentItem pair;
|
||||
pair.first = q.value(FDS_DB_CATEGORY_INDEX).toInt();
|
||||
pair.second = new OwnCloudFeed(q.record());
|
||||
|
||||
feeds << pair;
|
||||
}
|
||||
|
||||
if (ok != NULL) {
|
||||
*ok = true;
|
||||
}
|
||||
|
||||
return feeds;
|
||||
}
|
||||
|
||||
DatabaseQueries::DatabaseQueries() {
|
||||
}
|
||||
|
@ -20,6 +20,8 @@
|
||||
|
||||
#include "services/abstract/rootitem.h"
|
||||
|
||||
#include "services/abstract/serviceroot.h"
|
||||
|
||||
#include <QSqlQuery>
|
||||
|
||||
|
||||
@ -57,6 +59,15 @@ class DatabaseQueries {
|
||||
static QStringList customIdsOfMessagesFromAccount(QSqlDatabase db, int account_id, bool *ok = NULL);
|
||||
static QStringList customIdsOfMessagesFromBin(QSqlDatabase db, int account_id, bool *ok = NULL);
|
||||
static QStringList customIdsOfMessagesFromFeed(QSqlDatabase db, int feed_custom_id, int account_id, bool *ok = NULL);
|
||||
static QList<ServiceRoot*> getOwnCloudAccounts(QSqlDatabase db, bool *ok = NULL);
|
||||
static bool deleteOwnCloudAccount(QSqlDatabase db, int account_id);
|
||||
static bool overwriteOwnCloudAccount(QSqlDatabase db, const QString &username, const QString &password,
|
||||
const QString &url, bool force_server_side_feed_update, int account_id);
|
||||
static bool createOwnCloudAccount(QSqlDatabase db, int id_to_assign, const QString &username, const QString &password,
|
||||
const QString &url, bool force_server_side_feed_update);
|
||||
static int createAccount(QSqlDatabase db, const QString &code, bool *ok = NULL);
|
||||
static Assignment getOwnCloudCategories(QSqlDatabase db, int account_id, bool *ok = NULL);
|
||||
static Assignment getOwnCloudFeeds(QSqlDatabase db, int account_id, bool *ok = NULL);
|
||||
|
||||
private:
|
||||
explicit DatabaseQueries();
|
||||
|
@ -20,15 +20,11 @@
|
||||
#include "definitions/definitions.h"
|
||||
#include "miscellaneous/application.h"
|
||||
#include "miscellaneous/iconfactory.h"
|
||||
#include "miscellaneous/databasequeries.h"
|
||||
#include "services/owncloud/definitions.h"
|
||||
#include "services/owncloud/owncloudserviceroot.h"
|
||||
#include "services/owncloud/network/owncloudnetworkfactory.h"
|
||||
#include "services/owncloud/gui/formeditowncloudaccount.h"
|
||||
#include "gui/dialogs/formmain.h"
|
||||
#include "miscellaneous/textfactory.h"
|
||||
|
||||
#include <QSqlQuery>
|
||||
#include <QSqlError>
|
||||
|
||||
|
||||
OwnCloudServiceEntryPoint::OwnCloudServiceEntryPoint() {
|
||||
@ -45,28 +41,8 @@ ServiceRoot *OwnCloudServiceEntryPoint::createNewRoot() const {
|
||||
QList<ServiceRoot*> OwnCloudServiceEntryPoint::initializeSubtree() const {
|
||||
// Check DB if standard account is enabled.
|
||||
QSqlDatabase database = qApp->database()->connection(QSL("OwnCloudServiceEntryPoint"), DatabaseFactory::FromSettings);
|
||||
QSqlQuery query(database);
|
||||
QList<ServiceRoot*> roots;
|
||||
|
||||
if (query.exec("SELECT * FROM OwnCloudAccounts;")) {
|
||||
while (query.next()) {
|
||||
OwnCloudServiceRoot *root = new OwnCloudServiceRoot();
|
||||
root->setId(query.value(0).toInt());
|
||||
root->setAccountId(query.value(0).toInt());
|
||||
root->network()->setAuthUsername(query.value(1).toString());
|
||||
root->network()->setAuthPassword(TextFactory::decrypt(query.value(2).toString()));
|
||||
root->network()->setUrl(query.value(3).toString());
|
||||
root->network()->setForceServerSideUpdate(query.value(4).toBool());
|
||||
|
||||
root->updateTitle();
|
||||
roots.append(root);
|
||||
}
|
||||
}
|
||||
else {
|
||||
qWarning("OwnCloud: Getting list of activated accounts failed: '%s'.", qPrintable(query.lastError().text()));
|
||||
}
|
||||
|
||||
return roots;
|
||||
return DatabaseQueries::getOwnCloudAccounts(database);
|
||||
}
|
||||
|
||||
bool OwnCloudServiceEntryPoint::isSingleInstanceService() const {
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include "services/owncloud/owncloudserviceroot.h"
|
||||
|
||||
#include "definitions/definitions.h"
|
||||
#include "miscellaneous/databasefactory.h"
|
||||
#include "miscellaneous/databasequeries.h"
|
||||
#include "miscellaneous/application.h"
|
||||
#include "miscellaneous/textfactory.h"
|
||||
#include "miscellaneous/iconfactory.h"
|
||||
@ -30,9 +30,6 @@
|
||||
#include "services/owncloud/network/owncloudnetworkfactory.h"
|
||||
#include "services/owncloud/gui/formeditowncloudaccount.h"
|
||||
|
||||
#include <QSqlQuery>
|
||||
#include <QSqlError>
|
||||
|
||||
|
||||
OwnCloudServiceRoot::OwnCloudServiceRoot(RootItem *parent)
|
||||
: ServiceRoot(parent), m_recycleBin(new OwnCloudRecycleBin(this)),
|
||||
@ -60,14 +57,9 @@ bool OwnCloudServiceRoot::editViaGui() {
|
||||
}
|
||||
|
||||
bool OwnCloudServiceRoot::deleteViaGui() {
|
||||
QSqlDatabase connection = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings);
|
||||
QSqlQuery query(connection);
|
||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings);
|
||||
|
||||
query.setForwardOnly(true);
|
||||
query.prepare(QSL("DELETE FROM OwnCloudAccounts WHERE id = :id;"));
|
||||
query.bindValue(QSL(":id"), accountId());
|
||||
|
||||
if (query.exec()) {
|
||||
if (DatabaseQueries::deleteOwnCloudAccount(database, accountId())) {
|
||||
return ServiceRoot::deleteViaGui();
|
||||
}
|
||||
else {
|
||||
@ -179,62 +171,28 @@ void OwnCloudServiceRoot::saveAccountDataToDatabase() {
|
||||
if (accountId() != NO_PARENT_CATEGORY) {
|
||||
// We are overwritting previously saved data.
|
||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings);
|
||||
QSqlQuery query(database);
|
||||
|
||||
query.prepare("UPDATE OwnCloudAccounts "
|
||||
"SET username = :username, password = :password, url = :url, force_update = :force_update "
|
||||
"WHERE id = :id;");
|
||||
query.bindValue(QSL(":username"), m_network->authUsername());
|
||||
query.bindValue(QSL(":password"), TextFactory::encrypt(m_network->authPassword()));
|
||||
query.bindValue(QSL(":url"), m_network->url());
|
||||
query.bindValue(QSL(":force_update"), (int) m_network->forceServerSideUpdate());
|
||||
query.bindValue(QSL(":id"), accountId());
|
||||
|
||||
if (query.exec()) {
|
||||
if (DatabaseQueries::overwriteOwnCloudAccount(database, m_network->authUsername(),
|
||||
m_network->authPassword(), m_network->url(),
|
||||
m_network->forceServerSideUpdate(), accountId())) {
|
||||
updateTitle();
|
||||
itemChanged(QList<RootItem*>() << this);
|
||||
}
|
||||
else {
|
||||
qWarning("ownCloud: Updating account failed: '%s'.", qPrintable(query.lastError().text()));
|
||||
}
|
||||
}
|
||||
else {
|
||||
// We are probably saving newly added account.
|
||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings);
|
||||
QSqlQuery query(database);
|
||||
|
||||
// First obtain the ID, which can be assigned to this new account.
|
||||
if (!query.exec("SELECT max(id) FROM Accounts;") || !query.next()) {
|
||||
qWarning("ownCloud: Getting max ID from Accounts table failed: '%s'.", qPrintable(query.lastError().text()));
|
||||
return;
|
||||
}
|
||||
|
||||
int id_to_assign = query.value(0).toInt() + 1;
|
||||
bool saved = true;
|
||||
|
||||
query.prepare(QSL("INSERT INTO Accounts (id, type) VALUES (:id, :type);"));
|
||||
query.bindValue(QSL(":id"), id_to_assign);
|
||||
query.bindValue(QSL(":type"), code());
|
||||
|
||||
saved &= query.exec();
|
||||
|
||||
query.prepare("INSERT INTO OwnCloudAccounts (id, username, password, url, force_update) "
|
||||
"VALUES (:id, :username, :password, :url, :force_update);");
|
||||
query.bindValue(QSL(":id"), id_to_assign);
|
||||
query.bindValue(QSL(":username"), m_network->authUsername());
|
||||
query.bindValue(QSL(":password"), TextFactory::encrypt(m_network->authPassword()));
|
||||
query.bindValue(QSL(":url"), m_network->url());
|
||||
query.bindValue(QSL(":force_update"), (int) m_network->forceServerSideUpdate());
|
||||
|
||||
saved &= query.exec();
|
||||
bool saved;
|
||||
int id_to_assign = DatabaseQueries::createAccount(database, code(), &saved);
|
||||
|
||||
if (saved) {
|
||||
if (DatabaseQueries::createOwnCloudAccount(database, id_to_assign, m_network->authUsername(),
|
||||
m_network->authPassword(), m_network->url(),
|
||||
m_network->forceServerSideUpdate())) {
|
||||
setId(id_to_assign);
|
||||
setAccountId(id_to_assign);
|
||||
updateTitle();
|
||||
}
|
||||
else {
|
||||
qWarning("ownCloud: Saving of new account failed: '%s'.", qPrintable(query.lastError().text()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -258,44 +216,8 @@ RootItem *OwnCloudServiceRoot::obtainNewTreeForSyncIn() const {
|
||||
|
||||
void OwnCloudServiceRoot::loadFromDatabase() {
|
||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings);
|
||||
Assignment categories;
|
||||
Assignment feeds;
|
||||
|
||||
// Obtain data for categories from the database.
|
||||
QSqlQuery query_categories(database);
|
||||
query_categories.setForwardOnly(true);
|
||||
query_categories.prepare(QSL("SELECT * FROM Categories WHERE account_id = :account_id;"));
|
||||
query_categories.bindValue(QSL(":account_id"), accountId());
|
||||
|
||||
if (!query_categories.exec()) {
|
||||
qFatal("Query for obtaining categories failed. Error message: '%s'.", qPrintable(query_categories.lastError().text()));
|
||||
}
|
||||
|
||||
while (query_categories.next()) {
|
||||
AssignmentItem pair;
|
||||
pair.first = query_categories.value(CAT_DB_PARENT_ID_INDEX).toInt();
|
||||
pair.second = new OwnCloudCategory(query_categories.record());
|
||||
|
||||
categories << pair;
|
||||
}
|
||||
|
||||
// All categories are now loaded.
|
||||
QSqlQuery query_feeds(database);
|
||||
query_feeds.setForwardOnly(true);
|
||||
query_feeds.prepare(QSL("SELECT * FROM Feeds WHERE account_id = :account_id;"));
|
||||
query_feeds.bindValue(QSL(":account_id"), accountId());
|
||||
|
||||
if (!query_feeds.exec()) {
|
||||
qFatal("Query for obtaining feeds failed. Error message: '%s'.", qPrintable(query_feeds.lastError().text()));
|
||||
}
|
||||
|
||||
while (query_feeds.next()) {
|
||||
AssignmentItem pair;
|
||||
pair.first = query_feeds.value(FDS_DB_CATEGORY_INDEX).toInt();
|
||||
pair.second = new OwnCloudFeed(query_feeds.record());
|
||||
|
||||
feeds << pair;
|
||||
}
|
||||
Assignment categories = DatabaseQueries::getOwnCloudCategories(database, accountId());
|
||||
Assignment feeds = DatabaseQueries::getOwnCloudFeeds(database, accountId());
|
||||
|
||||
// All data are now obtained, lets create the hierarchy.
|
||||
assembleCategories(categories);
|
||||
|
Loading…
x
Reference in New Issue
Block a user