networkModel()->updateBufferActivity(msg);
if(msg.type() == Message::Plain || msg.type() == Message::Notice || msg.type() == Message::Action) {
- QString sender = msg.buffer().network() + ":" + msg.buffer().buffer() + ":" + msg.sender();
+ // FIXME: fetch networkName();
+ QString sender = ":" + msg.buffer().buffer() + ":" + msg.sender();
Message mmsg = Message(msg.timestamp(), msg.buffer(), msg.type(), msg.text(), sender, msg.flags());
monitorBuffer()->appendMsg(mmsg);
}
: _id(0),
_netid(0),
_gid(0),
- _networkName(QString()),
- _bufferName(QString()) {
+ _bufferName(QString())
+{
}
-BufferInfo::BufferInfo(BufferId id, NetworkId networkid, uint gid, QString net, QString buf)
+BufferInfo::BufferInfo(BufferId id, NetworkId networkid, uint gid, QString buf)
: _id(id),
_netid(networkid),
_gid(gid),
- _networkName(net),
- _bufferName(buf) {
+ _bufferName(buf)
+{
}
QString BufferInfo::buffer() const {
}
QDebug operator<<(QDebug dbg, const BufferInfo &b) {
- dbg.nospace() << "(bufId: " << b.uid() << ", netId: " << b.networkId() << ", groupId: " << b.groupId()
- << ", net: " << b.network() << ", buf: " << b.buffer() << ")";
-
+ dbg.nospace() << "(bufId: " << b.uid() << ", netId: " << b.networkId() << ", groupId: " << b.groupId() << ", buf: " << b.buffer() << ")";
return dbg.space();
}
QDataStream &operator<<(QDataStream &out, const BufferInfo &bufferInfo) {
- out << bufferInfo._id << bufferInfo._netid << bufferInfo._gid << bufferInfo._networkName.toUtf8() << bufferInfo._bufferName.toUtf8();
+ out << bufferInfo._id << bufferInfo._netid << bufferInfo._gid << bufferInfo._bufferName.toUtf8();
return out;
}
QDataStream &operator>>(QDataStream &in, BufferInfo &bufferInfo) {
- QByteArray n, b;
- in >> bufferInfo._id >> bufferInfo._netid >> bufferInfo._gid >> n >> b;
- bufferInfo._networkName = QString::fromUtf8(n);
- bufferInfo._bufferName = QString::fromUtf8(b);
+ QByteArray buffername;
+ in >> bufferInfo._id >> bufferInfo._netid >> bufferInfo._gid >> buffername;
+ bufferInfo._bufferName = QString::fromUtf8(buffername);
return in;
}
class BufferInfo {
public:
BufferInfo();
- BufferInfo(BufferId id, NetworkId networkid, uint gid = 0, QString net = QString(), QString buf = QString());
+ BufferInfo(BufferId id, NetworkId networkid, uint gid = 0, QString buf = QString());
inline BufferId uid() const { return _id; }
inline NetworkId networkId() const { return _netid; }
inline uint groupId() const { return _gid; }
- inline QString network() const { return _networkName; }
QString buffer() const;
void setGroupId(uint gid) { _gid = gid; }
BufferId _id;
NetworkId _netid;
uint _gid;
- QString _networkName; // WILL BE REMOVED
QString _bufferName;
friend uint qHash(const BufferInfo &);
QString host = hostFromMask(sender());
QString nick = nickFromMask(sender());
QString txt = mircToInternal(text());
- QString networkName = buffer().network();
QString bufferName = buffer().buffer();
_formattedTimestamp = tr("%DT[%1]").arg(timestamp().toLocalTime().toString("hh:mm:ss"));
public:
inline SignedId(int _id = 0) { id = _id; }
inline qint32 toInt() const { return id; }
+ inline bool isValid() const { return id > 0; }
inline bool operator==(const SignedId &other) const { return id == other.id; }
inline bool operator!=(const SignedId &other) const { return id != other.id; }
+++ /dev/null
-INSERT INTO buffer (userid, networkid, buffername)
-VALUES (:userid, (SELECT networkid FROM network WHERE networkname = :networkname AND userid = :userid2), :buffername)
+++ /dev/null
-SELECT messageid, time, type, flags, sender, message, displayname
-FROM backlog
-JOIN buffer ON backlog.bufferid = buffer.bufferid
-JOIN sender ON backlog.senderid = sender.senderid
-LEFT JOIN buffergroup ON buffer.groupid = buffergroup.groupid
-WHERE (buffer.bufferid = :bufferid OR buffer.groupid = (SELECT groupid FROM buffer WHERE bufferid = :bufferid2)) AND backlog.messageid >= :firstmsg AND backlog.messageid <= :lastmsg
-ORDER BY messageid DESC
--- /dev/null
+INSERT INTO buffer (userid, networkid, buffername)
+VALUES (:userid, :networkid, :buffername)
-SELECT DISTINCT buffer.bufferid, buffername, network.networkid, networkname
+SELECT DISTINCT buffer.bufferid, buffername, network.networkid
FROM buffer
JOIN network ON buffer.networkid = network.networkid
JOIN backlog ON buffer.bufferid = backlog.bufferid
--- /dev/null
+SELECT messageid, time, type, flags, sender, message, displayname
+FROM backlog
+JOIN buffer ON backlog.bufferid = buffer.bufferid
+JOIN sender ON backlog.senderid = sender.senderid
+WHERE buffer.bufferid = :bufferid AND backlog.messageid >= :firstmsg AND backlog.messageid <= :lastmsg
+ORDER BY messageid DESC
FROM backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid
JOIN sender ON backlog.senderid = sender.senderid
-LEFT JOIN buffergroup ON buffer.groupid = buffergroup.groupid
-WHERE buffer.bufferid = :bufferid OR buffer.groupid = (SELECT groupid FROM buffer WHERE bufferid = :bufferid2)
+WHERE buffer.bufferid = :bufferid
ORDER BY messageid DESC
LIMIT :limit OFFSET :offset
FROM backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid
JOIN sender ON backlog.senderid = sender.senderid
-LEFT JOIN buffergroup ON buffer.groupid = buffergroup.groupid
-WHERE (buffer.bufferid = :bufferid OR buffer.groupid = (SELECT groupid FROM buffer WHERE bufferid = :bufferid2)) AND backlog.time >= :since
+WHERE buffer.bufferid = :bufferid AND backlog.time >= :since
ORDER BY messageid DESC
LIMIT -1 OFFSET :offset
--- /dev/null
+DROP TABLE buffergroup
--- /dev/null
+UPDATE coreinfo
+SET value='2'
+WHERE key = 'schemaversion'
QStringList queries;
QDir dir = QDir(QString(":/SQL/%1/%2/").arg(engineName()).arg(version));
foreach(QFileInfo fileInfo, dir.entryInfoList(QStringList() << "upgrade*", QDir::NoFilter, QDir::Name)) {
- qDebug() << queryString(fileInfo.baseName());
queries << queryString(fileInfo.baseName());
}
return queries;
bool AbstractSqlStorage::watchQuery(QSqlQuery *query) {
if(query->lastError().isValid()) {
qWarning() << "unhandled Error in QSqlQuery!";
- qWarning() << " last Query:" << query->lastQuery();
- qWarning() << " executed Query:" << query->executedQuery();
- qWarning() << " bound Values:" << query->boundValues();
- qWarning() << " Error Number:" << query->lastError().number();
- qWarning() << " Error Message:" << query->lastError().text();
- qWarning() << " Driver Message:" << query->lastError().driverText();
- qWarning() << " DB Message:" << query->lastError().databaseText();
+ qWarning() << " last Query:\n" << query->lastQuery();
+ qWarning() << " executed Query:\n" << query->executedQuery();
+ qWarning() << " bound Values:" << query->boundValues();
+ qWarning() << " Error Number:" << query->lastError().number();
+ qWarning() << " Error Message:" << query->lastError().text();
+ qWarning() << " Driver Message:" << query->lastError().driverText();
+ qWarning() << " DB Message:" << query->lastError().databaseText();
return false;
}
#include "coresettings.h"
#include "signalproxy.h"
#include "sqlitestorage.h"
+#include "network.h"
Core *Core::instanceptr = 0;
QMutex Core::mutex;
}
/*** Storage Access ***/
+bool Core::createNetworkId(UserId user, NetworkInfo &info) {
+ QMutexLocker locker(&mutex);
+ NetworkId networkId = instance()->storage->createNetworkId(user, info);
+ if(!networkId.isValid())
+ return false;
+
+ info.networkId = networkId;
+ return true;
+}
NetworkId Core::networkId(UserId user, const QString &network) {
QMutexLocker locker(&mutex);
return instance()->storage->getNetworkId(user, network);
}
-BufferInfo Core::bufferInfo(UserId user, const QString &network, const QString &buffer) {
+BufferInfo Core::bufferInfo(UserId user, const NetworkId &networkId, const QString &buffer) {
//QMutexLocker locker(&mutex);
- return instance()->storage->getBufferInfo(user, network, buffer);
+ return instance()->storage->getBufferInfo(user, networkId, buffer);
}
MsgId Core::storeMessage(const Message &message) {
class CoreSession;
class SessionThread;
class Storage;
+struct NetworkInfo;
class Core : public QObject {
Q_OBJECT
/*** Storage access ***/
// These methods are threadsafe.
+ //! Create a NetworkId in the Storage and store it in the given NetworkInfo
+ /** \note This method is thredsafe.
+ *
+ * \param user The core user
+ * \param networkInfo a NetworkInfo definition to store the newly created ID in
+ * \return true if successfull.
+ */
+ static bool createNetworkId(UserId user, NetworkInfo &info);
+
//! Get the NetworkId for a network name.
/** \note This method is threadsafe.
*
//! Get the unique BufferInfo for the given combination of network and buffername for a user.
/** \note This method is threadsafe.
*
- * \param user The core user who owns this buffername
- * \param network The network name
- * \param buffer The buffer name (if empty, the net's status buffer is returned)
+ * \param user The core user who owns this buffername
+ * \param networkId The network id
+ * \param buffer The buffer name (if empty, the net's status buffer is returned)
* \return The BufferInfo corresponding to the given network and buffer name, or 0 if not found
*/
- static BufferInfo bufferInfo(UserId user, const QString &network, const QString &buffer = "");
+ static BufferInfo bufferInfo(UserId user, const NetworkId &networkId, const QString &buffer = "");
//! Store a Message in the backlog.
/** \note This method is threadsafe.
createIdentity(i);
}
+ // FIXME switch to a pure DB storage
foreach(NetworkId id, s.networkIds()) {
NetworkInfo info = s.networkInfo(id);
- createNetwork(info, true);
+ createNetwork(info);
}
// FIXME Migrate old settings if available...
slist << server;
}
info.serverList = slist;
- createNetwork(info, true);
+ createNetwork(info);
}
}
}
// FIXME we need a sane way for creating buffers!
void CoreSession::networkConnected(NetworkId networkid) {
- Core::bufferInfo(user(), networkConnection(networkid)->networkName()); // create status buffer
+ Core::bufferInfo(user(), networkid); // create status buffer
}
void CoreSession::networkDisconnected(NetworkId networkid) {
// ALL messages coming pass through these functions before going to the GUI.
// So this is the perfect place for storing the backlog and log stuff.
void CoreSession::recvMessageFromServer(Message::Type type, QString target, QString text, QString sender, quint8 flags) {
- NetworkConnection *s = qobject_cast<NetworkConnection*>(this->sender());
- Q_ASSERT(s);
- BufferInfo buf;
- if((flags & Message::PrivMsg) && !(flags & Message::Self)) {
- buf = Core::bufferInfo(user(), s->networkName(), nickFromMask(sender));
- } else {
- buf = Core::bufferInfo(user(), s->networkName(), target);
- }
- Message msg(buf, type, text, sender, flags);
+ NetworkConnection *netCon = qobject_cast<NetworkConnection*>(this->sender());
+ Q_ASSERT(netCon);
+
+ QString bufferName;
+ if((flags & Message::PrivMsg) && !(flags & Message::Self))
+ bufferName = nickFromMask(sender);
+ else
+ bufferName = target;
+
+ BufferInfo bufferInfo = Core::bufferInfo(user(), netCon->networkId(), bufferName);
+ Message msg(bufferInfo, type, text, sender, flags);
msg.setMsgId(Core::storeMessage(msg));
Q_ASSERT(msg.msgId() != 0);
emit displayMsg(msg);
/*** Network Handling ***/
-void CoreSession::createNetwork(const NetworkInfo &_info, bool useId) {
- NetworkInfo info = _info;
+void CoreSession::createNetwork(const NetworkInfo &info_) {
+ NetworkInfo info = info_;
int id;
- if(useId && info.networkId > 0) id = info.networkId.toInt();
- else {
- for(id = 1; id <= _networks.count(); id++) {
- if(!_networks.keys().contains(id)) break;
- }
- //qDebug() << "found free id" << i;
- info.networkId = id;
- }
+
+ if(!info.networkId.isValid())
+ Core::createNetworkId(user(), info);
+
+ Q_ASSERT(info.networkId.isValid());
+
+ id = info.networkId.toInt();
+ Q_ASSERT(!_networks.contains(id));
+
Network *net = new Network(id, this);
connect(net, SIGNAL(connectRequested(NetworkId)), this, SLOT(connectToNetwork(NetworkId)));
connect(net, SIGNAL(disconnectRequested(NetworkId)), this, SLOT(disconnectFromNetwork(NetworkId)));
//! Create a network and propagate the changes to the clients.
/** \param info The network's settings.
*/
- void createNetwork(const NetworkInfo &info, bool useId = false);
+ void createNetwork(const NetworkInfo &info);
//! Update a network and propagate the changes to the clients.
/** \param info The updated network settings.
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
- <file>./SQL/SQLite/1/delete_backlog_by_uid.sql</file>
- <file>./SQL/SQLite/1/delete_buffers_by_uid.sql</file>
- <file>./SQL/SQLite/1/delete_networks_by_uid.sql</file>
- <file>./SQL/SQLite/1/delete_quasseluser.sql</file>
- <file>./SQL/SQLite/1/insert_buffer.sql</file>
- <file>./SQL/SQLite/1/insert_message.sql</file>
- <file>./SQL/SQLite/1/insert_network.sql</file>
- <file>./SQL/SQLite/1/insert_quasseluser.sql</file>
- <file>./SQL/SQLite/1/insert_sender.sql</file>
- <file>./SQL/SQLite/1/select_authuser.sql</file>
- <file>./SQL/SQLite/1/select_bufferByName.sql</file>
- <file>./SQL/SQLite/1/select_buffers.sql</file>
- <file>./SQL/SQLite/1/select_lastMessage.sql</file>
- <file>./SQL/SQLite/1/select_messageRange.sql</file>
- <file>./SQL/SQLite/1/select_messages.sql</file>
- <file>./SQL/SQLite/1/select_messagesOffset.sql</file>
- <file>./SQL/SQLite/1/select_messagesSince.sql</file>
- <file>./SQL/SQLite/1/select_messagesSinceOffset.sql</file>
- <file>./SQL/SQLite/1/select_userid.sql</file>
- <file>./SQL/SQLite/1/setup_000_quasseluser.sql</file>
- <file>./SQL/SQLite/1/setup_010_sender.sql</file>
- <file>./SQL/SQLite/1/setup_020_network.sql</file>
- <file>./SQL/SQLite/1/setup_040_buffer.sql</file>
- <file>./SQL/SQLite/1/setup_050_buffer_idx.sql</file>
- <file>./SQL/SQLite/1/setup_060_backlog.sql</file>
- <file>./SQL/SQLite/1/setup_070_coreinfo.sql</file>
- <file>./SQL/SQLite/1/setup_080_version.sql</file>
- <file>./SQL/SQLite/1/update_username.sql</file>
- <file>./SQL/SQLite/1/update_userpassword.sql</file>
<file>./SQL/SQLite/1/upgrade_000_drop_coreinfo.sql</file>
<file>./SQL/SQLite/1/upgrade_010_create_coreinfo.sql</file>
<file>./SQL/SQLite/1/upgrade_020_update_schemaversion.sql</file>
+ <file>./SQL/SQLite/2/delete_backlog_by_uid.sql</file>
+ <file>./SQL/SQLite/2/delete_buffers_by_uid.sql</file>
+ <file>./SQL/SQLite/2/delete_networks_by_uid.sql</file>
+ <file>./SQL/SQLite/2/delete_quasseluser.sql</file>
+ <file>./SQL/SQLite/2/insert_buffer.sql</file>
+ <file>./SQL/SQLite/2/insert_message.sql</file>
+ <file>./SQL/SQLite/2/insert_network.sql</file>
+ <file>./SQL/SQLite/2/insert_quasseluser.sql</file>
+ <file>./SQL/SQLite/2/insert_sender.sql</file>
+ <file>./SQL/SQLite/2/select_authuser.sql</file>
+ <file>./SQL/SQLite/2/select_bufferByName.sql</file>
+ <file>./SQL/SQLite/2/select_buffers.sql</file>
+ <file>./SQL/SQLite/2/select_lastMessage.sql</file>
+ <file>./SQL/SQLite/2/select_messageRange.sql</file>
+ <file>./SQL/SQLite/2/select_messages.sql</file>
+ <file>./SQL/SQLite/2/select_messagesOffset.sql</file>
+ <file>./SQL/SQLite/2/select_messagesSince.sql</file>
+ <file>./SQL/SQLite/2/select_messagesSinceOffset.sql</file>
+ <file>./SQL/SQLite/2/select_userid.sql</file>
+ <file>./SQL/SQLite/2/setup_000_quasseluser.sql</file>
+ <file>./SQL/SQLite/2/setup_010_sender.sql</file>
+ <file>./SQL/SQLite/2/setup_020_network.sql</file>
+ <file>./SQL/SQLite/2/setup_040_buffer.sql</file>
+ <file>./SQL/SQLite/2/setup_050_buffer_idx.sql</file>
+ <file>./SQL/SQLite/2/setup_060_backlog.sql</file>
+ <file>./SQL/SQLite/2/setup_070_coreinfo.sql</file>
+ <file>./SQL/SQLite/2/setup_080_version.sql</file>
+ <file>./SQL/SQLite/2/update_username.sql</file>
+ <file>./SQL/SQLite/2/update_userpassword.sql</file>
+ <file>./SQL/SQLite/2/upgrade_000_drop_buffergroup.sql</file>
+ <file>./SQL/SQLite/2/upgrade_010_update_schemaversion.sql</file>
</qresource>
</RCC>
#include "sqlitestorage.h"
#include <QCryptographicHash>
-
#include <QtSql>
+#include "network.h"
+
SqliteStorage::SqliteStorage(QObject *parent)
: AbstractSqlStorage(parent)
{
emit userRemoved(user);
}
-void SqliteStorage::createBuffer(UserId user, const QString &network, const QString &buffer) {
- QSqlQuery *createBufferQuery = cachedQuery("insert_buffer");
- createBufferQuery->bindValue(":userid", user.toInt());
- createBufferQuery->bindValue(":userid2", user.toInt()); // Qt can't handle same placeholder twice (maybe sqlites fault)
- createBufferQuery->bindValue(":networkname", network);
- createBufferQuery->bindValue(":buffername", buffer);
- createBufferQuery->exec();
-
- if(createBufferQuery->lastError().isValid()) {
- if(createBufferQuery->lastError().number() == 19) { // Null Constraint violation
- QSqlQuery *createNetworkQuery = cachedQuery("insert_network");
- createNetworkQuery->bindValue(":userid", user.toInt());
- createNetworkQuery->bindValue(":networkname", network);
- createNetworkQuery->exec();
- Q_ASSERT(watchQuery(createNetworkQuery));
- createBufferQuery->exec();
- Q_ASSERT(watchQuery(createBufferQuery));
- } else {
- // do panic!
- qDebug() << "failed to create Buffer: ErrNo:" << createBufferQuery->lastError().number() << "ErrMsg:" << createBufferQuery->lastError().text();
- Q_ASSERT(false);
- }
+NetworkId SqliteStorage::createNetworkId(UserId user, const NetworkInfo &info) {
+ NetworkId networkId;
+ QSqlQuery query(logDb());
+ query.prepare(queryString("insert_network"));
+ query.bindValue(":userid", user.toInt());
+ query.bindValue(":networkname", info.networkName);
+ query.exec();
+
+ networkId = getNetworkId(user, info.networkName);
+ if(!networkId.isValid()) {
+ watchQuery(&query);
}
+ return networkId;
}
NetworkId SqliteStorage::getNetworkId(UserId user, const QString &network) {
if(query.first())
return query.value(0).toInt();
- else {
- createBuffer(user, network, "");
- query.exec();
- if(query.first())
- return query.value(0).toInt();
- else {
- qWarning() << "NETWORK NOT FOUND:" << network << "for User:" << user;
- return 0;
- }
- }
+ else
+ return NetworkId();
+}
+
+void SqliteStorage::createBuffer(UserId user, const NetworkId &networkId, const QString &buffer) {
+ QSqlQuery *query = cachedQuery("insert_buffer");
+ query->bindValue(":userid", user.toInt());
+ query->bindValue(":networkid", networkId.toInt());
+ query->bindValue(":buffername", buffer);
+ query->exec();
+
+ watchQuery(query);
}
-BufferInfo SqliteStorage::getBufferInfo(UserId user, const QString &network, const QString &buffer) {
- BufferInfo bufferid;
- // TODO: get rid of this hackaround
- NetworkId networkId = getNetworkId(user, network);
-
- QSqlQuery *getBufferInfoQuery = cachedQuery("select_bufferByName");
- getBufferInfoQuery->bindValue(":networkid", networkId.toInt());
- getBufferInfoQuery->bindValue(":userid", user.toInt());
- getBufferInfoQuery->bindValue(":buffername", buffer);
- getBufferInfoQuery->exec();
-
- if(!getBufferInfoQuery->first()) {
- createBuffer(user, network, buffer);
- getBufferInfoQuery->exec();
- if(getBufferInfoQuery->first()) {
- bufferid = BufferInfo(getBufferInfoQuery->value(0).toInt(), networkId, 0, network, buffer);
- emit bufferInfoUpdated(user, bufferid);
+BufferInfo SqliteStorage::getBufferInfo(UserId user, const NetworkId &networkId, const QString &buffer) {
+ QSqlQuery *query = cachedQuery("select_bufferByName");
+ query->bindValue(":networkid", networkId.toInt());
+ query->bindValue(":userid", user.toInt());
+ query->bindValue(":buffername", buffer);
+ query->exec();
+
+ if(!query->first()) {
+ createBuffer(user, networkId, buffer);
+ query->exec();
+ if(!query->first()) {
+ watchQuery(query);
+ qWarning() << "unable to create BufferInfo for:" << user << networkId << buffer;
+ return BufferInfo();
}
- } else {
- bufferid = BufferInfo(getBufferInfoQuery->value(0).toInt(), networkId, 0, network, buffer);
}
- Q_ASSERT(!getBufferInfoQuery->next());
+ BufferInfo bufferInfo = BufferInfo(query->value(0).toInt(), networkId, 0, buffer);
+ if(query->next()) {
+ qWarning() << "SqliteStorage::getBufferInfo(): received more then one Buffer!";
+ qWarning() << " Query:" << query->lastQuery();
+ qWarning() << " bound Values:" << query->boundValues();
+ Q_ASSERT(false);
+ }
- return bufferid;
+ return bufferInfo;
}
QList<BufferInfo> SqliteStorage::requestBuffers(UserId user, QDateTime since) {
query.exec();
watchQuery(&query);
while(query.next()) {
- bufferlist << BufferInfo(query.value(0).toInt(), query.value(2).toInt(), 0, query.value(3).toString(), query.value(1).toString());
+ bufferlist << BufferInfo(query.value(0).toInt(), query.value(2).toInt(), 0, query.value(1).toString());
}
return bufferlist;
}
virtual void delUser(UserId user);
/* Network handling */
- virtual NetworkId getNetworkId(UserId user, const QString &network);
+ virtual NetworkId createNetworkId(UserId user, const NetworkInfo &info);
/* Buffer handling */
- virtual BufferInfo getBufferInfo(UserId user, const QString &network, const QString &buffer = "");
+ virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, const QString &buffer = "");
virtual QList<BufferInfo> requestBuffers(UserId user, QDateTime since = QDateTime());
/* Message handling */
private:
static QString backlogFile();
- void createBuffer(UserId user, const QString &network, const QString &buffer);
+ NetworkId getNetworkId(UserId user, const QString &network);
+ void createBuffer(UserId user, const NetworkId &networkId, const QString &buffer);
};
#endif
#include <QtCore>
+#include "types.h"
#include "message.h"
+struct NetworkInfo;
class Storage : public QObject {
Q_OBJECT
/* Network handling */
+ //! Create a new unique Network in the storage backend
+ /** \param user The core user who owns this network
+ * \param networkInfo The networkInfo holding the network definition
+ * \return the NetworkId of the newly created Network. Possibly invalid.
+ */
+ virtual NetworkId createNetworkId(UserId user, const NetworkInfo &info) = 0;
+
//! Get the unique NetworkId of the network for a user.
- /** \param user The core user who owns this buffername
+ /** \param user The core user who owns this network
* \param network The network name
- * \return The BufferInfo corresponding to the given network and buffer name, or 0 if not found
+ * \return The NetworkId corresponding to the given network, or 0 if not found
*/
virtual NetworkId getNetworkId(UserId user, const QString &network) = 0;
* \param buffer The buffer name (if empty, the net's status buffer is returned)
* \return The BufferInfo corresponding to the given network and buffer name, or 0 if not found
*/
- virtual BufferInfo getBufferInfo(UserId user, const QString &network, const QString &buffer = "") = 0;
+ virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, const QString &buffer = "") = 0;
//! Request a list of all buffers known to a user since a certain point in time.
/** This method is used to get a list of all buffers we have stored a backlog from.
}
// FIXME disable network creation/deletion because of the storage issue
- ui.addNetwork->setEnabled(false);
ui.deleteNetwork->setEnabled(false);
ui.renameNetwork->setEnabled(false);
}
quasselVersion = "0.2.0-pre";
quasselDate = "2008-02-02";
- quasselBuild = 436;
+ quasselBuild = 437;
//! Minimum client build number the core needs
clientBuildNeeded = 435;
clientVersionNeeded = quasselVersion;
//! Minimum core build number the client needs
- coreBuildNeeded = 435;
+ coreBuildNeeded = 437;
coreVersionNeeded = quasselVersion;
}