aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-medium.c
diff options
context:
space:
mode:
authorNotZed <NotZed@HelixCode.com>2000-04-22 13:22:20 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-04-22 13:22:20 +0800
commit0d82053015309f173335c41052356f20ef1c6227 (patch)
treee8013c96a9b77ea821f59e8df4e4aa1a84bac685 /camel/camel-medium.c
parent05a7bb9ef8ed8327fde0b04a0cab854d2c4a5d36 (diff)
downloadgsoc2013-evolution-0d82053015309f173335c41052356f20ef1c6227.tar
gsoc2013-evolution-0d82053015309f173335c41052356f20ef1c6227.tar.gz
gsoc2013-evolution-0d82053015309f173335c41052356f20ef1c6227.tar.bz2
gsoc2013-evolution-0d82053015309f173335c41052356f20ef1c6227.tar.lz
gsoc2013-evolution-0d82053015309f173335c41052356f20ef1c6227.tar.xz
gsoc2013-evolution-0d82053015309f173335c41052356f20ef1c6227.tar.zst
gsoc2013-evolution-0d82053015309f173335c41052356f20ef1c6227.zip
Ref the folder after setting it in the new message.
2000-04-22 NotZed <NotZed@HelixCode.com> * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): Ref the folder after setting it in the new message. * camel-mime-part.c (my_set_content_object): Have the headers follow the content-type change here too. (my_write_to_stream): Dont write content-type here, automatically stored in the headers ... (my_write_to_stream): Use header_disposition_format() to format the content-disposition header. (my_write_to_stream): Removed old code, all headers are now stored in the camel-medium level, always. Need to do the same with camel-mime-message i suppose ... * camel-mime-utils.c (header_content_type_is): Handle empty types. * gmime-content-field.c (gmime_content_field_write_to_stream): Use header_content_type_format() to format it. 2000-04-21 NotZed <NotZed@HelixCode.com> * camel-mime-utils.h: Add prototype for header_param_list_free. * camel-recipient.c: New function to remove all the types of a recipient list. I think this whole object needs a major review. * camel-mime-message.c (camel_mime_message_class_init): Removed parse_header_pair override, override add_header instead. (_parse_header_pair): Renamed to add_header. (remove_header): Add this method, to make sure we keep upto date with removed headers too. (_set_field): If given a NULL value, clear it out. (_set_recipient_list_from_string): Constify. (set_header): Override set_header from camel_medium. (process_header): Local function to handle set/add/remove of each header we know about. * camel-mime-part.c (camel_mime_part_class_init): Removed parse_header_pair setup. (my_parse_header_pair): Moved into add_header(), removed. (my_set_disposition): Allow a NULL disposition to clear it. (my_set_content_id): Allow NULL content id to clear it. (remove_header): Track removed headers. (my_set_description): Allow NULL description to clear it. (my_set_content_MD5): Make sure we copy the md5 value, and allow a NULL value to reset it. (my_set_filename): Copy the filename. (my_set_header_lines): Removed. Nothing uses it, it doesn't actually serve any purpose. (camel_mime_part_set_header_lines): Ditto. (my_get_header_lines): Ditto. (camel_mime_part_get_header_lines): Ditto. (camel_mime_part_class_init): Remove *_header_lines setup. (camel_mime_part_init): Remove header_lines init. (my_finalize): Remove header_lines finalise. (my_write_to_stream): Write the headers here. This is just WRONG, camel_medium should be doing this. (my_get_output_stream): Kill a warning. (camel_mime_part_encoding_to_string): Ditto. (camel_mime_part_set_description): Unvirtualiase, use add_header() to do the processing. (my_set_description): Removed. (set_disposition): Renamed from my_set_disposition. (camel_mime_part_get_description): Get the descriptionf rom the get_header method. (my_get_description): Removed. (my_set_filename): Removed. (camel_mime_part_get_filename): Get the parameter from the disposition. (camel_mime_part_encoding_from_string): Handle NULL string. (camel_mime_part_init): Remove reference to filename. (my_finalize): Dont free filename. * camel-mime-part.h (CamelMimePartClass): Removed parse_header_pair() method, it doesn't add anything that add_header() can't be used for. (CamelMimePartClass): Remove *_header_lines methods. (struct _CamelMimePart): Remove header_lines list. (struct _CamelMimePart): Removed filename attribute. * camel-medium.c (camel_medium_init): Init headers to null, not a hashtable. (add_header): Append the headers as a list. (remove_header): Remove headers as a list. (get_header): Likewise for lookup. (free_header): Removed, no longer needed. (finalize): Free headers using header_raw_clear(). (camel_medium_set_header): New function, to reset and override all values of a header with a new value. * camel-medium.h (struct _CamelMedium): Changed to use a header_raw struct rather than a hash table, to store headers (many headers can occur multiple times). * camel-mime-utils.c (header_raw_find_next): New function, allows you to find multi-valued header fields. (header_disposition_format): New function to format/create content-disposition header string. (header_param_list_format_append): Function to format parameter lists into a GString. (header_content_type_format): Function to format content-type into a usable format. (header_set_param): allow NULL value to remove the parameter. (decode_token): Renamed from header_decode_token. (header_decode_token): New interface for external use. (quoted_decode): Made static to kill annoying warnings. (g_strdup_len): Killed, replaced with calls to g_strndup(). (rfc2047_decode_word): Made static to kill warnings. (decode_coded_string): Terminated. (g_string_append_len): Made static to kill warnings. (header_decode_text): Made static to kill warnings. (header_decode_text): Constify. (rfc2047_decode_word): Constify. (header_param): Constify. (header_content_type_new): Copy the type/subtype strings. (header_param_list_decode): Made static. (header_param_list_format_append): Made static. (quoted_decode): Constify. (g_string_append_len): Constify. (header_token_decode): New function to decode a single token. * providers/mbox/camel-mbox-summary.c (header_write): Append a trailing \n when writing headers. (strdup_trim): Killed a warning. (camel_mbox_summary_set_uid): Make sure the next uid is at least 1 higher than any existing one. (header_evolution_decode): Use header_token_decode to get the token. * camel-mime-parser.c (folder_scan_header): Strip the trailing \n of the end of all header lines. svn path=/trunk/; revision=2551
Diffstat (limited to 'camel/camel-medium.c')
-rw-r--r--camel/camel-medium.c86
1 files changed, 36 insertions, 50 deletions
diff --git a/camel/camel-medium.c b/camel/camel-medium.c
index 1fd77c28ad..fe87911b14 100644
--- a/camel/camel-medium.c
+++ b/camel/camel-medium.c
@@ -3,8 +3,8 @@
/*
*
- * Author :
- * Bertrand Guiheneuf <bertrand@helixcode.com>
+ * Authors: Bertrand Guiheneuf <bertrand@helixcode.com>
+ * Michael Zucchi <notzed@helixcode.com>
*
* Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
*
@@ -40,6 +40,7 @@ static CamelDataWrapperClass *parent_class = NULL;
static void add_header (CamelMedium *medium, const gchar *header_name,
const gchar *header_value);
+static void set_header (CamelMedium *medium, const gchar *header_name, const gchar *header_value);
static void remove_header (CamelMedium *medium, const gchar *header_name);
static const gchar *get_header (CamelMedium *medium, const gchar *header_name);
@@ -61,6 +62,7 @@ camel_medium_class_init (CamelMediumClass *camel_medium_class)
/* virtual method definition */
camel_medium_class->add_header = add_header;
+ camel_medium_class->set_header = set_header;
camel_medium_class->remove_header = remove_header;
camel_medium_class->get_header = get_header;
@@ -75,8 +77,7 @@ camel_medium_init (gpointer object, gpointer klass)
{
CamelMedium *camel_medium = CAMEL_MEDIUM (object);
- camel_medium->headers = g_hash_table_new (g_strcase_hash,
- g_strcase_equal);
+ camel_medium->headers = NULL;
camel_medium->content = NULL;
}
@@ -105,23 +106,12 @@ camel_medium_get_type (void)
return camel_medium_type;
}
-
-static void
-free_header (gpointer key, gpointer value, gpointer data)
-{
- g_free (key);
- g_free (value);
-}
-
static void
finalize (GtkObject *object)
{
CamelMedium *medium = CAMEL_MEDIUM (object);
- if (medium->headers) {
- g_hash_table_foreach (medium->headers, free_header, NULL);
- g_hash_table_destroy (medium->headers);
- }
+ header_raw_clear(&medium->headers);
if (medium->content)
gtk_object_unref (GTK_OBJECT (medium->content));
@@ -129,24 +119,11 @@ finalize (GtkObject *object)
GTK_OBJECT_CLASS (parent_class)->finalize (object);
}
-
-
static void
add_header (CamelMedium *medium, const gchar *header_name,
const gchar *header_value)
{
- gpointer old_name;
- gpointer old_value;
-
- /* FIXME: This only allows each header to occur once. */
- if (g_hash_table_lookup_extended (medium->headers, header_name,
- &old_name, &old_value)) {
- g_hash_table_remove (medium->headers, old_name);
- g_free (old_name);
- g_free (old_value);
- }
- g_hash_table_insert (medium->headers, g_strdup (header_name),
- g_strdup (header_value));
+ header_raw_append(&medium->headers, header_name, header_value, -1);
}
/**
@@ -159,7 +136,7 @@ add_header (CamelMedium *medium, const gchar *header_name,
*
* FIXME: Where does it add it? We need to be able to prepend and
* append headers, and also be able to insert them relative to other
- * headers.
+ * headers. No we dont, order isn't important! Z
**/
void
camel_medium_add_header (CamelMedium *medium, const gchar *header_name,
@@ -172,20 +149,35 @@ camel_medium_add_header (CamelMedium *medium, const gchar *header_name,
CM_CLASS (medium)->add_header (medium, header_name, header_value);
}
+static void
+set_header (CamelMedium *medium, const gchar *header_name, const gchar *header_value)
+{
+ header_raw_replace(&medium->headers, header_name, header_value, -1);
+}
+
+/**
+ * camel_medium_set_header:
+ * @medium: a CamelMedium
+ * @header_name: name of the header
+ * @header_value: value of the header
+ *
+ * Sets the value of a header. Any other occurances of the header
+ * will be removed.
+ **/
+void
+camel_medium_set_header (CamelMedium *medium, const gchar *header_name, const gchar *header_value)
+{
+ g_return_if_fail (CAMEL_IS_MEDIUM (medium));
+ g_return_if_fail (header_name != NULL);
+ g_return_if_fail (header_value != NULL);
+
+ CM_CLASS (medium)->add_header (medium, header_name, header_value);
+}
static void
remove_header (CamelMedium *medium, const gchar *header_name)
{
- gpointer old_name;
- gpointer old_value;
-
- /* FIXME: This only allows each header to occur once. */
- if (g_hash_table_lookup_extended (medium->headers, header_name,
- &old_name, &old_value)) {
- g_hash_table_remove (medium->headers, header_name);
- g_free (old_name);
- g_free (old_value);
- }
+ header_raw_remove(&medium->headers, header_name);
}
/**
@@ -193,10 +185,8 @@ remove_header (CamelMedium *medium, const gchar *header_name)
* @medium: a medium
* @header_name: the name of the header
*
- * Removes the named header from the medium.
- *
- * FIXME: If there are multiple occurrences of the header, which
- * gets/get removed?
+ * Removes the named header from the medium. All occurances of the
+ * header are removed.
**/
void
camel_medium_remove_header (CamelMedium *medium, const gchar *header_name)
@@ -211,11 +201,7 @@ camel_medium_remove_header (CamelMedium *medium, const gchar *header_name)
static const gchar *
get_header (CamelMedium *medium, const gchar *header_name)
{
- gchar *header_value;
-
- header_value = (gchar *)g_hash_table_lookup (medium->headers,
- header_name);
- return header_value;
+ return header_raw_find(&medium->headers, header_name, NULL);
}
/**