From 5b560ec1a01349562ac58051ca7e7fa899d4b994 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Tue, 12 Feb 2008 15:54:48 +0000 Subject: [PATCH] - MessageTypes are now binary exclusive which allows easy checks with multimple conditions. - BufferTypes are now stored persistent in the Storage engine and can be accessed via BufferInfo.type() Major breakage of protocol. Distclean mandatory. --- src/client/client.cpp | 2 +- src/client/networkmodel.cpp | 28 ++-- src/client/networkmodel.h | 9 +- src/common/bufferinfo.cpp | 12 +- src/common/bufferinfo.h | 12 +- src/common/message.cpp | 5 +- src/common/message.h | 29 ++-- src/core/SQL/SQLite/5/insert_buffer.sql | 2 - src/core/SQL/SQLite/5/setup_999_version.sql | 1 - .../SQLite/{5 => 6}/delete_backlog_by_uid.sql | 0 .../{5 => 6}/delete_backlog_for_network.sql | 0 .../SQLite/{5 => 6}/delete_buffers_by_uid.sql | 0 .../{5 => 6}/delete_buffers_for_network.sql | 0 .../delete_ircservers_for_network.sql | 0 .../SQL/SQLite/{5 => 6}/delete_network.sql | 0 .../{5 => 6}/delete_networks_by_uid.sql | 0 .../SQLite/{5 => 6}/delete_quasseluser.sql | 0 src/core/SQL/SQLite/6/insert_buffer.sql | 2 + .../SQL/SQLite/{5 => 6}/insert_message.sql | 0 .../SQL/SQLite/{5 => 6}/insert_network.sql | 0 .../SQLite/{5 => 6}/insert_quasseluser.sql | 0 .../SQL/SQLite/{5 => 6}/insert_sender.sql | 0 .../SQL/SQLite/{5 => 6}/insert_server.sql | 0 .../SQL/SQLite/{5 => 6}/select_authuser.sql | 0 .../SQLite/{5 => 6}/select_bufferByName.sql | 2 +- .../SQL/SQLite/{5 => 6}/select_buffers.sql | 2 +- .../SQLite/{5 => 6}/select_lastMessage.sql | 0 .../SQLite/{5 => 6}/select_messageRange.sql | 0 .../SQL/SQLite/{5 => 6}/select_messages.sql | 0 .../SQLite/{5 => 6}/select_messagesOffset.sql | 0 .../SQLite/{5 => 6}/select_messagesSince.sql | 0 .../{5 => 6}/select_messagesSinceOffset.sql | 0 .../SQLite/{5 => 6}/select_networkExists.sql | 0 .../{5 => 6}/select_networks_for_user.sql | 0 .../{5 => 6}/select_servers_for_network.sql | 0 .../SQL/SQLite/{5 => 6}/select_userid.sql | 0 .../SQLite/{5 => 6}/setup_000_quasseluser.sql | 0 .../SQL/SQLite/{5 => 6}/setup_010_sender.sql | 0 .../SQL/SQLite/{5 => 6}/setup_020_network.sql | 0 .../SQL/SQLite/{5 => 6}/setup_030_buffer.sql | 3 +- .../SQLite/{5 => 6}/setup_040_buffer_idx.sql | 0 .../{5 => 6}/setup_050_buffer_cname_idx.sql | 0 .../SQL/SQLite/{5 => 6}/setup_060_backlog.sql | 0 .../SQLite/{5 => 6}/setup_070_coreinfo.sql | 0 .../SQLite/{5 => 6}/setup_080_ircservers.sql | 0 src/core/SQL/SQLite/6/setup_999_version.sql | 1 + .../SQL/SQLite/{5 => 6}/update_network.sql | 0 .../SQL/SQLite/{5 => 6}/update_username.sql | 0 .../SQLite/{5 => 6}/update_userpassword.sql | 0 .../6/upgrade_000_alter_buffertable.sql | 2 + .../6/upgrade_010_set_statusbuffertype.sql | 3 + .../6/upgrade_020_set_channelbuffertype.sql | 3 + .../6/upgrade_030_set_querybuffertype.sql | 3 + .../SQLite/6/upgrade_040_update_msgtype.sql | 1 + .../SQLite/6/upgrade_050_update_msgtype.sql | 1 + .../SQLite/6/upgrade_060_update_msgtype.sql | 1 + .../SQLite/6/upgrade_070_update_msgtype.sql | 1 + .../SQLite/6/upgrade_080_update_msgtype.sql | 1 + .../SQLite/6/upgrade_090_update_msgtype.sql | 1 + .../SQLite/6/upgrade_100_update_msgtype.sql | 1 + .../SQLite/6/upgrade_110_update_msgtype.sql | 1 + .../SQLite/6/upgrade_120_update_msgtype.sql | 1 + .../SQLite/6/upgrade_130_update_msgtype.sql | 1 + .../SQLite/6/upgrade_140_update_msgtype.sql | 1 + .../SQLite/6/upgrade_150_update_msgtype.sql | 1 + .../SQLite/6/upgrade_160_update_msgtype.sql | 1 + src/core/SQL/SQLite/6/upgrade_999_version.sql | 3 + src/core/basichandler.cpp | 14 +- src/core/basichandler.h | 3 +- src/core/core.cpp | 4 +- src/core/core.h | 3 +- src/core/coresession.cpp | 11 +- src/core/coresession.h | 2 +- src/core/ctcphandler.cpp | 19 +-- src/core/ircserverhandler.cpp | 111 +++++++------- src/core/networkconnection.cpp | 4 +- src/core/networkconnection.h | 4 +- src/core/sql.qrc | 98 +++++++------ src/core/sqlitestorage.cpp | 11 +- src/core/sqlitestorage.h | 4 +- src/core/storage.h | 7 +- src/core/userinputhandler.cpp | 135 +++++++++--------- src/core/userinputhandler.h | 54 +++---- src/qtui/nicklistwidget.cpp | 2 +- src/uisupport/bufferview.cpp | 4 +- src/uisupport/bufferviewfilter.cpp | 8 +- version.inc | 8 +- 87 files changed, 357 insertions(+), 286 deletions(-) delete mode 100644 src/core/SQL/SQLite/5/insert_buffer.sql delete mode 100644 src/core/SQL/SQLite/5/setup_999_version.sql rename src/core/SQL/SQLite/{5 => 6}/delete_backlog_by_uid.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/delete_backlog_for_network.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/delete_buffers_by_uid.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/delete_buffers_for_network.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/delete_ircservers_for_network.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/delete_network.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/delete_networks_by_uid.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/delete_quasseluser.sql (100%) create mode 100644 src/core/SQL/SQLite/6/insert_buffer.sql rename src/core/SQL/SQLite/{5 => 6}/insert_message.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/insert_network.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/insert_quasseluser.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/insert_sender.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/insert_server.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/select_authuser.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/select_bufferByName.sql (75%) rename src/core/SQL/SQLite/{5 => 6}/select_buffers.sql (66%) rename src/core/SQL/SQLite/{5 => 6}/select_lastMessage.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/select_messageRange.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/select_messages.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/select_messagesOffset.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/select_messagesSince.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/select_messagesSinceOffset.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/select_networkExists.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/select_networks_for_user.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/select_servers_for_network.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/select_userid.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/setup_000_quasseluser.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/setup_010_sender.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/setup_020_network.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/setup_030_buffer.sql (61%) rename src/core/SQL/SQLite/{5 => 6}/setup_040_buffer_idx.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/setup_050_buffer_cname_idx.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/setup_060_backlog.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/setup_070_coreinfo.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/setup_080_ircservers.sql (100%) create mode 100644 src/core/SQL/SQLite/6/setup_999_version.sql rename src/core/SQL/SQLite/{5 => 6}/update_network.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/update_username.sql (100%) rename src/core/SQL/SQLite/{5 => 6}/update_userpassword.sql (100%) create mode 100644 src/core/SQL/SQLite/6/upgrade_000_alter_buffertable.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_010_set_statusbuffertype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_020_set_channelbuffertype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_030_set_querybuffertype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_040_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_050_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_060_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_070_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_080_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_090_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_100_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_110_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_120_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_130_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_140_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_150_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_160_update_msgtype.sql create mode 100644 src/core/SQL/SQLite/6/upgrade_999_version.sql diff --git a/src/client/client.cpp b/src/client/client.cpp index 2ad6ffab..4d716ed0 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -446,7 +446,7 @@ void Client::checkForHighlight(Message &msg) const { const Network *net = network(msg.bufferInfo().networkId()); if(net && !net->myNick().isEmpty()) { QRegExp nickRegExp("^(.*\\W)?" + QRegExp::escape(net->myNick()) + "(\\W.*)?$"); - if((msg.type() == Message::Plain || msg.type() == Message::Notice || msg.type() == Message::Action) && nickRegExp.exactMatch(msg.text())) + if((msg.type() & (Message::Plain | Message::Notice | Message::Action)) && nickRegExp.exactMatch(msg.text())) msg.setFlags(msg.flags() | Message::Highlight); } } diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 74598fa1..83d57094 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -39,16 +39,8 @@ BufferItem::BufferItem(BufferInfo bufferInfo, AbstractTreeItem *parent) _bufferInfo(bufferInfo), _activity(NoActivity) { - // determine BufferType - if(bufferInfo.bufferName().isEmpty()) - _type = StatusType; - else if(isChannelName(bufferInfo.bufferName())) - _type = ChannelType; - else - _type = QueryType; - Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled; - if(bufferType() == QueryType) + if(bufferType() == BufferInfo::QueryBuffer) flags |= Qt::ItemIsDropEnabled; setFlags(flags); @@ -64,15 +56,15 @@ quint64 BufferItem::id() const { } bool BufferItem::isStatusBuffer() const { - return bufferType() == StatusType; + return bufferType() == BufferInfo::StatusBuffer; } -BufferItem::Type BufferItem::bufferType() const { - return _type; +BufferInfo::Type BufferItem::bufferType() const { + return bufferInfo().type(); } bool BufferItem::isActive() const { - if(bufferType() == ChannelType) + if(bufferType() == BufferInfo::ChannelBuffer) return _ircChannel; else return qobject_cast(parent())->isActive(); @@ -166,7 +158,7 @@ void BufferItem::ircChannelDestroyed() { } QString BufferItem::bufferName() const { - if(bufferType() == StatusType) + if(bufferType() == BufferInfo::StatusBuffer) return tr("Status Buffer"); else return bufferInfo().bufferName(); @@ -705,8 +697,8 @@ bool NetworkModel::dropMimeData(const QMimeData *data, Qt::DropAction action, in return false; // target must be a query - BufferItem::Type targetType = (BufferItem::Type)parent.data(NetworkModel::BufferTypeRole).toInt(); - if(targetType != BufferItem::QueryType) + BufferInfo::Type targetType = (BufferInfo::Type)parent.data(NetworkModel::BufferTypeRole).toInt(); + if(targetType != BufferInfo::QueryBuffer) return false; QList< QPair > bufferList = mimeDataToBufferList(data); @@ -726,8 +718,8 @@ bool NetworkModel::dropMimeData(const QMimeData *data, Qt::DropAction action, in Q_ASSERT(rootItem->childById(qHash(netId))->childById(qHash(bufferId))); // source must be a query too - BufferItem::Type sourceType = (BufferItem::Type)rootItem->childById(qHash(netId))->childById(qHash(bufferId))->data(0, BufferTypeRole).toInt(); - if(sourceType != BufferItem::QueryType) + BufferInfo::Type sourceType = (BufferInfo::Type)rootItem->childById(qHash(netId))->childById(qHash(bufferId))->data(0, BufferTypeRole).toInt(); + if(sourceType != BufferInfo::QueryBuffer) return false; // TODO: warn user about buffermerge! diff --git a/src/client/networkmodel.h b/src/client/networkmodel.h index c3dbaf47..8c36233f 100644 --- a/src/client/networkmodel.h +++ b/src/client/networkmodel.h @@ -62,15 +62,9 @@ public: QString bufferName() const; QString topic() const; int nickCount() const; - - enum Type { - StatusType, - ChannelType, - QueryType - }; bool isStatusBuffer() const; - Type bufferType() const; + BufferInfo::Type bufferType() const; bool isActive() const; @@ -106,7 +100,6 @@ private slots: private: BufferInfo _bufferInfo; ActivityLevel _activity; - Type _type; QDateTime _lastMsgInsert; QDateTime _lastSeen; diff --git a/src/common/bufferinfo.cpp b/src/common/bufferinfo.cpp index a63d703a..19e62791 100644 --- a/src/common/bufferinfo.cpp +++ b/src/common/bufferinfo.cpp @@ -30,14 +30,16 @@ BufferInfo::BufferInfo() : _bufferId(0), _netid(0), + _type(InvalidBuffer), _groupId(0), _bufferName(QString()) { } -BufferInfo::BufferInfo(BufferId id, NetworkId networkid, uint gid, QString buf) +BufferInfo::BufferInfo(BufferId id, NetworkId networkid, Type type, uint gid, QString buf) : _bufferId(id), _netid(networkid), + _type(type), _groupId(gid), _bufferName(buf) { @@ -56,18 +58,20 @@ QDebug operator<<(QDebug dbg, const BufferInfo &b) { } QDataStream &operator<<(QDataStream &out, const BufferInfo &bufferInfo) { - out << bufferInfo._bufferId << bufferInfo._netid << bufferInfo._groupId << bufferInfo._bufferName.toUtf8(); + out << bufferInfo._bufferId << bufferInfo._netid << (qint16)bufferInfo._type << bufferInfo._groupId << bufferInfo._bufferName.toUtf8(); return out; } QDataStream &operator>>(QDataStream &in, BufferInfo &bufferInfo) { QByteArray buffername; - in >> bufferInfo._bufferId >> bufferInfo._netid >> bufferInfo._groupId >> buffername; + qint16 bufferType; + in >> bufferInfo._bufferId >> bufferInfo._netid >> bufferType >> bufferInfo._groupId >> buffername; + bufferInfo._type = (BufferInfo::Type)bufferType; bufferInfo._bufferName = QString::fromUtf8(buffername); return in; } uint qHash(const BufferInfo &bufferid) { - return qHash(bufferid._bufferId.toInt()); + return qHash(bufferid._bufferId); } diff --git a/src/common/bufferinfo.h b/src/common/bufferinfo.h index 6a5a7798..6fb3de4b 100644 --- a/src/common/bufferinfo.h +++ b/src/common/bufferinfo.h @@ -28,11 +28,20 @@ class QDataStream; class BufferInfo { public: + enum Type { + InvalidBuffer = 0x00, + StatusBuffer = 0x01, + ChannelBuffer = 0x02, + QueryBuffer = 0x04, + GroupBuffer = 0x08 + }; + BufferInfo(); - BufferInfo(BufferId id, NetworkId networkid, uint gid = 0, QString buf = QString()); + BufferInfo(BufferId id, NetworkId networkid, Type type, uint gid = 0, QString buf = QString()); inline BufferId bufferId() const { return _bufferId; } inline NetworkId networkId() const { return _netid; } + inline Type type() const { return _type; } inline uint groupId() const { return _groupId; } QString bufferName() const; @@ -43,6 +52,7 @@ public: private: BufferId _bufferId; NetworkId _netid; + Type _type; uint _groupId; QString _bufferName; diff --git a/src/common/message.cpp b/src/common/message.cpp index 97cee42d..4a6ba919 100644 --- a/src/common/message.cpp +++ b/src/common/message.cpp @@ -176,13 +176,14 @@ QString Message::formattedToHtml(const QString &f) { */ QDataStream &operator<<(QDataStream &out, const Message &msg) { - out << (quint32)msg.timestamp().toTime_t() << (quint8)msg.type() << (quint8)msg.flags() + out << (quint32)msg.timestamp().toTime_t() << (quint32)msg.type() << (quint8)msg.flags() << msg.bufferInfo() << msg.sender().toUtf8() << msg.text().toUtf8(); return out; } QDataStream &operator>>(QDataStream &in, Message &msg) { - quint8 t, f; + quint8 f; + quint32 t; quint32 ts; QByteArray s, m; BufferInfo buf; diff --git a/src/common/message.h b/src/common/message.h index 17f5493a..b262b97a 100644 --- a/src/common/message.h +++ b/src/common/message.h @@ -33,25 +33,26 @@ class Message { public: /** The different types a message can have for display */ enum Type { - Plain, - Notice, - Action, - Nick, - Mode, - Join, - Part, - Quit, - Kick, - Kill, - Server, - Info, - Error + Plain = 0x0001, + Notice = 0x0002, + Action = 0x0004, + Nick = 0x0008, + Mode = 0x0010, + Join = 0x0020, + Part = 0x0040, + Quit = 0x0080, + Kick = 0x0100, + Kill = 0x0200, + Server = 0x0400, + Info = 0x0800, + Error = 0x1000 }; enum Flags { None = 0, Self = 1, - Highlight = 2 + Highlight = 2, + Redirected = 4 }; Q_DECLARE_FLAGS(MessageFlags, Flags) diff --git a/src/core/SQL/SQLite/5/insert_buffer.sql b/src/core/SQL/SQLite/5/insert_buffer.sql deleted file mode 100644 index 013505a5..00000000 --- a/src/core/SQL/SQLite/5/insert_buffer.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO buffer (userid, networkid, buffername, buffercname) -VALUES (:userid, :networkid, :buffername, :buffercname) diff --git a/src/core/SQL/SQLite/5/setup_999_version.sql b/src/core/SQL/SQLite/5/setup_999_version.sql deleted file mode 100644 index 11990519..00000000 --- a/src/core/SQL/SQLite/5/setup_999_version.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '5') diff --git a/src/core/SQL/SQLite/5/delete_backlog_by_uid.sql b/src/core/SQL/SQLite/6/delete_backlog_by_uid.sql similarity index 100% rename from src/core/SQL/SQLite/5/delete_backlog_by_uid.sql rename to src/core/SQL/SQLite/6/delete_backlog_by_uid.sql diff --git a/src/core/SQL/SQLite/5/delete_backlog_for_network.sql b/src/core/SQL/SQLite/6/delete_backlog_for_network.sql similarity index 100% rename from src/core/SQL/SQLite/5/delete_backlog_for_network.sql rename to src/core/SQL/SQLite/6/delete_backlog_for_network.sql diff --git a/src/core/SQL/SQLite/5/delete_buffers_by_uid.sql b/src/core/SQL/SQLite/6/delete_buffers_by_uid.sql similarity index 100% rename from src/core/SQL/SQLite/5/delete_buffers_by_uid.sql rename to src/core/SQL/SQLite/6/delete_buffers_by_uid.sql diff --git a/src/core/SQL/SQLite/5/delete_buffers_for_network.sql b/src/core/SQL/SQLite/6/delete_buffers_for_network.sql similarity index 100% rename from src/core/SQL/SQLite/5/delete_buffers_for_network.sql rename to src/core/SQL/SQLite/6/delete_buffers_for_network.sql diff --git a/src/core/SQL/SQLite/5/delete_ircservers_for_network.sql b/src/core/SQL/SQLite/6/delete_ircservers_for_network.sql similarity index 100% rename from src/core/SQL/SQLite/5/delete_ircservers_for_network.sql rename to src/core/SQL/SQLite/6/delete_ircservers_for_network.sql diff --git a/src/core/SQL/SQLite/5/delete_network.sql b/src/core/SQL/SQLite/6/delete_network.sql similarity index 100% rename from src/core/SQL/SQLite/5/delete_network.sql rename to src/core/SQL/SQLite/6/delete_network.sql diff --git a/src/core/SQL/SQLite/5/delete_networks_by_uid.sql b/src/core/SQL/SQLite/6/delete_networks_by_uid.sql similarity index 100% rename from src/core/SQL/SQLite/5/delete_networks_by_uid.sql rename to src/core/SQL/SQLite/6/delete_networks_by_uid.sql diff --git a/src/core/SQL/SQLite/5/delete_quasseluser.sql b/src/core/SQL/SQLite/6/delete_quasseluser.sql similarity index 100% rename from src/core/SQL/SQLite/5/delete_quasseluser.sql rename to src/core/SQL/SQLite/6/delete_quasseluser.sql diff --git a/src/core/SQL/SQLite/6/insert_buffer.sql b/src/core/SQL/SQLite/6/insert_buffer.sql new file mode 100644 index 00000000..51202ba5 --- /dev/null +++ b/src/core/SQL/SQLite/6/insert_buffer.sql @@ -0,0 +1,2 @@ +INSERT INTO buffer (userid, networkid, buffername, buffercname, buffertype) +VALUES (:userid, :networkid, :buffername, :buffercname, :buffertype) diff --git a/src/core/SQL/SQLite/5/insert_message.sql b/src/core/SQL/SQLite/6/insert_message.sql similarity index 100% rename from src/core/SQL/SQLite/5/insert_message.sql rename to src/core/SQL/SQLite/6/insert_message.sql diff --git a/src/core/SQL/SQLite/5/insert_network.sql b/src/core/SQL/SQLite/6/insert_network.sql similarity index 100% rename from src/core/SQL/SQLite/5/insert_network.sql rename to src/core/SQL/SQLite/6/insert_network.sql diff --git a/src/core/SQL/SQLite/5/insert_quasseluser.sql b/src/core/SQL/SQLite/6/insert_quasseluser.sql similarity index 100% rename from src/core/SQL/SQLite/5/insert_quasseluser.sql rename to src/core/SQL/SQLite/6/insert_quasseluser.sql diff --git a/src/core/SQL/SQLite/5/insert_sender.sql b/src/core/SQL/SQLite/6/insert_sender.sql similarity index 100% rename from src/core/SQL/SQLite/5/insert_sender.sql rename to src/core/SQL/SQLite/6/insert_sender.sql diff --git a/src/core/SQL/SQLite/5/insert_server.sql b/src/core/SQL/SQLite/6/insert_server.sql similarity index 100% rename from src/core/SQL/SQLite/5/insert_server.sql rename to src/core/SQL/SQLite/6/insert_server.sql diff --git a/src/core/SQL/SQLite/5/select_authuser.sql b/src/core/SQL/SQLite/6/select_authuser.sql similarity index 100% rename from src/core/SQL/SQLite/5/select_authuser.sql rename to src/core/SQL/SQLite/6/select_authuser.sql diff --git a/src/core/SQL/SQLite/5/select_bufferByName.sql b/src/core/SQL/SQLite/6/select_bufferByName.sql similarity index 75% rename from src/core/SQL/SQLite/5/select_bufferByName.sql rename to src/core/SQL/SQLite/6/select_bufferByName.sql index de808766..70d69c3d 100644 --- a/src/core/SQL/SQLite/5/select_bufferByName.sql +++ b/src/core/SQL/SQLite/6/select_bufferByName.sql @@ -1,3 +1,3 @@ -SELECT bufferid +SELECT bufferid, buffertype, groupid FROM buffer WHERE buffer.networkid = :networkid AND buffer.userid = :userid AND buffer.buffercname = :buffercname diff --git a/src/core/SQL/SQLite/5/select_buffers.sql b/src/core/SQL/SQLite/6/select_buffers.sql similarity index 66% rename from src/core/SQL/SQLite/5/select_buffers.sql rename to src/core/SQL/SQLite/6/select_buffers.sql index 0e096e67..41fce3b1 100644 --- a/src/core/SQL/SQLite/5/select_buffers.sql +++ b/src/core/SQL/SQLite/6/select_buffers.sql @@ -1,4 +1,4 @@ -SELECT DISTINCT buffer.bufferid, buffername, network.networkid +SELECT DISTINCT buffer.bufferid, network.networkid, buffertype, groupid, buffername FROM buffer JOIN network ON buffer.networkid = network.networkid JOIN backlog ON buffer.bufferid = backlog.bufferid diff --git a/src/core/SQL/SQLite/5/select_lastMessage.sql b/src/core/SQL/SQLite/6/select_lastMessage.sql similarity index 100% rename from src/core/SQL/SQLite/5/select_lastMessage.sql rename to src/core/SQL/SQLite/6/select_lastMessage.sql diff --git a/src/core/SQL/SQLite/5/select_messageRange.sql b/src/core/SQL/SQLite/6/select_messageRange.sql similarity index 100% rename from src/core/SQL/SQLite/5/select_messageRange.sql rename to src/core/SQL/SQLite/6/select_messageRange.sql diff --git a/src/core/SQL/SQLite/5/select_messages.sql b/src/core/SQL/SQLite/6/select_messages.sql similarity index 100% rename from src/core/SQL/SQLite/5/select_messages.sql rename to src/core/SQL/SQLite/6/select_messages.sql diff --git a/src/core/SQL/SQLite/5/select_messagesOffset.sql b/src/core/SQL/SQLite/6/select_messagesOffset.sql similarity index 100% rename from src/core/SQL/SQLite/5/select_messagesOffset.sql rename to src/core/SQL/SQLite/6/select_messagesOffset.sql diff --git a/src/core/SQL/SQLite/5/select_messagesSince.sql b/src/core/SQL/SQLite/6/select_messagesSince.sql similarity index 100% rename from src/core/SQL/SQLite/5/select_messagesSince.sql rename to src/core/SQL/SQLite/6/select_messagesSince.sql diff --git a/src/core/SQL/SQLite/5/select_messagesSinceOffset.sql b/src/core/SQL/SQLite/6/select_messagesSinceOffset.sql similarity index 100% rename from src/core/SQL/SQLite/5/select_messagesSinceOffset.sql rename to src/core/SQL/SQLite/6/select_messagesSinceOffset.sql diff --git a/src/core/SQL/SQLite/5/select_networkExists.sql b/src/core/SQL/SQLite/6/select_networkExists.sql similarity index 100% rename from src/core/SQL/SQLite/5/select_networkExists.sql rename to src/core/SQL/SQLite/6/select_networkExists.sql diff --git a/src/core/SQL/SQLite/5/select_networks_for_user.sql b/src/core/SQL/SQLite/6/select_networks_for_user.sql similarity index 100% rename from src/core/SQL/SQLite/5/select_networks_for_user.sql rename to src/core/SQL/SQLite/6/select_networks_for_user.sql diff --git a/src/core/SQL/SQLite/5/select_servers_for_network.sql b/src/core/SQL/SQLite/6/select_servers_for_network.sql similarity index 100% rename from src/core/SQL/SQLite/5/select_servers_for_network.sql rename to src/core/SQL/SQLite/6/select_servers_for_network.sql diff --git a/src/core/SQL/SQLite/5/select_userid.sql b/src/core/SQL/SQLite/6/select_userid.sql similarity index 100% rename from src/core/SQL/SQLite/5/select_userid.sql rename to src/core/SQL/SQLite/6/select_userid.sql diff --git a/src/core/SQL/SQLite/5/setup_000_quasseluser.sql b/src/core/SQL/SQLite/6/setup_000_quasseluser.sql similarity index 100% rename from src/core/SQL/SQLite/5/setup_000_quasseluser.sql rename to src/core/SQL/SQLite/6/setup_000_quasseluser.sql diff --git a/src/core/SQL/SQLite/5/setup_010_sender.sql b/src/core/SQL/SQLite/6/setup_010_sender.sql similarity index 100% rename from src/core/SQL/SQLite/5/setup_010_sender.sql rename to src/core/SQL/SQLite/6/setup_010_sender.sql diff --git a/src/core/SQL/SQLite/5/setup_020_network.sql b/src/core/SQL/SQLite/6/setup_020_network.sql similarity index 100% rename from src/core/SQL/SQLite/5/setup_020_network.sql rename to src/core/SQL/SQLite/6/setup_020_network.sql diff --git a/src/core/SQL/SQLite/5/setup_030_buffer.sql b/src/core/SQL/SQLite/6/setup_030_buffer.sql similarity index 61% rename from src/core/SQL/SQLite/5/setup_030_buffer.sql rename to src/core/SQL/SQLite/6/setup_030_buffer.sql index 4387d5a4..c9f82859 100644 --- a/src/core/SQL/SQLite/5/setup_030_buffer.sql +++ b/src/core/SQL/SQLite/6/setup_030_buffer.sql @@ -4,5 +4,6 @@ CREATE TABLE buffer ( groupid INTEGER, networkid INTEGER NOT NULL, buffername TEXT NOT NULL, - buffercname TEXT NOT NULL -- CANONICAL BUFFER NAME (lowercase version) + buffercname TEXT NOT NULL, -- CANONICAL BUFFER NAME (lowercase version) + buffertype INTEGER NOT NULL DEFAULT 0 ) diff --git a/src/core/SQL/SQLite/5/setup_040_buffer_idx.sql b/src/core/SQL/SQLite/6/setup_040_buffer_idx.sql similarity index 100% rename from src/core/SQL/SQLite/5/setup_040_buffer_idx.sql rename to src/core/SQL/SQLite/6/setup_040_buffer_idx.sql diff --git a/src/core/SQL/SQLite/5/setup_050_buffer_cname_idx.sql b/src/core/SQL/SQLite/6/setup_050_buffer_cname_idx.sql similarity index 100% rename from src/core/SQL/SQLite/5/setup_050_buffer_cname_idx.sql rename to src/core/SQL/SQLite/6/setup_050_buffer_cname_idx.sql diff --git a/src/core/SQL/SQLite/5/setup_060_backlog.sql b/src/core/SQL/SQLite/6/setup_060_backlog.sql similarity index 100% rename from src/core/SQL/SQLite/5/setup_060_backlog.sql rename to src/core/SQL/SQLite/6/setup_060_backlog.sql diff --git a/src/core/SQL/SQLite/5/setup_070_coreinfo.sql b/src/core/SQL/SQLite/6/setup_070_coreinfo.sql similarity index 100% rename from src/core/SQL/SQLite/5/setup_070_coreinfo.sql rename to src/core/SQL/SQLite/6/setup_070_coreinfo.sql diff --git a/src/core/SQL/SQLite/5/setup_080_ircservers.sql b/src/core/SQL/SQLite/6/setup_080_ircservers.sql similarity index 100% rename from src/core/SQL/SQLite/5/setup_080_ircservers.sql rename to src/core/SQL/SQLite/6/setup_080_ircservers.sql diff --git a/src/core/SQL/SQLite/6/setup_999_version.sql b/src/core/SQL/SQLite/6/setup_999_version.sql new file mode 100644 index 00000000..8598df24 --- /dev/null +++ b/src/core/SQL/SQLite/6/setup_999_version.sql @@ -0,0 +1 @@ +INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '6') diff --git a/src/core/SQL/SQLite/5/update_network.sql b/src/core/SQL/SQLite/6/update_network.sql similarity index 100% rename from src/core/SQL/SQLite/5/update_network.sql rename to src/core/SQL/SQLite/6/update_network.sql diff --git a/src/core/SQL/SQLite/5/update_username.sql b/src/core/SQL/SQLite/6/update_username.sql similarity index 100% rename from src/core/SQL/SQLite/5/update_username.sql rename to src/core/SQL/SQLite/6/update_username.sql diff --git a/src/core/SQL/SQLite/5/update_userpassword.sql b/src/core/SQL/SQLite/6/update_userpassword.sql similarity index 100% rename from src/core/SQL/SQLite/5/update_userpassword.sql rename to src/core/SQL/SQLite/6/update_userpassword.sql diff --git a/src/core/SQL/SQLite/6/upgrade_000_alter_buffertable.sql b/src/core/SQL/SQLite/6/upgrade_000_alter_buffertable.sql new file mode 100644 index 00000000..08cf7369 --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_000_alter_buffertable.sql @@ -0,0 +1,2 @@ +ALTER TABLE buffer +ADD COLUMN buffertype INTEGER NOT NULL DEFAULT 0 diff --git a/src/core/SQL/SQLite/6/upgrade_010_set_statusbuffertype.sql b/src/core/SQL/SQLite/6/upgrade_010_set_statusbuffertype.sql new file mode 100644 index 00000000..2aafab3e --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_010_set_statusbuffertype.sql @@ -0,0 +1,3 @@ +UPDATE buffer +SET buffertype = 1 +WHERE buffercname = '' diff --git a/src/core/SQL/SQLite/6/upgrade_020_set_channelbuffertype.sql b/src/core/SQL/SQLite/6/upgrade_020_set_channelbuffertype.sql new file mode 100644 index 00000000..e6ee75a5 --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_020_set_channelbuffertype.sql @@ -0,0 +1,3 @@ +UPDATE buffer +SET buffertype = 2 +WHERE buffercname LIKE '#%' OR buffercname LIKE '&%' diff --git a/src/core/SQL/SQLite/6/upgrade_030_set_querybuffertype.sql b/src/core/SQL/SQLite/6/upgrade_030_set_querybuffertype.sql new file mode 100644 index 00000000..0beb55b1 --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_030_set_querybuffertype.sql @@ -0,0 +1,3 @@ +UPDATE buffer +SET buffertype = 4 +WHERE buffertype = 0 diff --git a/src/core/SQL/SQLite/6/upgrade_040_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_040_update_msgtype.sql new file mode 100644 index 00000000..c10917ce --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_040_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 4069 WHERE type = 12 diff --git a/src/core/SQL/SQLite/6/upgrade_050_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_050_update_msgtype.sql new file mode 100644 index 00000000..394f08b6 --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_050_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 2048 WHERE type = 11 diff --git a/src/core/SQL/SQLite/6/upgrade_060_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_060_update_msgtype.sql new file mode 100644 index 00000000..96bea51f --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_060_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 1024 WHERE type = 10 diff --git a/src/core/SQL/SQLite/6/upgrade_070_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_070_update_msgtype.sql new file mode 100644 index 00000000..b12637c1 --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_070_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 512 WHERE type = 9 diff --git a/src/core/SQL/SQLite/6/upgrade_080_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_080_update_msgtype.sql new file mode 100644 index 00000000..2eccc678 --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_080_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 256 WHERE type = 8 diff --git a/src/core/SQL/SQLite/6/upgrade_090_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_090_update_msgtype.sql new file mode 100644 index 00000000..ff3ffe0f --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_090_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 128 WHERE type = 7 diff --git a/src/core/SQL/SQLite/6/upgrade_100_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_100_update_msgtype.sql new file mode 100644 index 00000000..96fd6a76 --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_100_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 64 WHERE type = 6 diff --git a/src/core/SQL/SQLite/6/upgrade_110_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_110_update_msgtype.sql new file mode 100644 index 00000000..688c808f --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_110_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 32 WHERE type = 5 diff --git a/src/core/SQL/SQLite/6/upgrade_120_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_120_update_msgtype.sql new file mode 100644 index 00000000..3a737e63 --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_120_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 16 WHERE type = 4 diff --git a/src/core/SQL/SQLite/6/upgrade_130_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_130_update_msgtype.sql new file mode 100644 index 00000000..ed1851b4 --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_130_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 8 WHERE type = 3 diff --git a/src/core/SQL/SQLite/6/upgrade_140_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_140_update_msgtype.sql new file mode 100644 index 00000000..3782558d --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_140_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 4 WHERE type = 2 diff --git a/src/core/SQL/SQLite/6/upgrade_150_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_150_update_msgtype.sql new file mode 100644 index 00000000..adc6eee2 --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_150_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 2 WHERE type = 1 diff --git a/src/core/SQL/SQLite/6/upgrade_160_update_msgtype.sql b/src/core/SQL/SQLite/6/upgrade_160_update_msgtype.sql new file mode 100644 index 00000000..70692c8b --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_160_update_msgtype.sql @@ -0,0 +1 @@ +UPDATE backlog SET type = 1 WHERE type = 0 diff --git a/src/core/SQL/SQLite/6/upgrade_999_version.sql b/src/core/SQL/SQLite/6/upgrade_999_version.sql new file mode 100644 index 00000000..8206626a --- /dev/null +++ b/src/core/SQL/SQLite/6/upgrade_999_version.sql @@ -0,0 +1,3 @@ +UPDATE coreinfo +SET value='6' +WHERE key = 'schemaversion' diff --git a/src/core/basichandler.cpp b/src/core/basichandler.cpp index 732c7976..3c981515 100644 --- a/src/core/basichandler.cpp +++ b/src/core/basichandler.cpp @@ -29,8 +29,8 @@ BasicHandler::BasicHandler(NetworkConnection *parent) defaultHandler(-1), initDone(false) { - connect(this, SIGNAL(displayMsg(Message::Type, QString, QString, QString, quint8)), - server, SIGNAL(displayMsg(Message::Type, QString, QString, QString, quint8))); + connect(this, SIGNAL(displayMsg(Message::Type, BufferInfo::Type, QString, QString, QString, quint8)), + server, SIGNAL(displayMsg(Message::Type, BufferInfo::Type, QString, QString, QString, quint8))); connect(this, SIGNAL(putCmd(QString, QStringList, QString)), server, SLOT(putCmd(QString, QStringList, QString))); @@ -98,3 +98,13 @@ void BasicHandler::handle(const QString &member, QGenericArgument val0, Network *BasicHandler::network() const { return server->network(); } + +BufferInfo::Type BasicHandler::typeByTarget(const QString &target) const { + if(target.isEmpty()) + return BufferInfo::StatusBuffer; + + if(network()->isChannelName(target)) + return BufferInfo::ChannelBuffer; + + return BufferInfo::QueryBuffer; +} diff --git a/src/core/basichandler.h b/src/core/basichandler.h index a3cc5a89..e8f67987 100644 --- a/src/core/basichandler.h +++ b/src/core/basichandler.h @@ -41,7 +41,7 @@ public: QStringList providesHandlers(); signals: - void displayMsg(Message::Type, QString target, QString text, QString sender = "", quint8 flags = Message::None); + void displayMsg(Message::Type, BufferInfo::Type, QString target, QString text, QString sender = "", quint8 flags = Message::None); void putCmd(QString cmd, QStringList params, QString prefix = 0); void putRawLine(QString msg); @@ -55,6 +55,7 @@ protected: NetworkConnection *server; Network *network() const; + BufferInfo::Type typeByTarget(const QString &target) const; private: const QHash &handlerHash(); diff --git a/src/core/core.cpp b/src/core/core.cpp index 407eac8f..69f34c39 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -235,9 +235,9 @@ NetworkId Core::networkId(UserId user, const QString &network) { return instance()->storage->getNetworkId(user, network); } -BufferInfo Core::bufferInfo(UserId user, const NetworkId &networkId, const QString &buffer) { +BufferInfo Core::bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer) { QMutexLocker locker(&mutex); - return instance()->storage->getBufferInfo(user, networkId, buffer); + return instance()->storage->getBufferInfo(user, networkId, type, buffer); } MsgId Core::storeMessage(const Message &message) { diff --git a/src/core/core.h b/src/core/core.h index 7f1f9c20..67b3a553 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -102,10 +102,11 @@ class Core : public QObject { * * \param user The core user who owns this buffername * \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) * \return The BufferInfo corresponding to the given network and buffer name, or 0 if not found */ - static BufferInfo bufferInfo(UserId user, const NetworkId &networkId, const QString &buffer = ""); + static BufferInfo bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type, const QString &buffer = ""); //! Store a Message in the backlog. /** \note This method is threadsafe. diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 33aeae8c..17820f99 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -217,7 +217,8 @@ void CoreSession::attachNetworkConnection(NetworkConnection *conn) { //signalProxy()->attachSignal(conn, SIGNAL(connected(NetworkId)), SIGNAL(networkConnected(NetworkId))); //signalProxy()->attachSignal(conn, SIGNAL(disconnected(NetworkId)), SIGNAL(networkDisconnected(NetworkId))); - connect(conn, SIGNAL(displayMsg(Message::Type, QString, QString, QString, quint8)), this, SLOT(recvMessageFromServer(Message::Type, QString, QString, QString, quint8))); + connect(conn, SIGNAL(displayMsg(Message::Type, BufferInfo::Type, QString, QString, QString, quint8)), + this, SLOT(recvMessageFromServer(Message::Type, BufferInfo::Type, QString, QString, QString, quint8))); connect(conn, SIGNAL(displayStatusMsg(QString)), this, SLOT(recvStatusMsgFromServer(QString))); } @@ -249,7 +250,7 @@ SignalProxy *CoreSession::signalProxy() const { // FIXME we need a sane way for creating buffers! void CoreSession::networkConnected(NetworkId networkid) { - Core::bufferInfo(user(), networkid); // create status buffer + Core::bufferInfo(user(), networkid, BufferInfo::StatusBuffer); // create status buffer } void CoreSession::networkDisconnected(NetworkId networkid) { @@ -264,7 +265,7 @@ void CoreSession::networkDisconnected(NetworkId networkid) { void CoreSession::msgFromClient(BufferInfo bufinfo, QString msg) { NetworkConnection *conn = networkConnection(bufinfo.networkId()); if(conn) { - conn->userInput(bufinfo.bufferName(), msg); + conn->userInput(bufinfo, msg); } else { qWarning() << "Trying to send to unconnected network!"; } @@ -272,11 +273,11 @@ void CoreSession::msgFromClient(BufferInfo bufinfo, QString msg) { // 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) { +void CoreSession::recvMessageFromServer(Message::Type type, BufferInfo::Type bufferType, QString target, QString text, QString sender, quint8 flags) { NetworkConnection *netCon = qobject_cast(this->sender()); Q_ASSERT(netCon); - BufferInfo bufferInfo = Core::bufferInfo(user(), netCon->networkId(), target); + BufferInfo bufferInfo = Core::bufferInfo(user(), netCon->networkId(), bufferType, target); Message msg(bufferInfo, type, text, sender, flags); msg.setMsgId(Core::storeMessage(msg)); Q_ASSERT(msg.msgId() != 0); diff --git a/src/core/coresession.h b/src/core/coresession.h index 208095c2..06f7ee65 100644 --- a/src/core/coresession.h +++ b/src/core/coresession.h @@ -133,7 +133,7 @@ signals: private slots: void recvStatusMsgFromServer(QString msg); - void recvMessageFromServer(Message::Type, QString target, QString text, QString sender = "", quint8 flags = Message::None); + void recvMessageFromServer(Message::Type, BufferInfo::Type, QString target, QString text, QString sender = "", quint8 flags = Message::None); void networkConnected(NetworkId networkid); void networkDisconnected(NetworkId networkid); diff --git a/src/core/ctcphandler.cpp b/src/core/ctcphandler.cpp index a3bd3087..e7f1e302 100644 --- a/src/core/ctcphandler.cpp +++ b/src/core/ctcphandler.cpp @@ -22,6 +22,7 @@ #include "global.h" #include "util.h" #include "message.h" +#include "network.h" CtcpHandler::CtcpHandler(NetworkConnection *parent) : BasicHandler(parent) { @@ -92,10 +93,12 @@ void CtcpHandler::parse(Message::Type messageType, QString prefix, QString targe ? CtcpReply : CtcpQuery; + BufferInfo::Type bufferType = typeByTarget(target); + // extract tagged / extended data while(dequotedMessage.contains(XDELIM)) { if(dequotedMessage.indexOf(XDELIM) > 0) - emit displayMsg(messageType, target, dequotedMessage.section(XDELIM,0,0), prefix); + emit displayMsg(messageType, bufferType, target, dequotedMessage.section(XDELIM,0,0), prefix); // messages << dequotedMessage.section(XDELIM,0,0), prefix); ctcp = XdelimDequote(dequotedMessage.section(XDELIM,1,1)); dequotedMessage = dequotedMessage.section(XDELIM,2,2); @@ -108,7 +111,7 @@ void CtcpHandler::parse(Message::Type messageType, QString prefix, QString targe } if(!dequotedMessage.isEmpty()) - emit displayMsg(messageType, target, dequotedMessage, prefix); + emit displayMsg(messageType, bufferType, target, dequotedMessage, prefix); } @@ -133,19 +136,19 @@ void CtcpHandler::reply(QString bufname, QString ctcpTag, QString message) { //******************************/ void CtcpHandler::handleAction(CtcpType ctcptype, QString prefix, QString target, QString param) { Q_UNUSED(ctcptype) - emit displayMsg(Message::Action, target, param, prefix); + emit displayMsg(Message::Action, typeByTarget(target), target, param, prefix); } void CtcpHandler::handlePing(CtcpType ctcptype, QString prefix, QString target, QString param) { Q_UNUSED(target) if(ctcptype == CtcpQuery) { reply(nickFromMask(prefix), "PING", param); - emit displayMsg(Message::Server, "", tr("Received CTCP PING request from %1").arg(prefix)); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Received CTCP PING request from %1").arg(prefix)); } else { // display ping answer uint now = QDateTime::currentDateTime().toTime_t(); uint then = QDateTime().fromTime_t(param.toInt()).toTime_t(); - emit displayMsg(Message::Server, "", tr("Received CTCP PING answer from %1 with %2 seconds round trip time").arg(prefix).arg(now-then)); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Received CTCP PING answer from %1 with %2 seconds round trip time").arg(prefix).arg(now-then)); } } @@ -155,10 +158,10 @@ void CtcpHandler::handleVersion(CtcpType ctcptype, QString prefix, QString targe // FIXME use real Info about quassel :) reply(nickFromMask(prefix), "VERSION", QString("Quassel IRC (v%1 build >= %2) -- http://www.quassel-irc.org") .arg(Global::quasselVersion).arg(Global::quasselBuild)); - emit displayMsg(Message::Server, "", tr("Received CTCP VERSION request by %1").arg(prefix)); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Received CTCP VERSION request by %1").arg(prefix)); } else { // display Version answer - emit displayMsg(Message::Server, "", tr("Received CTCP VERSION answer from %1: %2").arg(prefix).arg(param)); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Received CTCP VERSION answer from %1: %2").arg(prefix).arg(param)); } } @@ -166,7 +169,7 @@ void CtcpHandler::defaultHandler(QString cmd, CtcpType ctcptype, QString prefix, Q_UNUSED(ctcptype); Q_UNUSED(target); Q_UNUSED(param); - emit displayMsg(Message::Error, "", tr("Received unknown CTCP %1 by %2").arg(cmd).arg(prefix)); + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Received unknown CTCP %1 by %2").arg(cmd).arg(prefix)); } diff --git a/src/core/ircserverhandler.cpp b/src/core/ircserverhandler.cpp index b5b58769..87bc7e53 100644 --- a/src/core/ircserverhandler.cpp +++ b/src/core/ircserverhandler.cpp @@ -130,7 +130,7 @@ void IrcServerHandler::handleServerMsg(QByteArray msg) { handle(cmd, Q_ARG(QString, prefix), Q_ARG(QList, params)); //handle(cmd, Q_ARG(QString, prefix)); } catch(Exception e) { - emit displayMsg(Message::Error, "", e.msg()); + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", e.msg()); } } @@ -146,24 +146,29 @@ void IrcServerHandler::defaultHandler(QString cmd, QString prefix, QListisChannelName(target) + ? BufferInfo::ChannelBuffer + : BufferInfo::QueryBuffer; + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", params.join(" ") + " " + target, prefix); + emit displayMsg(Message::Error, bufferType, target, params.join(" ") + " " + target, prefix); break; } case 402: case 403: case 404: case 406: case 408: case 415: case 421: case 442: { QString channelName = params.takeFirst(); - emit displayMsg(Message::Error, "", params.join(" ") + " " + channelName, prefix); + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", params.join(" ") + " " + channelName, prefix); break; } // Server error messages which will be displayed with a colon between the first param and the rest @@ -171,7 +176,7 @@ void IrcServerHandler::defaultHandler(QString cmd, QString prefix, QList params) { Q_ASSERT(params.count() == 1); QString channel = serverDecode(params[0]); IrcUser *ircuser = network()->updateNickFromMask(prefix); - emit displayMsg(Message::Join, channel, channel, prefix); + emit displayMsg(Message::Join, BufferInfo::ChannelBuffer, channel, channel, prefix); //qDebug() << "IrcServerHandler::handleJoin()" << prefix << params; ircuser->joinChannel(channel); } @@ -215,18 +220,18 @@ void IrcServerHandler::handleKick(QString prefix, QList params) { else msg = victim->nick(); - emit displayMsg(Message::Kick, channel, msg, prefix); + emit displayMsg(Message::Kick, BufferInfo::ChannelBuffer, channel, msg, prefix); } void IrcServerHandler::handleMode(QString prefix, QList params) { if(params.count() < 2) { - emit displayMsg(Message::Error, "", tr("Received invalid MODE from %s: %s").arg(prefix).arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Received invalid MODE from %s: %s").arg(prefix).arg(serverDecode(params).join(" "))); return; } if(network()->isChannelName(params[0])) { // Channel Modes - emit displayMsg(Message::Mode, serverDecode(params[0]), serverDecode(params).join(" "), prefix); + emit displayMsg(Message::Mode, BufferInfo::ChannelBuffer, serverDecode(params[0]), serverDecode(params).join(" "), prefix); IrcChannel *channel = network()->ircChannel(params.takeFirst()); // FIXME: currently the IrcChannels only support PREFIX-Modes for users @@ -257,7 +262,8 @@ void IrcServerHandler::handleMode(QString prefix, QList params) { } else { // pure User Modes - emit displayMsg(Message::Mode, "", serverDecode(params).join(" "), prefix); + // FIXME: redirect + emit displayMsg(Message::Mode, BufferInfo::StatusBuffer, "", serverDecode(params).join(" "), prefix); } } @@ -267,13 +273,13 @@ void IrcServerHandler::handleNick(QString prefix, QList params) { QString newnick = serverDecode(params[0]); QString oldnick = ircuser->nick(); - foreach(QString channel, ircuser->channels()) { - if(network()->isMyNick(oldnick)) { - emit displayMsg(Message::Nick, channel, newnick, newnick); - } else { - emit displayMsg(Message::Nick, channel, newnick, prefix); - } - } + QString sender = network()->isMyNick(oldnick) + ? newnick + : prefix; + + foreach(QString channel, ircuser->channels()) + emit displayMsg(Message::Nick, BufferInfo::ChannelBuffer, channel, newnick, sender); + ircuser->setNick(newnick); } @@ -285,7 +291,7 @@ void IrcServerHandler::handleNotice(QString prefix, QList params) { // check if it's only a Server Message or if it's a regular Notice if(network()->currentServer().isEmpty() || network()->currentServer() == prefix) { - emit displayMsg(Message::Server, "", serverDecode(params[1]), prefix); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", serverDecode(params[1]), prefix); return; } @@ -313,7 +319,7 @@ void IrcServerHandler::handlePart(QString prefix, QList params) { if(params.count() > 1) msg = userDecode(ircuser->nick(), params[1]); - emit displayMsg(Message::Part, channel, msg, prefix); + emit displayMsg(Message::Part, BufferInfo::ChannelBuffer, channel, msg, prefix); } void IrcServerHandler::handlePing(QString prefix, QList params) { @@ -347,7 +353,7 @@ void IrcServerHandler::handleQuit(QString prefix, QList params) { msg = userDecode(ircuser->nick(), params[0]); foreach(QString channel, ircuser->channels()) - emit displayMsg(Message::Quit, channel, msg, prefix); + emit displayMsg(Message::Quit, BufferInfo::ChannelBuffer, channel, msg, prefix); network()->removeIrcUser(nickFromMask(prefix)); } @@ -360,7 +366,7 @@ void IrcServerHandler::handleTopic(QString prefix, QList params) { network()->ircChannel(channel)->setTopic(topic); - emit displayMsg(Message::Server, channel, tr("%1 has changed topic for %2 to: \"%3\"").arg(ircuser->nick()).arg(channel).arg(topic)); + emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel, tr("%1 has changed topic for %2 to: \"%3\"").arg(ircuser->nick()).arg(channel).arg(topic)); } /* RPL_WELCOME */ @@ -371,7 +377,7 @@ void IrcServerHandler::handle001(QString prefix, QList params) { network()->setCurrentServer(prefix); network()->setMyNick(nickFromMask(myhostmask)); - emit displayMsg(Message::Server, "", param, prefix); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", param, prefix); } /* RPL_ISUPPORT */ @@ -418,19 +424,20 @@ void IrcServerHandler::handle301(QString prefix, QList params) { ircuser->setAway(true); } + // FIXME: proper redirection needed if(_whois) { - emit displayMsg(Message::Server, "", tr("[Whois] %1 is away: \"%2\"").arg(nickName).arg(awayMessage)); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is away: \"%2\"").arg(nickName).arg(awayMessage)); } else { if(ircuser) { int now = QDateTime::currentDateTime().toTime_t(); int silenceTime = 60; if(ircuser->lastAwayMessage() + silenceTime < now) { - emit displayMsg(Message::Server, params[0], tr("%1 is away: \"%2\"").arg(nickName).arg(awayMessage)); + emit displayMsg(Message::Server, BufferInfo::QueryBuffer, params[0], tr("%1 is away: \"%2\"").arg(nickName).arg(awayMessage)); } ircuser->setLastAwayMessage(now); } else { // probably should not happen - emit displayMsg(Message::Server, params[0], tr("%1 is away: \"%2\"").arg(nickName).arg(awayMessage)); + emit displayMsg(Message::Server, BufferInfo::QueryBuffer, params[0], tr("%1 is away: \"%2\"").arg(nickName).arg(awayMessage)); } } } @@ -445,8 +452,7 @@ void IrcServerHandler::handle311(QString prefix, QList params) { ircuser->setHost(serverDecode(params[2])); ircuser->setRealName(serverDecode(params.last())); } - emit displayMsg(Message::Server, "", tr("[Whois] %1") - .arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1") .arg(serverDecode(params).join(" "))); } /* RPL_WHOISSERVER - " :" */ @@ -457,9 +463,9 @@ void IrcServerHandler::handle312(QString prefix, QList params) { ircuser->setServer(serverDecode(params[1])); } if(_whois) { - emit displayMsg(Message::Server, "", tr("[Whois] %1").arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(serverDecode(params).join(" "))); } else { - emit displayMsg(Message::Server, "", tr("[Whowas] %1").arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whowas] %1").arg(serverDecode(params).join(" "))); } } @@ -470,19 +476,19 @@ void IrcServerHandler::handle313(QString prefix, QList params) { if(ircuser) { ircuser->setIrcOperator(params.last()); } - emit displayMsg(Message::Server, "", tr("[Whois] %1").arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(serverDecode(params).join(" "))); } /* RPL_WHOWASUSER - " * :" */ void IrcServerHandler::handle314(QString prefix, QList params) { Q_UNUSED(prefix) - emit displayMsg(Message::Server, "", tr("[Whowas] %1").arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whowas] %1").arg(serverDecode(params).join(" "))); } /* RPL_ENDOFWHO: " :End of WHO list" */ void IrcServerHandler::handle315(QString prefix, QList params) { Q_UNUSED(prefix) - emit displayMsg(Message::Server, "", tr("[Who] %1").arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Who] %1").arg(serverDecode(params).join(" "))); } /* RPL_WHOISIDLE - " :seconds idle" @@ -496,9 +502,9 @@ void IrcServerHandler::handle317(QString prefix, QList params) { int idleSecs = serverDecode(params[1]).toInt(); idleSecs *= -1; ircuser->setIdleTime(now.addSecs(idleSecs)); - emit displayMsg(Message::Server, "", tr("[Whois] %1 is idling for %2 seconds").arg(ircuser->nick()).arg(ircuser->idleTime().secsTo(now))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is idling for %2 seconds").arg(ircuser->nick()).arg(ircuser->idleTime().secsTo(now))); } else { - emit displayMsg(Message::Server, "", tr("[Whois] idle message: %1").arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] idle message: %1").arg(serverDecode(params).join(" "))); } } @@ -506,13 +512,13 @@ void IrcServerHandler::handle317(QString prefix, QList params) { void IrcServerHandler::handle318(QString prefix, QList params) { Q_UNUSED(prefix) _whois = false; - emit displayMsg(Message::Server, "", tr("[Whois] %1").arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(serverDecode(params).join(" "))); } /* RPL_WHOISCHANNELS - " :*( ( "@" / "+" ) " " )" */ void IrcServerHandler::handle319(QString prefix, QList params) { Q_UNUSED(prefix) - emit displayMsg(Message::Server, "", tr("[Whois] %1").arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(serverDecode(params).join(" "))); } /* RPL_NOTOPIC */ @@ -520,7 +526,7 @@ void IrcServerHandler::handle331(QString prefix, QList params) { Q_UNUSED(prefix); QString channel = serverDecode(params[0]); network()->ircChannel(channel)->setTopic(QString()); - emit displayMsg(Message::Server, channel, tr("No topic is set for %1.").arg(channel)); + emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel, tr("No topic is set for %1.").arg(channel)); } /* RPL_TOPIC */ @@ -529,15 +535,14 @@ void IrcServerHandler::handle332(QString prefix, QList params) { QString channel = serverDecode(params[0]); QString topic = bufferDecode(channel, params[1]); network()->ircChannel(channel)->setTopic(topic); - emit displayMsg(Message::Server, channel, tr("Topic for %1 is \"%2\"").arg(channel, topic)); + emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel, tr("Topic for %1 is \"%2\"").arg(channel, topic)); } /* Topic set by... */ void IrcServerHandler::handle333(QString prefix, QList params) { Q_UNUSED(prefix); QString channel = serverDecode(params[0]); - emit displayMsg(Message::Server, channel, tr("Topic set by %1 on %2") - .arg(bufferDecode(channel, params[1]), QDateTime::fromTime_t(bufferDecode(channel, params[2]).toUInt()).toString())); + emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel, tr("Topic set by %1 on %2") .arg(bufferDecode(channel, params[1]), QDateTime::fromTime_t(bufferDecode(channel, params[2]).toUInt()).toString())); } /* RPL_WHOREPLY: " @@ -556,7 +561,7 @@ void IrcServerHandler::handle352(QString prefix, QList params) { ircuser->setRealName(serverDecode(params.last()).section(" ", 1)); } - emit displayMsg(Message::Server, "", tr("[Who] %1").arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Who] %1").arg(serverDecode(params).join(" "))); } /* RPL_NAMREPLY */ @@ -584,7 +589,7 @@ void IrcServerHandler::handle353(QString prefix, QList params) { /* RPL_ENDOFWHOWAS - " :End of WHOWAS" */ void IrcServerHandler::handle369(QString prefix, QList params) { Q_UNUSED(prefix) - emit displayMsg(Message::Server, "", tr("[Whowas] %1").arg(serverDecode(params).join(" "))); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whowas] %1").arg(serverDecode(params).join(" "))); } /* ERR_ERRONEUSNICKNAME */ @@ -597,12 +602,12 @@ void IrcServerHandler::handle432(QString prefix, QList params) { // :irc.scortum.moep.net 432 @@@ :Erroneous Nickname: Illegal characters // correct server reply: // :irc.scortum.moep.net 432 * @@@ :Erroneous Nickname: Illegal characters - emit displayMsg(Message::Error, "", tr("There is a nickname in your identity's nicklist which contains illegal characters")); - emit displayMsg(Message::Error, "", tr("Due to a bug in Unreal IRCd (and maybe other irc-servers too) we're unable to determine the erroneous nick")); - emit displayMsg(Message::Error, "", tr("Please use: /nick to continue or clean up your nicklist")); + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("There is a nickname in your identity's nicklist which contains illegal characters")); + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Due to a bug in Unreal IRCd (and maybe other irc-servers too) we're unable to determine the erroneous nick")); + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Please use: /nick to continue or clean up your nicklist")); } else { QString errnick = params[0]; - emit displayMsg(Message::Error, "", tr("Nick %1 contains illegal characters").arg(errnick)); + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Nick %1 contains illegal characters").arg(errnick)); tryNextNick(errnick); } } @@ -612,7 +617,7 @@ void IrcServerHandler::handle433(QString prefix, QList params) { Q_UNUSED(prefix); QString errnick = serverDecode(params[0]); - emit displayMsg(Message::Error, "", tr("Nick already in use: %1").arg(errnick)); + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Nick already in use: %1").arg(errnick)); // if there is a problem while connecting to the server -> we handle it // but only if our connection has not been finished yet... @@ -628,7 +633,7 @@ void IrcServerHandler::tryNextNick(const QString &errnick) { if(desiredNicks.size() > nextNick) { putCmd("NICK", QStringList(desiredNicks[nextNick])); } else { - emit displayMsg(Message::Error, "", tr("No free and valid nicks in nicklist found. use: /nick to continue")); + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("No free and valid nicks in nicklist found. use: /nick to continue")); } } diff --git a/src/core/networkconnection.cpp b/src/core/networkconnection.cpp index 4cca93f9..4cd776a7 100644 --- a/src/core/networkconnection.cpp +++ b/src/core/networkconnection.cpp @@ -206,7 +206,7 @@ void NetworkConnection::socketHasData() { void NetworkConnection::socketError(QAbstractSocket::SocketError) { qDebug() << qPrintable(tr("Could not connect to %1 (%2)").arg(network()->networkName(), socket.errorString())); emit connectionError(socket.errorString()); - emit displayMsg(Message::Error, "", tr("Connection failure: %1").arg(socket.errorString())); + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Connection failure: %1").arg(socket.errorString())); network()->emitConnectionError(socket.errorString()); } @@ -250,7 +250,7 @@ void NetworkConnection::socketDisconnected() { } // FIXME switch to BufferId -void NetworkConnection::userInput(QString buf, QString msg) { +void NetworkConnection::userInput(BufferInfo buf, QString msg) { userInputHandler()->handleUserInput(buf, msg); } diff --git a/src/core/networkconnection.h b/src/core/networkconnection.h index 9b9c43bb..c5694caa 100644 --- a/src/core/networkconnection.h +++ b/src/core/networkconnection.h @@ -82,7 +82,7 @@ public slots: // void setServerOptions(); void connectToIrc(); void disconnectFromIrc(); - void userInput(QString buffer, QString msg); + void userInput(BufferInfo bufferInfo, QString msg); void putRawLine(QString input); void putCmd(QString cmd, QStringList params, QString prefix = 0); @@ -96,7 +96,7 @@ signals: void recvRawServerMsg(QString); void displayStatusMsg(QString); //void displayMsg(Message msg); - void displayMsg(Message::Type, QString target, QString text, QString sender = "", quint8 flags = Message::None); + void displayMsg(Message::Type, BufferInfo::Type, QString target, QString text, QString sender = "", quint8 flags = Message::None); void connected(NetworkId networkId); ///< Emitted after receipt of 001 to indicate that we can now send data to the IRC server void disconnected(NetworkId networkId); void connectionStateChanged(Network::ConnectionState); diff --git a/src/core/sql.qrc b/src/core/sql.qrc index be8a4348..023eaffc 100644 --- a/src/core/sql.qrc +++ b/src/core/sql.qrc @@ -14,51 +14,69 @@ ./SQL/SQLite/4/upgrade_040_create_buffer_idx.sql ./SQL/SQLite/4/upgrade_050_create_buffer_cname_idx.sql ./SQL/SQLite/4/upgrade_999_update_schemaversion.sql - ./SQL/SQLite/5/delete_backlog_by_uid.sql - ./SQL/SQLite/5/delete_backlog_for_network.sql - ./SQL/SQLite/5/delete_buffers_by_uid.sql - ./SQL/SQLite/5/delete_buffers_for_network.sql - ./SQL/SQLite/5/delete_ircservers_for_network.sql - ./SQL/SQLite/5/delete_network.sql - ./SQL/SQLite/5/delete_networks_by_uid.sql - ./SQL/SQLite/5/delete_quasseluser.sql - ./SQL/SQLite/5/insert_buffer.sql - ./SQL/SQLite/5/insert_message.sql - ./SQL/SQLite/5/insert_network.sql - ./SQL/SQLite/5/insert_quasseluser.sql - ./SQL/SQLite/5/insert_sender.sql - ./SQL/SQLite/5/insert_server.sql - ./SQL/SQLite/5/select_authuser.sql - ./SQL/SQLite/5/select_bufferByName.sql - ./SQL/SQLite/5/select_buffers.sql - ./SQL/SQLite/5/select_lastMessage.sql - ./SQL/SQLite/5/select_messageRange.sql - ./SQL/SQLite/5/select_messages.sql - ./SQL/SQLite/5/select_messagesOffset.sql - ./SQL/SQLite/5/select_messagesSince.sql - ./SQL/SQLite/5/select_messagesSinceOffset.sql - ./SQL/SQLite/5/select_networkExists.sql - ./SQL/SQLite/5/select_networks_for_user.sql - ./SQL/SQLite/5/select_servers_for_network.sql - ./SQL/SQLite/5/select_userid.sql - ./SQL/SQLite/5/setup_000_quasseluser.sql - ./SQL/SQLite/5/setup_010_sender.sql - ./SQL/SQLite/5/setup_020_network.sql - ./SQL/SQLite/5/setup_030_buffer.sql - ./SQL/SQLite/5/setup_040_buffer_idx.sql - ./SQL/SQLite/5/setup_050_buffer_cname_idx.sql - ./SQL/SQLite/5/setup_060_backlog.sql - ./SQL/SQLite/5/setup_070_coreinfo.sql - ./SQL/SQLite/5/setup_080_ircservers.sql - ./SQL/SQLite/5/setup_999_version.sql - ./SQL/SQLite/5/update_network.sql - ./SQL/SQLite/5/update_username.sql - ./SQL/SQLite/5/update_userpassword.sql ./SQL/SQLite/5/upgrade_000_rename_networktable.sql ./SQL/SQLite/5/upgrade_010_create_newnetworktable.sql ./SQL/SQLite/5/upgrade_020_copy_networktable.sql ./SQL/SQLite/5/upgrade_030_drop_oldnetworktable.sql ./SQL/SQLite/5/upgrade_180_create_ircservers.sql ./SQL/SQLite/5/upgrade_999_update_schemaversion.sql + ./SQL/SQLite/6/delete_backlog_by_uid.sql + ./SQL/SQLite/6/delete_backlog_for_network.sql + ./SQL/SQLite/6/delete_buffers_by_uid.sql + ./SQL/SQLite/6/delete_buffers_for_network.sql + ./SQL/SQLite/6/delete_ircservers_for_network.sql + ./SQL/SQLite/6/delete_network.sql + ./SQL/SQLite/6/delete_networks_by_uid.sql + ./SQL/SQLite/6/delete_quasseluser.sql + ./SQL/SQLite/6/insert_buffer.sql + ./SQL/SQLite/6/insert_message.sql + ./SQL/SQLite/6/insert_network.sql + ./SQL/SQLite/6/insert_quasseluser.sql + ./SQL/SQLite/6/insert_sender.sql + ./SQL/SQLite/6/insert_server.sql + ./SQL/SQLite/6/select_authuser.sql + ./SQL/SQLite/6/select_bufferByName.sql + ./SQL/SQLite/6/select_buffers.sql + ./SQL/SQLite/6/select_lastMessage.sql + ./SQL/SQLite/6/select_messageRange.sql + ./SQL/SQLite/6/select_messages.sql + ./SQL/SQLite/6/select_messagesOffset.sql + ./SQL/SQLite/6/select_messagesSince.sql + ./SQL/SQLite/6/select_messagesSinceOffset.sql + ./SQL/SQLite/6/select_networkExists.sql + ./SQL/SQLite/6/select_networks_for_user.sql + ./SQL/SQLite/6/select_servers_for_network.sql + ./SQL/SQLite/6/select_userid.sql + ./SQL/SQLite/6/setup_000_quasseluser.sql + ./SQL/SQLite/6/setup_010_sender.sql + ./SQL/SQLite/6/setup_020_network.sql + ./SQL/SQLite/6/setup_030_buffer.sql + ./SQL/SQLite/6/setup_040_buffer_idx.sql + ./SQL/SQLite/6/setup_050_buffer_cname_idx.sql + ./SQL/SQLite/6/setup_060_backlog.sql + ./SQL/SQLite/6/setup_070_coreinfo.sql + ./SQL/SQLite/6/setup_080_ircservers.sql + ./SQL/SQLite/6/setup_999_version.sql + ./SQL/SQLite/6/update_network.sql + ./SQL/SQLite/6/update_username.sql + ./SQL/SQLite/6/update_userpassword.sql + ./SQL/SQLite/6/upgrade_000_alter_buffertable.sql + ./SQL/SQLite/6/upgrade_010_set_statusbuffertype.sql + ./SQL/SQLite/6/upgrade_020_set_channelbuffertype.sql + ./SQL/SQLite/6/upgrade_030_set_querybuffertype.sql + ./SQL/SQLite/6/upgrade_040_update_msgtype.sql + ./SQL/SQLite/6/upgrade_050_update_msgtype.sql + ./SQL/SQLite/6/upgrade_060_update_msgtype.sql + ./SQL/SQLite/6/upgrade_070_update_msgtype.sql + ./SQL/SQLite/6/upgrade_080_update_msgtype.sql + ./SQL/SQLite/6/upgrade_090_update_msgtype.sql + ./SQL/SQLite/6/upgrade_100_update_msgtype.sql + ./SQL/SQLite/6/upgrade_110_update_msgtype.sql + ./SQL/SQLite/6/upgrade_120_update_msgtype.sql + ./SQL/SQLite/6/upgrade_130_update_msgtype.sql + ./SQL/SQLite/6/upgrade_140_update_msgtype.sql + ./SQL/SQLite/6/upgrade_150_update_msgtype.sql + ./SQL/SQLite/6/upgrade_160_update_msgtype.sql + ./SQL/SQLite/6/upgrade_999_version.sql diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index 893fbcdc..6ca6c4e4 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -347,10 +347,11 @@ NetworkId SqliteStorage::getNetworkId(UserId user, const QString &network) { return NetworkId(); } -void SqliteStorage::createBuffer(UserId user, const NetworkId &networkId, const QString &buffer) { +void SqliteStorage::createBuffer(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer) { QSqlQuery *query = cachedQuery("insert_buffer"); query->bindValue(":userid", user.toInt()); query->bindValue(":networkid", networkId.toInt()); + query->bindValue(":buffertype", (int)type); query->bindValue(":buffername", buffer); query->bindValue(":buffercname", buffer.toLower()); query->exec(); @@ -358,7 +359,7 @@ void SqliteStorage::createBuffer(UserId user, const NetworkId &networkId, const watchQuery(query); } -BufferInfo SqliteStorage::getBufferInfo(UserId user, const NetworkId &networkId, const QString &buffer) { +BufferInfo SqliteStorage::getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer) { QSqlQuery *query = cachedQuery("select_bufferByName"); query->bindValue(":networkid", networkId.toInt()); query->bindValue(":userid", user.toInt()); @@ -366,7 +367,7 @@ BufferInfo SqliteStorage::getBufferInfo(UserId user, const NetworkId &networkId, query->exec(); if(!query->first()) { - createBuffer(user, networkId, buffer); + createBuffer(user, networkId, type, buffer); query->exec(); if(!query->first()) { watchQuery(query); @@ -375,7 +376,7 @@ BufferInfo SqliteStorage::getBufferInfo(UserId user, const NetworkId &networkId, } } - BufferInfo bufferInfo = BufferInfo(query->value(0).toInt(), networkId, 0, buffer); + BufferInfo bufferInfo = BufferInfo(query->value(0).toInt(), networkId, (BufferInfo::Type)query->value(1).toInt(), 0, buffer); if(query->next()) { qWarning() << "SqliteStorage::getBufferInfo(): received more then one Buffer!"; qWarning() << " Query:" << query->lastQuery(); @@ -400,7 +401,7 @@ QList 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(1).toString()); + bufferlist << BufferInfo(query.value(0).toInt(), query.value(1).toInt(), (BufferInfo::Type)query.value(2).toInt(), query.value(3).toInt(), query.value(4).toString()); } return bufferlist; } diff --git a/src/core/sqlitestorage.h b/src/core/sqlitestorage.h index bee848bc..253d3eab 100644 --- a/src/core/sqlitestorage.h +++ b/src/core/sqlitestorage.h @@ -58,7 +58,7 @@ public slots: virtual QList networks(UserId user); /* Buffer handling */ - virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, const QString &buffer = ""); + virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = ""); virtual QList requestBuffers(UserId user, QDateTime since = QDateTime()); /* Message handling */ @@ -77,7 +77,7 @@ private: static QString backlogFile(); bool isValidNetwork(UserId user, const NetworkId &networkId); NetworkId getNetworkId(UserId user, const QString &network); - void createBuffer(UserId user, const NetworkId &networkId, const QString &buffer); + void createBuffer(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer); }; #endif diff --git a/src/core/storage.h b/src/core/storage.h index 95bbb2d3..84d77556 100644 --- a/src/core/storage.h +++ b/src/core/storage.h @@ -152,12 +152,13 @@ class Storage : public QObject { /* Buffer handling */ //! Get the unique BufferInfo for the given combination of network and buffername for a user. - /** \param user The core user who owns this buffername - * \param network The network name + /** \param user The core user who owns this buffername + * \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) * \return The BufferInfo corresponding to the given network and buffer name, or 0 if not found */ - virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, const QString &buffer = "") = 0; + virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, 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. diff --git a/src/core/userinputhandler.cpp b/src/core/userinputhandler.cpp index ea348005..f4aa87c7 100644 --- a/src/core/userinputhandler.cpp +++ b/src/core/userinputhandler.cpp @@ -31,20 +31,21 @@ UserInputHandler::UserInputHandler(NetworkConnection *parent) : BasicHandler(parent) { } -void UserInputHandler::handleUserInput(QString bufname, QString msg) { +void UserInputHandler::handleUserInput(const BufferInfo &bufferInfo, const QString &msg_) { try { - if(msg.isEmpty()) + if(msg_.isEmpty()) return; QString cmd; + QString msg = msg_; if(!msg.startsWith('/')) { cmd = QString("SAY"); } else { cmd = msg.section(' ', 0, 0).remove(0, 1).toUpper(); msg = msg.section(' ', 1); } - handle(cmd, Q_ARG(QString, bufname), Q_ARG(QString, msg)); + handle(cmd, Q_ARG(BufferInfo, bufferInfo), Q_ARG(QString, msg)); } catch(Exception e) { - emit displayMsg(Message::Error, "", e.msg()); + emit displayMsg(Message::Error, bufferInfo.type(), "", e.msg()); } } @@ -52,23 +53,23 @@ void UserInputHandler::handleUserInput(QString bufname, QString msg) { // Public Slots // ==================== -void UserInputHandler::handleAway(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleAway(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) emit putCmd("AWAY", QStringList(msg)); } -void UserInputHandler::handleBan(QString bufname, QString msg) { - if(!isChannelName(bufname)) +void UserInputHandler::handleBan(const BufferInfo &bufferInfo, const QString &msg) { + if(bufferInfo.type() != BufferInfo::ChannelBuffer) return; //TODO: find suitable default hostmask if msg gives only nickname // Example: MODE &oulu +b *!*@* - QStringList banMsg(bufname+" +b "+msg); + QStringList banMsg(bufferInfo.bufferName()+" +b "+msg); emit putCmd("MODE", banMsg); } -void UserInputHandler::handleCtcp(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleCtcp(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) QString nick = msg.section(' ', 0, 0); QString ctcpTag = msg.section(' ', 1, 1).toUpper(); if (ctcpTag.isEmpty()) return; @@ -81,33 +82,33 @@ void UserInputHandler::handleCtcp(QString bufname, QString msg) { } server->ctcpHandler()->query(nick, ctcpTag, message); - emit displayMsg(Message::Action, "", verboseMessage, network()->myNick()); + emit displayMsg(Message::Action, BufferInfo::StatusBuffer, "", verboseMessage, network()->myNick()); } -void UserInputHandler::handleDeop(QString bufname, QString msg) { +void UserInputHandler::handleDeop(const BufferInfo &bufferInfo, const QString &msg) { QStringList nicks = msg.split(' ', QString::SkipEmptyParts); QString m = "-"; for(int i = 0; i < nicks.count(); i++) m += 'o'; QStringList params; - params << bufname << m << nicks; + params << bufferInfo.bufferName() << m << nicks; emit putCmd("MODE", params); } -void UserInputHandler::handleDevoice(QString bufname, QString msg) { +void UserInputHandler::handleDevoice(const BufferInfo &bufferInfo, const QString &msg) { QStringList nicks = msg.split(' ', QString::SkipEmptyParts); QString m = "-"; for(int i = 0; i < nicks.count(); i++) m += 'v'; QStringList params; - params << bufname << m << nicks; + params << bufferInfo.bufferName() << m << nicks; emit putCmd("MODE", params); } -void UserInputHandler::handleInvite(QString bufname, QString msg) { +void UserInputHandler::handleInvite(const BufferInfo &bufferInfo, const QString &msg) { QStringList params; - params << msg << bufname; + params << msg << bufferInfo.bufferName(); emit putCmd("INVITE", params); } -void UserInputHandler::handleJ(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleJ(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) QStringList params = msg.split(" "); if(params.size() > 0 && !params[0].startsWith("#")) { params[0] = QString("#%1").arg(params[0]); @@ -115,37 +116,37 @@ void UserInputHandler::handleJ(QString bufname, QString msg) { emit putCmd("JOIN", params); } -void UserInputHandler::handleJoin(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleJoin(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) emit putCmd("JOIN", msg.split(" ")); } -void UserInputHandler::handleKick(QString bufname, QString msg) { +void UserInputHandler::handleKick(const BufferInfo &bufferInfo, const QString &msg) { QStringList params; - params << bufname << msg.split(' ', QString::SkipEmptyParts); + params << bufferInfo.bufferName() << msg.split(' ', QString::SkipEmptyParts); emit putCmd("KICK", params); } -void UserInputHandler::handleList(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleList(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) emit putCmd("LIST", msg.split(' ', QString::SkipEmptyParts)); } -void UserInputHandler::handleMe(QString bufname, QString msg) { - if(bufname.isEmpty()) return; // server buffer - server->ctcpHandler()->query(bufname, "ACTION", msg); - emit displayMsg(Message::Action, bufname, msg, network()->myNick()); +void UserInputHandler::handleMe(const BufferInfo &bufferInfo, const QString &msg) { + if(bufferInfo.bufferName().isEmpty()) return; // server buffer + server->ctcpHandler()->query(bufferInfo.bufferName(), "ACTION", msg); + emit displayMsg(Message::Action, bufferInfo.type(), bufferInfo.bufferName(), msg, network()->myNick()); } -void UserInputHandler::handleMode(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleMode(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) emit putCmd("MODE", msg.split(' ', QString::SkipEmptyParts)); } // TODO: show privmsgs -void UserInputHandler::handleMsg(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleMsg(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) if(!msg.contains(' ')) return; @@ -156,89 +157,89 @@ void UserInputHandler::handleMsg(QString bufname, QString msg) { emit putCmd("PRIVMSG", params); } -void UserInputHandler::handleNick(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleNick(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) QString nick = msg.section(' ', 0, 0); emit putCmd("NICK", QStringList(nick)); } -void UserInputHandler::handleOp(QString bufname, QString msg) { +void UserInputHandler::handleOp(const BufferInfo &bufferInfo, const QString &msg) { QStringList nicks = msg.split(' ', QString::SkipEmptyParts); QString m = "+"; for(int i = 0; i < nicks.count(); i++) m += 'o'; QStringList params; - params << bufname << m << nicks; + params << bufferInfo.bufferName() << m << nicks; emit putCmd("MODE", params); } -void UserInputHandler::handlePart(QString bufname, QString msg) { +void UserInputHandler::handlePart(const BufferInfo &bufferInfo, const QString &msg) { QStringList params; - params << bufname << msg; + params << bufferInfo.bufferName() << msg; emit putCmd("PART", params); } // TODO: implement queries -void UserInputHandler::handleQuery(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleQuery(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) QString target = msg.section(' ', 0, 0); QString message = msg.section(' ', 1); if(message.isEmpty()) - emit displayMsg(Message::Server, target, "Starting query with " + target, network()->myNick(), Message::Self); + emit displayMsg(Message::Server, BufferInfo::QueryBuffer, target, "Starting query with " + target, network()->myNick(), Message::Self); else - emit displayMsg(Message::Plain, target, message, network()->myNick(), Message::Self); - handleMsg(bufname, msg); + emit displayMsg(Message::Plain, BufferInfo::QueryBuffer, target, message, network()->myNick(), Message::Self); + handleMsg(bufferInfo, msg); } -void UserInputHandler::handleQuit(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleQuit(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) emit putCmd("QUIT", QStringList(msg)); } -void UserInputHandler::handleQuote(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleQuote(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) emit putRawLine(msg); } -void UserInputHandler::handleSay(QString bufname, QString msg) { - if(bufname.isEmpty()) return; // server buffer +void UserInputHandler::handleSay(const BufferInfo &bufferInfo, const QString &msg) { + if(bufferInfo.bufferName().isEmpty()) return; // server buffer QStringList params; - params << bufname << msg; + params << bufferInfo.bufferName() << msg; emit putCmd("PRIVMSG", params); - emit displayMsg(Message::Plain, params[0], msg, network()->myNick(), Message::Self); + emit displayMsg(Message::Plain, bufferInfo.type(), params[0], msg, network()->myNick(), Message::Self); } -void UserInputHandler::handleTopic(QString bufname, QString msg) { - if(bufname.isEmpty()) return; +void UserInputHandler::handleTopic(const BufferInfo &bufferInfo, const QString &msg) { + if(bufferInfo.bufferName().isEmpty()) return; QStringList params; - params << bufname << msg; + params << bufferInfo.bufferName() << msg; emit putCmd("TOPIC", params); } -void UserInputHandler::handleVoice(QString bufname, QString msg) { +void UserInputHandler::handleVoice(const BufferInfo &bufferInfo, const QString &msg) { QStringList nicks = msg.split(' ', QString::SkipEmptyParts); QString m = "+"; for(int i = 0; i < nicks.count(); i++) m += 'v'; QStringList params; - params << bufname << m << nicks; + params << bufferInfo.bufferName() << m << nicks; emit putCmd("MODE", params); } -void UserInputHandler::handleWho(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleWho(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) emit putCmd("WHO", msg.split(' ')); } -void UserInputHandler::handleWhois(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleWhois(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) emit putCmd("WHOIS", msg.split(' ')); } -void UserInputHandler::handleWhowas(QString bufname, QString msg) { - Q_UNUSED(bufname) +void UserInputHandler::handleWhowas(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) emit putCmd("WHOWAS", msg.split(' ')); } -void UserInputHandler::defaultHandler(QString cmd, QString bufname, QString msg) { - Q_UNUSED(bufname) - emit displayMsg(Message::Error, "", QString("Error: %1 %2").arg(cmd).arg(msg)); +void UserInputHandler::defaultHandler(QString cmd, const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", QString("Error: %1 %2").arg(cmd).arg(msg)); } diff --git a/src/core/userinputhandler.h b/src/core/userinputhandler.h index 4070b407..85355467 100644 --- a/src/core/userinputhandler.h +++ b/src/core/userinputhandler.h @@ -31,36 +31,36 @@ class UserInputHandler : public BasicHandler { public: UserInputHandler(NetworkConnection *parent = 0); - void handleUserInput(QString buffer, QString msg); + void handleUserInput(const BufferInfo &bufferInfo, const QString &text); public slots: - void handleAway(QString, QString); - void handleBan(QString, QString); - void handleCtcp(QString, QString); - void handleDeop(QString, QString); - void handleDevoice(QString, QString); - void handleInvite(QString, QString); - void handleJ(QString, QString); - void handleJoin(QString, QString); - void handleKick(QString, QString); - void handleList(QString, QString); - void handleMe(QString, QString); - void handleMode(QString, QString); - void handleMsg(QString, QString); - void handleNick(QString, QString); - void handleOp(QString, QString); - void handlePart(QString, QString); - void handleQuery(QString, QString); - void handleQuit(QString, QString); - void handleQuote(QString, QString); - void handleSay(QString, QString); - void handleTopic(QString, QString); - void handleVoice(QString, QString); - void handleWho(QString, QString); - void handleWhois(QString, QString); - void handleWhowas(QString, QString); + void handleAway(const BufferInfo &bufferInfo, const QString &text); + void handleBan(const BufferInfo &bufferInfo, const QString &text); + void handleCtcp(const BufferInfo &bufferInfo, const QString &text); + void handleDeop(const BufferInfo &bufferInfo, const QString &text); + void handleDevoice(const BufferInfo &bufferInfo, const QString &text); + void handleInvite(const BufferInfo &bufferInfo, const QString &text); + void handleJ(const BufferInfo &bufferInfo, const QString &text); + void handleJoin(const BufferInfo &bufferInfo, const QString &text); + void handleKick(const BufferInfo &bufferInfo, const QString &text); + void handleList(const BufferInfo &bufferInfo, const QString &text); + void handleMe(const BufferInfo &bufferInfo, const QString &text); + void handleMode(const BufferInfo &bufferInfo, const QString &text); + void handleMsg(const BufferInfo &bufferInfo, const QString &text); + void handleNick(const BufferInfo &bufferInfo, const QString &text); + void handleOp(const BufferInfo &bufferInfo, const QString &text); + void handlePart(const BufferInfo &bufferInfo, const QString &text); + void handleQuery(const BufferInfo &bufferInfo, const QString &text); + void handleQuit(const BufferInfo &bufferInfo, const QString &text); + void handleQuote(const BufferInfo &bufferInfo, const QString &text); + void handleSay(const BufferInfo &bufferInfo, const QString &text); + void handleTopic(const BufferInfo &bufferInfo, const QString &text); + void handleVoice(const BufferInfo &bufferInfo, const QString &text); + void handleWho(const BufferInfo &bufferInfo, const QString &text); + void handleWhois(const BufferInfo &bufferInfo, const QString &text); + void handleWhowas(const BufferInfo &bufferInfo, const QString &text); - void defaultHandler(QString cmd, QString buf, QString msg); + void defaultHandler(QString cmd, const BufferInfo &bufferInfo, const QString &text); }; diff --git a/src/qtui/nicklistwidget.cpp b/src/qtui/nicklistwidget.cpp index 42cc3507..04e6e22a 100644 --- a/src/qtui/nicklistwidget.cpp +++ b/src/qtui/nicklistwidget.cpp @@ -41,7 +41,7 @@ BufferId NickListWidget::currentBuffer() const { void NickListWidget::setCurrentBuffer(BufferId bufferId) { QModelIndex bufferIdx = Client::networkModel()->bufferIndex(bufferId); - if(bufferIdx.data(NetworkModel::BufferTypeRole) != BufferItem::ChannelType) { + if(bufferIdx.data(NetworkModel::BufferTypeRole) != BufferInfo::ChannelBuffer) { ui.stackedWidget->setCurrentWidget(ui.emptyPage); return; } diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index 665d02ca..840f5d7e 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -83,9 +83,9 @@ void BufferView::setModel(QAbstractItemModel *model) { } void BufferView::joinChannel(const QModelIndex &index) { - BufferItem::Type bufferType = (BufferItem::Type)index.data(NetworkModel::BufferTypeRole).value(); + BufferInfo::Type bufferType = (BufferInfo::Type)index.data(NetworkModel::BufferTypeRole).value(); - if(bufferType != BufferItem::ChannelType) + if(bufferType != BufferInfo::ChannelBuffer) return; BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index ac4bae5d..a9f34fd4 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -101,13 +101,13 @@ void BufferViewFilter::removeBuffer(const QModelIndex &index) { bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) const { - BufferItem::Type bufferType = (BufferItem::Type) source_bufferIndex.data(NetworkModel::BufferTypeRole).toInt(); + BufferInfo::Type bufferType = (BufferInfo::Type) source_bufferIndex.data(NetworkModel::BufferTypeRole).toInt(); - if((mode & NoChannels) && bufferType == BufferItem::ChannelType) + if((mode & NoChannels) && bufferType == BufferInfo::ChannelBuffer) return false; - if((mode & NoQueries) && bufferType == BufferItem::QueryType) + if((mode & NoQueries) && bufferType == BufferInfo::QueryBuffer) return false; - if((mode & NoServers) && bufferType == BufferItem::StatusType) + if((mode & NoServers) && bufferType == BufferInfo::StatusBuffer) return false; // bool isActive = source_bufferIndex.data(NetworkModel::BufferActiveRole).toBool(); diff --git a/version.inc b/version.inc index 0f7e9ec6..67e84fdc 100644 --- a/version.inc +++ b/version.inc @@ -4,15 +4,15 @@ { using namespace Global; quasselVersion = "0.2.0-pre"; - quasselDate = "2008-02-11"; - quasselBuild = 506; + quasselDate = "2008-02-12"; + quasselBuild = 509; //! Minimum client build number the core needs - clientBuildNeeded = 480; + clientBuildNeeded = 509; clientVersionNeeded = quasselVersion; //! Minimum core build number the client needs - coreBuildNeeded = 506; + coreBuildNeeded = 509; coreVersionNeeded = quasselVersion; } -- 2.20.1