From: pdmef Date: Tue, 1 Mar 2005 19:23:41 +0000 (+0000) Subject: Rocco Rutte: X-Git-Url: http://git.madism.org/?a=commitdiff_plain;ds=sidebyside;h=99f13b54ae0060dae3e97e661c1d728d1dedd871;p=apps%2Fmadmutt.git Rocco Rutte: sidebar fixes (sort mailboxes by name, fix new mail recognition, ...) git-svn-id: svn://svn.berlios.de/mutt-ng/trunk@127 e385b8ad-14ed-0310-8656-cc95a2468c6d --- diff --git a/ChangeLog.mutt-ng b/ChangeLog.mutt-ng index d0e2f11..2908a31 100644 --- a/ChangeLog.mutt-ng +++ b/ChangeLog.mutt-ng @@ -1,6 +1,7 @@ Changes specific to mutt-ng: 2005-03-01: + * made internal buffy list sorted (-> sorted in sidebar, too) * somewhat bigger documentation update; introduce UPGRADING document * fixed escape sequence problem in manual.txt diff --git a/buffy.c b/buffy.c index a90b0a8..3a0888d 100644 --- a/buffy.c +++ b/buffy.c @@ -24,6 +24,7 @@ #include "buffy.h" #include "mailbox.h" #include "mx.h" +#include "sidebar.h" #include "mutt_curses.h" @@ -171,12 +172,25 @@ void mutt_update_mailbox (BUFFY * b) int mutt_parse_mailboxes (BUFFER *path, BUFFER *s, unsigned long data, BUFFER *err) { - BUFFY **tmp,*tmp1; + BUFFY **tmp,*tmp1,*last; char buf[_POSIX_PATH_MAX]; + int dup = 0; #ifdef BUFFY_SIZE struct stat sb; #endif /* BUFFY_SIZE */ + /* + * FIXME + * to get rid of correcting the ->prev pointers in sidebar.c, + * correct them right here + */ + + /* + * FIXME + * if we really want to make the sort order of the sidebar + * configurable, this has to go right here + */ + while (MoreArgs (s)) { mutt_extract_token (path, s, 0); @@ -200,12 +214,19 @@ int mutt_parse_mailboxes (BUFFER *path, BUFFER *s, unsigned long data, BUFFER *e if(!*buf) continue; /* simple check to avoid duplicates */ - for (tmp = &Incoming; *tmp; tmp = &((*tmp)->next)) + dup = 0; + for (tmp = &Incoming; *tmp && dup == 0; tmp = &((*tmp)->next)) { - if (mutt_strcmp (buf, (*tmp)->path) == 0) - break; + if (mutt_strcmp (buf, (*tmp)->path) == 0) { + dup = 1; + break; + } } + if (dup == 1) + continue; + tmp = &Incoming; + if(data == M_UNMAILBOXES) { if(*tmp) @@ -218,16 +239,32 @@ int mutt_parse_mailboxes (BUFFER *path, BUFFER *s, unsigned long data, BUFFER *e continue; } - if (!*tmp) - { - *tmp = (BUFFY *) safe_calloc (1, sizeof (BUFFY)); - (*tmp)->path = safe_strdup (buf); - (*tmp)->next = NULL; - /* it is tempting to set magic right here */ - (*tmp)->magic = 0; - + /* loop over list while it's sorted */ + tmp1 = NULL; + last = NULL; + for (tmp = &Incoming; *tmp ; tmp = &((*tmp)->next)) { + /* + * FIXME + * change this to get whatever sorting order + */ + if (mutt_strcmp (buf, (*tmp)->path) < 0) { + tmp1 = (*tmp); + break; + } + last = (*tmp); } + /* we want: last -> tmp -> tmp1 */ + *tmp = (BUFFY *) safe_calloc (1, sizeof (BUFFY)); + (*tmp)->path = safe_strdup (buf); + (*tmp)->magic = 0; + + /* correct pointers */ + (*tmp)->next = tmp1; + if (last) + last->next = (*tmp); + + /* left as-is */ (*tmp)->new = 0; (*tmp)->notified = 1; (*tmp)->newly_created = 0; @@ -428,7 +465,6 @@ int mutt_buffy_check (int force) if (SidebarWidth == 0) { /* if sidebar invisible -> done */ - tmp->new = 1; break; } } @@ -453,7 +489,6 @@ int mutt_buffy_check (int force) if (*de->d_name != '.' && (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T'))) { - BuffyCount++; tmp->msgcount++; } } @@ -565,6 +600,8 @@ int mutt_buffy_list (void) } if (!first) { + /* on new mail: redraw sidebar */ + draw_sidebar (CurrentMenu); mutt_message ("%s", buffylist); return (1); } diff --git a/curs_main.c b/curs_main.c index fd4d287..bbbc6c4 100644 --- a/curs_main.c +++ b/curs_main.c @@ -537,6 +537,8 @@ int mutt_index_menu (void) mutt_error _("Mailbox was externally modified. Flags may be wrong."); else if (check == M_NEW_MAIL) { + /* on new mail: redraw sidebar */ + draw_sidebar (CurrentMenu); mutt_message _("New mail in this mailbox."); if (option (OPTBEEPNEW)) beep (); diff --git a/sidebar.c b/sidebar.c index 9290a1a..e136de6 100644 --- a/sidebar.c +++ b/sidebar.c @@ -46,22 +46,24 @@ static int quick_log10(int n) return (++len); } -// CurBuffy should contain a valid buffy mailbox before calling this function!!! +/* CurBuffy should contain a valid buffy + * mailbox before calling this function!!! */ void calc_boundaries (int menu) { BUFFY *tmp = Incoming; int position; int i,count, mailbox_position; - // correct known_lines if it has changed because of a window resize + /* correct known_lines if it has changed because of a window resize */ if ( known_lines != LINES ) { known_lines = LINES; } - // fix all the prev links on all the mailboxes + /* fix all the prev links on all the mailboxes + * FIXME move this over to buffy.c where it belongs */ for ( ; tmp->next != 0; tmp = tmp->next ) tmp->next->prev = tmp; - // calculate the position of the current mailbox + /* calculate the position of the current mailbox */ position = 1; tmp = Incoming; while (tmp != CurBuffy) @@ -69,17 +71,18 @@ void calc_boundaries (int menu) position++; tmp = tmp->next; } - // calculate the size of the screen we can use + /* calculate the size of the screen we can use */ count = LINES - 2 - (menu != MENU_PAGER || option (OPTSTATUSONTOP)); - // calculate the position of the current mailbox on the screen + /* calculate the position of the current mailbox on the screen */ mailbox_position = position%count; if (mailbox_position == 0) mailbox_position=count; - // determine topbuffy + /* determine topbuffy */ TopBuffy = CurBuffy; for(i = mailbox_position; i >1; i--) TopBuffy = TopBuffy->prev; - // determine bottombuffy + /* determine bottombuffy */ BottomBuffy = CurBuffy; - for(i = mailbox_position; i < count && BottomBuffy->next; i++) BottomBuffy = BottomBuffy->next; + for(i = mailbox_position; i < count && BottomBuffy->next; i++) + BottomBuffy = BottomBuffy->next; } static char * shortened_hierarchy(char * box) { @@ -320,21 +323,31 @@ void scroll_sidebar(int op, int menu) switch (op) { case OP_SIDEBAR_NEXT: - if ( CurBuffy->next == NULL ) return; + if ( CurBuffy->next == NULL ) { + mutt_error (_("You are on the last mailbox.")); + return; + } CurBuffy = CurBuffy->next; break; case OP_SIDEBAR_NEXT_NEW: - if ( (tmp = exist_next_new()) == NULL) - return; + if ( (tmp = exist_next_new()) == NULL) { + mutt_error (_("No next mailboxes with new mail.")); + return; + } else CurBuffy = tmp; break; case OP_SIDEBAR_PREV: - if ( CurBuffy->prev == NULL ) return; + if ( CurBuffy->prev == NULL ) { + mutt_error (_("You are on the first mailbox.")); + return; + } CurBuffy = CurBuffy->prev; break; case OP_SIDEBAR_PREV_NEW: - if ( (tmp = exist_prev_new()) == NULL) - return; + if ( (tmp = exist_prev_new()) == NULL) { + mutt_error (_("No previous mailbox with new mail.")); + return; + } else CurBuffy = tmp; break;