diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-06-02 08:42:46 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-06-02 08:42:46 +0000 |
commit | 2ad5e2325437bb1a5f86fcd629226b433db0488c (patch) | |
tree | 315d8bd7d4e6c0bfb9f878d29438e5c20ff842b6 /src/summaryview.c | |
parent | 937f0227970b779c01b562630b86bf4d554a320c (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.c | 112 |
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; |