diff options
Diffstat (limited to 'mail/e-mail-session-utils.c')
-rw-r--r-- | mail/e-mail-session-utils.c | 71 |
1 files changed, 34 insertions, 37 deletions
diff --git a/mail/e-mail-session-utils.c b/mail/e-mail-session-utils.c index 26d6dcb310..fcdd6b87ac 100644 --- a/mail/e-mail-session-utils.c +++ b/mail/e-mail-session-utils.c @@ -51,9 +51,8 @@ struct _AsyncContext { GPtrArray *post_to_uris; gchar *folder_uri; - gchar *destination; gchar *message_uid; - gchar *transport_uri; + gchar *transport_uid; gchar *sent_folder_uri; }; @@ -93,9 +92,8 @@ async_context_free (AsyncContext *context) } g_free (context->folder_uri); - g_free (context->destination); g_free (context->message_uid); - g_free (context->transport_uri); + g_free (context->transport_uid); g_free (context->sent_folder_uri); g_slice_free (AsyncContext, context); @@ -401,36 +399,30 @@ mail_session_send_to_thread (GSimpleAsyncResult *simple, /* Send the message to all recipients. */ if (camel_address_length (context->recipients) > 0) { - CamelTransport *transport; CamelProvider *provider; CamelService *service; - /* XXX This API does not allow for cancellation. */ - transport = camel_session_get_transport ( - CAMEL_SESSION (session), - context->transport_uri, &error); + service = camel_session_get_service ( + CAMEL_SESSION (session), context->transport_uid); - if (error != NULL) { - g_warn_if_fail (transport == NULL); + g_return_if_fail (CAMEL_IS_TRANSPORT (service)); + + /* XXX This API does not allow for cancellation. */ + if (!camel_service_connect_sync (service, &error)) { g_simple_async_result_set_from_error (simple, error); g_error_free (error); return; } - g_return_if_fail (CAMEL_IS_TRANSPORT (transport)); - - service = CAMEL_SERVICE (transport); provider = camel_service_get_provider (service); if (provider->flags & CAMEL_PROVIDER_DISABLE_SENT_FOLDER) copy_to_sent = FALSE; camel_transport_send_to_sync ( - transport, context->message, - context->from, context->recipients, - cancellable, &error); - - g_object_unref (transport); + CAMEL_TRANSPORT (service), + context->message, context->from, + context->recipients, cancellable, &error); if (error != NULL) { g_simple_async_result_set_from_error (simple, error); @@ -622,7 +614,6 @@ exit: void e_mail_session_send_to (EMailSession *session, CamelMimeMessage *message, - const gchar *destination, gint io_priority, GCancellable *cancellable, CamelFilterGetFolderFunc get_folder_func, @@ -642,7 +633,7 @@ e_mail_session_send_to (EMailSession *session, struct _camel_header_raw *header; const gchar *string; const gchar *resent_from; - gchar *transport_uri = NULL; + gchar *transport_uid = NULL; gchar *sent_folder_uri = NULL; GError *error = NULL; @@ -668,7 +659,12 @@ e_mail_session_send_to (EMailSession *session, if (account != NULL) { if (account->transport != NULL) { - transport_uri = g_strdup (account->transport->url); + + /* XXX Transport UIDs are kludgy right now. We + * use the EAccount's regular UID and tack on + * "-transport". Will be better soon. */ + transport_uid = g_strconcat ( + account->uid, "-transport", NULL); /* to reprompt password on sending if needed */ account->transport->get_password_canceled = FALSE; @@ -677,16 +673,13 @@ e_mail_session_send_to (EMailSession *session, } string = camel_header_raw_find (&xev, "X-Evolution-Transport", NULL); - if (transport_uri == NULL && string != NULL) - transport_uri = g_strstrip (g_strdup (string)); + if (transport_uid == NULL && string != NULL) + transport_uid = g_strstrip (g_strdup (string)); string = camel_header_raw_find (&xev, "X-Evolution-Fcc", NULL); if (sent_folder_uri == NULL && string != NULL) sent_folder_uri = g_strstrip (g_strdup (string)); - if (transport_uri == NULL) - transport_uri = g_strdup (destination); - post_to_uris = g_ptr_array_new (); for (header = xev; header != NULL; header = header->next) { gchar *folder_uri; @@ -751,7 +744,6 @@ e_mail_session_send_to (EMailSession *session, context = g_slice_new0 (AsyncContext); context->message = g_object_ref (message); - context->destination = g_strdup (destination); context->io_priority = io_priority; context->from = from; context->recipients = recipients; @@ -759,7 +751,7 @@ e_mail_session_send_to (EMailSession *session, context->info = info; context->xev = xev; context->post_to_uris = post_to_uris; - context->transport_uri = transport_uri; + context->transport_uid = transport_uid; context->sent_folder_uri = sent_folder_uri; if (G_IS_CANCELLABLE (cancellable)) @@ -841,7 +833,7 @@ e_mail_session_unsubscribe_folder_sync (EMailSession *session, GError **error) { CamelURL *url; - CamelStore *store; + CamelService *service; CamelProvider *provider; const gchar *message; const gchar *path = NULL; @@ -853,16 +845,21 @@ e_mail_session_unsubscribe_folder_sync (EMailSession *session, message = _("Unsubscribing from folder '%s'"); camel_operation_push_message (cancellable, message, folder_uri); - store = camel_session_get_store ( - CAMEL_SESSION (session), folder_uri, error); - if (store == NULL) - goto exit; - url = camel_url_new (folder_uri, error); if (url == NULL) goto exit; - provider = camel_service_get_provider (CAMEL_SERVICE (store)); + service = camel_session_get_service_by_url ( + CAMEL_SESSION (session), url); + + if (!CAMEL_IS_STORE (service)) + goto exit; + + /* FIXME This should take our GCancellable. */ + if (!camel_service_connect_sync (service, error)) + goto exit; + + provider = camel_service_get_provider (service); if (provider->url_flags & CAMEL_URL_FRAGMENT_IS_PATH) path = url->fragment; @@ -872,7 +869,7 @@ e_mail_session_unsubscribe_folder_sync (EMailSession *session, g_return_val_if_fail (path != NULL, FALSE); success = camel_store_unsubscribe_folder_sync ( - store, path, cancellable, error); + CAMEL_STORE (service), path, cancellable, error); camel_url_free (url); |