#include <QString>
+#include "message.h"
#include "syncableobject.h"
-class Message;
-
class IgnoreListManager : public SyncableObject
{
+ SYNCABLE_OBJECT
Q_OBJECT
public:
inline IgnoreListManager(QObject *parent = 0) : SyncableObject(parent) { setAllowClientUpdates(true); }
enum IgnoreType {
SenderIgnore,
- MessageIgnore
+ MessageIgnore,
+ CtcpIgnore
};
enum StrictnessType {
* \param network The networkname the message belongs to
* \return UnmatchedStrictness, HardStrictness or SoftStrictness representing the match type
*/
- StrictnessType match(const Message &msg, const QString &network = QString());
+ inline StrictnessType match(const Message &msg, const QString &network = QString()) { return _match(msg.contents(), msg.sender(), msg.type(), network, msg.bufferInfo().bufferName()); }
+
+ bool ctcpMatch(const QString sender, const QString &network, const QString &type = QString());
+
+// virtual void addIgnoreListItem(const IgnoreListItem &item);
public slots:
virtual QVariantMap initIgnoreList() const;
virtual void initSetIgnoreList(const QVariantMap &ignoreList);
- virtual void addIgnoreListItem(IgnoreType type, const QString &ignoreRule, bool isRegEx, StrictnessType strictness,
- ScopeType scope, const QString &scopeRule, bool isActive);
- virtual void addIgnoreListItem(const IgnoreListItem &item);
+ //! Request removal of an ignore rule based on the rule itself.
+ /** Use this method if you want to remove a single ignore rule
+ * and get that synced with the core immediately.
+ * \param ignoreRule A valid ignore rule
+ */
+ virtual inline void requestRemoveIgnoreListItem(const QString &ignoreRule) { REQUEST(ARG(ignoreRule)) }
+ virtual void removeIgnoreListItem(const QString &ignoreRule);
+
+ //! Request toggling of "isActive" flag of a given ignore rule.
+ /** Use this method if you want to toggle the "isActive" flag of a single ignore rule
+ * and get that synced with the core immediately.
+ * \param ignoreRule A valid ignore rule
+ */
+ virtual inline void requestToggleIgnoreRule(const QString &ignoreRule) { REQUEST(ARG(ignoreRule)) }
+ virtual void toggleIgnoreRule(const QString &ignoreRule);
+
+ //! Request an IgnoreListItem to be added to the ignore list
+ /** Items added to the list with this method, get immediately synced with the core
+ * \param type The IgnoreType of the new rule
+ * \param ignoreRule The rule itself
+ * \param isRegEx Signals if the rule should be interpreted as a regular expression
+ * \param strictness Th StrictnessType that should be applied
+ * \param scope The ScopeType that should be set
+ * \param scopeRule A string of semi-colon separated network- or channelnames
+ * \param isActive Signals if the rule is enabled or not
+ */
+ virtual inline void requestAddIgnoreListItem(int type, const QString &ignoreRule, bool isRegEx, int strictness,
+ int scope, const QString &scopeRule, bool isActive) {
+ REQUEST(ARG(type), ARG(ignoreRule), ARG(isRegEx), ARG(strictness), ARG(scope), ARG(scopeRule), ARG(isActive))
+ }
+ virtual void addIgnoreListItem(int type, const QString &ignoreRule, bool isRegEx, int strictness,
+ int scope, const QString &scopeRule, bool isActive);
+
protected:
void setIgnoreList(const QList<IgnoreListItem> &ignoreList) { _ignoreList = ignoreList; }
+ bool scopeMatch(const QString &scopeRule, const QString &string) const; // scopeRule is a ';'-separated list, string is a network/channel-name
+
+ StrictnessType _match(const QString &msgContents, const QString &msgSender, Message::Type msgType, const QString &network, const QString &bufferName);
+
signals:
void ignoreAdded(IgnoreType type, const QString &ignoreRule, bool isRegex, StrictnessType strictness, ScopeType scope, const QVariant &scopeRule, bool isActive);
private:
- // scopeRule is a ; separated list, string is a network/channel-name
- bool scopeMatch(const QString &scopeRule, const QString &string);
IgnoreList _ignoreList;
};