X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fsqlitestorage.cpp;h=82ab2ab2f13868fe72c09982a4527aeae9c5b6d5;hp=974740df4e3190bc799903ea1e815e629a7b0968;hb=b9828e0dd235964b8e2e97f844f4bed3476d3bd4;hpb=f824db0e31b54969e0b7fa0b5405b1e9173d482c diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index 974740df..82ab2ab2 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -22,10 +22,9 @@ #include -#include "network.h" - -#include "util.h" #include "logger.h" +#include "network.h" +#include "quassel.h" int SqliteStorage::_maxRetryCount = 150; // yes this is a large number... only other way to "handle" this is bailing out... @@ -65,6 +64,34 @@ int SqliteStorage::installedSchemaVersion() { return AbstractSqlStorage::installedSchemaVersion(); } +bool SqliteStorage::updateSchemaVersion(int newVersion) { + QSqlQuery query(logDb()); + query.prepare("UPDATE coreinfo SET value = :version WHERE key = 'schemaversion'"); + query.bindValue(":version", newVersion); + query.exec(); + + bool success = true; + if(query.lastError().isValid()) { + qCritical() << "SqliteStorage::updateSchemaVersion(int): Updating schema version failed!"; + success = false; + } + return success; +} + +bool SqliteStorage::setupSchemaVersion(int version) { + QSqlQuery query(logDb()); + query.prepare("INSERT INTO coreinfo (key, value) VALUES ('schemaversion', :version)"); + query.bindValue(":version", version); + query.exec(); + + bool success = true; + if(query.lastError().isValid()) { + qCritical() << "SqliteStorage::setupSchemaVersion(int): Updating schema version failed!"; + success = false; + } + return success; +} + UserId SqliteStorage::addUser(const QString &user, const QString &password) { QSqlQuery query(logDb()); query.prepare(queryString("insert_quasseluser")); @@ -677,6 +704,51 @@ void SqliteStorage::setPersistentChannelKey(UserId user, const NetworkId &networ watchQuery(query); } +QString SqliteStorage::awayMessage(UserId user, NetworkId networkId) { + QSqlQuery query(logDb()); + query.prepare(queryString("select_network_awaymsg")); + query.bindValue(":userid", user.toInt()); + query.bindValue(":networkid", networkId.toInt()); + safeExec(query); + watchQuery(query); + QString awayMsg; + if(query.first()) + awayMsg = query.value(0).toString(); + return awayMsg; +} + +void SqliteStorage::setAwayMessage(UserId user, NetworkId networkId, const QString &awayMsg) { + QSqlQuery query(logDb()); + query.prepare(queryString("update_network_set_awaymsg")); + query.bindValue(":userid", user.toInt()); + query.bindValue(":networkid", networkId.toInt()); + query.bindValue(":awaymsg", awayMsg); + safeExec(query); + watchQuery(query); +} + +QString SqliteStorage::userModes(UserId user, NetworkId networkId) { + QSqlQuery query(logDb()); + query.prepare(queryString("select_network_usermode")); + query.bindValue(":userid", user.toInt()); + query.bindValue(":networkid", networkId.toInt()); + safeExec(query); + watchQuery(query); + QString modes; + if(query.first()) + modes = query.value(0).toString(); + return modes; +} + +void SqliteStorage::setUserModes(UserId user, NetworkId networkId, const QString &userModes) { + QSqlQuery query(logDb()); + query.prepare(queryString("update_network_set_usermode")); + query.bindValue(":userid", user.toInt()); + query.bindValue(":networkid", networkId.toInt()); + query.bindValue(":usermode", userModes); + safeExec(query); + watchQuery(query); +} void SqliteStorage::createBuffer(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer) { QSqlQuery query(logDb()); @@ -861,7 +933,7 @@ QHash SqliteStorage::bufferLastSeenMsgIds(UserId user) { return lastSeenHash; } -MsgId SqliteStorage::logMessage(Message msg) { +bool SqliteStorage::logMessage(Message &msg) { QSqlQuery logMessageQuery(logDb()); logMessageQuery.prepare(queryString("insert_message")); @@ -882,15 +954,28 @@ MsgId SqliteStorage::logMessage(Message msg) { safeExec(addSenderQuery); safeExec(logMessageQuery); if(!watchQuery(logMessageQuery)) - return 0; + return false; } else { watchQuery(logMessageQuery); } } MsgId msgId = logMessageQuery.lastInsertId().toInt(); - Q_ASSERT(msgId.isValid()); - return msgId; + if(msgId.isValid()) { + msg.setMsgId(msgId); + return true; + } else { + return false; + } +} + +bool SqliteStorage::logMessages(MessageList &msgs) { + // FIXME: optimize! + for(int i = 0; i < msgs.count(); i++) { + if(!logMessage(msgs[i])) + return false; + } + return true; } QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) { @@ -969,7 +1054,7 @@ QList SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId las } QString SqliteStorage::backlogFile() { - return quasselDir().absolutePath() + "/quassel-storage.sqlite"; + return Quassel::configDirPath() + "quassel-storage.sqlite"; } bool SqliteStorage::safeExec(QSqlQuery &query, int retryCount) {