aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-06-15 09:01:09 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-06-15 09:01:09 +0000
commit0728f3caffdeb6356e7833127b15c2ed244c7b5d (patch)
tree6db5cbdc5502a015f48d612ab87c5d228ae73b8c /src
parent755ccfe41883d5fe999488785868209019c4d328 (diff)
added 'Tools/Filter junk mails in folder' menu.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@344 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.c15
-rw-r--r--src/summaryview.c45
-rw-r--r--src/summaryview.h3
3 files changed, 60 insertions, 3 deletions
diff --git a/src/mainwindow.c b/src/mainwindow.c
index 7d7453cb..02612536 100644
--- a/src/mainwindow.c
+++ b/src/mainwindow.c
@@ -366,6 +366,9 @@ static void delete_duplicated_cb (MainWindow *mainwin,
static void filter_cb (MainWindow *mainwin,
guint action,
GtkWidget *widget);
+static void filter_junk_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
static void execute_summary_cb (MainWindow *mainwin,
guint action,
GtkWidget *widget);
@@ -734,6 +737,11 @@ static GtkItemFactoryEntry mainwin_entries[] =
{N_("/_Tools/_Create filter rule/by _Subject"),
NULL, create_filter_cb, FILTER_BY_SUBJECT, NULL},
{N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/Filter _junk mails in folder"),
+ NULL, filter_junk_cb, 0, NULL},
+ {N_("/_Tools/Filter junk _mails in selected messages"),
+ NULL, filter_junk_cb, 1, NULL},
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_Tools/Actio_ns"), NULL, NULL, 0, "<Branch>"},
{N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_Tools/Delete du_plicated messages"),
@@ -1821,6 +1829,8 @@ void main_window_set_menu_sensitive(MainWindow *mainwin)
{"/Tools/Filter all messages in folder", M_MSG_EXIST|M_EXEC},
{"/Tools/Filter selected messages" , M_TARGET_EXIST|M_EXEC},
{"/Tools/Create filter rule" , M_SINGLE_TARGET_EXIST|M_UNLOCKED},
+ {"/Tools/Filter junk mails in folder" , M_MSG_EXIST|M_EXEC|M_ENABLE_JUNK},
+ {"/Tools/Filter junk mails in selected messages", M_TARGET_EXIST|M_EXEC|M_ENABLE_JUNK},
{"/Tools/Actions" , M_TARGET_EXIST|M_UNLOCKED},
{"/Tools/Execute" , M_MSG_EXIST|M_EXEC},
{"/Tools/Delete duplicated messages" , M_MSG_EXIST|M_ALLOW_DELETE},
@@ -3073,6 +3083,11 @@ static void filter_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
summary_filter(mainwin->summaryview, (gboolean)action);
}
+static void filter_junk_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_filter_junk(mainwin->summaryview, (gboolean)action);
+}
+
static void execute_summary_cb(MainWindow *mainwin, guint action,
GtkWidget *widget)
{
diff --git a/src/summaryview.c b/src/summaryview.c
index ed446ffd..34889990 100644
--- a/src/summaryview.c
+++ b/src/summaryview.c
@@ -3660,7 +3660,34 @@ static gboolean summary_filter_func(GtkTreeModel *model, GtkTreePath *path,
return FALSE;
}
-void summary_filter(SummaryView *summaryview, gboolean selected_only)
+static gboolean summary_filter_junk_func(GtkTreeModel *model, GtkTreePath *path,
+ GtkTreeIter *iter, gpointer data)
+{
+ SummaryView *summaryview = (SummaryView *)data;
+ MsgInfo *msginfo;
+ FilterInfo *fltinfo;
+
+ gtk_tree_model_get(model, iter, S_COL_MSG_INFO, &msginfo, -1);
+
+ fltinfo = filter_info_new();
+ fltinfo->flags = msginfo->flags;
+ filter_apply_msginfo(prefs_common.junk_fltlist, msginfo, fltinfo);
+
+ if (fltinfo->actions[FLT_ACTION_COPY] ||
+ fltinfo->actions[FLT_ACTION_DELETE])
+ summaryview->filtered++;
+
+ if (fltinfo->actions[FLT_ACTION_DELETE])
+ summary_delete_row(summaryview, iter);
+
+ filter_info_free(fltinfo);
+
+ return FALSE;
+}
+
+static void summary_filter_real(SummaryView *summaryview,
+ GtkTreeModelForeachFunc func,
+ gboolean selected_only)
{
if (!prefs_common.fltlist) return;
@@ -3677,11 +3704,11 @@ void summary_filter(SummaryView *summaryview, gboolean selected_only)
if (selected_only)
gtk_tree_selection_selected_foreach
(summaryview->selection,
- (GtkTreeSelectionForeachFunc)summary_filter_func,
+ (GtkTreeSelectionForeachFunc)func,
summaryview);
else
gtk_tree_model_foreach(GTK_TREE_MODEL(summaryview->store),
- summary_filter_func, summaryview);
+ func, summaryview);
summary_unlock(summaryview);
@@ -3706,6 +3733,18 @@ void summary_filter(SummaryView *summaryview, gboolean selected_only)
summaryview->filtered = 0;
}
+void summary_filter(SummaryView *summaryview, gboolean selected_only)
+{
+ summary_filter_real(summaryview, summary_filter_func, selected_only);
+}
+
+void summary_filter_junk(SummaryView *summaryview, gboolean selected_only)
+{
+ if (prefs_common.junk_fltlist)
+ summary_filter_real(summaryview, summary_filter_junk_func,
+ selected_only);
+}
+
void summary_filter_open(SummaryView *summaryview, PrefsFilterType type)
{
GtkTreeIter iter;
diff --git a/src/summaryview.h b/src/summaryview.h
index 312a354f..494983d8 100644
--- a/src/summaryview.h
+++ b/src/summaryview.h
@@ -197,6 +197,9 @@ void summary_filter (SummaryView *summaryview,
void summary_filter_open (SummaryView *summaryview,
PrefsFilterType type);
+void summary_filter_junk (SummaryView *summaryview,
+ gboolean selected_only);
+
void summary_junk (SummaryView *summaryview);
void summary_not_junk (SummaryView *summaryview);