/***************************************************************************
- * Copyright (C) 2005-2016 by the Quassel Project *
+ * Copyright (C) 2005-2018 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
}
-void PostgreSqlStorage::setBufferActivity(UserId user, const BufferId &bufferId, const int &bufferActivity)
+void PostgreSqlStorage::setBufferActivity(UserId user, BufferId bufferId, Message::Types bufferActivity)
{
QSqlQuery query(logDb());
query.prepare(queryString("update_buffer_bufferactivity"));
query.bindValue(":userid", user.toInt());
query.bindValue(":bufferid", bufferId.toInt());
- query.bindValue(":bufferactivity", bufferActivity);
+ query.bindValue(":bufferactivity", (int) bufferActivity);
safeExec(query);
watchQuery(query);
}
-QHash<BufferId, int> PostgreSqlStorage::bufferActivities(UserId user)
+QHash<BufferId, Message::Types> PostgreSqlStorage::bufferActivities(UserId user)
{
- QHash<BufferId, int> bufferActivityHash;
+ QHash<BufferId, Message::Types> bufferActivityHash;
QSqlDatabase db = logDb();
if (!beginReadOnlyTransaction(db)) {
}
QSqlQuery query(db);
- query.prepare(queryString("select_buffer_bufferactivity"));
+ query.prepare(queryString("select_buffer_bufferactivities"));
query.bindValue(":userid", user.toInt());
safeExec(query);
if (!watchQuery(query)) {
}
while (query.next()) {
- bufferActivityHash[query.value(0).toInt()] = (Message::Type) query.value(1).toInt();
+ bufferActivityHash[query.value(0).toInt()] = Message::Types(query.value(1).toInt());
}
db.commit();
return bufferActivityHash;
}
-int PostgreSqlStorage::bufferActivity(BufferId &bufferId, MsgId &lastSeenMsgId)
+Message::Types PostgreSqlStorage::bufferActivity(BufferId bufferId, MsgId lastSeenMsgId)
{
QSqlQuery query(logDb());
query.prepare(queryString("select_buffer_bufferactivity"));
query.bindValue(":lastseenmsgid", lastSeenMsgId.toInt());
safeExec(query);
watchQuery(query);
- int result = 0;
+ Message::Types result = Message::Types(0);
+ if (query.first())
+ result = Message::Types(query.value(0).toInt());
+ return result;
+}
+
+QHash<QString, QByteArray> PostgreSqlStorage::bufferCiphers(UserId user, const NetworkId &networkId)
+{
+ QHash<QString, QByteArray> 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<BufferId, int> PostgreSqlStorage::highlightCounts(UserId user)
+{
+ QHash<BufferId, int> 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;
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();
// 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();
}
QList<int> senderIdList;
- QHash<QString, int> senderIds;
+ QHash<SenderData, int> 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();
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;
QDateTime timestamp;
for (int i = 0; i < limit && query.next(); i++) {
- timestamp = query.value(1).toDateTime();
+ timestamp = query.value(2).toDateTime();
timestamp.setTimeSpec(Qt::UTC);
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;
}
+QMap<UserId, QString> PostgreSqlStorage::getAllAuthUserNames()
+{
+ QMap<UserId, QString> authusernames;
+ QSqlQuery query(logDb());
+ query.prepare(queryString("select_all_authusernames"));
+ safeExec(query);
+ watchQuery(query);
+
+ while (query.next()) {
+ authusernames[query.value(0).toInt()] = query.value(1).toString();
+ }
+ return authusernames;
+}
+
+
+QString PostgreSqlStorage::getAuthUserName(UserId user)
+{
+ QString authusername;
+ QSqlQuery query(logDb());
+ query.prepare(queryString("select_authusername"));
+ query.bindValue(":userid", user.toInt());
+ safeExec(query);
+ watchQuery(query);
+
+ if (query.first()) {
+ authusername = query.value(0).toString();
+ }
+ return authusername;
+}
+
// void PostgreSqlStorage::safeExec(QSqlQuery &query) {
// qDebug() << "PostgreSqlStorage::safeExec";
// qDebug() << " executing:\n" << query.executedQuery();
{
bindValue(0, sender.senderId);
bindValue(1, sender.sender);
+ bindValue(2, sender.realname);
+ bindValue(3, sender.avatarurl);
return exec();
}
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();
}