Don't log to stdout if --syslog and/or --logfile are specified
[quassel.git] / src / common / ignorelistmanager.h
index a906b95..b5bdf22 100644 (file)
 
 #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); }
@@ -36,7 +36,8 @@ public:
 
   enum IgnoreType {
     SenderIgnore,
-    MessageIgnore
+    MessageIgnore,
+    CtcpIgnore
   };
 
   enum StrictnessType {
@@ -90,24 +91,60 @@ public:
     * \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;
 };