diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2011-05-06 01:47:09 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2011-05-06 03:20:22 +0800 |
commit | ecdcc26c4ad72000c971cfc63e80c67f450b7771 (patch) | |
tree | 99f473c3fec3288558a66191b340a16e372335e5 /mail/e-mail-session.c | |
parent | 4d08cc60e5401caba786e74bf6c1fb5bf9424e3f (diff) | |
download | gsoc2013-evolution-ecdcc26c4ad72000c971cfc63e80c67f450b7771.tar.gz gsoc2013-evolution-ecdcc26c4ad72000c971cfc63e80c67f450b7771.tar.zst gsoc2013-evolution-ecdcc26c4ad72000c971cfc63e80c67f450b7771.zip |
Simplify e_mail_session_uri_to_folder_sync().
This relies on e_mail_folder_uri_parse() to handle 'email://' URIs.
See the previous commit.
Diffstat (limited to 'mail/e-mail-session.c')
-rw-r--r-- | mail/e-mail-session.c | 80 |
1 files changed, 13 insertions, 67 deletions
diff --git a/mail/e-mail-session.c b/mail/e-mail-session.c index fc85da56c9..b69adf8296 100644 --- a/mail/e-mail-session.c +++ b/mail/e-mail-session.c @@ -1215,76 +1215,26 @@ e_mail_session_uri_to_folder_sync (EMailSession *session, GCancellable *cancellable, GError **error) { - CamelURL *url; - CamelService *service; - CamelFolder *folder = NULL; - gchar *camel_uri = NULL; - gboolean vtrash = FALSE; - gboolean vjunk = FALSE; + CamelStore *store; + CamelFolder *folder; + gchar *folder_name; + gboolean success; g_return_val_if_fail (E_IS_MAIL_SESSION (session), NULL); g_return_val_if_fail (folder_uri != NULL, NULL); - url = camel_url_new (folder_uri, NULL); - g_return_val_if_fail (url, NULL); - - /* url->path[1] skips the leading "/" */ - camel_operation_push_message ( - cancellable, _("Opening folder '%s'"), &url->path[1]); - - /* FIXME vtrash and vjunk are no longer used for these URI's. */ - if (g_str_has_prefix (folder_uri, "vtrash:")) { - folder_uri += 7; - vtrash = TRUE; - } else if (g_str_has_prefix (folder_uri, "vjunk:")) { - folder_uri += 6; - vjunk = TRUE; - } else if (g_str_has_prefix (folder_uri, "email:")) { - /* FIXME Shouldn't the filter:get_folder - * callback do this itself? */ - camel_uri = em_uri_to_camel (folder_uri); - if (camel_uri == NULL) { - g_set_error ( - error, CAMEL_ERROR, CAMEL_ERROR_GENERIC, - _("Invalid folder: %s"), &url->path[1]); - goto exit; - } - folder_uri = camel_uri; - } - camel_url_free (url); + success = e_mail_folder_uri_parse ( + CAMEL_SESSION (session), folder_uri, + &store, &folder_name, error); - url = camel_url_new (folder_uri, error); + if (!success) + return NULL; - if (url == NULL) { - g_free (camel_uri); - goto exit; - } + camel_operation_push_message ( + cancellable, _("Opening folder '%s'"), folder_name); - service = camel_session_get_service_by_url ( - CAMEL_SESSION (session), url, CAMEL_PROVIDER_STORE); - - if (CAMEL_IS_STORE (service)) { - const gchar *name = ""; - - /* If we have a fragment, then the path is actually - * used by the store, so the fragment is the path to - * the folder instead. */ - if (url->fragment != NULL) - name = url->fragment; - else if (url->path != NULL && *url->path != '\0') - name = url->path + 1; - - if (vtrash) - folder = camel_store_get_trash_folder_sync ( - CAMEL_STORE (service), cancellable, error); - else if (vjunk) - folder = camel_store_get_junk_folder_sync ( - CAMEL_STORE (service), cancellable, error); - else - folder = camel_store_get_folder_sync ( - CAMEL_STORE (service), name, - flags, cancellable, error); - } + folder = camel_store_get_folder_sync ( + store, folder_name, flags, cancellable, error); if (folder != NULL) { MailFolderCache *folder_cache; @@ -1293,10 +1243,6 @@ e_mail_session_uri_to_folder_sync (EMailSession *session, mail_folder_cache_note_folder (folder_cache, folder); } - camel_url_free (url); - g_free (camel_uri); - -exit: camel_operation_pop_message (cancellable); return folder; |