Extending test-client-custom-summary to try e_book_client_get_contacts_uids()
[platform/upstream/evolution-data-server.git] / camel / camel-mime-filter-save.c
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /*
3  *  Authors: Jeffrey Stedfast <fejj@ximian.com>
4  *
5  *  Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
6  *
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU Lesser General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU Lesser General Public License for more details.
16  *
17  *  You should have received a copy of the GNU Lesser General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  */
22
23 #ifndef HAVE_CONFIG_H
24 #include <config.h>
25 #endif
26
27 #include "camel-mime-filter-save.h"
28 #include "camel-stream-mem.h"
29
30 #define CAMEL_MIME_FILTER_SAVE_GET_PRIVATE(obj) \
31         (G_TYPE_INSTANCE_GET_PRIVATE \
32         ((obj), CAMEL_TYPE_MIME_FILTER_SAVE, CamelMimeFilterSavePrivate))
33
34 struct _CamelMimeFilterSavePrivate {
35         CamelStream *stream;
36 };
37
38 G_DEFINE_TYPE (CamelMimeFilterSave, camel_mime_filter_save, CAMEL_TYPE_MIME_FILTER)
39
40 static void
41 mime_filter_save_filter (CamelMimeFilter *mime_filter,
42                          const gchar *in,
43                          gsize len,
44                          gsize prespace,
45                          gchar **out,
46                          gsize *outlen,
47                          gsize *outprespace)
48 {
49         CamelMimeFilterSavePrivate *priv;
50
51         priv = CAMEL_MIME_FILTER_SAVE_GET_PRIVATE (mime_filter);
52
53         if (priv->stream != NULL)
54                 camel_stream_write (priv->stream, in, len, NULL, NULL);
55
56         *out = (gchar *) in;
57         *outlen = len;
58         *outprespace = mime_filter->outpre;
59 }
60
61 static void
62 mime_filter_save_complete (CamelMimeFilter *mime_filter,
63                            const gchar *in,
64                            gsize len,
65                            gsize prespace,
66                            gchar **out,
67                            gsize *outlen,
68                            gsize *outprespace)
69 {
70         if (len)
71                 mime_filter_save_filter (
72                         mime_filter, in, len, prespace,
73                         out, outlen, outprespace);
74 }
75
76 static void
77 mime_filter_save_reset (CamelMimeFilter *mime_filter)
78 {
79         /* no-op */
80 }
81
82 static void
83 camel_mime_filter_save_class_init (CamelMimeFilterSaveClass *class)
84 {
85         CamelMimeFilterClass *mime_filter_class;
86
87         g_type_class_add_private (class, sizeof (CamelMimeFilterSavePrivate));
88
89         mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
90         mime_filter_class->filter = mime_filter_save_filter;
91         mime_filter_class->complete = mime_filter_save_complete;
92         mime_filter_class->reset = mime_filter_save_reset;
93 }
94
95 static void
96 camel_mime_filter_save_init (CamelMimeFilterSave *filter)
97 {
98         filter->priv = CAMEL_MIME_FILTER_SAVE_GET_PRIVATE (filter);
99 }
100
101 /**
102  * camel_mime_filter_save_new:
103  * @stream: a #CamelStream object
104  *
105  * Create a new #CamelMimeFilterSave filter object that will save a
106  * copy of all filtered data to @stream.
107  *
108  * Returns: a new #CamelMimeFilterSave object
109  **/
110 CamelMimeFilter *
111 camel_mime_filter_save_new (CamelStream *stream)
112 {
113         CamelMimeFilter *filter;
114         CamelMimeFilterSavePrivate *priv;
115
116         if (stream != NULL)
117                 g_return_val_if_fail (CAMEL_IS_STREAM (stream), NULL);
118
119         filter = g_object_new (CAMEL_TYPE_MIME_FILTER_SAVE, NULL);
120         priv = CAMEL_MIME_FILTER_SAVE_GET_PRIVATE (filter);
121
122         if (stream != NULL)
123                 priv->stream = g_object_ref (stream);
124         else
125                 priv->stream = camel_stream_mem_new ();
126
127         return filter;
128 }