[gmime] Shortcut encode() if encoding already acceptable



commit d365877e4226bb0ee9409d12c50f879786118b34
Author: Jeffrey Stedfast <fejj gnome org>
Date:   Thu Oct 1 23:13:23 2009 -0400

    Shortcut encode() if encoding already acceptable
    
    2009-10-01  Jeffrey Stedfast  <fejj novell com>
    
    	* gmime/gmime-part.c (mime_part_encode): Shortcut if the currently
    	set encoding is within the acceptable constraints.
    
    	* docs/reference/gmime-sections.txt: Updated.
    
    	* mono/gmime-api.raw: Updated.

 ChangeLog                         |    9 +++++++++
 docs/reference/gmime-sections.txt |    3 ++-
 gmime/gmime-encodings.h           |    7 ++++---
 gmime/gmime-object.c              |    2 +-
 gmime/gmime-part.c                |   25 +++++++++++++++++++++++++
 mono/gmime-api.raw                |   15 ++++++++++++++-
 6 files changed, 55 insertions(+), 6 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 43b9bcc..2f02ed7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2009-10-01  Jeffrey Stedfast  <fejj novell com>
 
+	* gmime/gmime-part.c (mime_part_encode): Shortcut if the currently
+	set encoding is within the acceptable constraints.
+
+	* docs/reference/gmime-sections.txt: Updated.
+
+	* mono/gmime-api.raw: Updated.
+
+2009-10-01  Jeffrey Stedfast  <fejj novell com>
+
 	* gmime/gmime-filter-best.h: Moved GMimeEncodingConstraint to
 	gmime-encodings.h
 
diff --git a/docs/reference/gmime-sections.txt b/docs/reference/gmime-sections.txt
index d2748ba..70b1c8b 100644
--- a/docs/reference/gmime-sections.txt
+++ b/docs/reference/gmime-sections.txt
@@ -307,7 +307,6 @@ GMIME_FILTER_BASIC_GET_CLASS
 <FILE>gmime-filter-best</FILE>
 GMimeFilterBest
 GMimeFilterBestFlags
-GMimeEncodingConstraint
 g_mime_filter_best_new
 g_mime_filter_best_charset
 g_mime_filter_best_encoding
@@ -697,6 +696,7 @@ g_mime_object_get_headers
 g_mime_object_get_header_list
 g_mime_object_write_to_stream
 g_mime_object_to_string
+g_mime_object_encode
 
 <SUBSECTION Private>
 g_mime_object_get_type
@@ -937,6 +937,7 @@ g_mime_utils_unstructured_header_fold
 GMimeContentEncoding
 g_mime_content_encoding_from_string
 g_mime_content_encoding_to_string
+GMimeEncodingConstraint
 GMimeEncoding
 g_mime_encoding_init_encode
 g_mime_encoding_init_decode
diff --git a/gmime/gmime-encodings.h b/gmime/gmime-encodings.h
index fa69568..26c8926 100644
--- a/gmime/gmime-encodings.h
+++ b/gmime/gmime-encodings.h
@@ -57,9 +57,10 @@ typedef enum {
  * @GMIME_ENCODING_CONSTRAINT_8BIT: The stream data may have bytes with the high bit set, but no null bytes.
  * @GMIME_ENCODING_CONSTRAINT_BINARY: The stream may contain any binary data.
  *
- * Used with g_mime_filter_best_encoding() as the 'constraint'
- * argument. These values provide a means of letting the filter know
- * what the encoding constraints are for the stream.
+ * Used with functions like g_mime_filter_best_encoding() and
+ * g_mime_object_encode() as the 'constraint' argument. These values
+ * provide a means of letting the filter know what the encoding
+ * constraints are for the stream.
  **/
 typedef enum {
 	GMIME_ENCODING_CONSTRAINT_7BIT,
diff --git a/gmime/gmime-object.c b/gmime/gmime-object.c
index d926a00..ae1534f 100644
--- a/gmime/gmime-object.c
+++ b/gmime/gmime-object.c
@@ -989,7 +989,7 @@ object_encode (GMimeObject *object, GMimeEncodingConstraint constraint)
 /**
  * g_mime_object_encode:
  * @object: a #GMimeObject
- * @constraint a #GMimeEncodingConstraint
+ * @constraint: a #GMimeEncodingConstraint
  *
  * Calculates and sets the most efficient Content-Transfer-Encoding
  * for this #GMimeObject and all child parts based on the @constraint
diff --git a/gmime/gmime-part.c b/gmime/gmime-part.c
index 2f0ef7e..f9414c9 100644
--- a/gmime/gmime-part.c
+++ b/gmime/gmime-part.c
@@ -405,6 +405,31 @@ mime_part_encode (GMimeObject *object, GMimeEncodingConstraint constraint)
 	GMimeStream *stream, *null;
 	GMimeFilter *filter;
 	
+	switch (part->encoding) {
+	case GMIME_CONTENT_ENCODING_DEFAULT:
+		/* Unspecified encoding, we need to figure out the
+		 * best encoding no matter what */
+		break;
+	case GMIME_CONTENT_ENCODING_7BIT:
+		/* This encoding is always safe. */
+		return;
+	case GMIME_CONTENT_ENCODING_8BIT:
+		/* This encoding is safe unless the constraint is 7bit. */
+		if (constraint != GMIME_ENCODING_CONSTRAINT_7BIT)
+			return;
+		break;
+	case GMIME_CONTENT_ENCODING_BINARY:
+		/* This encoding is only safe if the constraint is binary. */
+		if (constraint == GMIME_ENCODING_CONSTRAINT_BINARY)
+			return;
+		break;
+	case GMIME_CONTENT_ENCODING_BASE64:
+	case GMIME_CONTENT_ENCODING_QUOTEDPRINTABLE:
+	case GMIME_CONTENT_ENCODING_UUENCODE:
+		/* These encodings are always safe. */
+		return;
+	}
+	
 	filter = g_mime_filter_best_new (GMIME_FILTER_BEST_ENCODING);
 	
 	null = g_mime_stream_null_new ();
diff --git a/mono/gmime-api.raw b/mono/gmime-api.raw
index 790fea4..2b07889 100644
--- a/mono/gmime-api.raw
+++ b/mono/gmime-api.raw
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<api>
+<api parser_version="1">
   <!--
 
         This file was automatically generated.
@@ -1109,6 +1109,13 @@
           <parameter type="GMimeStream*" name="stream" />
         </parameters>
       </virtual_method>
+      <virtual_method name="Encode" cname="encode">
+        <return-type type="void" />
+        <parameters>
+          <parameter type="GMimeObject*" name="object" />
+          <parameter type="GMimeEncodingConstraint" name="constraint" />
+        </parameters>
+      </virtual_method>
       <method name="AppendHeader" cname="g_mime_object_append_header">
         <return-type type="void" />
         <parameters>
@@ -1116,6 +1123,12 @@
           <parameter type="const-char*" name="value" />
         </parameters>
       </method>
+      <method name="Encode" cname="g_mime_object_encode">
+        <return-type type="void" />
+        <parameters>
+          <parameter type="GMimeEncodingConstraint" name="constraint" />
+        </parameters>
+      </method>
       <method name="GetContentDisposition" cname="g_mime_object_get_content_disposition">
         <return-type type="GMimeContentDisposition*" />
       </method>



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