Mercurial > noffle
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 */