replace deprecated gtk_progress*
[claws.git] / src / send_message.c
index ea9a105108b40f6d0227aad019e8ceb1c5855b7d..54e844cfa557306d16aad3ca9edfc47f641d83d1 100644 (file)
 #include "procheader.h"
 #include "account.h"
 #include "progressdialog.h"
+#include "statusbar.h"
 #include "inputdialog.h"
 #include "alertpanel.h"
 #include "manage_window.h"
 #include "utils.h"
 #include "gtkutils.h"
-#include "statusbar.h"
 #include "inc.h"
 #include "log.h"
 
@@ -106,13 +106,7 @@ gint send_message(const gchar *file, PrefsAccount *ac_prefs, GSList *to_list)
                val = send_message_local(ac_prefs->mail_command, fp);
                fclose(fp);
                return val;
-       }
-       else if (prefs_common.use_extsend && prefs_common.extsend_cmd) {
-               val = send_message_local(prefs_common.extsend_cmd, fp);
-               fclose(fp);
-               return val;
-       }
-       else {
+       } else {
                val = send_message_smtp(ac_prefs, to_list, fp);
                
                fclose(fp);
@@ -313,8 +307,7 @@ gint send_message_smtp(PrefsAccount *ac_prefs, GSList *to_list, FILE *fp)
 
        if (ac_prefs->use_smtp_auth) {
                smtp_session->forced_auth_type = ac_prefs->smtp_auth_type;
-
-               if (ac_prefs->smtp_userid) {
+               if (ac_prefs->smtp_userid && strlen(ac_prefs->smtp_userid)) {
                        smtp_session->user = g_strdup(ac_prefs->smtp_userid);
                        if (ac_prefs->smtp_passwd)
                                smtp_session->pass =
@@ -365,6 +358,8 @@ gint send_message_smtp(PrefsAccount *ac_prefs, GSList *to_list, FILE *fp)
        port = ac_prefs->set_smtpport ? ac_prefs->smtpport :
                ac_prefs->ssl_smtp == SSL_TUNNEL ? SSMTP_PORT : SMTP_PORT;
        session->ssl_type = ac_prefs->ssl_smtp;
+       if (ac_prefs->ssl_smtp != SSL_NONE)
+               session->nonblocking = ac_prefs->use_nonblocking_ssl;
 #else
        port = ac_prefs->set_smtpport ? ac_prefs->smtpport : SMTP_PORT;
 #endif
@@ -407,9 +402,7 @@ gint send_message_smtp(PrefsAccount *ac_prefs, GSList *to_list, FILE *fp)
 
        debug_print("send_message_smtp(): begin event loop\n");
 
-       while (session->state != SESSION_DISCONNECTED &&
-              session->state != SESSION_ERROR &&
-              dialog->cancelled == FALSE)
+       while (session_is_connected(session) && dialog->cancelled == FALSE)
                gtk_main_iteration();
 
        if (SMTP_SESSION(session)->error_val == SM_AUTHFAIL) {
@@ -419,6 +412,8 @@ gint send_message_smtp(PrefsAccount *ac_prefs, GSList *to_list, FILE *fp)
                }
                ret = -1;
        } else if (session->state == SESSION_ERROR ||
+                  session->state == SESSION_EOF ||
+                  session->state == SESSION_TIMEOUT ||
                   SMTP_SESSION(session)->state == SMTP_ERROR ||
                   SMTP_SESSION(session)->error_val != SM_OK)
                ret = -1;
@@ -434,6 +429,7 @@ gint send_message_smtp(PrefsAccount *ac_prefs, GSList *to_list, FILE *fp)
        session_destroy(session);
        send_progress_dialog_destroy(dialog);
 
+       statusbar_pop_all();
        statusbar_verbosity_set(FALSE);
        return ret;
 }
@@ -454,10 +450,12 @@ static gint send_recv_message(Session *session, const gchar *msg, gpointer data)
        case SMTP_HELO:
                g_snprintf(buf, sizeof(buf), _("Sending HELO..."));
                state_str = _("Authenticating");
+               statusbar_print_all(_("Sending message..."));
                break;
        case SMTP_EHLO:
                g_snprintf(buf, sizeof(buf), _("Sending EHLO..."));
                state_str = _("Authenticating");
+               statusbar_print_all(_("Sending message..."));
                break;
        case SMTP_AUTH:
                g_snprintf(buf, sizeof(buf), _("Authenticating..."));
@@ -508,7 +506,7 @@ static gint send_send_data_progressive(Session *session, guint cur_len,
        g_snprintf(buf, sizeof(buf), _("Sending message (%d / %d bytes)"),
                   cur_len, total_len);
        progress_dialog_set_label(dialog->dialog, buf);
-       progress_dialog_set_percentage
+       progress_dialog_set_fraction
                (dialog->dialog, (gfloat)cur_len / (gfloat)total_len);
 
        return 0;
@@ -534,14 +532,14 @@ static SendProgressDialog *send_progress_dialog_create(void)
        progress = progress_dialog_create();
        gtk_window_set_title(GTK_WINDOW(progress->window),
                             _("Sending message"));
-       gtk_signal_connect(GTK_OBJECT(progress->cancel_btn), "clicked",
-                          GTK_SIGNAL_FUNC(send_cancel_button_cb), dialog);
-       gtk_signal_connect(GTK_OBJECT(progress->window), "delete_event",
-                          GTK_SIGNAL_FUNC(gtk_true), NULL);
+       g_signal_connect(G_OBJECT(progress->cancel_btn), "clicked",
+                        G_CALLBACK(send_cancel_button_cb), dialog);
+       g_signal_connect(G_OBJECT(progress->window), "delete_event",
+                        G_CALLBACK(gtk_true), NULL);
        gtk_window_set_modal(GTK_WINDOW(progress->window), TRUE);
        manage_window_set_transient(GTK_WINDOW(progress->window));
 
-       progress_dialog_set_value(progress, 0.0);
+       progress_dialog_get_fraction(progress);
 
        if (prefs_common.send_dialog_mode == SEND_DIALOG_ALWAYS) {
                gtk_widget_show_now(progress->window);
@@ -571,32 +569,56 @@ static void send_cancel_button_cb(GtkWidget *widget, gpointer data)
 static void send_put_error(Session *session)
 {
        gchar *msg;
+       gchar *log_msg = NULL;
+       gchar *err_msg = NULL;
 
        msg = SMTP_SESSION(session)->error_msg;
 
        switch (SMTP_SESSION(session)->error_val) {
        case SM_ERROR:
        case SM_UNRECOVERABLE:
+               log_msg = _("Error occurred while sending the message.");
                if (msg)
-                       alertpanel_error_log
+                       err_msg = g_strdup_printf
                                (_("Error occurred while sending the message:\n%s"),
                                 msg);
                else
-                       alertpanel_error_log
-                               (_("Error occurred while sending the message."));
+                       err_msg = g_strdup(log_msg);
                break;
        case SM_AUTHFAIL:
+               log_msg = _("Authentication failed.");
                if (msg)
-                       alertpanel_error_log
+                       err_msg = g_strdup_printf
                                (_("Authentication failed:\n%s"), msg);
                else
-                       alertpanel_error_log
-                               (_("Authentication failed."));
+                       err_msg = g_strdup(log_msg);
+               break;
        default:
-               if (session->state == SESSION_ERROR)
-                       alertpanel_error_log
-                               (_("Error occurred while sending the message."));
+               switch (session->state) {
+               case SESSION_ERROR:
+                       log_msg =
+                               _("Error occurred while sending the message.");
+                       err_msg = g_strdup(log_msg);
+                       break;
+               case SESSION_EOF:
+                       log_msg = _("Connection closed by the remote host.");
+                       err_msg = g_strdup(log_msg);
+                       break;
+               case SESSION_TIMEOUT:
+                       log_msg = _("Session timed out.");
+                       err_msg = g_strdup(log_msg);
+                       break;
+               default:
+                       break;
+               }
                break;
        }
+
+       if (log_msg)
+               log_warning("%s\n", log_msg);
+       if (err_msg) {
+               alertpanel_error_log("%s", err_msg);
+               g_free(err_msg);
+       }
 }