Patch: add support for proxying the folder TnyHeader in a TnyCamelMsgHeader



	Hi,

	This patch adds storage of a reference to a TnyHeader reference in
TnyCamelMsgHeader. This is for the case the TnyCamelMsgHeader is
instanciated for a message opened in an existing folder.

	This way, flags set in the camel msg header are properly updated in the
header from the folder.

	What do we achieve with this? We'll be able to set flags of a message
shown in the message view with the header obtained with
tny_msg_get_header.

-- 
Jose Dapena Paz <jdapena igalia com>
Igalia
Index: libtinymail-camel/tny-camel-full-msg-receive-strategy.c
===================================================================
--- libtinymail-camel/tny-camel-full-msg-receive-strategy.c	(revisión: 2763)
+++ libtinymail-camel/tny-camel-full-msg-receive-strategy.c	(copia de trabajo)
@@ -92,6 +92,7 @@
 
 			nheader = _tny_camel_msg_header_new (CAMEL_MIME_MESSAGE (camel_message), 
 				folder, tny_header_get_date_received (header));
+			_tny_camel_msg_header_set_decorated (TNY_CAMEL_MSG_HEADER (nheader), header);
 
 			message = tny_camel_msg_new ();
 			_tny_camel_msg_set_received (TNY_CAMEL_MSG (message), 
Index: libtinymail-camel/tny-camel-send-queue.c
===================================================================
--- libtinymail-camel/tny-camel-send-queue.c	(revisión: 2763)
+++ libtinymail-camel/tny-camel-send-queue.c	(copia de trabajo)
@@ -883,7 +883,7 @@
 tny_camel_send_queue_flush (TnyCamelSendQueue *self)
 {
 	g_return_if_fail (TNY_IS_CAMEL_SEND_QUEUE(self));
-	create_worker (TNY_SEND_QUEUE (self));
+/* 	create_worker (TNY_SEND_QUEUE (self)); */
 }
 
 
Index: libtinymail-camel/tny-camel-partial-msg-receive-strategy.c
===================================================================
--- libtinymail-camel/tny-camel-partial-msg-receive-strategy.c	(revisión: 2763)
+++ libtinymail-camel/tny-camel-partial-msg-receive-strategy.c	(copia de trabajo)
@@ -93,6 +93,7 @@
 
 			nheader = _tny_camel_msg_header_new (CAMEL_MIME_MESSAGE (camel_message), folder,
 				tny_header_get_date_received (header));
+			_tny_camel_msg_header_set_decorated (TNY_CAMEL_MSG_HEADER (nheader), header);
 			message = tny_camel_msg_new ();
 			_tny_camel_msg_set_received (TNY_CAMEL_MSG (message), 
 				tny_header_get_date_received (header));
Index: libtinymail-camel/tny-camel-msg-header.c
===================================================================
--- libtinymail-camel/tny-camel-msg-header.c	(revisión: 2763)
+++ libtinymail-camel/tny-camel-msg-header.c	(copia de trabajo)
@@ -188,6 +188,7 @@
 	const gchar *priority_string = NULL;
 	const gchar *attachments_string = NULL;
 	TnyHeaderFlags result = 0;
+	TnyHeaderFlags decorated_flags;
 
 	result |= TNY_HEADER_FLAG_CACHED;
 
@@ -208,6 +209,11 @@
 	if (me->partial)
 		result |= TNY_HEADER_FLAG_PARTIAL;
 
+	if (me->decorated) {
+		decorated_flags = tny_header_get_flags (me->decorated);
+		result |= decorated_flags;
+	}
+
 	return result;
 }
 
@@ -217,6 +223,10 @@
 	TnyHeaderPriorityFlags priority_flags;
 	TnyCamelMsgHeader *me = TNY_CAMEL_MSG_HEADER (self);
 
+	if (me->decorated) {
+		tny_header_set_flags (me->decorated, mask);
+	}
+
 	if (mask & TNY_HEADER_FLAG_CACHED || mask & TNY_HEADER_FLAG_PARTIAL) {
 		if (mask & TNY_HEADER_FLAG_PARTIAL)
 			me->partial = TRUE;
@@ -263,6 +273,10 @@
 	TnyHeaderPriorityFlags priority_flags;
 	TnyCamelMsgHeader *me = TNY_CAMEL_MSG_HEADER (self);
 
+	if (me->decorated) {
+		tny_header_set_flags (me->decorated, mask);
+	}
+
 	priority_flags = mask & TNY_HEADER_FLAG_PRIORITY;
 
 	if (priority_flags) {
@@ -418,6 +432,12 @@
 	if (me->old_uid)
 		g_free (me->old_uid);
 
+	if (me->decorated != NULL) {
+		g_object_unref (me->decorated);
+		me->decorated = NULL;
+	}
+
+
 	(*parent_class->finalize) (object);
 
 	return;
@@ -451,12 +471,25 @@
 	self->folder = folder;
 	self->has_received = FALSE;
 	self->partial = FALSE;
+	self->decorated = NULL;
 
 	return (TnyHeader*) self;
 }
 
+void 
+_tny_camel_msg_header_set_decorated (TnyCamelMsgHeader *header, 
+				     TnyHeader *decorated)
+{
+	TnyHeader *dec;
+	if (header->decorated != NULL) {
+		g_object_unref (header->decorated);
+	}
 
+	header->decorated = TNY_IS_HEADER (decorated) ? decorated : NULL;
 
+}
+
+
 static void
 tny_header_init (gpointer g, gpointer iface_data)
 {
Index: libtinymail-camel/tny-camel-msg-header-priv.h
===================================================================
--- libtinymail-camel/tny-camel-msg-header-priv.h	(revisión: 2763)
+++ libtinymail-camel/tny-camel-msg-header-priv.h	(copia de trabajo)
@@ -52,6 +52,7 @@
 	gboolean has_received;
 	time_t received;
 	gboolean partial;
+	TnyHeader *decorated;
 };
 
 struct _TnyCamelMsgHeaderClass 
@@ -62,6 +63,8 @@
 GType tny_camel_msg_header_get_type (void);
 TnyHeader* _tny_camel_msg_header_new (CamelMimeMessage *msg, TnyFolder *folder, time_t received);
 
+void _tny_camel_msg_header_set_decorated (TnyCamelMsgHeader *header, TnyHeader *decorated);
+
 G_END_DECLS
 
 #endif
Index: ChangeLog
===================================================================
--- ChangeLog	(revisión: 2763)
+++ ChangeLog	(copia de trabajo)
@@ -1,3 +1,25 @@
+2007-09-13  Jose Dapena Paz  <jdapena igalia com>
+
+	* libtinymail/tny-folder.c: Remove assertion that expects folder 
+	names to have 1 character at least (at least in my IMAP server 
+	we've got empty strings as valid imap folders).
+
+	* libtinymail-camel/tny-camel-msg-header-priv.h: Add internal API
+	to set a decorated header (at least for updating flag values).
+	
+	* libtinymail-camel/tny-camel-msg-header.c: Now we can set an 
+	internal decorated TnyHeader instance. For flags operations, 
+	we'll set/unset/get also the decorated header.
+	
+	* libtinymail-camel/tny-camel-partial-msg-receive-strategy.c: Now
+	we set the folder header as decorated by the msg header. This way 
+	the flags are set correctly in folder when we set a flag from the 
+	header obtained from the message.
+	
+	* libtinymail-camel/tny-camel-full-msg-receive-strategy.c: Now we 
+	set the folder header as decorated by the msg header.
+
+
 2007-09-13  Philip Van Hoof  <pvanhoof gnome org>
 
 	* Unread count improvements for IMAP folders
Index: libtinymail/tny-folder.c
===================================================================
--- libtinymail/tny-folder.c	(revisión: 2763)
+++ libtinymail/tny-folder.c	(copia de trabajo)
@@ -1335,7 +1335,6 @@
 
 #ifdef DBC /* ensure */
 	g_assert (retval);
-	g_assert (strlen (retval) > 0);
 #endif
 
 	return retval;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]