
2000-11-04 Not Zed <NotZed@HelixCode.com> * camel-mime-part-utils.c (camel_mime_part_construct_content_from_parser): Set the preface/postface from the parser into the multipart object. * camel-multipart.c (camel_multipart_set_postface): Function to set the postface text on a multipart. (camel_multipart_set_preface): Similarly for preface text. * camel-mime-parser.c (folder_scan_content): If we scan until a boundary, then we do not include the \n that starts the boundary line in the content. (struct _header_scan_stack): Added a ByteArray to store the multipart pre/post-text as we're scanning. (folder_pull_part): Free pre/posttext if they are allocated. (folder_scan_step): Build into the pre/posttext arrays as we encounter data. (camel_mime_parser_preface): REturn the multipart preface text, if there is any scanned. (camel_mime_parser_postface): Likewise for postface text. (byte_array_to_string): helper function for above. * providers/mbox/camel-mbox-folder.c (mbox_append_message): Change the from line to be "\nFrom ..." always, so no need to check/append a \n to messages. (mbox_append_message): Open the output stream with append mode [assuming this is more efficient than seeking to the end] And dont prepend \n on the From line if its the first in the mbox. (mbox_append_message): Pass the offset of the real start of the "From " line when we perform the update (which may != 'seek') * camel-mime-filter-charset.c (complete): Removed the terminating NUL 'fix'. * camel-stream-filter.c (do_read): Added some debug. (do_flush): And here. (do_write): And here too. (do_write): ARGH!!! ARGH! Ok, so the filter stream was writing a different number of bytes than the requester was asking it to write (because of filtering, of course!). So instead of returning the true number of written bytes, we'll return what they asked us to write - unless there is an error in which case we return -1. * camel-mime-utils.c (base64_encode_close): Sigh, forgot to make it unsigned. I think this is actually a gcc bug as (48 >> 2) somehow ended up negative, when it obviously should not, even if the data load was signed. svn path=/trunk/; revision=6388
106 lines
3.5 KiB
C
106 lines
3.5 KiB
C
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
/* camel-multipart.h : class for a multipart */
|
|
|
|
/*
|
|
*
|
|
* Author :
|
|
* Bertrand Guiheneuf <bertrand@helixcode.com>
|
|
*
|
|
* Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
* USA
|
|
*/
|
|
|
|
|
|
#ifndef CAMEL_MULTIPART_H
|
|
#define CAMEL_MULTIPART_H 1
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#pragma }
|
|
#endif /* __cplusplus }*/
|
|
|
|
#include <camel/camel-data-wrapper.h>
|
|
|
|
#define CAMEL_MULTIPART_TYPE (camel_multipart_get_type ())
|
|
#define CAMEL_MULTIPART(obj) (CAMEL_CHECK_CAST((obj), CAMEL_MULTIPART_TYPE, CamelMultipart))
|
|
#define CAMEL_MULTIPART_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MULTIPART_TYPE, CamelMultipartClass))
|
|
#define CAMEL_IS_MULTIPART(o) (CAMEL_CHECK_TYPE((o), CAMEL_MULTIPART_TYPE))
|
|
|
|
|
|
struct _CamelMultipart
|
|
{
|
|
CamelDataWrapper parent_object;
|
|
|
|
CamelMimePart *parent;
|
|
GList *parts;
|
|
gchar *boundary;
|
|
gchar *preface;
|
|
gchar *postface;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct {
|
|
CamelDataWrapperClass parent_class;
|
|
|
|
/* Virtual methods */
|
|
void (*add_part) (CamelMultipart *multipart, CamelMimePart *part);
|
|
void (*add_part_at) (CamelMultipart *multipart, CamelMimePart *part, guint index);
|
|
void (*remove_part) (CamelMultipart *multipart, CamelMimePart *part);
|
|
CamelMimePart * (*remove_part_at) (CamelMultipart *multipart, guint index);
|
|
CamelMimePart * (*get_part) (CamelMultipart *multipart, guint index);
|
|
guint (*get_number) (CamelMultipart *multipart);
|
|
void (*set_boundary) (CamelMultipart *multipart, gchar *boundary);
|
|
const gchar * (*get_boundary) (CamelMultipart *multipart);
|
|
|
|
} CamelMultipartClass;
|
|
|
|
|
|
/* Standard Camel function */
|
|
CamelType camel_multipart_get_type (void);
|
|
|
|
|
|
/* public methods */
|
|
CamelMultipart * camel_multipart_new (void);
|
|
void camel_multipart_add_part (CamelMultipart *multipart,
|
|
CamelMimePart *part);
|
|
void camel_multipart_add_part_at (CamelMultipart *multipart,
|
|
CamelMimePart *part,
|
|
guint index);
|
|
void camel_multipart_remove_part (CamelMultipart *multipart,
|
|
CamelMimePart *part);
|
|
CamelMimePart * camel_multipart_remove_part_at (CamelMultipart *multipart,
|
|
guint index);
|
|
CamelMimePart * camel_multipart_get_part (CamelMultipart *multipart,
|
|
guint index);
|
|
guint camel_multipart_get_number (CamelMultipart *multipart);
|
|
void camel_multipart_set_boundary (CamelMultipart *multipart,
|
|
gchar *boundary);
|
|
const gchar * camel_multipart_get_boundary (CamelMultipart *multipart);
|
|
|
|
void camel_multipart_set_preface (CamelMultipart *multipart, const char *preface);
|
|
void camel_multipart_set_postface (CamelMultipart *multipart, const char *postface);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* CAMEL_MULTIPART_H */
|
|
|