diff options
Diffstat (limited to 'pith/sort.c')
-rw-r--r-- | pith/sort.c | 56 |
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; +} |