[gmime] Improved GMime.HeaderList C# API



commit 7bf5f13e4b6cbaa736f4fbe9c61373be7d2e0719
Author: Jeffrey Stedfast <fejj gnome org>
Date:   Sun Aug 14 19:57:59 2011 -0400

    Improved GMime.HeaderList C# API
    
    2011-08-14  Jeffrey Stedfast  <fejj gnome org>
    
    	* mono/GMime.metadata: Rename AppendHeader() to Append(),
    	PrependHeader() to Prepend(), RemoveHeader() to Remove(), etc.
    
    	* mono/HeaderList.custom: Instead of having
    	GetHeader()/SetHeader(), manually bind this as an indexer.
    
    	* gmime/gmime-header.c (g_mime_header_list_clear): New function
    	to clear all headers.
    	(g_mime_header_list_contains): New function added mostly for
    	completeness in the C# binding.

 ChangeLog                         |   13 +++++++++
 docs/reference/gmime-sections.txt |    2 +
 gmime/gmime-header.c              |   50 +++++++++++++++++++++++++++++++++++++
 gmime/gmime-header.h              |    2 +
 mono/GMime.metadata               |    7 +---
 mono/HeaderList.custom            |   31 +++++++++++++++++++++++
 mono/Message.custom               |    2 +-
 mono/gmime-api.raw                |   12 +++++++++
 8 files changed, 113 insertions(+), 6 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index a3a9235..7f20169 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
 2011-08-14  Jeffrey Stedfast  <fejj gnome org>
 
+	* mono/GMime.metadata: Rename AppendHeader() to Append(),
+	PrependHeader() to Prepend(), RemoveHeader() to Remove(), etc.
+
+	* mono/HeaderList.custom: Instead of having
+	GetHeader()/SetHeader(), manually bind this as an indexer.
+
+	* gmime/gmime-header.c (g_mime_header_list_clear): New function
+	to clear all headers.
+	(g_mime_header_list_contains): New function added mostly for
+	completeness in the C# binding.
+
+2011-08-14  Jeffrey Stedfast  <fejj gnome org>
+
 	* README: Bumped version
 
 	* configure.ac: Bumped version to 2.5.10
diff --git a/docs/reference/gmime-sections.txt b/docs/reference/gmime-sections.txt
index 2c7ecbc..c771bdd 100644
--- a/docs/reference/gmime-sections.txt
+++ b/docs/reference/gmime-sections.txt
@@ -597,6 +597,8 @@ g_mime_header_iter_set_value
 g_mime_header_iter_remove
 g_mime_header_list_new
 g_mime_header_list_destroy
+g_mime_header_list_clear
+g_mime_header_list_contains
 g_mime_header_list_prepend
 g_mime_header_list_append
 g_mime_header_list_remove
diff --git a/gmime/gmime-header.c b/gmime/gmime-header.c
index f67cf6d..0639e65 100644
--- a/gmime/gmime-header.c
+++ b/gmime/gmime-header.c
@@ -578,6 +578,56 @@ g_mime_header_list_destroy (GMimeHeaderList *headers)
 
 
 /**
+ * g_mime_header_list_clear:
+ * @headers: a #GMimeHeaderList
+ *
+ * Removes all of the headers from the #GMimeHeaderList.
+ **/
+void
+g_mime_header_list_clear (GMimeHeaderList *headers)
+{
+	GMimeHeader *header, *next;
+	
+	g_return_if_fail (headers != NULL);
+	
+	header = (GMimeHeader *) headers->list.head;
+	while (header->next) {
+		next = header->next;
+		g_mime_header_free (header);
+		header = next;
+	}
+	
+	g_hash_table_remove_all (headers->hash);
+	
+	g_mime_header_list_set_stream (headers, NULL);
+}
+
+
+/**
+ * g_mime_header_list_contains:
+ * @headers: a #GMimeHeaderList
+ * @name: header name
+ *
+ * Checks whether or not a header exists.
+ *
+ * Returns: %TRUE if the specified header exists or %FALSE otherwise.
+ **/
+gboolean
+g_mime_header_list_contains (const GMimeHeaderList *headers, const char *name)
+{
+	const GMimeHeader *header;
+	
+	g_return_val_if_fail (headers != NULL, FALSE);
+	g_return_val_if_fail (name != NULL, FALSE);
+	
+	if (!(header = g_hash_table_lookup (headers->hash, name)))
+		return FALSE;
+	
+	return TRUE;
+}
+
+
+/**
  * g_mime_header_list_prepend:
  * @headers: a #GMimeHeaderList
  * @name: header name
diff --git a/gmime/gmime-header.h b/gmime/gmime-header.h
index bc71242..836722a 100644
--- a/gmime/gmime-header.h
+++ b/gmime/gmime-header.h
@@ -112,6 +112,8 @@ void g_mime_header_list_destroy (GMimeHeaderList *headers);
 void g_mime_header_list_set_stream (GMimeHeaderList *headers, GMimeStream *stream);
 GMimeStream *g_mime_header_list_get_stream (GMimeHeaderList *headers);
 
+void g_mime_header_list_clear (GMimeHeaderList *headers);
+gboolean g_mime_header_list_contains (const GMimeHeaderList *headers, const char *name);
 void g_mime_header_list_prepend (GMimeHeaderList *headers, const char *name, const char *value);
 void g_mime_header_list_append (GMimeHeaderList *headers, const char *name, const char *value);
 void g_mime_header_list_set (GMimeHeaderList *headers, const char *name, const char *value);
diff --git a/mono/GMime.metadata b/mono/GMime.metadata
index 127731e..10d5968 100644
--- a/mono/GMime.metadata
+++ b/mono/GMime.metadata
@@ -189,11 +189,8 @@
   <remove-node path="/api/namespace/struct[ cname='GMimeHeaderList']/method[ cname='g_mime_header_list_foreach']"/>
   <attr path="/api/namespace/struct[ cname='GMimeHeaderList']/method[ name='SetStream']" name="hidden">true</attr>
   <attr path="/api/namespace/struct[ cname='GMimeHeaderList']/method[ name='GetStream']" name="hidden">true</attr>
-  <attr path="/api/namespace/struct[ cname='GMimeHeaderList']/method[ name='Prepend']" name="name">PrependHeader</attr>
-  <attr path="/api/namespace/struct[ cname='GMimeHeaderList']/method[ name='Append']" name="name">AppendHeader</attr>
-  <attr path="/api/namespace/struct[ cname='GMimeHeaderList']/method[ name='Remove']" name="name">RemoveHeader</attr>
-  <attr path="/api/namespace/struct[ cname='GMimeHeaderList']/method[ name='Set']" name="name">SetHeader</attr>
-  <attr path="/api/namespace/struct[ cname='GMimeHeaderList']/method[ name='Get']" name="name">GetHeader</attr>
+  <remove-node path="/api/namespace/struct[ cname='GMimeHeaderList']/method[ name='Get']"/>
+  <remove-node path="/api/namespace/struct[ cname='GMimeHeaderList']/method[ name='Set']"/>
   <attr path="/api/namespace/struct[ cname='GMimeHeaderList']/method[ name='GetIter']/*/parameter[ name='iter']" name="pass_as">out</attr>
   <attr path="/api/namespace/struct[ cname='GMimeHeaderIter']/method[ name='SetValue']/return-type" name="type">void</attr>
   <attr path="/api/namespace/struct[ cname='GMimeHeaderIter']" name="opaque">true</attr>
diff --git a/mono/HeaderList.custom b/mono/HeaderList.custom
index 07280d6..048a83d 100644
--- a/mono/HeaderList.custom
+++ b/mono/HeaderList.custom
@@ -1,3 +1,34 @@
+		[DllImport ("gmime")]
+		static extern IntPtr g_mime_header_list_set (IntPtr raw, IntPtr name, IntPtr value);
+		
+		[DllImport ("gmime")]
+		static extern IntPtr g_mime_header_list_get (IntPtr raw, IntPtr name);
+		
+		public string this[string name] {
+			get {
+				if (name == null)
+					throw new ArgumentNullException ("name");
+				
+				IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (name);
+				IntPtr raw_ret = g_mime_header_list_get (Handle, native_name);
+				string ret = GLib.Marshaller.Utf8PtrToString (raw_ret);
+				GLib.Marshaller.Free (native_name);
+				
+				return ret;
+			}
+			
+			set {
+				if (name == null)
+					throw new ArgumentNullException ("name");
+				
+				IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (name);
+				IntPtr native_value = GLib.Marshaller.StringToPtrGStrdup (value);
+				g_mime_header_list_set (Handle, native_name, native_value);
+				GLib.Marshaller.Free (native_value);
+				GLib.Marshaller.Free (native_name);
+			}
+		}
+		
 		public StreamWrapper Stream {
 			get {
 				GMime.StreamMem mem_stream = new GMime.StreamMem ();
diff --git a/mono/Message.custom b/mono/Message.custom
index 9a76338..573f38f 100644
--- a/mono/Message.custom
+++ b/mono/Message.custom
@@ -27,7 +27,7 @@
 				if (headers == null)
 					yield break;
 				
-				string references = headers.GetHeader ("References");
+				string references = headers["References"];
 				
 				if (references == null)
 					yield break;
diff --git a/mono/gmime-api.raw b/mono/gmime-api.raw
index 053e24c..a906d8b 100644
--- a/mono/gmime-api.raw
+++ b/mono/gmime-api.raw
@@ -2808,6 +2808,15 @@
           <parameter type="const-char*" name="value" />
         </parameters>
       </method>
+      <method name="Clear" cname="g_mime_header_list_clear">
+        <return-type type="void" />
+      </method>
+      <method name="Contains" cname="g_mime_header_list_contains">
+        <return-type type="gboolean" />
+        <parameters>
+          <parameter type="const-char*" name="name" />
+        </parameters>
+      </method>
       <method name="Destroy" cname="g_mime_header_list_destroy">
         <return-type type="void" />
       </method>
@@ -2938,6 +2947,9 @@
       <method name="GetPath" cname="g_mime_part_iter_get_path">
         <return-type type="char*" />
       </method>
+      <method name="GetToplevel" cname="g_mime_part_iter_get_toplevel">
+        <return-type type="GMimeObject*" />
+      </method>
       <method name="IsValid" cname="g_mime_part_iter_is_valid">
         <return-type type="gboolean" />
       </method>



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