aboutsummaryrefslogtreecommitdiff
path: root/src/summaryview.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-06-02 08:42:46 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-06-02 08:42:46 +0000
commit2ad5e2325437bb1a5f86fcd629226b433db0488c (patch)
tree315d8bd7d4e6c0bfb9f878d29438e5c20ff842b6 /src/summaryview.c
parent937f0227970b779c01b562630b86bf4d554a320c (diff)
added a feature for junk mail control.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@306 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src/summaryview.c')
-rw-r--r--src/summaryview.c112
1 files changed, 108 insertions, 4 deletions
diff --git a/src/summaryview.c b/src/summaryview.c
index 34a5d5bc..ddcf86e9 100644
--- a/src/summaryview.c
+++ b/src/summaryview.c
@@ -815,15 +815,15 @@ gboolean summary_is_locked(SummaryView *summaryview)
SummarySelection summary_get_selection_type(SummaryView *summaryview)
{
SummarySelection selection;
- gint count;
+ GList *rows;
- count = gtk_tree_selection_count_selected_rows(summaryview->selection);
+ rows = summary_get_selected_rows(summaryview);
if (!summaryview->folder_item || summaryview->folder_item->total == 0)
selection = SUMMARY_NONE;
- else if (count == 0)
+ else if (!rows)
selection = SUMMARY_SELECTED_NONE;
- else if (count == 1)
+ else if (rows && !rows->next)
selection = SUMMARY_SELECTED_SINGLE;
else
selection = SUMMARY_SELECTED_MULTIPLE;
@@ -3671,6 +3671,110 @@ void summary_filter_open(SummaryView *summaryview, PrefsFilterType type)
g_free(key);
}
+static void summary_junk_func(GtkTreeModel *model, GtkTreePath *path,
+ GtkTreeIter *iter, gpointer data)
+{
+ FilterRule rule = {NULL, FLT_OR, NULL, NULL, FLT_TIMING_ANY, TRUE};
+ FilterAction action1 = {FLT_ACTION_EXEC, NULL, 0};
+ FilterAction action2 = {FLT_ACTION_MOVE, NULL, 0};
+ SummaryView *summaryview = (SummaryView *)data;
+ MsgInfo *msginfo;
+ FilterInfo *fltinfo;
+ gchar *file;
+ gint ret;
+
+ gtk_tree_model_get(model, iter, S_COL_MSG_INFO, &msginfo, -1);
+ file = procmsg_get_message_file(msginfo);
+ g_return_if_fail(file != NULL);
+
+ action1.str_value = prefs_common.junk_learncmd;
+ action2.str_value = prefs_common.junk_folder;
+
+ rule.action_list = g_slist_append(rule.action_list, &action1);
+ rule.action_list = g_slist_append(rule.action_list, &action2);
+
+ fltinfo = filter_info_new();
+
+ ret = filter_action_exec(&rule, msginfo, file, fltinfo);
+
+ if (ret == 0 && fltinfo->actions[FLT_ACTION_MOVE] && fltinfo->move_dest)
+ summary_move_row_to(summaryview, iter, fltinfo->move_dest);
+
+ filter_info_free(fltinfo);
+ g_slist_free(rule.action_list);
+ g_free(file);
+}
+
+static void summary_not_junk_func(GtkTreeModel *model, GtkTreePath *path,
+ GtkTreeIter *iter, gpointer data)
+{
+ FilterRule rule = {NULL, FLT_OR, NULL, NULL, FLT_TIMING_ANY, TRUE};
+ FilterAction action = {FLT_ACTION_EXEC, NULL, 0};
+ MsgInfo *msginfo;
+ FilterInfo *fltinfo;
+ gchar *file;
+ gint ret;
+
+ gtk_tree_model_get(model, iter, S_COL_MSG_INFO, &msginfo, -1);
+ file = procmsg_get_message_file(msginfo);
+ g_return_if_fail(file != NULL);
+
+ action.str_value = prefs_common.nojunk_learncmd;
+
+ rule.action_list = g_slist_append(rule.action_list, &action);
+
+ fltinfo = filter_info_new();
+
+ ret = filter_action_exec(&rule, msginfo, file, fltinfo);
+
+ filter_info_free(fltinfo);
+ g_slist_free(rule.action_list);
+ g_free(file);
+}
+
+void summary_junk(SummaryView *summaryview)
+{
+ if (!prefs_common.enable_junk)
+ return;
+ if (!prefs_common.junk_learncmd || !prefs_common.junk_folder)
+ return;
+
+ summary_lock(summaryview);
+
+ debug_print("Set mail as junk\n");
+
+ gtk_tree_selection_selected_foreach(summaryview->selection,
+ summary_junk_func, summaryview);
+
+ summary_unlock(summaryview);
+
+ if (prefs_common.immediate_exec)
+ summary_execute(summaryview);
+ else {
+ summary_step(summaryview, GTK_SCROLL_STEP_FORWARD);
+ summary_status_show(summaryview);
+ }
+
+ folderview_update_all_updated(FALSE);
+}
+
+void summary_not_junk(SummaryView *summaryview)
+{
+ if (!prefs_common.enable_junk)
+ return;
+ if (!prefs_common.nojunk_learncmd)
+ return;
+
+ summary_lock(summaryview);
+
+ debug_print("Set mail as not junk\n");
+
+ gtk_tree_selection_selected_foreach(summaryview->selection,
+ summary_not_junk_func, summaryview);
+
+ summary_unlock(summaryview);
+}
+
void summary_reply(SummaryView *summaryview, ComposeMode mode)
{
GSList *mlist;