X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fpostgresqlstorage.cpp;h=237876917c7fc40823de7903361e0184ca3ac6ed;hp=ac6dec93b67255bb3194ab98252cb90139fce628;hb=4dfe52421b1b6a71b3c0bda2452edf3605f59528;hpb=cfbd4daee17dbb3c4052d938bf33edd08711d728 diff --git a/src/core/postgresqlstorage.cpp b/src/core/postgresqlstorage.cpp index ac6dec93..23787691 100644 --- a/src/core/postgresqlstorage.cpp +++ b/src/core/postgresqlstorage.cpp @@ -1385,6 +1385,61 @@ QHash PostgreSqlStorage::bufferMarkerLineMsgIds(UserId user) return markerLineHash; } + +void PostgreSqlStorage::setBufferActivity(UserId user, const BufferId &bufferId, const 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", (int) bufferActivity); + safeExec(query); + watchQuery(query); +} + +QHash PostgreSqlStorage::bufferActivities(UserId user) +{ + QHash bufferActivityHash; + + QSqlDatabase db = logDb(); + if (!beginReadOnlyTransaction(db)) { + qWarning() << "PostgreSqlStorage::bufferActivities(): cannot start read only transaction!"; + qWarning() << " -" << qPrintable(db.lastError().text()); + return bufferActivityHash; + } + + QSqlQuery query(db); + query.prepare(queryString("select_buffer_bufferactivities")); + query.bindValue(":userid", user.toInt()); + safeExec(query); + if (!watchQuery(query)) { + db.rollback(); + return bufferActivityHash; + } + + while (query.next()) { + bufferActivityHash[query.value(0).toInt()] = Message::Types(query.value(1).toInt()); + } + + db.commit(); + return bufferActivityHash; +} + +Message::Types PostgreSqlStorage::bufferActivity(BufferId &bufferId, const MsgId &lastSeenMsgId) +{ + QSqlQuery query(logDb()); + query.prepare(queryString("select_buffer_bufferactivity")); + query.bindValue(":bufferid", bufferId.toInt()); + query.bindValue(":lastseenmsgid", lastSeenMsgId.toInt()); + safeExec(query); + watchQuery(query); + Message::Types result = Message::Types(0); + if (query.first()) + result = Message::Types(query.value(0).toInt()); + return result; +} + bool PostgreSqlStorage::logMessage(Message &msg) { QSqlDatabase db = logDb(); @@ -1425,6 +1480,7 @@ bool PostgreSqlStorage::logMessage(Message &msg) << msg.type() << (int)msg.flags() << senderId + << msg.senderPrefixes() << msg.contents(); QSqlQuery logMessageQuery = executePreparedQuery("insert_message", params, db); @@ -1502,6 +1558,7 @@ bool PostgreSqlStorage::logMessages(MessageList &msgs) << msg.type() << (int)msg.flags() << senderIdList.at(i) + << msg.senderPrefixes() << msg.contents(); QSqlQuery logMessageQuery = executePreparedQuery("insert_message", params, db); if (!watchQuery(logMessageQuery)) { @@ -1580,8 +1637,9 @@ QList PostgreSqlStorage::requestMsgs(UserId user, BufferId bufferId, Ms Message msg(timestamp, bufferInfo, (Message::Type)query.value(2).toUInt(), - query.value(5).toString(), + query.value(6).toString(), query.value(4).toString(), + query.value(5).toString(), (Message::Flags)query.value(3).toUInt()); msg.setMsgId(query.value(0).toInt()); messagelist << msg; @@ -1632,8 +1690,9 @@ QList PostgreSqlStorage::requestAllMsgs(UserId user, MsgId first, MsgId Message msg(timestamp, bufferInfoHash[query.value(1).toInt()], (Message::Type)query.value(3).toUInt(), - query.value(6).toString(), + query.value(7).toString(), query.value(5).toString(), + query.value(6).toString(), (Message::Flags)query.value(4).toUInt()); msg.setMsgId(query.value(0).toInt()); messagelist << msg; @@ -1974,8 +2033,9 @@ bool PostgreSqlMigrationWriter::writeMo(const BufferMO &buffer) bindValue(7, buffer.lastmsgid); bindValue(8, buffer.lastseenmsgid); bindValue(9, buffer.markerlinemsgid); - bindValue(10, buffer.key); - bindValue(11, buffer.joined); + bindValue(10, buffer.bufferactivity); + bindValue(11, buffer.key); + bindValue(12, buffer.joined); return exec(); } @@ -1989,7 +2049,8 @@ bool PostgreSqlMigrationWriter::writeMo(const BacklogMO &backlog) bindValue(3, backlog.type); bindValue(4, (int)backlog.flags); bindValue(5, backlog.senderid); - bindValue(6, backlog.message); + bindValue(6, backlog.senderprefixes); + bindValue(7, backlog.message); return exec(); }