#include "account.h"
#include "prefs.h"
#include "prefs_account.h"
+#include "prefs_folder_item.h"
#include "compose.h"
#include "manage_window.h"
#include "inc.h"
#include "utils.h"
#include "alertpanel.h"
+#include "pixmaps/mark.xpm"
+
typedef enum
{
COL_DEFAULT = 0,
- COL_NAME = 1,
- COL_PROTOCOL = 2,
- COL_SERVER = 3
+ COL_GETALL = 1,
+ COL_NAME = 2,
+ COL_PROTOCOL = 3,
+ COL_SERVER = 4
} EditAccountColumnPos;
-# define N_EDIT_ACCOUNT_COLS 4
+# define N_EDIT_ACCOUNT_COLS 5
#define PREFSBUFSIZE 1024
GtkWidget *close_btn;
} edit_account;
+static GdkPixmap *markxpm;
+static GdkBitmap *markxpmmask;
+
static void account_edit_create (void);
static void account_edit_prefs (void);
static void account_set_default (void);
+static void account_set_recv_at_get_all (void);
+
static void account_edit_close (void);
static gint account_delete_event (GtkWidget *widget,
GdkEventAny *event,
return NULL;
}
-/**
- * account_find_mail_from_address:
+/*
+ * account_find_from_address:
* @address: Email address string.
- *
+ *
* Find a mail (not news) account with the specified email address.
- *
+ *
* Return value: The found account, or NULL if not found.
- **/
-PrefsAccount *account_find_mail_from_address(const gchar *address)
+ */
+PrefsAccount *account_find_from_address(const gchar *address)
{
GList *cur;
PrefsAccount *ac;
for (cur = account_list; cur != NULL; cur = cur->next) {
ac = (PrefsAccount *)cur->data;
- if (ac->protocol != A_NNTP &&
- !strcmp2(address, ac->address))
+ if (ac->protocol != A_NNTP && strcasestr(address, ac->address))
return ac;
}
void account_edit_open(void)
{
- inc_autocheck_timer_remove();
+ inc_lock();
if (compose_get_compose_list()) {
alertpanel_notice(_("Some composing windows are open.\n"
"Please close all the composing windows before editing the accounts."));
- inc_autocheck_timer_set();
+ inc_unlock();
return;
}
PrefsAccount *ac_prefs;
ac_prefs = prefs_account_open(NULL);
- inc_autocheck_timer_remove();
if (!ac_prefs) return;
if (ac_prefs->is_default)
account_set_as_default(ac_prefs);
+ if (ac_prefs->recv_at_getall)
+ account_set_as_recv_at_get_all(ac_prefs);
+
account_clist_set();
if (ac_prefs->protocol == A_IMAP4 || ac_prefs->protocol == A_NNTP) {
if (ac_prefs->protocol == A_IMAP4) {
folder = folder_new(F_IMAP, ac_prefs->account_name,
ac_prefs->recv_server);
- folder_item_append(FOLDER_ITEM(folder->node->data),
- folder_item_new("INBOX", "INBOX"));
} else {
folder = folder_new(F_NEWS, ac_prefs->account_name,
ac_prefs->nntp_server);
folder->account = ac_prefs;
ac_prefs->folder = REMOTE_FOLDER(folder);
folder_add(folder);
- if (ac_prefs->protocol == A_IMAP4) {
+ if (ac_prefs->protocol == A_IMAP4)
folder->create_tree(folder);
- folderview_set_all();
- }
+ folderview_set_all();
}
}
return NULL;
}
+void account_set_as_recv_at_get_all(PrefsAccount *ac_prefs)
+{
+ PrefsAccount *ap;
+ GList *cur;
+
+ for (cur = account_list; cur != NULL; cur = cur->next) {
+ ap = (PrefsAccount *)cur->data;
+ if (ap->account_name == ac_prefs->account_name) {
+ if (ap->recv_at_getall == 0)
+ ap->recv_at_getall = 1;
+ else
+ ap->recv_at_getall = 0;
+ }
+ }
+
+}
+
+
void account_set_missing_folder(void)
{
PrefsAccount *ap;
if (ap->protocol == A_IMAP4) {
folder = folder_new(F_IMAP, ap->account_name,
ap->recv_server);
- folder_item_append
- (FOLDER_ITEM(folder->node->data),
- folder_item_new("INBOX", "INBOX"));
} else {
folder = folder_new(F_NEWS, ap->account_name,
ap->nntp_server);
GtkWidget *default_btn;
+ GtkWidget *recvatgetall_btn;
+
GtkWidget *hbbox;
GtkWidget *close_btn;
GTK_SIGNAL_FUNC (manage_window_focus_in), NULL);
gtk_signal_connect (GTK_OBJECT (window), "focus_out_event",
GTK_SIGNAL_FUNC (manage_window_focus_out), NULL);
+ gtk_widget_realize(window);
vbox = gtk_vbox_new (FALSE, 12);
gtk_widget_show (vbox);
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
- titles[COL_DEFAULT] = "";
+ titles[COL_DEFAULT] = "D";
+ titles[COL_GETALL] = "G";
titles[COL_NAME] = _("Name");
titles[COL_PROTOCOL] = _("Protocol");
titles[COL_SERVER] = _("Server");
clist = gtk_clist_new_with_titles (N_EDIT_ACCOUNT_COLS, titles);
gtk_widget_show (clist);
gtk_container_add (GTK_CONTAINER (scrolledwin), clist);
- gtk_clist_set_column_width (GTK_CLIST(clist), COL_DEFAULT , 16);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_DEFAULT , 10);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_GETALL , 10);
gtk_clist_set_column_width (GTK_CLIST(clist), COL_NAME , 100);
- gtk_clist_set_column_width (GTK_CLIST(clist), COL_PROTOCOL, 70);
+ gtk_clist_set_column_width (GTK_CLIST(clist), COL_PROTOCOL, 100);
gtk_clist_set_column_width (GTK_CLIST(clist), COL_SERVER , 100);
gtk_clist_set_selection_mode (GTK_CLIST(clist), GTK_SELECTION_BROWSE);
gtk_widget_show (vbox2);
gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
- default_btn = gtk_button_new_with_label (_(" Set as usually used account "));
+ default_btn = gtk_button_new_with_label (_(" Set as default account "));
gtk_widget_show (default_btn);
gtk_box_pack_start (GTK_BOX (vbox2), default_btn, TRUE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT(default_btn), "clicked",
GTK_SIGNAL_FUNC (account_set_default), NULL);
- gtkut_button_set_create(&hbbox, &close_btn, _("Close"),
+ recvatgetall_btn = gtk_button_new_with_label (_(" Enable/Disable 'Receive at Get all' "));
+ gtk_widget_show (recvatgetall_btn);
+ gtk_box_pack_start (GTK_BOX (vbox2), recvatgetall_btn, TRUE, FALSE, 0);
+ gtk_signal_connect (GTK_OBJECT(recvatgetall_btn), "clicked",
+ GTK_SIGNAL_FUNC (account_set_recv_at_get_all), NULL);
+
+ gtkut_button_set_create(&hbbox, &close_btn, _("Close"),
NULL, NULL, NULL, NULL);
gtk_widget_show(hbbox);
gtk_box_pack_end (GTK_BOX (hbox), hbbox, FALSE, FALSE, 0);
GTK_SIGNAL_FUNC (account_edit_close),
NULL);
+ PIXMAP_CREATE(clist, markxpm, markxpmmask, mark_xpm);
+
edit_account.window = window;
edit_account.clist = clist;
edit_account.close_btn = close_btn;
Xstrdup_a(ac_name, ac_prefs->account_name, return);
prefs_account_open(ac_prefs);
- inc_autocheck_timer_remove();
if (!prev_default && ac_prefs->is_default)
account_set_as_default(ac_prefs);
account_clist_set();
}
+static void account_delete_references_recursive(const GNode *node, const gint account)
+{
+ /* the son */
+ if (node->data) {
+ FolderItem *item = node->data;
+ if (item->prefs) /* && item->prefs->stype == F_NORMAL */
+ if (item->prefs->default_account == account) {
+ item->prefs->enable_default_account = FALSE;
+ item->prefs->default_account = 0;
+ prefs_folder_item_save_config(item);
+ }
+ }
+ /* its children (vertical dive) */
+ if (node->children)
+ account_delete_references_recursive(node->children, account);
+ /* its brothers (horizontal dive) */
+ if (node->next)
+ account_delete_references_recursive(node->next, account);
+}
+
static void account_delete(void)
{
GtkCList *clist = GTK_CLIST(edit_account.clist);
PrefsAccount *ac_prefs;
gint row;
-
+ GList *list;
+ Folder *folder;
+
if (!clist->selection) return;
if (alertpanel(_("Delete account"),
}
account_destroy(ac_prefs);
account_clist_set();
+
+ debug_print(_("Removing deleted account references for all the folders...\n"));
+ list = folder_get_list();
+ for (; list != NULL; list = list->next) {
+ folder = FOLDER(list->data);
+ if (folder->node) /* && folder->type == F_? */
+ account_delete_references_recursive(folder->node, ac_prefs->account_id);
+ }
}
static void account_up(void)
main_window_reflect_prefs_all();
}
+static void account_set_recv_at_get_all(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_account.clist);
+ gint row;
+ PrefsAccount *ac_prefs;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ ac_prefs = gtk_clist_get_row_data(clist, row);
+
+ if ((ac_prefs->protocol != A_POP3) && (ac_prefs->protocol != A_APOP)) return;
+
+ account_set_as_recv_at_get_all(ac_prefs);
+ account_clist_set();
+}
+
static void account_edit_close(void)
{
account_list_set();
gtk_widget_hide(edit_account.window);
- inc_autocheck_timer_set();
+ inc_unlock();
}
static gint account_delete_event(GtkWidget *widget, GdkEventAny *event,
gchar *text[N_EDIT_ACCOUNT_COLS];
text[COL_DEFAULT] = ac_prefs->is_default ? "*" : "";
+ text[COL_GETALL] = (ac_prefs->protocol == A_POP3 ||
+ ac_prefs->protocol == A_APOP) &&
+ ac_prefs->recv_at_getall ? "*" : "";
text[COL_NAME] = ac_prefs->account_name;
- text[COL_PROTOCOL] = ac_prefs->protocol == A_POP3 ? "POP3" :
- ac_prefs->protocol == A_APOP ? "APOP" :
+#if USE_SSL
+ text[COL_PROTOCOL] = ac_prefs->protocol == A_POP3 ?
+ (ac_prefs->ssl_pop ? "POP3 (SSL)" : "POP3") :
+ ac_prefs->protocol == A_APOP ?
+ (ac_prefs->ssl_pop ?
+ "POP3 (APOP, SSL)" : "POP3 (APOP)") :
+ ac_prefs->protocol == A_IMAP4 ?
+ (ac_prefs->ssl_imap ? "IMAP4 (SSL)" : "IMAP4") :
+ ac_prefs->protocol == A_LOCAL ? "Local" :
+ ac_prefs->protocol == A_NNTP ? "NNTP" : "";
+#else
+ text[COL_PROTOCOL] = ac_prefs->protocol == A_POP3 ? "POP3" :
+ ac_prefs->protocol == A_APOP ? "POP3 (APOP)" :
ac_prefs->protocol == A_IMAP4 ? "IMAP4" :
ac_prefs->protocol == A_LOCAL ? "Local" :
- ac_prefs->protocol == A_NNTP ? "NNTP" : "";
+ ac_prefs->protocol == A_NNTP ? "NNTP" : "";
+#endif
text[COL_SERVER] = ac_prefs->protocol == A_NNTP
? ac_prefs->nntp_server : ac_prefs->recv_server;
row = gtk_clist_append(clist, text);
else {
gtk_clist_set_text(clist, row, COL_DEFAULT, text[COL_DEFAULT]);
+ gtk_clist_set_text(clist, row, COL_GETALL, text[COL_GETALL]);
gtk_clist_set_text(clist, row, COL_NAME, text[COL_NAME]);
gtk_clist_set_text(clist, row, COL_PROTOCOL, text[COL_PROTOCOL]);
gtk_clist_set_text(clist, row, COL_SERVER, text[COL_SERVER]);
}
+ if (*text[COL_DEFAULT])
+ gtk_clist_set_pixmap(clist, row, COL_DEFAULT,
+ markxpm, markxpmmask);
+ if (*text[COL_GETALL])
+ gtk_clist_set_pixmap(clist, row, COL_GETALL,
+ markxpm, markxpmmask);
+
gtk_clist_set_row_data(clist, row, ac_prefs);
return row;