diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-12-14 06:59:29 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-12-14 06:59:29 +0000 |
commit | 6e466a9e0cf75cf6e4a512fcdb793766f0c45a63 (patch) | |
tree | 78e513f9e9b3288162adf452835d693434fcec5d /src | |
parent | 53d03c4970876ad8387fb3a743a25f4b9cec85e3 (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.c | 47 | ||||
-rw-r--r-- | src/folderview.h | 1 | ||||
-rw-r--r-- | src/inc.c | 41 | ||||
-rw-r--r-- | src/prefs_account_dialog.c | 23 |
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, @@ -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; |