aboutsummaryrefslogtreecommitdiffstats
path: root/filter/filter-rule.c
diff options
context:
space:
mode:
Diffstat (limited to 'filter/filter-rule.c')
-rw-r--r--filter/filter-rule.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/filter/filter-rule.c b/filter/filter-rule.c
index 9c47af6daf..58a2d76518 100644
--- a/filter/filter-rule.c
+++ b/filter/filter-rule.c
@@ -158,6 +158,19 @@ static xmlNodePtr xml_encode(FilterRule *fr)
xmlSetProp(node, "grouping", "any");
break;
}
+
+ switch (fr->source) {
+ case FILTER_SOURCE_INCOMING:
+ xmlSetProp(node, "source", "incoming");
+ break;
+ case FILTER_SOURCE_DEMAND:
+ xmlSetProp(node, "source", "ondemand");
+ break;
+ case FILTER_SOURCE_OUTGOING:
+ xmlSetProp(node, "source", "outgoing");
+ break;
+ }
+
if (fr->name) {
work = xmlNewNode(NULL, "title");
xmlNodeSetContent(work, fr->name);
@@ -209,16 +222,34 @@ static int xml_decode(FilterRule *fr, xmlNodePtr node, RuleContext *f)
{
xmlNodePtr work;
char *grouping;
+ char *source;
if (fr->name) {
g_free(fr->name);
fr->name = NULL;
}
+
grouping = xmlGetProp(node, "grouping");
if (!strcmp(grouping, "any"))
fr->grouping = FILTER_GROUP_ANY;
else
fr->grouping = FILTER_GROUP_ALL;
+
+ /* FIXME: free source and grouping? */
+ source = xmlGetProp (node, "source");
+ if (!source) /*default to incoming*/
+ fr->source = FILTER_SOURCE_INCOMING;
+ else if (!strcmp (source, "outgoing"))
+ fr->source = FILTER_SOURCE_OUTGOING;
+ else if (!strcmp (source, "ondemand"))
+ fr->source = FILTER_SOURCE_DEMAND;
+ else if (!strcmp (source, "incoming"))
+ fr->source = FILTER_SOURCE_INCOMING;
+ else {
+ g_warning ("Unknown filter source type \"%s\"", source);
+ fr->source = FILTER_SOURCE_INCOMING;
+ }
+
work = node->childs;
while (work) {
if (!strcmp(work->name, "partset")) {