summaryrefslogtreecommitdiff
path: root/pith/sort.c
diff options
context:
space:
mode:
Diffstat (limited to 'pith/sort.c')
-rw-r--r--pith/sort.c56
1 files changed, 53 insertions, 3 deletions
diff --git a/pith/sort.c b/pith/sort.c
index 8ac6aa2..6727361 100644
--- a/pith/sort.c
+++ b/pith/sort.c
@@ -30,7 +30,7 @@ static char rcsid[] = "$Id: sort.c 1142 2008-08-13 17:22:21Z hubert@u.washington
#include "../pith/signal.h"
#include "../pith/busy.h"
#include "../pith/icache.h"
-
+#include "../pith/rules.h"
/*
* global place to store mail_sort and mail_thread results
@@ -686,7 +686,21 @@ reset_sort_order(unsigned int flags)
PAT_S *pat;
SortOrder the_sort_order;
int sort_is_rev;
-
+ char *rule_result;
+ SortOrder new_sort = EndofList;
+ int is_rev;
+
+ rule_result = get_rule_result(FOR_SORT, ps_global->cur_folder, V_SORT_RULES);
+ if (rule_result && *rule_result){
+ new_sort = (SortOrder) translate(rule_result, 1);
+ is_rev = (SortOrder) translate(rule_result, 0) == EndofList ? 0 : 1;
+ fs_give((void **)&rule_result);
+ }
+ if (new_sort != EndofList){
+ the_sort_order = new_sort;
+ sort_is_rev = is_rev;
+ }
+ else{
/* set default order */
the_sort_order = ps_global->def_sort;
sort_is_rev = ps_global->def_sort_rev;
@@ -704,7 +718,43 @@ reset_sort_order(unsigned int flags)
sort_is_rev = pat->action->revsort;
}
}
-
+ }
sort_folder(ps_global->mail_stream, ps_global->msgmap,
the_sort_order, sort_is_rev, flags);
}
+
+SortOrder translate(char *order, int is_rev)
+{
+ int rev = 0;
+ if (!strncmp(order,"tHread", 6)
+ || (rev = !strncmp(order,"Reverse tHread", 14)))
+ return is_rev || rev ? SortThread : EndofList;
+ if (!strncmp(order,"OrderedSubj", 11)
+ || (rev = !strncmp(order,"Reverse OrderedSubj", 19)))
+ return is_rev || rev ? SortSubject2 : EndofList;
+ if (!strncmp(order,"Subject", 7)
+ || (rev = !strncmp(order,"Reverse SortSubject", 15)))
+ return is_rev || rev ? SortSubject : EndofList;
+ if (!strncmp(order,"Arrival", 7)
+ || (rev = !strncmp(order,"Reverse Arrival", 15)))
+ return is_rev || rev ? SortArrival : EndofList;
+ if (!strncmp(order,"From", 4)
+ || (rev = !strncmp(order,"Reverse From", 12)))
+ return is_rev || rev ? SortFrom : EndofList;
+ if (!strncmp(order,"To", 2)
+ || (rev = !strncmp(order,"Reverse To", 10)))
+ return is_rev || rev ? SortTo : EndofList;
+ if (!strncmp(order,"Cc", 2)
+ || (rev = !strncmp(order,"Reverse Cc", 10)))
+ return is_rev || rev ? SortCc : EndofList;
+ if (!strncmp(order,"Date", 4)
+ || (rev = !strncmp(order,"Reverse Date", 12)))
+ return is_rev || rev ? SortDate : EndofList;
+ if (!strncmp(order,"siZe", 4)
+ || (rev = !strncmp(order,"Reverse siZe", 12)))
+ return is_rev || rev ? SortSize : EndofList;
+ if (!strncmp(order,"scorE", 5)
+ || (rev = !strncmp(order,"Reverse scorE", 13)))
+ return is_rev || rev ? SortScore : EndofList;
+ return EndofList;
+}