Added -nocontentid (and -contentid, for symmetry) switch to mhbuild. This allows...
[mmh] / sbr / folder_addmsg.c
index 6858f4d..1af116c 100644 (file)
@@ -3,6 +3,10 @@
  * folder_addmsg.c -- Link message into folder
  *
  * $Id$
+ *
+ * This code is Copyright (c) 2002, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
  */
 
 #include <h/mh.h>
 
 int
 folder_addmsg (struct msgs **mpp, char *msgfile, int selected,
-               int unseen, int preserve)
+               int unseen, int preserve, int deleting, char *from_dir)
 {
     int infd, outfd, linkerr, first_time, msgnum;
     char *nmsg, newmsg[BUFSIZ];
+    char oldmsg[BUFSIZ];
     struct msgs *mp;
     struct stat st1, st2;
 
@@ -128,9 +133,21 @@ folder_addmsg (struct msgs **mpp, char *msgfile, int selected,
        snprintf (newmsg, sizeof(newmsg), "%s/%s", mp->foldpath, nmsg);
 
        /*
-        * Now try to link message into folder
+        * Now try to link message into folder.
+        * Then run the external hook on the message if one was specified in the context.
+        * Run the refile hook if we're moving the message from one place to another.
+        * We have to construct the from path name for this because it's not there.
+        * Run the add hook if the message is getting copied or linked somewhere else.
         */
        if (link (msgfile, newmsg) != -1) {
+
+           if (deleting) {
+               (void)snprintf(oldmsg, sizeof (oldmsg), "%s/%s", from_dir, msgfile);
+               (void)ext_hook("ref-hook", oldmsg, newmsg);
+           }
+           else
+               (void)ext_hook("add-hook", newmsg, (char *)0);
+
            return msgnum;
        } else {
            linkerr = errno;
@@ -179,6 +196,14 @@ folder_addmsg (struct msgs **mpp, char *msgfile, int selected,
                    cpydata (infd, outfd, msgfile, newmsg);
                    close (infd);
                    close (outfd);
+
+                   if (deleting) {
+                       (void)snprintf(oldmsg, sizeof (oldmsg), "%s/%s", from_dir, msgfile);
+                       (void)ext_hook("ref-hook", oldmsg, newmsg);
+                   }
+                   else
+                       (void)ext_hook("add-hook", newmsg, (char *)0);
+
                    return msgnum;
                }
            }