X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcore%2Fpostgresqlstorage.cpp;h=3c15b2c08b216bd987f54e771543e2ff5e52589a;hb=092e6b212637ffbf68800584b7c1f32d1931b602;hp=f976f0955ff89cfedd0933490116ddb5f6f2034b;hpb=8697a21faab21ae23646f559cba9a85bd95b2ad7;p=quassel.git diff --git a/src/core/postgresqlstorage.cpp b/src/core/postgresqlstorage.cpp index f976f095..3c15b2c0 100644 --- a/src/core/postgresqlstorage.cpp +++ b/src/core/postgresqlstorage.cpp @@ -1440,6 +1440,99 @@ Message::Types PostgreSqlStorage::bufferActivity(BufferId bufferId, MsgId lastSe return result; } +QHash PostgreSqlStorage::bufferCiphers(UserId user, const NetworkId &networkId) +{ + QHash bufferCiphers; + + QSqlDatabase db = logDb(); + if (!beginReadOnlyTransaction(db)) { + qWarning() << "PostgreSqlStorage::persistentChannels(): cannot start read only transaction!"; + qWarning() << " -" << qPrintable(db.lastError().text()); + return bufferCiphers; + } + + QSqlQuery query(db); + query.prepare(queryString("select_buffer_ciphers")); + query.bindValue(":userid", user.toInt()); + query.bindValue(":networkid", networkId.toInt()); + safeExec(query); + watchQuery(query); + + while (query.next()) { + bufferCiphers[query.value(0).toString()] = QByteArray::fromHex(query.value(1).toString().toUtf8()); + } + + db.commit(); + return bufferCiphers; +} + +void PostgreSqlStorage::setBufferCipher(UserId user, const NetworkId &networkId, const QString &bufferName, const QByteArray &cipher) +{ + QSqlQuery query(logDb()); + query.prepare(queryString("update_buffer_cipher")); + query.bindValue(":userid", user.toInt()); + query.bindValue(":networkid", networkId.toInt()); + query.bindValue(":buffercname", bufferName.toLower()); + query.bindValue(":cipher", QString(cipher.toHex())); + safeExec(query); + watchQuery(query); +} + + +void PostgreSqlStorage::setHighlightCount(UserId user, BufferId bufferId, int highlightcount) +{ + QSqlQuery query(logDb()); + query.prepare(queryString("update_buffer_highlightcount")); + + query.bindValue(":userid", user.toInt()); + query.bindValue(":bufferid", bufferId.toInt()); + query.bindValue(":highlightcount", highlightcount); + safeExec(query); + watchQuery(query); +} + +QHash PostgreSqlStorage::highlightCounts(UserId user) +{ + QHash highlightCountHash; + + QSqlDatabase db = logDb(); + if (!beginReadOnlyTransaction(db)) { + qWarning() << "PostgreSqlStorage::highlightCounts(): cannot start read only transaction!"; + qWarning() << " -" << qPrintable(db.lastError().text()); + return highlightCountHash; + } + + QSqlQuery query(db); + query.prepare(queryString("select_buffer_highlightcounts")); + query.bindValue(":userid", user.toInt()); + safeExec(query); + if (!watchQuery(query)) { + db.rollback(); + return highlightCountHash; + } + + while (query.next()) { + highlightCountHash[query.value(0).toInt()] = query.value(1).toInt(); + } + + db.commit(); + return highlightCountHash; +} + +int PostgreSqlStorage::highlightCount(BufferId bufferId, MsgId lastSeenMsgId) +{ + QSqlQuery query(logDb()); + query.prepare(queryString("select_buffer_highlightcount")); + query.bindValue(":bufferid", bufferId.toInt()); + query.bindValue(":lastseenmsgid", lastSeenMsgId.toInt()); + safeExec(query); + watchQuery(query); + int result = int(0); + if (query.first()) + result = query.value(0).toInt(); + return result; +} + bool PostgreSqlStorage::logMessage(Message &msg) { QSqlDatabase db = logDb(); @@ -1449,7 +1542,11 @@ bool PostgreSqlStorage::logMessage(Message &msg) return false; } - QSqlQuery getSenderIdQuery = executePreparedQuery("select_senderid", msg.sender(), db); + QVariantList senderParams; + senderParams << msg.sender() + << msg.realName() + << msg.avatarUrl(); + QSqlQuery getSenderIdQuery = executePreparedQuery("select_senderid", senderParams, db); int senderId; if (getSenderIdQuery.first()) { senderId = getSenderIdQuery.value(0).toInt(); @@ -1458,11 +1555,11 @@ bool PostgreSqlStorage::logMessage(Message &msg) // it's possible that the sender was already added by another thread // since the insert might fail we're setting a savepoint savePoint("sender_sp1", db); - QSqlQuery addSenderQuery = executePreparedQuery("insert_sender", msg.sender(), db); + QSqlQuery addSenderQuery = executePreparedQuery("insert_sender", senderParams, db); if (addSenderQuery.lastError().isValid()) { rollbackSavePoint("sender_sp1", db); - getSenderIdQuery = executePreparedQuery("select_senderid", msg.sender(), db); + getSenderIdQuery = executePreparedQuery("select_senderid", senderParams, db); watchQuery(getSenderIdQuery); getSenderIdQuery.first(); senderId = getSenderIdQuery.value(0).toInt(); @@ -1512,28 +1609,34 @@ bool PostgreSqlStorage::logMessages(MessageList &msgs) } QList senderIdList; - QHash senderIds; + QHash senderIds; QSqlQuery addSenderQuery; QSqlQuery selectSenderQuery;; for (int i = 0; i < msgs.count(); i++) { - const QString &sender = msgs.at(i).sender(); + auto &msg = msgs.at(i); + SenderData sender = { msg.sender(), msg.realName(), msg.avatarUrl() }; if (senderIds.contains(sender)) { senderIdList << senderIds[sender]; continue; } - selectSenderQuery = executePreparedQuery("select_senderid", sender, db); + QVariantList senderParams; + senderParams << sender.sender + << sender.realname + << sender.avatarurl; + + selectSenderQuery = executePreparedQuery("select_senderid", senderParams, db); if (selectSenderQuery.first()) { senderIdList << selectSenderQuery.value(0).toInt(); senderIds[sender] = selectSenderQuery.value(0).toInt(); } else { savePoint("sender_sp", db); - addSenderQuery = executePreparedQuery("insert_sender", sender, db); + addSenderQuery = executePreparedQuery("insert_sender", senderParams, db); if (addSenderQuery.lastError().isValid()) { // seems it was inserted meanwhile... by a different thread rollbackSavePoint("sender_sp", db); - selectSenderQuery = executePreparedQuery("select_senderid", sender, db); + selectSenderQuery = executePreparedQuery("select_senderid", senderParams, db); watchQuery(selectSenderQuery); selectSenderQuery.first(); senderIdList << selectSenderQuery.value(0).toInt(); @@ -1637,9 +1740,11 @@ QList PostgreSqlStorage::requestMsgs(UserId user, BufferId bufferId, Ms Message msg(timestamp, bufferInfo, (Message::Type)query.value(2).toUInt(), - query.value(6).toString(), + query.value(8).toString(), query.value(4).toString(), query.value(5).toString(), + query.value(6).toString(), + query.value(7).toString(), (Message::Flags)query.value(3).toUInt()); msg.setMsgId(query.value(0).toInt()); messagelist << msg; @@ -1690,9 +1795,11 @@ QList PostgreSqlStorage::requestAllMsgs(UserId user, MsgId first, MsgId Message msg(timestamp, bufferInfoHash[query.value(1).toInt()], (Message::Type)query.value(3).toUInt(), - query.value(7).toString(), + query.value(9).toString(), query.value(5).toString(), query.value(6).toString(), + query.value(7).toString(), + query.value(8).toString(), (Message::Flags)query.value(4).toUInt()); msg.setMsgId(query.value(0).toInt()); messagelist << msg; @@ -1702,7 +1809,9 @@ QList PostgreSqlStorage::requestAllMsgs(UserId user, MsgId first, MsgId return messagelist; } -QMap PostgreSqlStorage::getAllAuthusernames() { + +QMap PostgreSqlStorage::getAllAuthUserNames() +{ QMap authusernames; QSqlQuery query(logDb()); query.prepare(queryString("select_all_authusernames")); @@ -1715,7 +1824,9 @@ QMap PostgreSqlStorage::getAllAuthusernames() { return authusernames; } -const QString PostgreSqlStorage::getAuthusername(UserId user) { + +QString PostgreSqlStorage::getAuthUserName(UserId user) +{ QString authusername; QSqlQuery query(logDb()); query.prepare(queryString("select_authusername")); @@ -1963,6 +2074,8 @@ bool PostgreSqlMigrationWriter::writeMo(const SenderMO &sender) { bindValue(0, sender.senderId); bindValue(1, sender.sender); + bindValue(2, sender.realname); + bindValue(3, sender.avatarurl); return exec(); } @@ -2060,8 +2173,10 @@ bool PostgreSqlMigrationWriter::writeMo(const BufferMO &buffer) bindValue(8, buffer.lastseenmsgid); bindValue(9, buffer.markerlinemsgid); bindValue(10, buffer.bufferactivity); - bindValue(11, buffer.key); - bindValue(12, buffer.joined); + bindValue(11, buffer.highlightcount); + bindValue(12, buffer.key); + bindValue(13, buffer.joined); + bindValue(14, buffer.cipher); return exec(); }