📄 filter-opts.c
字号:
/* 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 + -