diff src/filter.h @ 128:8897b7e3b108 noffle

[svn] Add article filtering
author bears
date Wed, 09 Aug 2000 22:19:17 +0100
parents
children a4e9a20e50e5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/filter.h	Wed Aug 09 22:19:17 2000 +0100
@@ -0,0 +1,95 @@
+/*
+  filter.h
+
+  Article filtering.
+
+  $Id: filter.h 189 2000-08-09 21:19:17Z bears $
+*/
+
+#ifndef	FILTER_H
+#define	FILTER_H
+
+#include <sys/types.h>
+#include <regex.h>
+#include "fetchlist.h"
+#include "over.h"
+
+/* The possible actions in a filter. */
+typedef enum {
+    FILTER_FULL,
+    FILTER_XOVER,
+    FILTER_THREAD,
+    FILTER_DISCARD
+} FilterAction;
+
+/* Representation of a rule. */
+typedef enum {
+    RULE_NEWSGROUP,					/* Wildmat data */
+    RULE_SUBJECT,					/* Regex data */
+    RULE_FROM,
+    RULE_MSGID,
+    RULE_BYTES_LT, RULE_BYTES_EQ, RULE_BYTES_GT,	/* Number data */
+    RULE_LINES_LT, RULE_LINES_EQ, RULE_LINES_GT,
+    RULE_NOREFS_LT, RULE_NOREFS_EQ, RULE_NOREFS_GT,
+    RULE_XPOSTS_LT, RULE_XPOSTS_EQ, RULE_XPOSTS_GT
+} FilterRuleType;
+
+typedef union {
+    regex_t regex;
+    unsigned long amount;
+    char *grp;
+} FilterRuleData;
+
+typedef struct {
+    FilterRuleType type;
+    FilterRuleData data;
+} FilterRule;
+
+/* A single filter is a collection of rules with an action. */
+typedef struct {
+    int nRules;
+    int maxRules;
+    FilterRule *rules;
+    FilterAction action;
+} Filter;
+
+/* Add a filter to the list of filters. */
+void
+Flt_addFilter( const Filter *f );
+
+/*
+ * Run the rules over the supplied overview. If a specific rule fires,
+ * returns its action. If no rule fires, return the default read mode.
+ */
+FilterAction
+Flt_checkFilters( const char *thisGrp, const char *newsgroups,
+		  const Over *ov, FetchMode mode );
+
+/*
+ * Build and access a filter
+ */
+Filter *
+new_Filter( void );
+
+void
+del_Filter( Filter *f );
+
+FilterAction
+Flt_action( const Filter *f );
+
+int
+Flt_nRules( const Filter *f );
+
+Bool
+Flt_getNewsgroups( void );
+
+FilterRule
+Flt_rule( const Filter *f, int ruleNo );
+
+void
+Flt_setAction( Filter *f, FilterAction action );
+
+void
+Flt_addRule( Filter *f, FilterRule rule );
+
+#endif	/* FILTER_H */