aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-12-14 06:59:29 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-12-14 06:59:29 +0000
commit6e466a9e0cf75cf6e4a512fcdb793766f0c45a63 (patch)
tree78e513f9e9b3288162adf452835d693434fcec5d /src
parent53d03c4970876ad8387fb3a743a25f4b9cec85e3 (diff)
added an option to update only INBOX on checking new messages of IMAP4 accounts.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@827 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r--src/folderview.c47
-rw-r--r--src/folderview.h1
-rw-r--r--src/inc.c41
-rw-r--r--src/prefs_account_dialog.c23
4 files changed, 90 insertions, 22 deletions
diff --git a/src/folderview.c b/src/folderview.c
index dc9092d6..43ff7732 100644
--- a/src/folderview.c
+++ b/src/folderview.c
@@ -920,8 +920,7 @@ void folderview_check_new(Folder *folder)
model = GTK_TREE_MODEL(folderview->store);
if (folder && !FOLDER_IS_LOCAL(folder)) {
- if (!main_window_toggle_online_if_offline
- (folderview->mainwin))
+ if (!main_window_toggle_online_if_offline(folderview->mainwin))
return;
}
@@ -956,6 +955,50 @@ void folderview_check_new(Folder *folder)
folder_write_list();
}
+void folderview_check_new_item(FolderItem *item)
+{
+ Folder *folder;
+ FolderView *folderview;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+
+ if (!item->path || item->no_select)
+ return;
+
+ folderview = (FolderView *)folderview_list->data;
+ model = GTK_TREE_MODEL(folderview->store);
+
+ folder = item->folder;
+
+ if (!FOLDER_IS_LOCAL(folder)) {
+ if (!main_window_toggle_online_if_offline(folderview->mainwin))
+ return;
+ }
+
+ if (!gtkut_tree_model_find_by_column_data
+ (model, &iter, NULL, COL_FOLDER_ITEM, item))
+ return;
+
+ inc_lock();
+ main_window_lock(folderview->mainwin);
+ gtk_widget_set_sensitive(folderview->treeview, FALSE);
+ GTK_EVENTS_FLUSH();
+
+ folderview_scan_tree_func(folder, item, NULL);
+ folder_item_scan(item);
+ folderview_update_row(folderview, &iter);
+
+ gtk_widget_set_sensitive(folderview->treeview, TRUE);
+ main_window_unlock(folderview->mainwin);
+ inc_unlock();
+ statusbar_pop_all();
+
+ folder_write_list();
+}
+
void folderview_check_new_all(void)
{
GList *list;
diff --git a/src/folderview.h b/src/folderview.h
index 92905464..24d84750 100644
--- a/src/folderview.h
+++ b/src/folderview.h
@@ -93,6 +93,7 @@ gboolean folderview_append_item (FolderView *folderview,
gboolean expand_parent);
void folderview_check_new (Folder *folder);
+void folderview_check_new_item (FolderItem *item);
void folderview_check_new_all (void);
void folderview_update_item (FolderItem *item,
diff --git a/src/inc.c b/src/inc.c
index f03e2b72..4afbb25c 100644
--- a/src/inc.c
+++ b/src/inc.c
@@ -71,6 +71,9 @@ static GdkPixbuf *ok_pixbuf;
static void inc_finished (MainWindow *mainwin,
gint new_messages);
+
+static gint inc_remote_account_mail (MainWindow *mainwin,
+ PrefsAccount *account);
static gint inc_account_mail_real (MainWindow *mainwin,
PrefsAccount *account);
@@ -231,21 +234,37 @@ void inc_mail(MainWindow *mainwin)
inc_autocheck_timer_set();
}
-static gint inc_account_mail_real(MainWindow *mainwin, PrefsAccount *account)
+static gint inc_remote_account_mail(MainWindow *mainwin, PrefsAccount *account)
{
- IncProgressDialog *inc_dialog;
- IncSession *session;
+ FolderItem *item = mainwin->summaryview->folder_item;
- if (account->protocol == A_IMAP4 || account->protocol == A_NNTP) {
- FolderItem *item = mainwin->summaryview->folder_item;
+ g_return_val_if_fail(account->folder != NULL, 0);
+ if (account->protocol == A_IMAP4 && account->imap_check_inbox_only) {
+ FolderItem *inbox = FOLDER(account->folder)->inbox;
+
+ folderview_check_new_item(inbox);
+ if (!prefs_common.scan_all_after_inc && item != NULL &&
+ inbox == item)
+ folderview_update_item(item, TRUE);
+ } else {
folderview_check_new(FOLDER(account->folder));
if (!prefs_common.scan_all_after_inc && item != NULL &&
FOLDER(account->folder) == item->folder)
folderview_update_item(item, TRUE);
- return 1;
}
+ return 1;
+}
+
+static gint inc_account_mail_real(MainWindow *mainwin, PrefsAccount *account)
+{
+ IncProgressDialog *inc_dialog;
+ IncSession *session;
+
+ if (account->protocol == A_IMAP4 || account->protocol == A_NNTP)
+ return inc_remote_account_mail(mainwin, account);
+
session = inc_session_new(account);
if (!session) return 0;
@@ -307,14 +326,8 @@ void inc_all_account_mail(MainWindow *mainwin, gboolean autocheck)
for (list = account_get_list(); list != NULL; list = list->next) {
PrefsAccount *account = list->data;
if ((account->protocol == A_IMAP4 ||
- account->protocol == A_NNTP) && account->recv_at_getall) {
- FolderItem *item = mainwin->summaryview->folder_item;
-
- folderview_check_new(FOLDER(account->folder));
- if (!prefs_common.scan_all_after_inc && item != NULL &&
- FOLDER(account->folder) == item->folder)
- folderview_update_item(item, TRUE);
- }
+ account->protocol == A_NNTP) && account->recv_at_getall)
+ inc_remote_account_mail(mainwin, account);
}
/* check POP3 accounts */
diff --git a/src/prefs_account_dialog.c b/src/prefs_account_dialog.c
index 7c2d3a98..c5c57821 100644
--- a/src/prefs_account_dialog.c
+++ b/src/prefs_account_dialog.c
@@ -95,6 +95,7 @@ static struct Receive {
GtkWidget *imap_frame;
GtkWidget *imap_auth_type_optmenu;
+ GtkWidget *imap_check_inbox_chkbtn;
GtkWidget *nntp_frame;
GtkWidget *maxarticle_spinbtn;
@@ -240,8 +241,6 @@ static PrefsUIData ui_data[] = {
prefs_set_data_from_entry, prefs_set_entry},
{"password", &basic.pass_entry,
prefs_set_data_from_entry, prefs_set_entry},
- {"inbox", &receive.inbox_entry,
- prefs_set_data_from_entry, prefs_set_entry},
/* Receive */
{"use_apop_auth", &receive.use_apop_chkbtn,
@@ -258,6 +257,10 @@ static PrefsUIData ui_data[] = {
prefs_set_data_from_entry, prefs_set_entry},
{"filter_on_receive", &receive.filter_on_recv_chkbtn,
prefs_set_data_from_toggle, prefs_set_toggle},
+ {"inbox", &receive.inbox_entry,
+ prefs_set_data_from_entry, prefs_set_entry},
+ {"imap_check_inbox_only", &receive.imap_check_inbox_chkbtn,
+ prefs_set_data_from_toggle, prefs_set_toggle},
{"imap_auth_method", &receive.imap_auth_type_optmenu,
prefs_account_imap_auth_type_set_data_from_optmenu,
prefs_account_imap_auth_type_set_optmenu},
@@ -800,6 +803,7 @@ static void prefs_account_receive_create(void)
GtkWidget *optmenu;
GtkWidget *optmenu_menu;
GtkWidget *menuitem;
+ GtkWidget *imap_check_inbox_chkbtn;
GtkWidget *nntp_frame;
GtkWidget *maxarticle_label;
@@ -862,12 +866,15 @@ static void prefs_account_receive_create(void)
gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
gtk_widget_set_size_request (hbox_spc, 12, -1);
- leave_time_label = gtk_label_new (_("(0 days: remove immediately)"));
+ leave_time_label = gtk_label_new (_("0 days: remove immediately"));
gtk_widget_show (leave_time_label);
gtk_box_pack_start (GTK_BOX (hbox1), leave_time_label, FALSE, FALSE, 0);
+ gtkut_widget_set_small_font_size (leave_time_label);
SET_TOGGLE_SENSITIVITY (rmmail_chkbtn, hbox1);
+ PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
+
PACK_CHECK_BUTTON (vbox2, getall_chkbtn,
_("Download all messages on server"));
@@ -921,7 +928,7 @@ static void prefs_account_receive_create(void)
PACK_FRAME (vbox1, imap_frame, _("IMAP4"));
- vbox2 = gtk_vbox_new (FALSE, 0);
+ vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
gtk_widget_show (vbox2);
gtk_container_add (GTK_CONTAINER (imap_frame), vbox2);
gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
@@ -946,6 +953,9 @@ static void prefs_account_receive_create(void)
gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
+ PACK_CHECK_BUTTON (vbox2, imap_check_inbox_chkbtn,
+ _("Only check INBOX on receiving"));
+
PACK_FRAME (vbox1, nntp_frame, _("News"));
vbox2 = gtk_vbox_new (FALSE, 0);
@@ -993,8 +1003,9 @@ static void prefs_account_receive_create(void)
receive.inbox_entry = inbox_entry;
receive.inbox_btn = inbox_btn;
- receive.imap_frame = imap_frame;
- receive.imap_auth_type_optmenu = optmenu;
+ receive.imap_frame = imap_frame;
+ receive.imap_auth_type_optmenu = optmenu;
+ receive.imap_check_inbox_chkbtn = imap_check_inbox_chkbtn;
receive.nntp_frame = nntp_frame;
receive.maxarticle_spinbtn = maxarticle_spinbtn;