1 /*************************************************************************** 2 * Copyright (C) 2005-2020 by the Quassel Project * 3 * devel@quassel-irc.org * 4 * * 5 * This program is free software; you can redistribute it and/or modify * 6 * it under the terms of the GNU General Public License as published by * 7 * the Free Software Foundation; either version 2 of the License, or * 8 * (at your option) version 3. * 9 * * 10 * This program is distributed in the hope that it will be useful, * 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 13 * GNU General Public License for more details. * 14 * * 15 * You should have received a copy of the GNU General Public License * 16 * along with this program; if not, write to the * 17 * Free Software Foundation, Inc., * 18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * 19 ***************************************************************************/ 20 21 #pragma once 22 23 #include "client-export.h" 24 25 #include <set> 26 27 #include <QSortFilterProxyModel> 28 29 #include "bufferinfo.h" 30 #include "client.h" 31 #include "messagemodel.h" 32 #include "networkmodel.h" 33 #include "types.h" 34 35 class CLIENT_EXPORT MessageFilter : public QSortFilterProxyModel 36 { 37 Q_OBJECT 38 39 protected: 40 MessageFilter(QAbstractItemModel* source, QObject* parent = nullptr); 41 42 public: 43 MessageFilter(MessageModel*, const QList<BufferId>& buffers = QList<BufferId>(), QObject* parent = nullptr); 44 45 virtual QString idString() const; 46 isSingleBufferFilter()47 bool isSingleBufferFilter() const { return _validBuffers.count() == 1; } singleBufferId()48 BufferId singleBufferId() const { return *(_validBuffers.constBegin()); } containsBuffer(const BufferId & id)49 bool containsBuffer(const BufferId& id) const { return _validBuffers.contains(id); } containedBuffers()50 QSet<BufferId> containedBuffers() const { return _validBuffers; } 51 52 bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const override; 53 54 public slots: 55 void messageTypeFilterChanged(); 56 void messageRedirectionChanged(); 57 void requestBacklog(); 58 // redefined as public slot invalidateFilter()59 void invalidateFilter() { QSortFilterProxyModel::invalidateFilter(); } 60 61 protected: bufferName()62 QString bufferName() const { return Client::networkModel()->bufferName(singleBufferId()); } bufferType()63 BufferInfo::Type bufferType() const { return Client::networkModel()->bufferType(singleBufferId()); } networkId()64 NetworkId networkId() const { return Client::networkModel()->networkId(singleBufferId()); } 65 66 private: 67 void init(); 68 69 QSet<BufferId> _validBuffers; 70 std::set<qint64> _filteredQuitMsgTime; ///< Timestamps (ms) of already forwarded quit messages 71 int _messageTypeFilter; 72 73 int _userNoticesTarget; 74 int _serverNoticesTarget; 75 int _errorMsgsTarget; 76 }; 77