+#include <algorithm>
+
+#include "buffermodel.h"
+#include "buffersettings.h"
+#include "client.h"
+#include "clientignorelistmanager.h"
+#include "messagemodel.h"
+#include "networkmodel.h"
+#include "util.h"
+
+MessageFilter::MessageFilter(QAbstractItemModel* source, QObject* parent)
+ : QSortFilterProxyModel(parent)
+ , _messageTypeFilter(0)
+{
+ init();
+ setSourceModel(source);
+}
+
+MessageFilter::MessageFilter(MessageModel* source, const QList<BufferId>& buffers, QObject* parent)
+ : QSortFilterProxyModel(parent)
+ , _validBuffers(toQSet(buffers))
+ , _messageTypeFilter(0)
+{
+ init();
+ setSourceModel(source);
+}
+
+void MessageFilter::init()
+{
+ setDynamicSortFilter(true);
+
+ _userNoticesTarget = _serverNoticesTarget = _errorMsgsTarget = -1;
+
+ BufferSettings defaultSettings;
+ defaultSettings.notify("UserNoticesTarget", this, &MessageFilter::messageRedirectionChanged);
+ defaultSettings.notify("ServerNoticesTarget", this, &MessageFilter::messageRedirectionChanged);
+ defaultSettings.notify("ErrorMsgsTarget", this, &MessageFilter::messageRedirectionChanged);
+ messageRedirectionChanged();
+
+ _messageTypeFilter = defaultSettings.messageFilter();
+ defaultSettings.notify("MessageTypeFilter", this, &MessageFilter::messageTypeFilterChanged);
+
+ BufferSettings mySettings(MessageFilter::idString());
+ if (mySettings.hasFilter())
+ _messageTypeFilter = mySettings.messageFilter();
+ mySettings.notify("MessageTypeFilter", this, &MessageFilter::messageTypeFilterChanged);
+ mySettings.notify("hasMessageTypeFilter", this, &MessageFilter::messageTypeFilterChanged);
+}
+
+void MessageFilter::messageTypeFilterChanged()