filter-opts.c

来自「一个功能全面的电子邮件客户端」· C语言 代码 · 共 561 行 · 第 1/2 页

C
561
字号
	for (seek=rule_list; seek; seek=seek->next) {		FilterRule *rule=seek->data;		switch (rule->matchline) {			case F_SUBJECT:				if (rule->type==F_AND) {					if (strstr (subj, rule->text)) {						fact->action=rule->action;						if (rule->action==F_ACTION_MOVE) {							fact->folder=strdup (rule->folder);						}						return fact;					}				} else if (rule->type==F_NOT) {					if (!strstr (subj, rule->text)) {						fact->action=rule->action;						if (rule->action==F_ACTION_MOVE) {							fact->folder=strdup (rule->folder);						}						return fact;					}				} else if (rule->type==F_EQUAL) {					if (!strncmp (subj, rule->text, strlen (rule->text))) {						fact->action=rule->action;						if (rule->action==F_ACTION_MOVE) {							fact->folder=strdup (rule->folder);						}						return fact;					}				}				break;			case F_FROM:				if (rule->type==F_AND) {					if (strstr (from, rule->text)) {						fact->action=rule->action;						if (rule->action==F_ACTION_MOVE) {							fact->folder=strdup (rule->folder);						}						return fact;					}				} else if (rule->type==F_NOT) {					if (!strstr (from, rule->text)) {						fact->action=rule->action;						if (rule->action==F_ACTION_MOVE) {							fact->folder=strdup (rule->folder);						}						return fact;					}				} else if (rule->type==F_EQUAL) {					if (!strncmp (subj, rule->text, strlen (rule->text))) {						fact->action=rule->action;						if (rule->action==F_ACTION_MOVE) {							fact->folder=strdup (rule->folder);						}						return fact;					}				}				break;			case F_TO:				if (rule->type==F_AND) {					if (strstr (to, rule->text)) {						fact->action=rule->action;						if (rule->action==F_ACTION_MOVE) {							fact->folder=strdup (rule->folder);						}						return fact;					}				} else if (rule->type==F_NOT) {					if (!strstr (to, rule->text)) {						fact->action=rule->action;						if (rule->action==F_ACTION_MOVE) {							fact->folder=strdup (rule->folder);						}						return fact;					}				} else if (rule->type==F_EQUAL) {					if (!strncmp (to, rule->text, strlen (rule->text))) {						fact->action=rule->action;						if (rule->action==F_ACTION_MOVE) {							fact->folder=strdup (rule->folder);						}						return fact;					}				}				break;                        case F_CC:				if(!cc) break;                                if (rule->type==F_AND) {                                        if (strstr (cc, rule->text)) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                } else if (rule->type==F_NOT) {                                        if (!strstr (cc, rule->text)) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                } else if (rule->type==F_EQUAL) {                                        if (!strncmp (cc, rule->text, strlen (rule->text))) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                }                                break;                        case F_REPLYTO:                                if(!replyto) break;                                if (rule->type==F_AND) {                                        if (strstr (replyto, rule->text)) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                } else if (rule->type==F_NOT) {                                        if (!strstr (replyto, rule->text)) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                } else if (rule->type==F_EQUAL) {                                        if (!strncmp (replyto, rule->text, strlen (rule->text))) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                }                                break;                        case F_BCC:				if(!bcc) break;                                if (rule->type==F_AND) {                                        if (strstr (bcc, rule->text)) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                } else if (rule->type==F_NOT) {                                        if (!strstr (bcc, rule->text)) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                } else if (rule->type==F_EQUAL) {                                        if (!strncmp (bcc, rule->text, strlen (rule->text))) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                }                                break;			case F_MSG:                                if(!body) break;                                if (rule->type==F_AND) {                                        if (strstr (body, rule->text)) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                } else if (rule->type==F_NOT) {                                        if (!strstr (body, rule->text)) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                } else if (rule->type==F_EQUAL) {                                        if (!strncmp (body, rule->text, strlen (rule->text))) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                }                                break;                        case F_KEY:                                if(!keywords) break;                                if (rule->type==F_AND) {                                        if (strstr (keywords, rule->text)) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                } else if (rule->type==F_NOT) {                                        if (!strstr (keywords, rule->text)) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                } else if (rule->type==F_EQUAL) {                                        if (!strncmp (keywords, rule->text, strlen (rule->text))) {                                                fact->action=rule->action;                                                if (rule->action==F_ACTION_MOVE) {                                                        fact->folder=strdup (rule->folder);                                                }                                                return fact;                                        }                                }                                break;			}	}#ifdef DMALLOC	dmalloc_verify( 0 ) ;#endif	return fact;}void filter_delete_rule (FilterRule *rule) {	g_return_if_fail (rule != NULL);	if (rule->text) free (rule->text);	if (rule->folder) free (rule->folder);	rule_list=g_list_remove (rule_list, rule);	free (rule);}GList *g_list_swap (GList *begin, GList *node1, GList *node2) {	void *tmpdata;	tmpdata=node1->data;	node1->data=node2->data;	node2->data=tmpdata;	return begin;}void filter_move_up (FilterRule *rule) {	GList *seek=g_list_find (rule_list, rule);	rule_list=g_list_swap (rule_list, seek->prev, seek);}void filter_move_down (FilterRule *rule) {	GList *seek=g_list_find (rule_list, rule);	rule_list=g_list_swap (rule_list, seek, seek->next);}void filter_action_destroy (FilterAction *fact) {	if (fact) {		if (fact->folder) free (fact->folder);		free (fact);	}}void rule_destroy_all () {	GList *seek;	for (seek=rule_list;seek;seek=seek->next) {		FilterRule *rule=seek->data;		if (rule->text) free (rule->text);		if (rule->folder) free (rule->folder);		free (rule);	}	g_list_free (rule_list);	rule_list=NULL;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?