[evolution-mapi] Implement CamelFolder::get_message_cached()
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-mapi] Implement CamelFolder::get_message_cached()
- Date: Mon, 24 Oct 2011 14:33:36 +0000 (UTC)
commit 75d785dac64b1d0b2c4f9aaeaf252c711d67b0f0
Author: Milan Crha <mcrha redhat com>
Date: Mon Oct 24 16:33:04 2011 +0200
Implement CamelFolder::get_message_cached()
src/camel/camel-mapi-folder.c | 71 ++++++++++++++++++++++++-----------------
1 files changed, 42 insertions(+), 29 deletions(-)
---
diff --git a/src/camel/camel-mapi-folder.c b/src/camel/camel-mapi-folder.c
index db64991..5c7316a 100644
--- a/src/camel/camel-mapi-folder.c
+++ b/src/camel/camel-mapi-folder.c
@@ -1306,16 +1306,54 @@ mapi_folder_expunge_sync (CamelFolder *folder,
}
static CamelMimeMessage *
+mapi_folder_get_message_cached (CamelFolder *folder,
+ const gchar *message_uid,
+ GCancellable *cancellable)
+{
+ CamelMapiFolder *mapi_folder;
+ CamelMimeMessage *msg = NULL;
+ CamelStream *stream, *cache_stream;
+
+ mapi_folder = CAMEL_MAPI_FOLDER (folder);
+
+ if (!camel_folder_summary_check_uid (folder->summary, message_uid))
+ return NULL;
+
+ cache_stream = camel_data_cache_get (mapi_folder->cache, "cache", message_uid, NULL);
+ stream = camel_stream_mem_new ();
+ if (cache_stream) {
+ GError *local_error = NULL;
+
+ msg = camel_mime_message_new ();
+
+ g_seekable_seek (G_SEEKABLE (stream), 0, G_SEEK_SET, NULL, NULL);
+ camel_stream_write_to_stream (cache_stream, stream, cancellable, NULL);
+ g_seekable_seek (G_SEEKABLE (stream), 0, G_SEEK_SET, NULL, NULL);
+ if (!camel_data_wrapper_construct_from_stream_sync ((CamelDataWrapper *) msg, stream, cancellable, &local_error)) {
+ g_object_unref (msg);
+ msg = NULL;
+ }
+
+ g_clear_error (&local_error);
+ g_object_unref (cache_stream);
+ }
+
+ g_object_unref (stream);
+
+ return msg;
+}
+
+static CamelMimeMessage *
mapi_folder_get_message_sync (CamelFolder *folder,
const gchar *uid,
GCancellable *cancellable,
- GError **error )
+ GError **error)
{
CamelMimeMessage *msg = NULL;
CamelMapiFolder *mapi_folder;
CamelMapiStore *mapi_store;
CamelMapiMessageInfo *mi = NULL;
- CamelStream *stream, *cache_stream;
+ CamelStream *cache_stream;
CamelStore *parent_store;
mapi_id_t id_folder;
mapi_id_t id_message;
@@ -1341,34 +1379,8 @@ mapi_folder_get_message_sync (CamelFolder *folder,
_("No such message"));
return NULL;
}
- cache_stream = camel_data_cache_get (mapi_folder->cache, "cache", uid, NULL);
- stream = camel_stream_mem_new ();
- if (cache_stream) {
- GError *local_error = NULL;
-
- msg = camel_mime_message_new ();
-
- g_seekable_seek (G_SEEKABLE (stream), 0, G_SEEK_SET, NULL, NULL);
- camel_stream_write_to_stream (cache_stream, stream, cancellable, NULL);
- g_seekable_seek (G_SEEKABLE (stream), 0, G_SEEK_SET, NULL, NULL);
- if (!camel_data_wrapper_construct_from_stream_sync ((CamelDataWrapper *) msg, stream, cancellable, &local_error)) {
- if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
- g_object_unref (msg);
- g_object_unref (cache_stream);
- g_object_unref (stream);
- camel_message_info_free (&mi->info);
- return NULL;
- } else {
- /* Translators: The %s is replaced with a message ID */
- g_prefix_error (error, "Cannot get message %s: ", uid);
- g_object_unref (msg);
- msg = NULL;
- }
- }
- g_object_unref (cache_stream);
- }
- g_object_unref (stream);
+ msg = mapi_folder_get_message_cached (folder, uid, cancellable);
if (msg != NULL) {
camel_message_info_free (&mi->info);
return msg;
@@ -1833,6 +1845,7 @@ camel_mapi_folder_class_init (CamelMapiFolderClass *class)
folder_class->append_message_sync = mapi_folder_append_message_sync;
folder_class->expunge_sync = mapi_folder_expunge_sync;
folder_class->get_message_sync = mapi_folder_get_message_sync;
+ folder_class->get_message_cached = mapi_folder_get_message_cached;
folder_class->refresh_info_sync = mapi_folder_refresh_info_sync;
folder_class->synchronize_sync = mapi_folder_synchronize_sync;
folder_class->transfer_messages_to_sync = mapi_folder_transfer_messages_to_sync;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]