#include "textview.h"
#include "matcher_parser.h" /* CLAWS */
#include "filtering.h"
+#include "procheader.h"
typedef struct _Children Children;
typedef struct _ChildInfo ChildInfo;
GString *output;
void (*callback)(void *data);
void *data;
+
+ GSList *msginfo_list;
};
static void action_update_menu (GtkItemFactory *ifactory,
break;
}
if ((child_info = fork_child(cmd, msg_str, children))) {
+ /* Pass msginfo to catch_status () */
+ child_info->msginfo_list = g_slist_append (NULL, msginfo);
children_list = g_slist_append(children_list,
child_info);
}
user_str, user_hidden_str, sel_str);
if (cmd) {
if ((child_info = fork_child(cmd, msg_str, children))) {
+ child_info->msginfo_list = g_slist_copy (msg_list);
children_list = g_slist_append(children_list,
- child_info);
+ child_info);
}
g_free(cmd);
} else
childinfo_close_pipes(child_info);
child_info->pid = 0;
+ if (child_info->children->action_type & (ACTION_SINGLE | ACTION_MULTIPLE)
+ && child_info->msginfo_list) {
+ /* Actions on message *files* might change size and
+ * time stamp, and thus invalidate the cache */
+ SummaryView *summaryview = NULL;
+ GSList *cur;
+ MsgInfo *msginfo, *nmi; /* newmsginfo */
+ char *file;
+
+ if (mainwindow_get_mainwindow ())
+ summaryview = mainwindow_get_mainwindow ()->summaryview;
+ for (cur = child_info->msginfo_list; cur; cur = cur->next) {
+ msginfo = (MsgInfo *)cur->data;
+ if (!(msginfo && /* Stuff used valid? */
+ msginfo->folder && msginfo->folder->cache))
+ continue;
+ file = procmsg_get_message_file_path (msginfo);
+ if (!file)
+ continue;
+ nmi = procheader_parse_file (file, msginfo->flags, FALSE, FALSE);
+ if (!nmi)
+ continue; /* Deleted? */
+ if (msginfo->mtime != nmi->mtime || msginfo->size != nmi->size) {
+ msginfo->mtime = nmi->mtime;
+ msginfo->size = nmi->size;
+ msgcache_update_msg (msginfo->folder->cache, msginfo);
+ }
+ procmsg_msginfo_free (nmi);
+
+ /* refresh the message display, but only if this message is still
+ * in focus */
+ if (summaryview
+ && summaryview->displayed
+ && summaryview->folder_item == msginfo->folder
+ && summary_get_msgnum (summaryview, summaryview->displayed) == msginfo->msgnum) {
+ summary_show (summaryview, summaryview->folder_item);
+ summary_select_node (summaryview, summaryview->displayed, TRUE, TRUE);
+ }
+ }
+ g_slist_free (child_info->msginfo_list);
+ child_info->msginfo_list = NULL;
+ }
+
wait_for_children(child_info->children);
}
GtkCTreeNode *node,
gpointer data);
-void summary_set_menu_sensitive (SummaryView *summaryview);
+void summary_set_menu_sensitive (SummaryView *summaryview);
+guint summary_get_msgnum (SummaryView *summaryview,
+ GtkCTreeNode *node);
+
static void summary_set_hide_read_msgs_menu (SummaryView *summaryview,
guint action);
-static guint summary_get_msgnum (SummaryView *summaryview,
- GtkCTreeNode *node);
-
static GtkCTreeNode *summary_find_prev_msg
(SummaryView *summaryview,
GtkCTreeNode *current_node);
}
}
-static guint summary_get_msgnum(SummaryView *summaryview, GtkCTreeNode *node)
+guint summary_get_msgnum(SummaryView *summaryview, GtkCTreeNode *node)
{
GtkCTree *ctree =NULL;
MsgInfo *msginfo;