#include "defs.h"
#include <glib.h>
+#include <glib/gi18n.h>
#include <gtk/gtkmain.h>
#include <gtk/gtkwindow.h>
#include <gtk/gtksignal.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
+#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <signal.h>
#include <errno.h>
-#include "intl.h"
#include "main.h"
#include "inc.h"
#include "mainwindow.h"
static guint inc_lock_count = 0;
-static GdkPixmap *currentxpm;
-static GdkBitmap *currentxpmmask;
-static GdkPixmap *errorxpm;
-static GdkBitmap *errorxpmmask;
-static GdkPixmap *okxpm;
-static GdkBitmap *okxpmmask;
+static GdkPixbuf *currentpix;
+static GdkPixbuf *errorpix;
+static GdkPixbuf *okpix;
#define MSGBUFSIZE 8192
static gint inc_start (IncProgressDialog *inc_dialog);
static IncState inc_pop3_session_do (IncSession *session);
-static void inc_timer_start (IncProgressDialog *inc_dialog,
- IncSession *inc_session);
-static void inc_timer_stop (IncProgressDialog *inc_dialog);
-
static void inc_progress_dialog_update (IncProgressDialog *inc_dialog,
IncSession *inc_session);
(IncProgressDialog *inc_dialog,
IncSession *inc_session);
-static gint inc_progress_timer_func (gpointer data);
-static gint inc_folder_timer_func (gpointer data);
+static void inc_progress_dialog_update_periodic
+ (IncProgressDialog *inc_dialog,
+ IncSession *inc_session);
static gint inc_recv_data_progressive (Session *session,
guint cur_len,
const gchar *file);
static void inc_put_error (IncState istate,
- const gchar *msg);
+ Pop3Session *session);
static void inc_cancel_cb (GtkWidget *widget,
gpointer data);
void inc_pop_before_smtp(PrefsAccount *acc)
{
+ IncProgressDialog *inc_dialog;
+ IncSession *session;
+ MainWindow *mainwin;
+
+ mainwin = mainwindow_get_mainwindow();
+
+ session = inc_session_new(acc);
+ if (!session) return;
+ POP3_SESSION(session->session)->pop_before_smtp = TRUE;
+
+ inc_dialog = inc_progress_dialog_create(FALSE);
+ inc_dialog->queue_list = g_list_append(inc_dialog->queue_list,
+ session);
/* FIXME: assumes to attach to first main window */
- inc_account_mail(mainwindow_get_mainwindow(), acc);
+ inc_dialog->mainwin = mainwin;
+ inc_progress_dialog_set_list(inc_dialog);
+
+ if (mainwin) {
+ toolbar_main_set_sensitive(mainwin);
+ main_window_set_menu_sensitive(mainwin);
+ }
+
+ inc_start(inc_dialog);
}
static gint inc_account_mail_real(MainWindow *mainwin, PrefsAccount *account)
{
IncProgressDialog *inc_dialog;
IncSession *session;
- FolderItem *item = NULL;
- if(mainwin && mainwin->summaryview)
- item = mainwin->summaryview->folder_item;
-
switch (account->protocol) {
case A_IMAP4:
case A_NNTP:
if (alertpanel(_("Offline warning"),
_("You're working offline. Override?"),
_("Yes"), _("No"), NULL) != G_ALERTDEFAULT)
- return;
+ return 0;
inc_autocheck_timer_remove();
main_window_lock(mainwin);
if (account_new_msgs > 0)
new_msgs += account_new_msgs;
- /* check IMAP4 folders */
- for (; list != NULL; list = list->next) {
+ /* check IMAP4 / News folders */
+ 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) {
}
}
- if (!queue_list) {
- inc_finished(mainwin, new_msgs > 0);
- main_window_unlock(mainwin);
- inc_notify_cmd(new_msgs, notify);
- inc_autocheck_timer_set();
- return;
- }
-
- inc_dialog = inc_progress_dialog_create(autocheck);
- inc_dialog->queue_list = queue_list;
- inc_dialog->mainwin = mainwin;
- inc_progress_dialog_set_list(inc_dialog);
+ if (queue_list) {
+ inc_dialog = inc_progress_dialog_create(autocheck);
+ inc_dialog->queue_list = queue_list;
+ inc_dialog->mainwin = mainwin;
+ inc_progress_dialog_set_list(inc_dialog);
- toolbar_main_set_sensitive(mainwin);
- main_window_set_menu_sensitive(mainwin);
+ toolbar_main_set_sensitive(mainwin);
+ main_window_set_menu_sensitive(mainwin);
+ new_msgs += inc_start(inc_dialog);
+ }
- new_msgs += inc_start(inc_dialog);
inc_finished(mainwin, new_msgs > 0);
main_window_unlock(mainwin);
inc_notify_cmd(new_msgs, notify);
G_CALLBACK(inc_dialog_delete_cb), dialog);
/* manage_window_set_transient(GTK_WINDOW(progress->window)); */
- progress_dialog_set_value(progress, 0.0);
+ progress_dialog_get_fraction(progress);
- stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_COMPLETE,
- &okxpm, &okxpmmask);
- stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_CONTINUE,
- ¤txpm, ¤txpmmask);
- stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_ERROR,
- &errorxpm, &errorxpmmask);
+ stock_pixbuf_gdk(progress->list_view, STOCK_PIXMAP_COMPLETE,
+ &okpix);
+ stock_pixbuf_gdk(progress->list_view, STOCK_PIXMAP_CONTINUE,
+ ¤tpix);
+ stock_pixbuf_gdk(progress->list_view, STOCK_PIXMAP_ERROR,
+ &errorpix);
if (prefs_common.recv_dialog_mode == RECV_DIALOG_ALWAYS ||
(prefs_common.recv_dialog_mode == RECV_DIALOG_MANUAL &&
}
dialog->dialog = progress;
- dialog->progress_timer_id = 0;
- dialog->folder_timer_id = 0;
+ gettimeofday(&dialog->progress_tv, NULL);
+ gettimeofday(&dialog->folder_tv, NULL);
dialog->queue_list = NULL;
dialog->cur_row = 0;
for (list = inc_dialog->queue_list; list != NULL; list = list->next) {
IncSession *session = list->data;
Pop3Session *pop3_session = POP3_SESSION(session->session);
- gchar *text[3];
session->data = inc_dialog;
- text[0] = NULL;
- text[1] = pop3_session->ac_prefs->account_name;
- text[2] = _("Standby");
- gtk_clist_append(GTK_CLIST(inc_dialog->dialog->clist), text);
+ progress_dialog_list_set(inc_dialog->dialog,
+ -1, NULL,
+ pop3_session->ac_prefs->account_name,
+ _("Standby"));
}
}
static void inc_progress_dialog_clear(IncProgressDialog *inc_dialog)
{
- progress_dialog_set_value(inc_dialog->dialog, 0.0);
+ progress_dialog_get_fraction(inc_dialog->dialog);
progress_dialog_set_label(inc_dialog->dialog, "");
if (inc_dialog->mainwin)
main_window_progress_off(inc_dialog->mainwin);
g_return_val_if_fail(account != NULL, NULL);
- if (account->protocol != A_POP3 && account->protocol != A_APOP)
+ if (account->protocol != A_POP3)
return NULL;
if (!account->recv_server || !account->userid)
return NULL;
session_set_recv_data_notify(session->session,
inc_recv_data_finished, session);
- session->folder_table = g_hash_table_new(NULL, NULL);
- session->tmp_folder_table = g_hash_table_new(NULL, NULL);
-
return session;
}
g_return_if_fail(session != NULL);
session_destroy(session->session);
- g_hash_table_destroy(session->folder_table);
- g_hash_table_destroy(session->tmp_folder_table);
g_free(session);
}
static gint inc_start(IncProgressDialog *inc_dialog)
{
IncSession *session;
- GtkCList *clist = GTK_CLIST(inc_dialog->dialog->clist);
GList *qlist;
Pop3Session *pop3_session;
IncState inc_state;
FolderItem *processing, *inbox;
MsgInfo *msginfo;
GSList *msglist, *msglist_element;
+ gboolean cancelled = FALSE;
qlist = inc_dialog->queue_list;
while (qlist != NULL) {
qlist = next;
}
-#define SET_PIXMAP_AND_TEXT(xpm, xpmmask, str) \
+#define SET_PIXMAP_AND_TEXT(pix, str) \
{ \
- gtk_clist_set_pixmap(clist, inc_dialog->cur_row, 0, xpm, xpmmask); \
- gtk_clist_set_text(clist, inc_dialog->cur_row, 2, str); \
+ progress_dialog_list_set(inc_dialog->dialog, \
+ inc_dialog->cur_row, \
+ pix, \
+ NULL, \
+ str); \
}
- for (; inc_dialog->queue_list != NULL; inc_dialog->cur_row++) {
+ for (; inc_dialog->queue_list != NULL && !cancelled; inc_dialog->cur_row++) {
session = inc_dialog->queue_list->data;
pop3_session = POP3_SESSION(session->session);
if (pop3_session->pass == NULL) {
- SET_PIXMAP_AND_TEXT(okxpm, okxpmmask, _("Cancelled"));
+ SET_PIXMAP_AND_TEXT(okpix, _("Cancelled"));
inc_session_destroy(session);
inc_dialog->queue_list =
g_list_remove(inc_dialog->queue_list, session);
}
inc_progress_dialog_clear(inc_dialog);
- gtk_clist_moveto(clist, inc_dialog->cur_row, -1, 1.0, 0.0);
+ progress_dialog_list_select_row(inc_dialog->dialog,
+ inc_dialog->cur_row);
- SET_PIXMAP_AND_TEXT(currentxpm, currentxpmmask,
- _("Retrieving"));
+ SET_PIXMAP_AND_TEXT(currentpix, _("Retrieving"));
/* begin POP3 session */
inc_state = inc_pop3_session_do(session);
switch (inc_state) {
case INC_SUCCESS:
if (pop3_session->cur_total_num > 0)
- msg = g_strdup_printf
- (_("Done (%d message(s) (%s) received)"),
+ msg = g_strdup_printf(
+ ngettext("Done (%d message (%s) received)",
+ "Done (%d messages (%s) received)",
+ pop3_session->cur_total_num),
pop3_session->cur_total_num,
to_human_readable(pop3_session->cur_total_recv_bytes));
else
msg = g_strdup_printf(_("Done (no new messages)"));
- SET_PIXMAP_AND_TEXT(okxpm, okxpmmask, msg);
+ SET_PIXMAP_AND_TEXT(okpix, msg);
g_free(msg);
break;
case INC_CONNECT_ERROR:
- SET_PIXMAP_AND_TEXT(errorxpm, errorxpmmask,
- _("Connection failed"));
+ SET_PIXMAP_AND_TEXT(errorpix, _("Connection failed"));
break;
case INC_AUTH_FAILED:
- SET_PIXMAP_AND_TEXT(errorxpm, errorxpmmask,
- _("Auth failed"));
+ SET_PIXMAP_AND_TEXT(errorpix, _("Auth failed"));
break;
case INC_LOCKED:
- SET_PIXMAP_AND_TEXT(errorxpm, errorxpmmask,
- _("Locked"));
+ SET_PIXMAP_AND_TEXT(errorpix, _("Locked"));
break;
case INC_ERROR:
case INC_NO_SPACE:
case INC_IO_ERROR:
case INC_SOCKET_ERROR:
case INC_EOF:
- SET_PIXMAP_AND_TEXT(errorxpm, errorxpmmask, _("Error"));
+ SET_PIXMAP_AND_TEXT(errorpix, _("Error"));
+ break;
+ case INC_TIMEOUT:
+ SET_PIXMAP_AND_TEXT(errorpix, _("Timeout"));
break;
case INC_CANCEL:
- SET_PIXMAP_AND_TEXT(okxpm, okxpmmask, _("Cancelled"));
+ SET_PIXMAP_AND_TEXT(okpix, _("Cancelled"));
+ if (!inc_dialog->show_dialog)
+ cancelled = TRUE;
break;
default:
break;
msglist = folder_item_get_msg_list(processing);
/* process messages */
+ folder_item_update_freeze();
for(msglist_element = msglist; msglist_element != NULL; msglist_element = msglist_element->next) {
msginfo = (MsgInfo *) msglist_element->data;
if (!pop3_session->ac_prefs->filter_on_recv || !procmsg_msginfo_filter(msginfo))
folder_item_move_msg(inbox, msginfo);
procmsg_msginfo_free(msginfo);
}
+ folder_item_update_thaw();
g_slist_free(msglist);
statusbar_pop_all();
manage_window_focus_in
(inc_dialog->dialog->window,
NULL, NULL);
- inc_put_error(inc_state, pop3_session->error_msg);
+ inc_put_error(inc_state, pop3_session);
if (inc_dialog->show_dialog)
manage_window_focus_out
(inc_dialog->dialog->window,
#undef SET_PIXMAP_AND_TEXT
if (new_msgs > 0)
- fin_msg = g_strdup_printf(_("Finished (%d new message(s))"),
- new_msgs);
+ fin_msg = g_strdup_printf(ngettext("Finished (%d new message)",
+ "Finished (%d new messages)",
+ new_msgs), new_msgs);
else
fin_msg = g_strdup_printf(_("Finished (no new messages)"));
else {
gtk_window_set_title(GTK_WINDOW(inc_dialog->dialog->window),
fin_msg);
- gtk_label_set_text(GTK_LABEL(GTK_BIN(inc_dialog->dialog->cancel_btn)->child),
- _("Close"));
+ gtk_button_set_label(GTK_BUTTON(inc_dialog->dialog->cancel_btn),
+ GTK_STOCK_CLOSE);
}
g_free(fin_msg);
progress_dialog_set_label(inc_dialog->dialog, buf);
g_free(buf);
+ session_set_timeout(SESSION(pop3_session),
+ prefs_common.io_timeout_secs * 1000);
+
if (session_connect(SESSION(pop3_session), server, port) < 0) {
log_warning(_("Can't connect to POP3 server: %s:%d\n"),
server, port);
session->inc_state != INC_CANCEL)
gtk_main_iteration();
- inc_timer_stop(inc_dialog);
- statusbar_pop_all();
-
if (session->inc_state == INC_SUCCESS) {
switch (pop3_session->error_val) {
case PS_SUCCESS:
- if (SESSION(pop3_session)->state == SESSION_ERROR) {
+ switch (SESSION(pop3_session)->state) {
+ case SESSION_ERROR:
if (pop3_session->state == POP3_READY)
session->inc_state = INC_CONNECT_ERROR;
else
session->inc_state = INC_ERROR;
- } else if (SESSION(pop3_session)->state == SESSION_EOF)
+ break;
+ case SESSION_EOF:
session->inc_state = INC_EOF;
- else
+ break;
+ case SESSION_TIMEOUT:
+ session->inc_state = INC_TIMEOUT;
+ break;
+ default:
session->inc_state = INC_SUCCESS;
+ break;
+ }
break;
case PS_AUTHFAIL:
session->inc_state = INC_AUTH_FAILED;
}
}
- return session->inc_state;
-}
-
-static void inc_timer_start(IncProgressDialog *inc_dialog,
- IncSession *inc_session)
-{
- if (inc_dialog->progress_timer_id == 0) {
- inc_dialog->progress_timer_id =
- gtk_timeout_add(PROGRESS_UPDATE_INTERVAL,
- inc_progress_timer_func, inc_session);
- }
- if (inc_dialog->folder_timer_id == 0) {
- inc_dialog->folder_timer_id =
- gtk_timeout_add(FOLDER_UPDATE_INTERVAL,
- inc_folder_timer_func, inc_session);
- }
-}
+ session_disconnect(SESSION(pop3_session));
+ statusbar_pop_all();
-static void inc_timer_stop(IncProgressDialog *inc_dialog)
-{
- if (inc_dialog->progress_timer_id) {
- gtk_timeout_remove(inc_dialog->progress_timer_id);
- inc_dialog->progress_timer_id = 0;
- }
- if (inc_dialog->folder_timer_id) {
- gtk_timeout_remove(inc_dialog->folder_timer_id);
- inc_dialog->folder_timer_id = 0;
- }
+ return session->inc_state;
}
static void inc_progress_dialog_update(IncProgressDialog *inc_dialog,
static void inc_progress_dialog_set_label(IncProgressDialog *inc_dialog,
IncSession *inc_session)
{
- gchar buf[MSGBUFSIZE];
ProgressDialog *dialog = inc_dialog->dialog;
Pop3Session *session;
case POP3_RETR_RECV:
break;
case POP3_DELETE:
+#if 0
if (session->msg[session->cur_msg].recv_time <
session->current_time) {
+ gchar buf[MSGBUFSIZE];
g_snprintf(buf, sizeof(buf), _("Deleting message %d"),
session->cur_msg);
progress_dialog_set_label(dialog, buf);
}
+#endif
break;
case POP3_LOGOUT:
progress_dialog_set_label(dialog, _("Quitting"));
cur_total = inc_session->cur_total_bytes;
total = pop3_session->total_bytes;
if (pop3_session->state == POP3_RETR ||
- pop3_session->state == POP3_RETR_RECV) {
+ pop3_session->state == POP3_RETR_RECV ||
+ pop3_session->state == POP3_DELETE) {
Xstrdup_a(total_size_str, to_human_readable(total), return);
g_snprintf(buf, sizeof(buf),
_("Retrieving message (%d / %d) (%s / %s)"),
progress_dialog_set_label(inc_dialog->dialog, buf);
}
- progress_dialog_set_percentage
+ progress_dialog_set_fraction
(inc_dialog->dialog,(gfloat)cur_total / (gfloat)total);
- gtk_progress_set_show_text
- (GTK_PROGRESS(inc_dialog->mainwin->progressbar), TRUE);
g_snprintf(buf, sizeof(buf), "%d / %d",
pop3_session->cur_msg, pop3_session->count);
- gtk_progress_set_format_string
- (GTK_PROGRESS(inc_dialog->mainwin->progressbar), buf);
- gtk_progress_bar_update
+ gtk_progress_bar_set_text
+ (GTK_PROGRESS_BAR(inc_dialog->mainwin->progressbar), buf);
+ gtk_progress_bar_set_fraction
(GTK_PROGRESS_BAR(inc_dialog->mainwin->progressbar),
(gfloat)cur_total / (gfloat)total);
if (pop3_session->cur_total_num > 0) {
g_snprintf(buf, sizeof(buf),
- _("Retrieving (%d message(s) (%s) received)"),
+ ngettext("Retrieving (%d message (%s) received)",
+ "Retrieving (%d messages (%s) received)",
+ pop3_session->cur_total_num),
pop3_session->cur_total_num,
to_human_readable
(pop3_session->cur_total_recv_bytes));
- gtk_clist_set_text(GTK_CLIST(inc_dialog->dialog->clist),
- inc_dialog->cur_row, 2, buf);
+ progress_dialog_list_set_status(inc_dialog->dialog,
+ inc_dialog->cur_row,
+ buf);
}
}
-static gboolean hash_remove_func(gpointer key, gpointer value, gpointer data)
+static void inc_progress_dialog_update_periodic(IncProgressDialog *inc_dialog,
+ IncSession *inc_session)
{
- return TRUE;
-}
-
-static gint inc_progress_timer_func(gpointer data)
-{
- IncSession *inc_session = (IncSession *)data;
- IncProgressDialog *inc_dialog;
-
- inc_dialog = (IncProgressDialog *)inc_session->data;
+ struct timeval tv_cur;
+ struct timeval tv_result;
+ gint msec;
- inc_progress_dialog_update(inc_dialog, inc_session);
+ gettimeofday(&tv_cur, NULL);
- return TRUE;
-}
-
-static gint inc_folder_timer_func(gpointer data)
-{
- IncSession *inc_session = (IncSession *)data;
- IncProgressDialog *inc_dialog;
-
- inc_dialog = (IncProgressDialog *)inc_session->data;
-
- if (g_hash_table_size(inc_session->tmp_folder_table) > 0) {
- folderview_update_item_foreach(inc_session->tmp_folder_table,
- FALSE);
- g_hash_table_foreach_remove(inc_session->tmp_folder_table,
- hash_remove_func, NULL);
+ tv_result.tv_sec = tv_cur.tv_sec - inc_dialog->progress_tv.tv_sec;
+ tv_result.tv_usec = tv_cur.tv_usec - inc_dialog->progress_tv.tv_usec;
+ if (tv_result.tv_usec < 0) {
+ tv_result.tv_sec--;
+ tv_result.tv_usec += 1000000;
}
- return TRUE;
+ msec = tv_result.tv_sec * 1000 + tv_result.tv_usec / 1000;
+ if (msec > PROGRESS_UPDATE_INTERVAL) {
+ inc_progress_dialog_update(inc_dialog, inc_session);
+ inc_dialog->progress_tv.tv_sec = tv_cur.tv_sec;
+ inc_dialog->progress_tv.tv_usec = tv_cur.tv_usec;
+ }
}
static gint inc_recv_data_progressive(Session *session, guint cur_len,
{
IncSession *inc_session = (IncSession *)data;
Pop3Session *pop3_session = POP3_SESSION(session);
+ IncProgressDialog *inc_dialog;
gint cur_total;
g_return_val_if_fail(inc_session != NULL, -1);
cur_total = pop3_session->total_bytes;
inc_session->cur_total_bytes = cur_total;
+ inc_dialog = (IncProgressDialog *)inc_session->data;
+ inc_progress_dialog_update_periodic(inc_dialog, inc_session);
+
return 0;
}
g_return_val_if_fail(inc_session != NULL, -1);
inc_dialog = (IncProgressDialog *)inc_session->data;
+
inc_recv_data_progressive(session, 0, 0, inc_session);
- if (POP3_SESSION(session)->state == POP3_RETR) {
- if (inc_dialog->progress_timer_id == 0) {
- inc_timer_start(inc_dialog, inc_session);
- inc_progress_dialog_update(inc_dialog, inc_session);
- }
- } else if (POP3_SESSION(session)->state == POP3_LOGOUT) {
+ if (POP3_SESSION(session)->state == POP3_LOGOUT) {
inc_progress_dialog_update(inc_dialog, inc_session);
- if (inc_dialog->progress_timer_id) {
- inc_folder_timer_func(data);
- inc_timer_stop(inc_dialog);
- }
}
return 0;
break;
case POP3_RETR:
inc_recv_data_progressive(session, 0, 0, inc_session);
- if (inc_dialog->progress_timer_id == 0) {
- inc_timer_start(inc_dialog, inc_session);
- inc_progress_dialog_update(inc_dialog, inc_session);
- }
break;
case POP3_LOGOUT:
inc_progress_dialog_update(inc_dialog, inc_session);
- if (inc_dialog->progress_timer_id) {
- inc_folder_timer_func(data);
- inc_timer_stop(inc_dialog);
- }
break;
default:
break;
FolderItem *inbox;
FolderItem *dropfolder;
IncSession *inc_session = (IncSession *)(SESSION(session)->data);
- IncProgressDialog *inc_dialog;
gint msgnum;
- gint val;
g_return_val_if_fail(inc_session != NULL, -1);
dropfolder = folder_get_default_processing();
/* add msg file to drop folder */
- if ((msgnum = folder_item_add_msg(dropfolder, file, NULL, TRUE)) < 0) {
+ if ((msgnum = folder_item_add_msg(
+ dropfolder, file, NULL, TRUE)) < 0) {
unlink(file);
return -1;
}
- inc_dialog = (IncProgressDialog *)inc_session->data;
-
return 0;
}
-static void inc_put_error(IncState istate, const gchar *msg)
+static void inc_put_error(IncState istate, Pop3Session *session)
{
gchar *log_msg = NULL;
gchar *err_msg = NULL;
log_msg = _("Connection failed.");
if (prefs_common.no_recv_err_panel)
break;
- err_msg = g_strdup(log_msg);
+ err_msg = g_strdup_printf(_("Connection to %s:%d failed."),
+ SESSION(session)->server,
+ SESSION(session)->port);
break;
case INC_ERROR:
log_msg = _("Error occurred while processing mail.");
if (prefs_common.no_recv_err_panel)
break;
- if (msg)
+ if (session->error_msg)
err_msg = g_strdup_printf
(_("Error occurred while processing mail:\n%s"),
- msg);
+ session->error_msg);
else
err_msg = g_strdup(log_msg);
break;
log_msg = _("Socket error.");
if (prefs_common.no_recv_err_panel)
break;
- err_msg = g_strdup(log_msg);
+ err_msg = g_strdup_printf(_("Socket error on connection to %s:%d."),
+ SESSION(session)->server,
+ SESSION(session)->port);
break;
case INC_EOF:
log_msg = _("Connection closed by the remote host.");
if (prefs_common.no_recv_err_panel)
break;
- err_msg = g_strdup(log_msg);
+ err_msg = g_strdup_printf(_("Connection to %s:%d closed by the remote host."),
+ SESSION(session)->server,
+ SESSION(session)->port);
break;
case INC_LOCKED:
log_msg = _("Mailbox is locked.");
if (prefs_common.no_recv_err_panel)
break;
- if (msg)
+ if (session->error_msg)
err_msg = g_strdup_printf(_("Mailbox is locked:\n%s"),
- msg);
+ session->error_msg);
else
err_msg = g_strdup(log_msg);
break;
log_msg = _("Authentication failed.");
if (prefs_common.no_recv_err_panel)
break;
- if (msg)
+ if (session->error_msg)
err_msg = g_strdup_printf
- (_("Authentication failed:\n%s"), msg);
+ (_("Authentication failed:\n%s"), session->error_msg);
else
err_msg = g_strdup(log_msg);
break;
+ case INC_TIMEOUT:
+ log_msg = _("Session timed out.");
+ if (prefs_common.no_recv_err_panel)
+ break;
+ err_msg = g_strdup_printf(_("Connection to %s:%d timed out."),
+ SESSION(session)->server,
+ SESSION(session)->port);
+ break;
default:
break;
}
static gint inc_spool_account(PrefsAccount *account)
{
FolderItem *inbox;
- gchar *mbox, *logname;
+ gchar *mbox;
gint result;
- logname = g_get_user_name();
-
if (account->inbox) {
inbox = folder_find_item_from_path(account->inbox);
if (!inbox)
if (is_file_exist(account->local_mbox))
mbox = g_strdup(account->local_mbox);
- else
- mbox = g_strconcat(account->local_mbox,
- G_DIR_SEPARATOR_S, logname, NULL);
+ else if (is_dir_exist(account->local_mbox))
+ mbox = g_strconcat(account->local_mbox, G_DIR_SEPARATOR_S,
+ g_get_user_name(), NULL);
+ else {
+ debug_print("%s: local mailbox not found.\n",
+ account->local_mbox);
+ return -1;
+ }
result = get_spool(inbox, mbox);
g_free(mbox);
g_return_val_if_fail(mbox != NULL, -1);
if (!is_file_exist(mbox) || (size = get_file_size(mbox)) == 0) {
- debug_print("no messages in local mailbox.\n");
+ debug_print("%s: no messages in local mailbox.\n", mbox);
return 0;
} else if (size < 0)
return -1;
static void inc_notify_cmd(gint new_msgs, gboolean notify)
{
- gchar *buf;
+ gchar *buf, *numpos, *ret_str;
+ gssize by_read = 0, by_written = 0;
if (!(new_msgs && notify && prefs_common.newmail_notify_cmd &&
*prefs_common.newmail_notify_cmd))
return;
- if ((buf = strchr(prefs_common.newmail_notify_cmd, '%')) &&
- buf[1] == 'd' && !strchr(&buf[1], '%'))
- buf = g_strdup_printf(prefs_common.newmail_notify_cmd,
- new_msgs);
- else
- buf = g_strdup(prefs_common.newmail_notify_cmd);
+ buf = g_strdup(prefs_common.newmail_notify_cmd);
+ if ((numpos = strstr(buf, "%d")) != NULL) {
+ gchar *buf2;
+
+ *numpos = '\0';
+ buf2 = g_strdup_printf("%s%d%s", buf, new_msgs, numpos + 2);
+ g_free(buf);
+ buf = buf2;
+ }
+ ret_str = g_locale_from_utf8(buf, strlen(buf), &by_read, &by_written,
+ NULL);
+ if (ret_str && by_written) {
+ g_free(buf);
+ buf = ret_str;
+ }
+ debug_print("executing new mail notification command: %s\n", buf);
execute_command_line(buf, TRUE);
g_free(buf);