6 #include "modest-mime-part-search-stream.h"
8 static GObjectClass *parent_class = NULL;
11 modest_mime_part_search_stream_read (TnyStream *self, char *buffer, gsize n)
13 ModestMimePartSearchStream *me = (ModestMimePartSearchStream *) self;
15 if (strcasestr (buffer, me->search_for) != NULL) {
24 modest_mime_part_search_stream_write (TnyStream *self, const char *buffer, gsize n)
26 ModestMimePartSearchStream *me = (ModestMimePartSearchStream *) self;
28 if (strcasestr (buffer, me->search_for) != NULL) {
37 modest_mime_part_search_stream_flush (TnyStream *self)
43 modest_mime_part_search_stream_close (TnyStream *self)
49 modest_mime_part_search_stream_is_eos (TnyStream *self)
55 modest_mime_part_search_stream_reset (TnyStream *self)
61 modest_mime_part_search_stream_write_to_stream (TnyStream *self, TnyStream *output)
68 g_assert (TNY_IS_STREAM (output));
70 while (G_LIKELY (!tny_stream_is_eos (self)))
72 nb_read = tny_stream_read (self, tmp_buf, sizeof (tmp_buf));
73 if (G_UNLIKELY (nb_read < 0))
75 else if (G_LIKELY (nb_read > 0)) {
78 while (G_LIKELY (nb_written < nb_read))
80 ssize_t len = tny_stream_write (output, tmp_buf + nb_written,
81 nb_read - nb_written);
82 if (G_UNLIKELY (len < 0))
94 modest_mime_part_search_stream_new (const char *search_for)
96 ModestMimePartSearchStream *me = g_object_new (MODEST_TYPE_MIME_PART_SEARCH_STREAM, NULL);
98 me->search_for = g_strdup (search_for);
100 return TNY_STREAM (me);
104 modest_mime_part_search_stream_finalize (GObject *object)
106 ModestMimePartSearchStream *me = g_object_new (MODEST_TYPE_MIME_PART_SEARCH_STREAM, NULL);
108 g_free (me->search_for);
110 parent_class->finalize (object);
114 modest_mime_part_search_stream_instance_init (GTypeInstance *instance, gpointer g_class)
116 ModestMimePartSearchStream *me = (ModestMimePartSearchStream *) instance;
122 tny_stream_init (TnyStreamIface *klass)
124 klass->read_func = modest_mime_part_search_stream_read;
125 klass->write_func = modest_mime_part_search_stream_write;
126 klass->flush_func = modest_mime_part_search_stream_flush;
127 klass->close_func = modest_mime_part_search_stream_close;
128 klass->is_eos_func = modest_mime_part_search_stream_is_eos;
129 klass->reset_func = modest_mime_part_search_stream_reset;
130 klass->write_to_stream_func = modest_mime_part_search_stream_write_to_stream;
134 modest_mime_part_search_stream_class_init (ModestMimePartSearchStreamClass *klass)
136 GObjectClass *object_class;
138 parent_class = g_type_class_peek_parent (klass);
139 object_class = (GObjectClass*) klass;
140 object_class->finalize = modest_mime_part_search_stream_finalize;
144 modest_mime_part_search_stream_get_type (void)
146 static GType type = 0;
147 if (G_UNLIKELY(type == 0))
149 static const GTypeInfo info =
151 sizeof (ModestMimePartSearchStreamClass),
152 NULL, /* base_init */
153 NULL, /* base_finalize */
154 (GClassInitFunc) modest_mime_part_search_stream_class_init, /* class_init */
155 NULL, /* class_finalize */
156 NULL, /* class_data */
157 sizeof (ModestMimePartSearchStream),
159 modest_mime_part_search_stream_instance_init, /* instance_init */
164 static const GInterfaceInfo tny_stream_info =
166 (GInterfaceInitFunc) tny_stream_init, /* interface_init */
167 NULL, /* interface_finalize */
168 NULL /* interface_data */
171 type = g_type_register_static (G_TYPE_OBJECT,
172 "ModestMimePartSearchStream",
175 g_type_add_interface_static (type, TNY_TYPE_STREAM,