int
folder_addmsg (struct msgs **mpp, char *msgfile, int selected,
- int unseen, int preserve)
+ int unseen, int preserve, int deleting)
{
int infd, outfd, linkerr, first_time, msgnum;
char *nmsg, newmsg[BUFSIZ];
+ char oldmsg[BUFSIZ];
+ struct msgs *op;
struct msgs *mp;
struct stat st1, st2;
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 lined somewhere else.
*/
if (link (msgfile, newmsg) != -1) {
+
+ if (deleting) {
+ op = folder_read(getfolder(1));
+ (void)snprintf(oldmsg, sizeof (oldmsg), "%s/%s", op->foldpath, msgfile);
+ folder_free(op);
+ (void)ext_hook("ref-hook", oldmsg, newmsg);
+ }
+ else
+ (void)ext_hook("add-hook", newmsg, (char *)0);
+
return msgnum;
} else {
linkerr = errno;
cpydata (infd, outfd, msgfile, newmsg);
close (infd);
close (outfd);
+
+ if (deleting)
+ (void)ext_hook("ref-hook", newmsg, msgfile);
+ else
+ (void)ext_hook("add-hook", newmsg, (char *)0);
+
return msgnum;
}
}