- MessageTypes are now binary exclusive which allows easy checks with multimple condi...
authorMarcus Eggenberger <egs@quassel-irc.org>
Tue, 12 Feb 2008 15:54:48 +0000 (15:54 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Tue, 12 Feb 2008 15:54:48 +0000 (15:54 +0000)
- BufferTypes are now stored persistent in the Storage engine and can be accessed via BufferInfo.type()

Major breakage of protocol. Distclean mandatory.

87 files changed:
src/client/client.cpp
src/client/networkmodel.cpp
src/client/networkmodel.h
src/common/bufferinfo.cpp
src/common/bufferinfo.h
src/common/message.cpp
src/common/message.h
src/core/SQL/SQLite/5/insert_buffer.sql [deleted file]
src/core/SQL/SQLite/5/setup_999_version.sql [deleted file]
src/core/SQL/SQLite/6/delete_backlog_by_uid.sql [moved from src/core/SQL/SQLite/5/delete_backlog_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/6/delete_backlog_for_network.sql [moved from src/core/SQL/SQLite/5/delete_backlog_for_network.sql with 100% similarity]
src/core/SQL/SQLite/6/delete_buffers_by_uid.sql [moved from src/core/SQL/SQLite/5/delete_buffers_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/6/delete_buffers_for_network.sql [moved from src/core/SQL/SQLite/5/delete_buffers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/6/delete_ircservers_for_network.sql [moved from src/core/SQL/SQLite/5/delete_ircservers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/6/delete_network.sql [moved from src/core/SQL/SQLite/5/delete_network.sql with 100% similarity]
src/core/SQL/SQLite/6/delete_networks_by_uid.sql [moved from src/core/SQL/SQLite/5/delete_networks_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/6/delete_quasseluser.sql [moved from src/core/SQL/SQLite/5/delete_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/6/insert_buffer.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/insert_message.sql [moved from src/core/SQL/SQLite/5/insert_message.sql with 100% similarity]
src/core/SQL/SQLite/6/insert_network.sql [moved from src/core/SQL/SQLite/5/insert_network.sql with 100% similarity]
src/core/SQL/SQLite/6/insert_quasseluser.sql [moved from src/core/SQL/SQLite/5/insert_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/6/insert_sender.sql [moved from src/core/SQL/SQLite/5/insert_sender.sql with 100% similarity]
src/core/SQL/SQLite/6/insert_server.sql [moved from src/core/SQL/SQLite/5/insert_server.sql with 100% similarity]
src/core/SQL/SQLite/6/select_authuser.sql [moved from src/core/SQL/SQLite/5/select_authuser.sql with 100% similarity]
src/core/SQL/SQLite/6/select_bufferByName.sql [moved from src/core/SQL/SQLite/5/select_bufferByName.sql with 75% similarity]
src/core/SQL/SQLite/6/select_buffers.sql [moved from src/core/SQL/SQLite/5/select_buffers.sql with 66% similarity]
src/core/SQL/SQLite/6/select_lastMessage.sql [moved from src/core/SQL/SQLite/5/select_lastMessage.sql with 100% similarity]
src/core/SQL/SQLite/6/select_messageRange.sql [moved from src/core/SQL/SQLite/5/select_messageRange.sql with 100% similarity]
src/core/SQL/SQLite/6/select_messages.sql [moved from src/core/SQL/SQLite/5/select_messages.sql with 100% similarity]
src/core/SQL/SQLite/6/select_messagesOffset.sql [moved from src/core/SQL/SQLite/5/select_messagesOffset.sql with 100% similarity]
src/core/SQL/SQLite/6/select_messagesSince.sql [moved from src/core/SQL/SQLite/5/select_messagesSince.sql with 100% similarity]
src/core/SQL/SQLite/6/select_messagesSinceOffset.sql [moved from src/core/SQL/SQLite/5/select_messagesSinceOffset.sql with 100% similarity]
src/core/SQL/SQLite/6/select_networkExists.sql [moved from src/core/SQL/SQLite/5/select_networkExists.sql with 100% similarity]
src/core/SQL/SQLite/6/select_networks_for_user.sql [moved from src/core/SQL/SQLite/5/select_networks_for_user.sql with 100% similarity]
src/core/SQL/SQLite/6/select_servers_for_network.sql [moved from src/core/SQL/SQLite/5/select_servers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/6/select_userid.sql [moved from src/core/SQL/SQLite/5/select_userid.sql with 100% similarity]
src/core/SQL/SQLite/6/setup_000_quasseluser.sql [moved from src/core/SQL/SQLite/5/setup_000_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/6/setup_010_sender.sql [moved from src/core/SQL/SQLite/5/setup_010_sender.sql with 100% similarity]
src/core/SQL/SQLite/6/setup_020_network.sql [moved from src/core/SQL/SQLite/5/setup_020_network.sql with 100% similarity]
src/core/SQL/SQLite/6/setup_030_buffer.sql [moved from src/core/SQL/SQLite/5/setup_030_buffer.sql with 61% similarity]
src/core/SQL/SQLite/6/setup_040_buffer_idx.sql [moved from src/core/SQL/SQLite/5/setup_040_buffer_idx.sql with 100% similarity]
src/core/SQL/SQLite/6/setup_050_buffer_cname_idx.sql [moved from src/core/SQL/SQLite/5/setup_050_buffer_cname_idx.sql with 100% similarity]
src/core/SQL/SQLite/6/setup_060_backlog.sql [moved from src/core/SQL/SQLite/5/setup_060_backlog.sql with 100% similarity]
src/core/SQL/SQLite/6/setup_070_coreinfo.sql [moved from src/core/SQL/SQLite/5/setup_070_coreinfo.sql with 100% similarity]
src/core/SQL/SQLite/6/setup_080_ircservers.sql [moved from src/core/SQL/SQLite/5/setup_080_ircservers.sql with 100% similarity]
src/core/SQL/SQLite/6/setup_999_version.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/update_network.sql [moved from src/core/SQL/SQLite/5/update_network.sql with 100% similarity]
src/core/SQL/SQLite/6/update_username.sql [moved from src/core/SQL/SQLite/5/update_username.sql with 100% similarity]
src/core/SQL/SQLite/6/update_userpassword.sql [moved from src/core/SQL/SQLite/5/update_userpassword.sql with 100% similarity]
src/core/SQL/SQLite/6/upgrade_000_alter_buffertable.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_010_set_statusbuffertype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_020_set_channelbuffertype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_030_set_querybuffertype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_040_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_050_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_060_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_070_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_080_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_090_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_100_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_110_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_120_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_130_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_140_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_150_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_160_update_msgtype.sql [new file with mode: 0644]
src/core/SQL/SQLite/6/upgrade_999_version.sql [new file with mode: 0644]
src/core/basichandler.cpp
src/core/basichandler.h
src/core/core.cpp
src/core/core.h
src/core/coresession.cpp
src/core/coresession.h
src/core/ctcphandler.cpp
src/core/ircserverhandler.cpp
src/core/networkconnection.cpp
src/core/networkconnection.h
src/core/sql.qrc
src/core/sqlitestorage.cpp
src/core/sqlitestorage.h
src/core/storage.h
src/core/userinputhandler.cpp
src/core/userinputhandler.h
src/qtui/nicklistwidget.cpp
src/uisupport/bufferview.cpp
src/uisupport/bufferviewfilter.cpp
version.inc

index 2ad6ffa..4d716ed 100644 (file)
@@ -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);
   }
 }
index 74598fa..83d5709 100644 (file)
@@ -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<NetworkItem *>(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<NetworkId, BufferId> > 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!
index c3dbaf4..8c36233 100644 (file)
@@ -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;
 
index a63d703..19e6279 100644 (file)
 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);
 }
 
index 6a5a779..6fb3de4 100644 (file)
@@ -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;
   
index 97cee42..4a6ba91 100644 (file)
@@ -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;
index 17f5493..b262b97 100644 (file)
@@ -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 (file)
index 013505a..0000000
+++ /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 (file)
index 1199051..0000000
+++ /dev/null
@@ -1 +0,0 @@
-INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '5')
diff --git a/src/core/SQL/SQLite/6/insert_buffer.sql b/src/core/SQL/SQLite/6/insert_buffer.sql
new file mode 100644 (file)
index 0000000..51202ba
--- /dev/null
@@ -0,0 +1,2 @@
+INSERT INTO buffer (userid, networkid, buffername, buffercname, buffertype)
+VALUES (:userid, :networkid, :buffername, :buffercname, :buffertype)
@@ -1,3 +1,3 @@
-SELECT bufferid
+SELECT bufferid, buffertype, groupid
 FROM buffer
 WHERE buffer.networkid = :networkid AND buffer.userid = :userid AND buffer.buffercname = :buffercname
similarity index 66%
rename from src/core/SQL/SQLite/5/select_buffers.sql
rename to src/core/SQL/SQLite/6/select_buffers.sql
index 0e096e6..41fce3b 100644 (file)
@@ -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
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 4387d5a..c9f8285 100644 (file)
@@ -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/6/setup_999_version.sql b/src/core/SQL/SQLite/6/setup_999_version.sql
new file mode 100644 (file)
index 0000000..8598df2
--- /dev/null
@@ -0,0 +1 @@
+INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '6')
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 (file)
index 0000000..08cf736
--- /dev/null
@@ -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 (file)
index 0000000..2aafab3
--- /dev/null
@@ -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 (file)
index 0000000..e6ee75a
--- /dev/null
@@ -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 (file)
index 0000000..0beb55b
--- /dev/null
@@ -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 (file)
index 0000000..c10917c
--- /dev/null
@@ -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 (file)
index 0000000..394f08b
--- /dev/null
@@ -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 (file)
index 0000000..96bea51
--- /dev/null
@@ -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 (file)
index 0000000..b12637c
--- /dev/null
@@ -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 (file)
index 0000000..2eccc67
--- /dev/null
@@ -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 (file)
index 0000000..ff3ffe0
--- /dev/null
@@ -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 (file)
index 0000000..96fd6a7
--- /dev/null
@@ -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 (file)
index 0000000..688c808
--- /dev/null
@@ -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 (file)
index 0000000..3a737e6
--- /dev/null
@@ -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 (file)
index 0000000..ed1851b
--- /dev/null
@@ -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 (file)
index 0000000..3782558
--- /dev/null
@@ -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 (file)
index 0000000..adc6eee
--- /dev/null
@@ -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 (file)
index 0000000..70692c8
--- /dev/null
@@ -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 (file)
index 0000000..8206626
--- /dev/null
@@ -0,0 +1,3 @@
+UPDATE coreinfo
+SET value='6'
+WHERE key = 'schemaversion'
index 732c797..3c98151 100644 (file)
@@ -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;
+}
index a3cc5a8..e8f6798 100644 (file)
@@ -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<QString, int> &handlerHash();
index 407eac8..69f34c3 100644 (file)
@@ -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) {
index 7f1f9c2..67b3a55 100644 (file)
@@ -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.
index 33aeae8..17820f9 100644 (file)
@@ -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<NetworkConnection*>(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);
index 208095c..06f7ee6 100644 (file)
@@ -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);
 
index a3bd308..e7f1e30 100644 (file)
@@ -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));
 }
 
 
index b5b5876..87bc7e5 100644 (file)
@@ -130,7 +130,7 @@ void IrcServerHandler::handleServerMsg(QByteArray msg) {
     handle(cmd, Q_ARG(QString, prefix), Q_ARG(QList<QByteArray>, 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, QList<QByteAr
     switch(num) {
       // Welcome, status, info messages. Just display these.
       case 2: case 3: case 4: case 5: case 251: case 252: case 253: case 254: case 255: case 372: case 375:
-        emit displayMsg(Message::Server, "", params.join(" "), prefix);
+        emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", params.join(" "), prefix);
         break;
       // Server error messages without param, just display them
       case 409: case 411: case 412: case 422: case 424: case 445: case 446: case 451: case 462:
       case 463: case 464: case 465: case 466: case 472: case 481: case 483: case 485: case 491: case 501: case 502:
       case 431: // ERR_NONICKNAMEGIVEN 
-        emit displayMsg(Message::Error, "", params.join(" "), prefix);
+        emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", params.join(" "), prefix);
         break;
       // Server error messages, display them in red. First param will be appended.
       case 401: 
-      { QString channelName = params.takeFirst();
-        emit displayMsg(Message::Error, "", params.join(" ") + " " + channelName, prefix);
-        emit displayMsg(Message::Error, channelName, params.join(" ") + " " + channelName, prefix);
+      {
+       // FIXME needs proper redirection
+       QString target = params.takeFirst();
+       BufferInfo::Type bufferType = network()->isChannelName(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<QByteAr
       case 467: case 471: case 473: case 474: case 475: case 476: case 477: case 478: case 482:
       case 436: // ERR_NICKCOLLISION
       { QString p = params.takeFirst();
-        emit displayMsg(Message::Error, "", p + ": " + params.join(" "));
+        emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", p + ": " + params.join(" "));
         break;
       }
       // Ignore these commands.
@@ -180,11 +185,11 @@ void IrcServerHandler::defaultHandler(QString cmd, QString prefix, QList<QByteAr
 
       // Everything else will be marked in red, so we can add them somewhere.
       default:
-        emit displayMsg(Message::Error, "", cmd + " " + params.join(" "), prefix);
+        emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", cmd + " " + params.join(" "), prefix);
     }
     //qDebug() << prefix <<":"<<cmd<<params;
   } else {
-    emit displayMsg(Message::Error, "", QString("Unknown: ") + cmd + " " + params.join(" "), prefix);
+    emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", QString("Unknown: ") + cmd + " " + params.join(" "), prefix);
     //qDebug() << prefix <<":"<<cmd<<params;
   }
 }
@@ -196,7 +201,7 @@ void IrcServerHandler::handleJoin(QString prefix, QList<QByteArray> 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<QByteArray> 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<QByteArray> 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<QByteArray> 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<QByteArray> 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<QByteArray> 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<QByteArray> 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<QByteArray> params) {
@@ -347,7 +353,7 @@ void IrcServerHandler::handleQuit(QString prefix, QList<QByteArray> 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<QByteArray> 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<QByteArray> 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<QByteArray> 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<QByteArray> 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 -  "<nick> <server> :<server info>" */
@@ -457,9 +463,9 @@ void IrcServerHandler::handle312(QString prefix, QList<QByteArray> 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<QByteArray> 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 - "<nick> <user> <host> * :<real name>" */
 void IrcServerHandler::handle314(QString prefix, QList<QByteArray> 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: "<name> :End of WHO list" */
 void IrcServerHandler::handle315(QString prefix, QList<QByteArray> 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 - "<nick> <integer> :seconds idle" 
@@ -496,9 +502,9 @@ void IrcServerHandler::handle317(QString prefix, QList<QByteArray> 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<QByteArray> params) {
 void IrcServerHandler::handle318(QString prefix, QList<QByteArray> 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 - "<nick> :*( ( "@" / "+" ) <channel> " " )" */
 void IrcServerHandler::handle319(QString prefix, QList<QByteArray> 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<QByteArray> 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<QByteArray> 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<QByteArray> 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: "<channel> <user> <host> <server> <nick> 
@@ -556,7 +561,7 @@ void IrcServerHandler::handle352(QString prefix, QList<QByteArray> 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<QByteArray> params) {
 /*  RPL_ENDOFWHOWAS - "<nick> :End of WHOWAS" */
 void IrcServerHandler::handle369(QString prefix, QList<QByteArray> 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<QByteArray> 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 <othernick> 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 <othernick> 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<QByteArray> 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 <othernick> to continue"));
+    emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("No free and valid nicks in nicklist found. use: /nick <othernick> to continue"));
   }
 }
 
index 4cca93f..4cd776a 100644 (file)
@@ -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);
 }
 
index 9b9c43b..c5694ca 100644 (file)
@@ -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);
index be8a434..023eaff 100644 (file)
     <file>./SQL/SQLite/4/upgrade_040_create_buffer_idx.sql</file>
     <file>./SQL/SQLite/4/upgrade_050_create_buffer_cname_idx.sql</file>
     <file>./SQL/SQLite/4/upgrade_999_update_schemaversion.sql</file>
-    <file>./SQL/SQLite/5/delete_backlog_by_uid.sql</file>
-    <file>./SQL/SQLite/5/delete_backlog_for_network.sql</file>
-    <file>./SQL/SQLite/5/delete_buffers_by_uid.sql</file>
-    <file>./SQL/SQLite/5/delete_buffers_for_network.sql</file>
-    <file>./SQL/SQLite/5/delete_ircservers_for_network.sql</file>
-    <file>./SQL/SQLite/5/delete_network.sql</file>
-    <file>./SQL/SQLite/5/delete_networks_by_uid.sql</file>
-    <file>./SQL/SQLite/5/delete_quasseluser.sql</file>
-    <file>./SQL/SQLite/5/insert_buffer.sql</file>
-    <file>./SQL/SQLite/5/insert_message.sql</file>
-    <file>./SQL/SQLite/5/insert_network.sql</file>
-    <file>./SQL/SQLite/5/insert_quasseluser.sql</file>
-    <file>./SQL/SQLite/5/insert_sender.sql</file>
-    <file>./SQL/SQLite/5/insert_server.sql</file>
-    <file>./SQL/SQLite/5/select_authuser.sql</file>
-    <file>./SQL/SQLite/5/select_bufferByName.sql</file>
-    <file>./SQL/SQLite/5/select_buffers.sql</file>
-    <file>./SQL/SQLite/5/select_lastMessage.sql</file>
-    <file>./SQL/SQLite/5/select_messageRange.sql</file>
-    <file>./SQL/SQLite/5/select_messages.sql</file>
-    <file>./SQL/SQLite/5/select_messagesOffset.sql</file>
-    <file>./SQL/SQLite/5/select_messagesSince.sql</file>
-    <file>./SQL/SQLite/5/select_messagesSinceOffset.sql</file>
-    <file>./SQL/SQLite/5/select_networkExists.sql</file>
-    <file>./SQL/SQLite/5/select_networks_for_user.sql</file>
-    <file>./SQL/SQLite/5/select_servers_for_network.sql</file>
-    <file>./SQL/SQLite/5/select_userid.sql</file>
-    <file>./SQL/SQLite/5/setup_000_quasseluser.sql</file>
-    <file>./SQL/SQLite/5/setup_010_sender.sql</file>
-    <file>./SQL/SQLite/5/setup_020_network.sql</file>
-    <file>./SQL/SQLite/5/setup_030_buffer.sql</file>
-    <file>./SQL/SQLite/5/setup_040_buffer_idx.sql</file>
-    <file>./SQL/SQLite/5/setup_050_buffer_cname_idx.sql</file>
-    <file>./SQL/SQLite/5/setup_060_backlog.sql</file>
-    <file>./SQL/SQLite/5/setup_070_coreinfo.sql</file>
-    <file>./SQL/SQLite/5/setup_080_ircservers.sql</file>
-    <file>./SQL/SQLite/5/setup_999_version.sql</file>
-    <file>./SQL/SQLite/5/update_network.sql</file>
-    <file>./SQL/SQLite/5/update_username.sql</file>
-    <file>./SQL/SQLite/5/update_userpassword.sql</file>
     <file>./SQL/SQLite/5/upgrade_000_rename_networktable.sql</file>
     <file>./SQL/SQLite/5/upgrade_010_create_newnetworktable.sql</file>
     <file>./SQL/SQLite/5/upgrade_020_copy_networktable.sql</file>
     <file>./SQL/SQLite/5/upgrade_030_drop_oldnetworktable.sql</file>
     <file>./SQL/SQLite/5/upgrade_180_create_ircservers.sql</file>
     <file>./SQL/SQLite/5/upgrade_999_update_schemaversion.sql</file>
+    <file>./SQL/SQLite/6/delete_backlog_by_uid.sql</file>
+    <file>./SQL/SQLite/6/delete_backlog_for_network.sql</file>
+    <file>./SQL/SQLite/6/delete_buffers_by_uid.sql</file>
+    <file>./SQL/SQLite/6/delete_buffers_for_network.sql</file>
+    <file>./SQL/SQLite/6/delete_ircservers_for_network.sql</file>
+    <file>./SQL/SQLite/6/delete_network.sql</file>
+    <file>./SQL/SQLite/6/delete_networks_by_uid.sql</file>
+    <file>./SQL/SQLite/6/delete_quasseluser.sql</file>
+    <file>./SQL/SQLite/6/insert_buffer.sql</file>
+    <file>./SQL/SQLite/6/insert_message.sql</file>
+    <file>./SQL/SQLite/6/insert_network.sql</file>
+    <file>./SQL/SQLite/6/insert_quasseluser.sql</file>
+    <file>./SQL/SQLite/6/insert_sender.sql</file>
+    <file>./SQL/SQLite/6/insert_server.sql</file>
+    <file>./SQL/SQLite/6/select_authuser.sql</file>
+    <file>./SQL/SQLite/6/select_bufferByName.sql</file>
+    <file>./SQL/SQLite/6/select_buffers.sql</file>
+    <file>./SQL/SQLite/6/select_lastMessage.sql</file>
+    <file>./SQL/SQLite/6/select_messageRange.sql</file>
+    <file>./SQL/SQLite/6/select_messages.sql</file>
+    <file>./SQL/SQLite/6/select_messagesOffset.sql</file>
+    <file>./SQL/SQLite/6/select_messagesSince.sql</file>
+    <file>./SQL/SQLite/6/select_messagesSinceOffset.sql</file>
+    <file>./SQL/SQLite/6/select_networkExists.sql</file>
+    <file>./SQL/SQLite/6/select_networks_for_user.sql</file>
+    <file>./SQL/SQLite/6/select_servers_for_network.sql</file>
+    <file>./SQL/SQLite/6/select_userid.sql</file>
+    <file>./SQL/SQLite/6/setup_000_quasseluser.sql</file>
+    <file>./SQL/SQLite/6/setup_010_sender.sql</file>
+    <file>./SQL/SQLite/6/setup_020_network.sql</file>
+    <file>./SQL/SQLite/6/setup_030_buffer.sql</file>
+    <file>./SQL/SQLite/6/setup_040_buffer_idx.sql</file>
+    <file>./SQL/SQLite/6/setup_050_buffer_cname_idx.sql</file>
+    <file>./SQL/SQLite/6/setup_060_backlog.sql</file>
+    <file>./SQL/SQLite/6/setup_070_coreinfo.sql</file>
+    <file>./SQL/SQLite/6/setup_080_ircservers.sql</file>
+    <file>./SQL/SQLite/6/setup_999_version.sql</file>
+    <file>./SQL/SQLite/6/update_network.sql</file>
+    <file>./SQL/SQLite/6/update_username.sql</file>
+    <file>./SQL/SQLite/6/update_userpassword.sql</file>
+    <file>./SQL/SQLite/6/upgrade_000_alter_buffertable.sql</file>
+    <file>./SQL/SQLite/6/upgrade_010_set_statusbuffertype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_020_set_channelbuffertype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_030_set_querybuffertype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_040_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_050_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_060_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_070_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_080_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_090_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_100_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_110_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_120_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_130_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_140_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_150_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_160_update_msgtype.sql</file>
+    <file>./SQL/SQLite/6/upgrade_999_version.sql</file>
 </qresource>
 </RCC>
index 893fbcd..6ca6c4e 100644 (file)
@@ -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<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(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;
 }
index bee848b..253d3ea 100644 (file)
@@ -58,7 +58,7 @@ public slots:
   virtual QList<NetworkInfo> 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<BufferInfo> 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
index 95bbb2d..84d7755 100644 (file)
@@ -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.
index ea34800..f4aa87c 100644 (file)
@@ -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));
 }
 
 
index 4070b40..8535546 100644 (file)
@@ -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);
 };
 
 
index 42cc350..04e6e22 100644 (file)
@@ -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;
   }
index 665d02c..840f5d7 100644 (file)
@@ -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<int>();
+  BufferInfo::Type bufferType = (BufferInfo::Type)index.data(NetworkModel::BufferTypeRole).value<int>();
 
-  if(bufferType != BufferItem::ChannelType)
+  if(bufferType != BufferInfo::ChannelBuffer)
     return;
 
   BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
index ac4bae5..a9f34fd 100644 (file)
@@ -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();
index 0f7e9ec..67e84fd 100644 (file)
@@ -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;
 
 }