2007-05-03 [colin] 2.9.1cvs39
[claws.git] / src / inc.c
index 4c7e0a15be495f76ccb81807f6939fa9d128e42a..53dccaa4436fd2019605e3937e7429907c4c407f 100644 (file)
--- a/src/inc.c
+++ b/src/inc.c
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2006 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -72,7 +72,8 @@ static GdkPixbuf *okpix;
 #define MSGBUFSIZE     8192
 
 static void inc_finished               (MainWindow             *mainwin,
-                                        gboolean                new_messages);
+                                        gboolean                new_messages,
+                                        gboolean                autocheck);
 static gint inc_account_mail_real      (MainWindow             *mainwin,
                                         PrefsAccount           *account);
 
@@ -143,19 +144,21 @@ static void inc_notify_cmd                (gint new_msgs,
  * messages.  If @new_messages is FALSE, this function avoids unneeded
  * updating.
  **/
-static void inc_finished(MainWindow *mainwin, gboolean new_messages)
+static void inc_finished(MainWindow *mainwin, gboolean new_messages, gboolean autocheck)
 {
-       FolderItem *item;
-
        if (prefs_common.scan_all_after_inc)
                folderview_check_new(NULL);
 
-       if (!new_messages && !prefs_common.scan_all_after_inc) return;
+       if (!autocheck && prefs_common.open_inbox_on_inc) {
+               FolderItem *item = NULL;
+
+               if (cur_account && cur_account->inbox)
+                       item = folder_find_item_from_identifier(cur_account->inbox);
+               if (item == NULL && cur_account->folder)
+                       item = cur_account->folder->inbox;
+               if (item == NULL)
+                       item = folder_get_default_inbox();
 
-       if (prefs_common.open_inbox_on_inc) {
-               item = cur_account && cur_account->inbox
-                       ? folder_find_item_from_identifier(cur_account->inbox)
-                       : folder_get_default_inbox();
                folderview_unselect(mainwin->folderview);
                folderview_select(mainwin->folderview, item);
        }
@@ -169,7 +172,7 @@ void inc_mail(MainWindow *mainwin, gboolean notify)
        if (inc_lock_count) return;
 
        if (prefs_common.work_offline && 
-           !inc_offline_should_override(
+           !inc_offline_should_override(TRUE,
                _("Claws Mail needs network access in order "
                  "to get mails.")))
                return;
@@ -191,7 +194,7 @@ void inc_mail(MainWindow *mainwin, gboolean notify)
                        new_msgs += account_new_msgs;
        }
 
-       inc_finished(mainwin, new_msgs > 0);
+       inc_finished(mainwin, new_msgs > 0, FALSE);
        main_window_unlock(mainwin);
        inc_notify_cmd(new_msgs, notify);
        inc_autocheck_timer_set();
@@ -274,7 +277,7 @@ gint inc_account_mail(MainWindow *mainwin, PrefsAccount *account)
        if (inc_lock_count) return 0;
 
        if (prefs_common.work_offline && 
-           !inc_offline_should_override(
+           !inc_offline_should_override(TRUE,
                _("Claws Mail needs network access in order "
                  "to get mails.")))
                return 0;
@@ -284,7 +287,7 @@ gint inc_account_mail(MainWindow *mainwin, PrefsAccount *account)
 
        new_msgs = inc_account_mail_real(mainwin, account);
 
-       inc_finished(mainwin, new_msgs > 0);
+       inc_finished(mainwin, new_msgs > 0, FALSE);
        main_window_unlock(mainwin);
        inc_autocheck_timer_set();
 
@@ -300,7 +303,7 @@ void inc_all_account_mail(MainWindow *mainwin, gboolean autocheck,
        gint account_new_msgs = 0;
        
        if (prefs_common.work_offline && 
-           !inc_offline_should_override(
+           !inc_offline_should_override( (autocheck == FALSE),
                _("Claws Mail needs network access in order "
                  "to get mails.")))
                return;
@@ -312,7 +315,7 @@ void inc_all_account_mail(MainWindow *mainwin, gboolean autocheck,
 
        list = account_get_list();
        if (!list) {
-               inc_finished(mainwin, new_msgs > 0);
+               inc_finished(mainwin, new_msgs > 0, autocheck);
                main_window_unlock(mainwin);
                inc_notify_cmd(new_msgs, notify);
                inc_autocheck_timer_set();
@@ -356,7 +359,7 @@ void inc_all_account_mail(MainWindow *mainwin, gboolean autocheck,
                new_msgs += inc_start(inc_dialog);
        }
 
-       inc_finished(mainwin, new_msgs > 0);
+       inc_finished(mainwin, new_msgs > 0, autocheck);
        main_window_unlock(mainwin);
        inc_notify_cmd(new_msgs, notify);
        inc_autocheck_timer_set();
@@ -785,7 +788,7 @@ static IncState inc_pop3_session_do(IncSession *session)
 
        buf = g_strdup_printf(_("Connecting to POP3 server: %s..."), server);
        statusbar_print_all("%s", buf);
-       log_message("%s\n", buf);
+       log_message(LOG_PROTOCOL, "%s\n", buf);
 
        progress_dialog_set_label(inc_dialog->dialog, buf);
        GTK_EVENTS_FLUSH();
@@ -804,7 +807,7 @@ static IncState inc_pop3_session_do(IncSession *session)
                                         server, port);
                        manage_window_focus_out(inc_dialog->dialog->window, NULL, NULL);
                } else {
-                       log_error(_("Can't connect to POP3 server: %s:%d\n"),
+                       log_error(LOG_PROTOCOL, _("Can't connect to POP3 server: %s:%d\n"),
                            server, port);
                }
                session->inc_state = INC_CONNECT_ERROR;
@@ -1192,9 +1195,9 @@ static void inc_put_error(IncState istate, Pop3Session *session)
 
        if (log_msg) {
                if (fatal_error)
-                       log_error("%s\n", log_msg);
+                       log_error(LOG_PROTOCOL, "%s\n", log_msg);
                else
-                       log_warning("%s\n", log_msg);
+                       log_warning(LOG_PROTOCOL, "%s\n", log_msg);
        }
        if (prefs_common.no_recv_err_panel && fatal_error)
                mainwindow_show_error();
@@ -1220,7 +1223,7 @@ static void inc_cancel(IncProgressDialog *dialog)
 
        session->inc_state = INC_CANCEL;
 
-       log_message(_("Incorporation cancelled\n"));
+       log_message(LOG_PROTOCOL, _("Incorporation cancelled\n"));
 }
 
 gboolean inc_is_active(void)
@@ -1325,10 +1328,10 @@ static gint get_spool(FolderItem *dest, const gchar *mbox, PrefsAccount *account
        if ((lockfd = lock_mbox(mbox, LOCK_FLOCK)) < 0)
                return -1;
 
-       g_snprintf(tmp_mbox, sizeof(tmp_mbox), "%s%ctmpmbox.%08x",
-                  get_tmp_dir(), G_DIR_SEPARATOR, (gint)mbox);
+       g_snprintf(tmp_mbox, sizeof(tmp_mbox), "%s%ctmpmbox.%p",
+                  get_tmp_dir(), G_DIR_SEPARATOR, mbox);
 
-       if (copy_mbox(mbox, tmp_mbox) < 0) {
+       if (copy_mbox(lockfd, tmp_mbox) < 0) {
                unlock_mbox(mbox, lockfd, LOCK_FLOCK);
                return -1;
        }
@@ -1403,7 +1406,7 @@ static void inc_autocheck_timer_set_interval(guint interval)
           the common preferences */
        if (prefs_common.autochk_newmail && autocheck_data
            && prefs_common.work_offline == FALSE) {
-               autocheck_timer = gtk_timeout_add
+               autocheck_timer = g_timeout_add
                        (interval, inc_autocheck_func, autocheck_data);
                debug_print("added timer = %d\n", autocheck_timer);
        }
@@ -1418,7 +1421,7 @@ void inc_autocheck_timer_remove(void)
 {
        if (autocheck_timer) {
                debug_print("removed timer = %d\n", autocheck_timer);
-               gtk_timeout_remove(autocheck_timer);
+               g_source_remove(autocheck_timer);
                autocheck_timer = 0;
        }
 }
@@ -1438,7 +1441,7 @@ static gint inc_autocheck_func(gpointer data)
        return FALSE;
 }
 
-gboolean inc_offline_should_override(const gchar *msg)
+gboolean inc_offline_should_override(gboolean force_ask, const gchar *msg)
 {
        static time_t overridden_yes = 0;
        static time_t overridden_no  = 0;
@@ -1448,29 +1451,41 @@ gboolean inc_offline_should_override(const gchar *msg)
        if (prefs_common.autochk_newmail)
                length = prefs_common.autochk_itv; /* minutes */
 
+       if (force_ask) {
+               overridden_no = (time_t)0;
+       }
+
        if (prefs_common.work_offline) {
                gchar *tmp = NULL;
                
                if (time(NULL) - overridden_yes < length * 60) /* seconds */
                         return TRUE;
-               else if (time(NULL) - overridden_no < 3) /* seconds */
+               else if (time(NULL) - overridden_no < length * 60) /* seconds */
                         return FALSE;
 
-               tmp = g_strdup_printf(
+               if (!force_ask)
+                       tmp = g_strdup_printf(
                                _("%s%sYou're working offline. Override for %d minutes?"),
                                msg?msg:"", 
                                msg?"\n\n":"",
                                length);
+               else
+                       tmp = g_strdup_printf(
+                               _("%s%sYou're working offline. Override?"),
+                               msg?msg:"", 
+                               msg?"\n\n":"");
 
                answer = alertpanel(_("Offline warning"), 
                               tmp,
-                              GTK_STOCK_NO, "+" GTK_STOCK_YES, _("On_ly once"));
+                              GTK_STOCK_NO, "+" GTK_STOCK_YES, 
+                               !force_ask? _("On_ly once"):NULL);
                g_free(tmp);
                if (answer == G_ALERTALTERNATE) {
                        overridden_yes = time(NULL);
                        return TRUE;
                } else if (answer == G_ALERTDEFAULT) {
-                       overridden_no  = time(NULL);
+                       if (!force_ask)
+                               overridden_no  = time(NULL);
                        return FALSE;
                } else {
                        overridden_yes = (time_t)0;