Rocco Rutte:
[apps/madmutt.git] / curs_main.c
index 7720241..757b006 100644 (file)
@@ -1,19 +1,13 @@
 /*
+ * Copyright notice from original mutt:
  * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
- * 
- *     This program is free software; you can redistribute it and/or modify
- *     it under the terms of the GNU 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 General Public License for more details.
- * 
- *     You should have received a copy of the GNU General Public License
- *     along with this program; if not, write to the Free Software
- *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *
+ * Parts were written/modified by:
+ * Nico Golde <nico@ngolde.de>
+ *
+ * This file is part of mutt-ng, see http://www.muttng.org/.
+ * It's licensed under the GNU General Public License,
+ * please see the file GPL in the top level source directory.
  */
 
 #if HAVE_CONFIG_H
@@ -24,7 +18,6 @@
 #include "mutt_curses.h"
 #include "mx.h"
 #include "mutt_menu.h"
-#include "mailbox.h"
 #include "mapping.h"
 #include "sort.h"
 #include "buffy.h"
 #include "nntp.h"
 #endif
 
+#include "lib/mem.h"
+#include "lib/intl.h"
+#include "lib/str.h"
+#include "lib/debug.h"
 
 #include <ctype.h>
 #include <stdlib.h>
@@ -89,17 +86,6 @@ static const char *No_visible = N_("No visible messages.");
                                 break; \
                         }
 
-#ifdef USE_IMAP
-/* the error message returned here could be better. */
-#define CHECK_IMAP_ACL(aclbit) if (Context->magic == M_IMAP) \
-                if (mutt_bit_isset (((IMAP_DATA *)Context->data)->capabilities, ACL) \
-                && !mutt_bit_isset(((IMAP_DATA *)Context->data)->rights,aclbit)){ \
-                        mutt_flushinp(); \
-                        mutt_error ("Operation not permitted by the IMAP ACL for this mailbox"); \
-                        break; \
-                }
-#endif
-
 #define CHECK_ATTACH if(option(OPTATTACHMSG)) \
                      {\
                         mutt_flushinp (); \
@@ -459,10 +445,10 @@ int mutt_index_menu (void)
                                   IndexHelp);
 
   if (!attach_msg) {
-    mutt_buffy_check (1);       /* force the buffy check after we enter the folder */
+    buffy_check (1);       /* force the buffy check after we enter the folder */
     /* record folder we open to place sidebar indicator properly */
     if (Context && Context->path)
-      set_curbuffy (Context->path);
+      sidebar_set_current (Context->path);
   }
 
   FOREVER {
@@ -517,7 +503,7 @@ int mutt_index_menu (void)
                       ("Mailbox was externally modified.  Flags may be wrong."));
         else if (check == M_NEW_MAIL) {
           /* on new mail: redraw sidebar */
-          draw_sidebar (CurrentMenu);
+          sidebar_draw (CurrentMenu);
           mutt_message (_("New mail in this mailbox."));
 
           if (option (OPTBEEPNEW))
@@ -544,12 +530,12 @@ int mutt_index_menu (void)
     if (!attach_msg) {
       /* check for new mail in the incoming folders */
       oldcount = newcount;
-      if ((newcount = mutt_buffy_check (0)) != oldcount) {
+      if ((newcount = buffy_check (0)) != oldcount) {
         menu->redraw |= REDRAW_STATUS;
         menu->redraw |= REDRAW_SIDEBAR;
       }
       if (do_buffy_notify) {
-        if (mutt_buffy_notify () && option (OPTBEEPNEW))
+        if (buffy_notify () && option (OPTBEEPNEW))
           beep ();
       }
       else
@@ -559,10 +545,10 @@ int mutt_index_menu (void)
     if (op != -1)
       mutt_curs_set (0);
     if (menu->redraw & REDRAW_SIDEBAR)
-      draw_sidebar (menu->menu);
+      sidebar_draw (menu->menu);
     if (menu->redraw & REDRAW_FULL) {
       menu_redraw_full (menu);
-      draw_sidebar (menu->menu);
+      sidebar_draw (menu->menu);
       mutt_show_error ();
     }
 
@@ -588,7 +574,7 @@ int mutt_index_menu (void)
         SETCOLOR (MT_COLOR_STATUS);
         mutt_paddstr (COLS, buf);
         SETCOLOR (MT_COLOR_NORMAL);
-        set_buffystats (Context);
+        sidebar_set_buffystats (Context);
         menu->redraw &= ~REDRAW_STATUS;
         if (option (OPTXTERMSETTITLES)) {
           menu_status_line (buf, sizeof (buf), menu, NONULL (XtermTitle));
@@ -612,8 +598,7 @@ int mutt_index_menu (void)
 
       op = km_dokey (MENU_MAIN);
 
-      dprint (4,
-              (debugfile, "mutt_index_menu[%d]: Got op %d\n", __LINE__, op));
+      debug_print (4, ("Got op %d\n", op));
 
 #if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
       if (SigWinch) {
@@ -924,9 +909,7 @@ int mutt_index_menu (void)
       CHECK_VISIBLE;
       CHECK_READONLY;
 
-#ifdef USE_IMAP
-      CHECK_IMAP_ACL (IMAP_ACL_DELETE);
-#endif
+      CHECK_MX_ACL (Context, ACL_DELETE, _("Deletion"));
 
       CHECK_ATTACH;
       mutt_pattern_func (M_DELETE, _("Delete messages matching: "));
@@ -1104,9 +1087,7 @@ int mutt_index_menu (void)
       CHECK_VISIBLE;
       CHECK_READONLY;
 
-#ifdef USE_IMAP
-      CHECK_IMAP_ACL (IMAP_ACL_DELETE);
-#endif
+      CHECK_MX_ACL (Context, ACL_DELETE, _("Undeletion"));
 
       if (mutt_pattern_func (M_UNDELETE, _("Undelete messages matching: ")) ==
           0)
@@ -1222,13 +1203,11 @@ int mutt_index_menu (void)
       {
         if (Context && Context->path)
           strncpy (buf, Context->path, sizeof (buf));
-        mutt_buffy (buf, sizeof (buf));
+        buffy_next (buf, sizeof (buf));
       }
 
       if (op == OP_SIDEBAR_OPEN) {
-        if (!CurBuffy)
-          break;
-        strncpy (buf, CurBuffy->path, sizeof (buf));
+        strncpy (buf, NONULL(sidebar_get_current ()), sizeof (buf));
       }
       else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) ==
                -1)
@@ -1246,23 +1225,23 @@ int mutt_index_menu (void)
       else
 #endif
         mutt_expand_path (buf, sizeof (buf));
-      set_curbuffy (buf);
+      sidebar_set_current (buf);
       if (mx_get_magic (buf) <= 0) {
         mutt_error (_("%s is not a mailbox."), buf);
         break;
       }
-      mutt_str_replace (&CurrentFolder, buf);
+      str_replace (&CurrentFolder, buf);
 
       if (Context) {
         int check;
 
 #ifdef USE_COMPRESSED
         if (Context->compressinfo && Context->realpath)
-          mutt_str_replace (&LastFolder, Context->realpath);
+          str_replace (&LastFolder, Context->realpath);
         else
 #endif
 
-          mutt_str_replace (&LastFolder, Context->path);
+          str_replace (&LastFolder, Context->path);
         oldcount = Context ? Context->msgcount : 0;
 
         if ((check = mx_close_mailbox (Context, &index_hint)) != 0) {
@@ -1293,7 +1272,7 @@ int mutt_index_menu (void)
         menu->current = 0;
 
 #ifdef USE_NNTP
-      /* mutt_buffy_check() must be done with mail-reader mode! */
+      /* buffy_check() must be done with mail-reader mode! */
       menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_MAIN,
                                       (Context
                                        && (Context->magic ==
@@ -1301,7 +1280,7 @@ int mutt_index_menu (void)
                                       IndexHelp);
 #endif
       mutt_clear_error ();
-      mutt_buffy_check (1);     /* force the buffy check after we have changed
+      buffy_check (1);     /* force the buffy check after we have changed
                                    the folder */
       menu->redraw = REDRAW_FULL;
       set_option (OPTSEARCHINVALID);
@@ -1654,27 +1633,7 @@ int mutt_index_menu (void)
       CHECK_VISIBLE;
       CHECK_READONLY;
 
-#ifdef USE_POP
-      if (Context->magic == M_POP) {
-        mutt_flushinp ();
-        mutt_error (_("Can't change 'important' flag on POP server."));
-
-        break;
-      }
-#endif
-
-#ifdef USE_IMAP
-      CHECK_IMAP_ACL (IMAP_ACL_WRITE);
-#endif
-
-#ifdef USE_NNTP
-      if (Context->magic == M_NNTP) {
-        mutt_flushinp ();
-        mutt_error (_("Can't change 'important' flag on NNTP server."));
-
-        break;
-      }
-#endif
+      CHECK_MX_ACL (Context, ACL_WRITE, _("Flagging"));
 
       if (tag) {
         for (j = 0; j < Context->vcount; j++) {
@@ -1707,9 +1666,7 @@ int mutt_index_menu (void)
       CHECK_VISIBLE;
       CHECK_READONLY;
 
-#ifdef USE_IMAP
-      CHECK_IMAP_ACL (IMAP_ACL_SEEN);
-#endif
+      CHECK_MX_ACL (Context, ACL_SEEN, _("Toggling"));
 
       if (tag) {
         for (j = 0; j < Context->vcount; j++) {
@@ -1816,10 +1773,6 @@ int mutt_index_menu (void)
       CHECK_VISIBLE;
       CHECK_READONLY;
 
-/* #ifdef USE_IMAP
-CHECK_IMAP_ACL(IMAP_ACL_WRITE);
-#endif */
-
       if (mutt_change_flag (tag ? NULL : CURHDR, (op == OP_MAIN_SET_FLAG)) ==
           0) {
         menu->redraw = REDRAW_STATUS;
@@ -1953,9 +1906,7 @@ CHECK_IMAP_ACL(IMAP_ACL_WRITE);
       CHECK_VISIBLE;
       CHECK_READONLY;
 
-#ifdef USE_IMAP
-      CHECK_IMAP_ACL (IMAP_ACL_DELETE);
-#endif
+      CHECK_MX_ACL (Context, ACL_DELETE, _("Deletion"));
 
       if (tag) {
         mutt_tag_set_flag (M_DELETE, 1);
@@ -1995,9 +1946,7 @@ CHECK_IMAP_ACL(IMAP_ACL_WRITE);
       CHECK_VISIBLE;
       CHECK_READONLY;
 
-#ifdef USE_IMAP
-      CHECK_IMAP_ACL (IMAP_ACL_DELETE);
-#endif
+      CHECK_MX_ACL (Context, ACL_DELETE, _("Deletion"));
 
       rc = mutt_thread_set_flag (CURHDR, M_DELETE, 1,
                                  op == OP_DELETE_THREAD ? 0 : 1);
@@ -2048,27 +1997,7 @@ CHECK_IMAP_ACL(IMAP_ACL_WRITE);
       CHECK_READONLY;
       CHECK_ATTACH;
 
-#ifdef USE_POP
-      if (Context->magic == M_POP) {
-        mutt_flushinp ();
-        mutt_error (_("Can't edit message on POP server."));
-
-        break;
-      }
-#endif
-
-#ifdef USE_IMAP
-      CHECK_IMAP_ACL (IMAP_ACL_INSERT);
-#endif
-
-#ifdef USE_NNTP
-      if (Context->magic == M_NNTP) {
-        mutt_flushinp ();
-        mutt_error (_("Can't edit message on newsserver."));
-
-        break;
-      }
-#endif
+      CHECK_MX_ACL (Context, ACL_INSERT, _("Editing"));
 
       if (option (OPTPGPAUTODEC)
           && (tag || !(CURHDR->security & PGP_TRADITIONAL_CHECKED)))
@@ -2174,9 +2103,7 @@ CHECK_IMAP_ACL(IMAP_ACL_WRITE);
       CHECK_VISIBLE;
       CHECK_READONLY;
 
-#ifdef USE_IMAP
-      CHECK_IMAP_ACL (IMAP_ACL_SEEN);
-#endif
+      CHECK_MX_ACL (Context, ACL_SEEN, _("Marking as read"));
 
       rc = mutt_thread_set_flag (CURHDR, M_READ, 1,
                                  op == OP_MAIN_READ_THREAD ? 0 : 1);
@@ -2230,7 +2157,7 @@ CHECK_IMAP_ACL(IMAP_ACL_WRITE);
         sleep (2);
       }
       else if (op != OP_FOLLOWUP || !CURHDR->env->followup_to ||
-               mutt_strcasecmp (CURHDR->env->followup_to, "poster") ||
+               safe_strcasecmp (CURHDR->env->followup_to, "poster") ||
                query_quadoption (OPT_FOLLOWUPTOPOSTER,
                                  _("Reply by mail as poster prefers?")) !=
                M_YES) {
@@ -2297,9 +2224,7 @@ CHECK_IMAP_ACL(IMAP_ACL_WRITE);
       CHECK_VISIBLE;
       CHECK_READONLY;
 
-#ifdef USE_IMAP
-      CHECK_IMAP_ACL (IMAP_ACL_DELETE);
-#endif
+      CHECK_MX_ACL (Context, ACL_DELETE, _("Undeletion"));
 
       if (tag) {
         mutt_tag_set_flag (M_DELETE, 0);
@@ -2326,9 +2251,7 @@ CHECK_IMAP_ACL(IMAP_ACL_WRITE);
       CHECK_VISIBLE;
       CHECK_READONLY;
 
-#ifdef USE_IMAP
-      CHECK_IMAP_ACL (IMAP_ACL_DELETE);
-#endif
+      CHECK_MX_ACL (Context, ACL_DELETE, _("Undeletion"));
 
       rc = mutt_thread_set_flag (CURHDR, M_DELETE, 0,
                                  op == OP_UNDELETE_THREAD ? 0 : 1)
@@ -2354,7 +2277,7 @@ CHECK_IMAP_ACL(IMAP_ACL_WRITE);
       break;
 
     case OP_BUFFY_LIST:
-      mutt_buffy_list ();
+      buffy_list ();
       menu->redraw = REDRAW_FULL;
       break;
 
@@ -2380,7 +2303,7 @@ CHECK_IMAP_ACL(IMAP_ACL_WRITE);
     case OP_SIDEBAR_PREV:
     case OP_SIDEBAR_NEXT_NEW:
     case OP_SIDEBAR_PREV_NEW:
-      scroll_sidebar (op, menu->menu);
+      sidebar_scroll (op, menu->menu);
       break;
     default:
       if (menu->menu == MENU_MAIN)