From 674ad8ee4369cbc9516eb6d6629a616e9310c71f Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Tue, 30 Dec 2008 13:55:18 +0100 Subject: [PATCH 1/1] fixing a big oopsie that would cause the creation of a new empty buffer on any observed nickchange This caused the backlog replay to not work properly --- src/client/clientbacklogmanager.cpp | 3 --- src/core/core.h | 5 +++-- src/core/coresession.cpp | 3 ++- src/core/sqlitestorage.cpp | 5 ++++- src/core/sqlitestorage.h | 2 +- src/core/storage.h | 3 ++- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/client/clientbacklogmanager.cpp b/src/client/clientbacklogmanager.cpp index b698f4f9..742d3053 100644 --- a/src/client/clientbacklogmanager.cpp +++ b/src/client/clientbacklogmanager.cpp @@ -38,9 +38,6 @@ ClientBacklogManager::ClientBacklogManager(QObject *parent) void ClientBacklogManager::receiveBacklog(BufferId bufferId, MsgId first, MsgId last, int limit, int additional, QVariantList msgs) { Q_UNUSED(first) Q_UNUSED(last) Q_UNUSED(limit) Q_UNUSED(additional) - if(msgs.isEmpty()) - return; - emit messagesReceived(bufferId, msgs.count()); MessageList msglist; diff --git a/src/core/core.h b/src/core/core.h index 8945b0ea..1aa2fa38 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -208,10 +208,11 @@ class Core : public QObject { * \param networkId The network id * \param type The type of the buffer (StatusBuffer, Channel, etc.) * \param buffer The buffer name (if empty, the net's status buffer is returned) + * \param create Whether or not the buffer should be created if it doesnt exist * \return The BufferInfo corresponding to the given network and buffer name, or 0 if not found */ - static inline BufferInfo bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = "") { - return instance()->storage->getBufferInfo(user, networkId, type, buffer); + static inline BufferInfo bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = "", bool create = true) { + return instance()->storage->bufferInfo(user, networkId, type, buffer, create); } //! Get the unique BufferInfo for a bufferId diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 1e21b64c..8237d253 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -89,6 +89,7 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent) // init BacklogManager p->synchronize(_backlogManager); + p->dumpSyncMap(_backlogManager); // init IrcListHelper p->synchronize(ircListHelper()); @@ -381,7 +382,7 @@ void CoreSession::destroyNetwork(NetworkId id) { } void CoreSession::renameBuffer(const NetworkId &networkId, const QString &newName, const QString &oldName) { - BufferInfo bufferInfo = Core::bufferInfo(user(), networkId, BufferInfo::QueryBuffer, oldName); + BufferInfo bufferInfo = Core::bufferInfo(user(), networkId, BufferInfo::QueryBuffer, oldName, false); _bufferSyncer->renameBuffer(bufferInfo.bufferId(), newName); } diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index 2876d5c6..cbcacf71 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -691,7 +691,7 @@ void SqliteStorage::createBuffer(UserId user, const NetworkId &networkId, Buffer watchQuery(query); } -BufferInfo SqliteStorage::getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer) { +BufferInfo SqliteStorage::bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer, bool create) { QSqlQuery query(logDb()); query.prepare(queryString("select_bufferByName")); query.bindValue(":networkid", networkId.toInt()); @@ -700,6 +700,9 @@ BufferInfo SqliteStorage::getBufferInfo(UserId user, const NetworkId &networkId, safeExec(query); if(!query.first()) { + if(!create) + return BufferInfo(); + createBuffer(user, networkId, type, buffer); safeExec(query); if(!query.first()) { diff --git a/src/core/sqlitestorage.h b/src/core/sqlitestorage.h index 6ad80fef..25f25a51 100644 --- a/src/core/sqlitestorage.h +++ b/src/core/sqlitestorage.h @@ -74,7 +74,7 @@ public slots: virtual void setPersistentChannelKey(UserId user, const NetworkId &networkId, const QString &channel, const QString &key); /* Buffer handling */ - virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = ""); + virtual BufferInfo bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = "", bool create = true); virtual BufferInfo getBufferInfo(UserId user, const BufferId &bufferId); virtual QList requestBuffers(UserId user); virtual QList requestBufferIdsForNetwork(UserId user, NetworkId networkId); diff --git a/src/core/storage.h b/src/core/storage.h index 9612a594..5b86f87c 100644 --- a/src/core/storage.h +++ b/src/core/storage.h @@ -230,9 +230,10 @@ public slots: * \param networkId The network id * \param type The type of the buffer (StatusBuffer, Channel, etc.) * \param buffer The buffer name (if empty, the net's status buffer is returned) + * \param create Whether or not the buffer should be created if it doesnt exist * \return The BufferInfo corresponding to the given network and buffer name, or an invalid BufferInfo if not found */ - virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = "") = 0; + virtual BufferInfo bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = "", bool create = true) = 0; //! Get the unique BufferInfo for a bufferId /** \param user The core user who owns this buffername -- 2.20.1