diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2002-07-06 03:38:11 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2002-07-06 03:38:11 +0800 |
commit | a293a2aa215aea513cf5c88c14f783f224719de8 (patch) | |
tree | ff788022c0f08b5958696dba6a8f13f769b1a94e /mail/mail-send-recv.c | |
parent | 915bf644648f4de87c4c2472c368719524456936 (diff) | |
download | gsoc2013-evolution-a293a2aa215aea513cf5c88c14f783f224719de8.tar gsoc2013-evolution-a293a2aa215aea513cf5c88c14f783f224719de8.tar.gz gsoc2013-evolution-a293a2aa215aea513cf5c88c14f783f224719de8.tar.bz2 gsoc2013-evolution-a293a2aa215aea513cf5c88c14f783f224719de8.tar.lz gsoc2013-evolution-a293a2aa215aea513cf5c88c14f783f224719de8.tar.xz gsoc2013-evolution-a293a2aa215aea513cf5c88c14f783f224719de8.tar.zst gsoc2013-evolution-a293a2aa215aea513cf5c88c14f783f224719de8.zip |
No longer need to pass a postpone_cb function into the composer
2002-07-05 Jeffrey Stedfast <fejj@ximian.com>
* main.c (main): No longer need to pass a postpone_cb function
into the composer factory_init.
* mail-send-recv.c (get_receive_type): If the provider is a
transport, return SEND_SEND.
* mail-config.c (mail_config_get_default_transport): If the
default account doesn't have a transport, find the first account
that does.
* mail-callbacks.c (append_mail_cleanup): Don't bother freeing the
appended_uid here.
(composer_send_internal): New helper function that does all the
similar work that composer_send_cb and composer_postpone_cb did.
(composer_send_cb): Append the message to Outbox and in the async
callback, queue a message send operation.
(composer_postpone_cb): Removed.
(composer_send_queued_cb): The new async callback for
composer_send_cb(). If the append is successful, queue a message
send operation and destroy the composer otherwise re-show the
composer.
(save_draft_done): g_strdup the appended uid.
(compose_msg): Don't connect to the postpone signal anymore as it
no longer exists.
(send_to_url): Same.
(mail_reply): Here too.
(forward_get_composer): And here.
(redirect_get_composer): Again here.
(do_edit_messages): And finally here.
* mail-ops.c (append_mail_free): Free the appended uid.
svn path=/trunk/; revision=17379
Diffstat (limited to 'mail/mail-send-recv.c')
-rw-r--r-- | mail/mail-send-recv.c | 67 |
1 files changed, 63 insertions, 4 deletions
diff --git a/mail/mail-send-recv.c b/mail/mail-send-recv.c index 7b28435b32..c33b165a69 100644 --- a/mail/mail-send-recv.c +++ b/mail/mail-send-recv.c @@ -262,10 +262,16 @@ static send_info_t get_receive_type(const char *url) if (!provider) return SEND_INVALID; - if (provider->flags & CAMEL_PROVIDER_IS_STORAGE) - return SEND_UPDATE; - else - return SEND_RECEIVE; + if (provider->object_types[CAMEL_PROVIDER_STORE]) { + if (provider->flags & CAMEL_PROVIDER_IS_STORAGE) + return SEND_UPDATE; + else + return SEND_RECEIVE; + } else if (provider->object_types[CAMEL_PROVIDER_TRANSPORT]) { + return SEND_SEND; + } + + return SEND_INVALID; } static struct _send_data * @@ -854,3 +860,56 @@ mail_receive_uri (const char *uri, int keep) g_assert_not_reached (); } } + +void +mail_send (void) +{ + extern CamelFolder *outbox_folder; + const MailConfigService *transport; + struct _send_info *info; + struct _send_data *data; + send_info_t type; + + transport = mail_config_get_default_transport (); + if (!transport || !transport->url) + return; + + data = setup_send_data (); + info = g_hash_table_lookup (data->active, transport->url); + if (info != NULL) { + d(printf("send of %s still in progress\n", transport->url)); + return; + } + + d(printf("starting non-interactive send of '%s'\n", transport->url)); + + type = get_receive_type (transport->url); + if (type == SEND_INVALID) { + d(printf ("unsupported provider: '%s'\n", transport->url)); + return; + } + + info = g_malloc0 (sizeof (*info)); + info->type = SEND_SEND; + info->bar = NULL; + info->status = NULL; + info->uri = g_strdup (transport->url); + info->keep = FALSE; + info->cancel = camel_operation_new (operation_status, info); + info->stop = NULL; + info->data = data; + info->state = SEND_ACTIVE; + info->timeout_id = 0; + + d(printf("Adding new info %p\n", info)); + + g_hash_table_insert (data->active, info->uri, info); + + /* todo, store the folder in info? */ + mail_send_queue (outbox_folder, info->uri, + FILTER_SOURCE_OUTGOING, + info->cancel, + receive_get_folder, info, + receive_status, info, + receive_done, info); +} |