⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filter-opts.c

📁 一个功能全面的电子邮件客户端
💻 C
📖 第 1 页 / 共 2 页
字号:
/* TradeClient <http://tradeclient.sourceforge.net> * $Id: filter-opts.c,v 1.14 2001/03/20 22:19:33 ttabner Exp $ * * Copyright (C) 1999-2000 Bynari Inc. * Copyright (C) 2001 Project TradeClient * * LGPL * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library * General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#include "puma.h"GList *rule_list=NULL;GList *filter_first () { return rule_list; }FilterRule *filter_new_rule () {	FilterRule *rule=(FilterRule *)calloc (1, sizeof (FilterRule));	rule_list=g_list_append (rule_list, rule);	return rule;}void filter_add_rule (char *filt) {	FilterRule *rule;	char *tmps;//printf ("Adding filter rule\n");	if (!filt) return;	rule=filter_new_rule ();	switch (filt[0]) {		case 'S':		case 's':			rule->matchline=F_SUBJECT;			break;		case 'F':		case 'f':			rule->matchline=F_FROM;			break;                case 'R':                case 'r':                        rule->matchline=F_REPLYTO;                        break;		case 'T':		case 't':			rule->matchline=F_TO;			break;                case 'C':                case 'c':                        rule->matchline=F_CC;                        break;                case 'B':                case 'b':                        rule->matchline=F_BCC;			break;		case 'M':		case 'm':			rule->matchline=F_MSG;			break;		case 'K':		case 'k':			rule->matchline=F_KEY;			break;		default:			filter_delete_rule (rule);			return;			break;	}	switch (filt[1]) {		case '+':			rule->type=F_AND;			break;		case '!':			rule->type=F_NOT;			break;		case '=':			rule->type=F_EQUAL;			break;		default:			filter_delete_rule (rule);			return;			break;	}	switch (filt[2]) {		case 'M':		case 'm':			rule->action=F_ACTION_MOVE;			tmps=strchr (filt, ';');			if (tmps) {				rule->folder=(char *)calloc (tmps-filt, sizeof(char));				memmove (rule->folder, filt+3, tmps-(filt+3));			} else {				filter_delete_rule (rule);				return;			}			break;		case 'D':		case 'd':			rule->action=F_ACTION_DELETE;			tmps=strchr (filt, ';');			break;		default:			filter_delete_rule (rule);			return;			break;	}	tmps++;	rule->text=(char *)calloc (strlen (tmps)+2, sizeof(char));	memmove (rule->text, tmps, strlen (tmps));}char *filter_to_char (FilterRule *rule) {	char *ret;	int len=20;		if (!rule) return NULL;	if (rule->text)		len+=strlen (rule->text);	else		return NULL;	if (rule->folder) len+=strlen (rule->folder);	ret=(char *)calloc (len+2, sizeof(char));	switch (rule->matchline) {		case F_SUBJECT:			addtext2 (ret, "S");			break;		case F_FROM:			addtext2 (ret, "F");			break;		case F_REPLYTO:			addtext2 (ret, "R");			break;		case F_TO:			addtext2 (ret, "T");			break;		case F_CC:			addtext2 (ret, "C");                        break;                case F_BCC:                        addtext2 (ret, "B");                        break;		case F_MSG:			addtext2 (ret, "M");			break;		case F_KEY:			addtext2 (ret, "K");			break;	}	switch (rule->type) {		case F_AND:			addtext2 (ret, "+");			break;		case F_NOT:			addtext2 (ret, "!");			break;		case F_EQUAL:			addtext2 (ret, "=");			break;	}	switch (rule->action) {		case F_ACTION_MOVE:			addtext2 (ret, "M");			addtext2 (ret, rule->folder);			break;		case F_ACTION_DELETE:			addtext2 (ret, "D");			break;	}	addtext2 (ret, ";");	addtext2 (ret, rule->text);	return ret;}char *filter_to_hr (FilterRule *rule) {	char *ret;	int len=150;	if (!rule) return NULL;	if (rule->text)		len+=strlen (rule->text);	else		return NULL;	if (!rule->folder) rule->folder=strdup("Inbox");	len+=strlen (rule->folder);	ret=(char *)calloc (len+2, sizeof(char));	addtext2 (ret, "If the ");	switch (rule->matchline) {		case F_SUBJECT:			addtext2 (ret, "subject ");			break;		case F_FROM:			addtext2 (ret, "from line ");			break;		case F_REPLYTO:			addtext2 (ret, "reply-to line ");			break;		case F_TO:			addtext2 (ret, "to line ");			break;		case F_CC:			addtext2 (ret, "cc line ");                        break;                case F_BCC:                        addtext2 (ret, "bcc line ");                        break;		case F_MSG:			addtext2 (ret, "message body ");			break;		case F_KEY:			addtext2 (ret, "keywords ");			break;	}	switch (rule->type) {		case F_AND:			addtext2 (ret, "contains the text \"");			break;		case F_NOT:			addtext2 (ret, "does not contain the text \"");			break;		case F_EQUAL:			addtext2 (ret, "equals the text \"");			break;	}	addtext2 (ret, rule->text);	addtext2 (ret, "\" then ");	switch (rule->action) {		case F_ACTION_MOVE:			addtext2 (ret, "move to the folder \"");			if (rule->folder) addtext2 (ret, rule->folder);			addtext2 (ret, "\".");			break;		case F_ACTION_DELETE:			addtext2 (ret, "delete.");			break;		default:			addtext2 (ret, "move to the folder \"");			if (rule->folder) addtext2 (ret, rule->folder);                        addtext2 (ret, "\".");                        break;	}	return ret;}FilterAction *filter_message (char *subj, char *from, char *to, char *cc, char *bcc, char *body, char *keywords, char *replyto) {	GList *seek;	FilterAction *fact=(FilterAction *)calloc (1, sizeof(FilterAction));	fact->action=F_ACTION_NONE;	if ((!subj)||(!from)||(!to)) return fact;#ifdef DMALLOC	dmalloc_verify( 0 ) ;#endif

⌨️ 快捷键说明

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