X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fsqlitestorage.cpp;h=82ab2ab2f13868fe72c09982a4527aeae9c5b6d5;hp=e19940934bbe6272a6d0ee5ac65f7cbef43abf16;hb=b9828e0dd235964b8e2e97f844f4bed3476d3bd4;hpb=cd37744f0a2cd8ffe027892ddce5c7d6f4848ab0 diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index e1994093..82ab2ab2 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -64,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")); @@ -676,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()); @@ -860,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")); @@ -881,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) {