* src/filtering.c
authorAlfons Hoogervorst <alfons@proteus.demon.nl>
Tue, 17 Feb 2004 22:06:17 +0000 (22:06 +0000)
committerAlfons Hoogervorst <alfons@proteus.demon.nl>
Tue, 17 Feb 2004 22:06:17 +0000 (22:06 +0000)
make MATCHACTION_STOP cancel filtering / processing;
clean up and document it to make it a little bit more clear;

ChangeLog.claws
configure.ac
src/filtering.c

index af5938d..ea3608b 100644 (file)
@@ -1,3 +1,9 @@
+2004-02-17 [alfons]    0.9.9claws22
+
+       * src/filtering.c
+               make MATCHACTION_STOP cancel filtering / processing;
+               clean up and document it to make it a little bit more clear;
+
 2004-02-17 [alfons]    0.9.9claws21
 
        %X marks the cursor spot for reply quote format
index a908f31..66b16dc 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=9
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=21
+EXTRA_VERSION=22
 if test $EXTRA_VERSION -eq 0; then
     VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}claws
 else
index fb79d43..7b68fa0 100644 (file)
@@ -284,7 +284,7 @@ static gboolean filteringaction_apply(FilteringAction * action, MsgInfo * info)
                return TRUE;
 
        case MATCHACTION_STOP:
-                return TRUE;
+                return FALSE;
 
        case MATCHACTION_HIDE:
                 info->hidden = TRUE;
@@ -318,6 +318,17 @@ static gboolean filtering_match_condition(FilteringProp *filtering, MsgInfo *inf
        return matcherlist_match(filtering->matchers, info);
 }
 
+/*!
+ *\brief       Apply a rule on message.
+ *
+ *\param       filtering List of filtering rules.
+ *\param       info Message to apply rules on.
+ *\param       final Variable returning TRUE or FALSE if one of the
+ *             encountered actions was final. 
+ *             See also \ref filtering_is_final_action.
+ *
+ *\return      gboolean TRUE to continue applying rules.
+ */
 static gboolean filtering_apply_rule(FilteringProp *filtering, MsgInfo *info,
     gboolean * final)
 {
@@ -332,7 +343,7 @@ static gboolean filtering_apply_rule(FilteringProp *filtering, MsgInfo *info,
                 action = tmp->data;
                 
                 if (FALSE == (result = filteringaction_apply(action, info))) {
-                        g_warning("action %s could not be applied", 
+                        g_warning("No further processing after rule %s\n",
                             filteringaction_to_string(buf, sizeof buf, action));
                 }
                 
@@ -344,6 +355,14 @@ static gboolean filtering_apply_rule(FilteringProp *filtering, MsgInfo *info,
        return result;
 }
 
+/*!
+ *\brief       Check if an action is "final", i.e. should break further
+ *             processing.
+ *
+ *\param       filtering_action Action to check.
+ *
+ *\return      gboolean TRUE if \a filtering_action is final.  
+ */
 static gboolean filtering_is_final_action(FilteringAction *filtering_action)
 {
        switch(filtering_action->type) {
@@ -360,15 +379,15 @@ static gboolean filter_msginfo(GSList * filtering_list, MsgInfo * info)
 {
        GSList  *l;
        gboolean final;
-       gboolean applied;
+       gboolean apply_next;
        
        g_return_val_if_fail(info != NULL, TRUE);
        
-       for (l = filtering_list, final = FALSE, applied = FALSE; l != NULL; l = g_slist_next(l)) {
+       for (l = filtering_list, final = FALSE, apply_next = FALSE; l != NULL; l = g_slist_next(l)) {
                FilteringProp * filtering = (FilteringProp *) l->data;
 
                if (filtering_match_condition(filtering, info)) {
-                       applied = filtering_apply_rule(filtering, info, &final);
+                       apply_next = filtering_apply_rule(filtering, info, &final);
                         if (final)
                                 break;
                }               
@@ -376,13 +395,26 @@ static gboolean filter_msginfo(GSList * filtering_list, MsgInfo * info)
 
        /* put in inbox if a final rule could not be applied, or
         * the last rule was not a final one. */
-       if ((final && !applied) || !final) {
+       if ((final && !apply_next) || !final) {
                return FALSE;
        }
 
        return TRUE;
 }
 
+/*!
+ *\brief       Filter a message against a list of rules.
+ *
+ *\param       flist List of filter rules.
+ *\param       info Message.
+ *
+ *\return      gboolean TRUE if filter rules handled the message.
+ *
+ *\note                Returning FALSE means the message was not handled,
+ *             and that the calling code should do the default
+ *             processing. E.g. \ref inc.c::inc_start moves the 
+ *             message to the inbox.   
+ */
 gboolean filter_message_by_msginfo(GSList *flist, MsgInfo *info)
 {
        return filter_msginfo(flist, info);