Fixed the hack around quoted string responses - should now handle them
[platform/upstream/evolution-data-server.git] / camel / ChangeLog
1 2000-08-28  Jeffrey Stedfast  <fejj@helixcode.com>
2
3         * providers/imap/camel-imap-folder.c (imap_get_message): Fixed the
4         hack around quoted string responses - should now handle them
5         according to the specifications in the RFC
6         
7         * providers/imap/camel-imap-stream.c (stream_read): Updated to
8         match the code currently used in camel-imap-folder.c
9
10 2000-08-28  Ettore Perazzoli  <ettore@helixcode.com>
11
12         * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync):
13         Never ever free `tmpname' as it comes from `alloca()'!
14
15 2000-08-26  Ettore Perazzoli  <ettore@helixcode.com>
16
17         * camel-mime-utils.c (header_decode_text): Use `g_free()', not
18         `free()', to free `decword'.
19
20 2000-08-25  Peter Williams  <peterw@helixcode.com>
21
22         * camel.c (camel_init): Don't call unicode_init; code in e-util
23         will do it, and if unicode_init is called twice, you get an
24         infinite loop when looking up nonexistant encodings (patch
25         has been submitted to libunicode's maintainer).
26         
27         * camel-provider.h: Add a new field, default_ports, which
28         helps the configuration code guess about how to make CamelURL's
29         from providers.
30         
31         * providers/*/camel-*-provider.c: Specify default ports.
32
33 2000-08-25  Jeffrey Stedfast  <fejj@helixcode.com>
34
35         * providers/imap/camel-imap-folder.c
36         (imap_get_subfolder_names_internal): If the url path is "/" and
37         the folder path is "/", just LIST "" "*" (this should fix some
38         cyrus imapd problems). Also, INBOX is case insensitive so use
39         g_strcasecmp
40
41 2000-08-24  Lauris Kaplinski  <lauris@helixcode.com>
42
43         * camel-folder-summary.c (summary_build_content_info):
44         Use UTF-8 as default
45         * camel-mime-part-utils.c (simple_data_wrapper_construct_from_parser):
46         Use UTF-8 as default
47         * camel-mime-utils.c (rfc2047_decode_word): Use UTF-8
48         
49 2000-08-17  Not Zed  <NotZed@HelixCode.com>
50
51         * providers/mh/camel-mh-folder.c (mh_finalize): And here too.
52
53         * providers/mbox/camel-mbox-folder.c (mbox_finalize): Close index
54         on exit.
55
56 2000-08-23  Dan Winship  <danw@helixcode.com>
57
58         * camel-mime-utils.c (header_address_list_format_append): put
59         commas between addresses.
60
61 2000-08-22  Dan Winship  <danw@helixcode.com>
62
63         * providers/imap/camel-imap-folder.c
64         (imap_protocol_get_summary_specifier): use BODY.PEEK, not BODY, so
65         we don't set the message \Seen.
66
67 2000-08-22  Christopher James Lahey  <clahey@helixcode.com>
68
69         * providers/pop3/camel-pop3-store.c: Fixed a small warning.
70
71 2000-08-22  Peter Williams  <peterw@helixcode.com>
72
73         * camel-service.c (camel_service_new): Connect automatically if the
74         URL is not empty.
75         (finalize): Disconnect automatically if connected.
76         (camel_service_query_auth_types): Split into two functions; one to
77         be called if we're connected to an actual server (_connected), one
78         to be called if we're just gauging the general authtypes supported
79         (_generic).
80         (is_connected): Remove.
81
82         * camel-store.c (camel_store_get_folder): Don't connect explicitly to
83         the service.
84
85         * providers/nntp/camel-nntp-store.c (query_auth_types_generic): Split
86         the query_auth_types function. Hook it up in _new.
87         (finalize): Don't try to disconnect here.
88         
89         * providers/pop3/camel-pop3-store.c (query_auth_types_generic): Same.
90         (finalize): Don't try to disconnect here.
91
92         * providers/imap/camel-imap-store.c (query_auth_types_generic): Same.
93         (finalize): Don't try to disconnect here.
94
95         * providers/smtp/camel-smtp-transport.c (query_auth_types_generic): Split
96         the query_auth_types (dummy, in this case) function. Hook it up in _new.
97         (finalize): Don't try to disconnect here.
98
99 2000-08-21  JP Rosevear  <jpr@helixcode.com>
100         
101         * providers/nntp/camel-nntp-folder.c (nntp_folder_get_subfolder_names):
102         Make sure newsrc is not null
103         (nntp_folder_get_subfolder_names): ditto
104
105         * providers/nntp/camel-nntp-newsrc.c 
106         (camel_nntp_newsrc_get_subscribed_group_names): Programming check
107         for newsrc == NULL
108         (camel_nntp_newsrc_get_all_group_names): ditto
109         (camel_nntp_newsrc_write_to_file): ditto
110         (camel_nntp_newsrc_write): ditto
111
112 2000-08-21  JP Rosevear  <jpr@helixcode.com>
113
114         * providers/nntp/camel-nntp-store.c (camel_nntp_command): 
115         Make sure respbuffer is not null before manipulating it.
116         If it is null, return CAMEL_NNTP_FAIL and a decent error
117         message.
118         
119 2000-08-18  Peter Williams  <peterw@helixcode.com>
120
121         * camel-internet-address.c (internet_encode): If the name is "" we
122         weren't outputting anything; output the address at least.
123
124 2000-08-16  Peter Williams  <peterw@helixcode.com>
125
126         * camel-internet-address.c (internet_encode): Fix a leak when
127         name = "". It's a single-byte leak, but it's the little things
128         that count.
129
130         * camel-object.c (camel_type_lock_up): Don't leave the type
131         system locked when a bad unlock happens.
132
133         * providers/mbox/camel-mbox-store.c (get_folder): Fix a leak.
134
135 2000-08-15  Peter Williams  <peterw@helixcode.com>
136
137         * providers/imap/camel-imap-folder.c (imap_copy_message_to): Typo fix.
138
139 2000-08-14  Peter Williams  <peterw@helixcode.com>
140
141         * camel-folder-search.c (search_get_sent_date): New search function;
142         returns the time_t when the message was sent.
143         (search_get_receive_date): Same for when it was received.
144         (search_get_current_date): Gets the current time for use with the
145         above two. Is this in the right place?
146
147         * camel-folder-search.h: Add the new functions above to the class.
148
149 2000-08-13  Dan Winship  <danw@helixcode.com>
150
151         * providers/nntp/Makefile.am (libcamelnntpinclude_HEADERS): Add
152         camel-nntp-utils.h
153
154         * providers/imap/camel-imap-folder.c
155         (imap_get_subfolder_names_internal): do a strcasecmp rather than
156         just a strcmp when checking if a folder is "INBOX", since it is
157         a case-insensitive name.
158
159 2000-08-12  Dan Winship  <danw@helixcode.com>
160
161         * providers/imap/camel-imap-folder.c (imap_get_summary_internal):
162         Don't assume the FETCH results will come back in the order they
163         were requested.
164         (imap_get_subfolder_names_internal): Add "INBOX" to the list as
165         g_malloc'ed memory, not a static string.
166
167 2000-08-12  Jeffrey Stedfast  <fejj@helixcode.com>
168
169         * providers/imap/camel-imap-store.c
170         (camel_imap_command_continuation): Now takes a char * parameter
171         rather than a stream
172         (camel_imap_command_continuation_with_stream): Same function as
173         above but takes a stream parameter instead
174
175         * providers/imap/camel-imap-folder.c (imap_append_message): Use
176         camel_imap_command_continuation_with_stream
177
178 2000-08-12  Dan Winship  <danw@helixcode.com>
179
180         * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): New
181         function to do one round of attempted authentication.
182         (pop3_connect): Move a bunch of code out into
183         pop3_try_authenticate and fix some bugs in the edge cases.
184
185 2000-08-12  Jeffrey Stedfast  <fejj@helixcode.com>
186
187         * providers/imap/camel-imap-store.c (query_auth_types): No longer
188         calls try_connect() to get authtypes
189
190 2000-08-11  Jeffrey Stedfast  <fejj@helixcode.com>
191
192         * providers/imap/camel-imap-store.c
193         (camel_imap_command_continuation): Changed param order a bit and
194         fixed some logic
195
196         * providers/imap/camel-imap-folder.c (imap_append_message): Use
197         the new multi-transactional convenience functions
198
199 2000-08-11  Jeffrey Stedfast  <fejj@helixcode.com>
200         
201         * providers/imap/camel-imap-store.c
202         (camel_imap_command_preliminary): New convenience function for
203         multi-transactional commands (opening request)
204         (camel_imap_command_continuation): New convenience function for
205         multi-transactional commands (followup data)
206
207 2000-08-11  Christopher James Lahey  <clahey@helixcode.com>
208
209         * providers/mh/camel-mh-folder.c: Fixed a warning.
210
211 2000-08-11  Chris Toshok  <toshok@helixcode.com>
212
213         * providers/nntp/camel-nntp-folder.c
214         (camel_nntp_folder_class_init): remove get_name and get_full_name
215         assignments, since the camel-folder.c implementation does what we
216         need.
217
218 2000-08-11  Chris Toshok  <toshok@helixcode.com>
219
220         * providers/nntp/camel-nntp-store.c
221         (camel_nntp_store_get_toplevel_dir): use g_get_home_dir, since
222         evolution_dir isn't available in the providers.
223
224 2000-08-11  Peter Williams  <peterw@helixcode.com>
225
226         * camel-folder.c (thaw): Fix a bug where the message_changed
227         signal wasn't being emitted.
228
229 2000-08-11  Not Zed  <NotZed@HelixCode.com>
230
231         * providers/mh/camel-mh-folder.c (mh_set_message_user_tag):
232         Implement.
233         (mh_get_message_user_tag): Implement.
234
235         * providers/mbox/camel-mbox-folder.c (mbox_get_message_user_tag):
236         (mbox_set_message_user_tag): Implement.
237
238         * camel-folder.c (move_message_to): Yay so lets fix an already
239         fixed fix, again.
240         (copy_message_to): and here too ... update for api change to append().
241         And removed another warning.
242         (camel_folder_set_message_user_tag): Routine to set message tags.
243         (camel_folder_get_message_user_tag): And accessor.
244
245 2000-08-10  Christopher James Lahey  <clahey@helixcode.com>
246
247         * camel-folder-search.c, camel-folder-summary.c, camel-medium.c,
248         camel-mime-filter-charset.c, camel-mime-filter.c,
249         camel-mime-filter.h, camel-mime-message.c, camel-mime-parser.c,
250         camel-mime-part-utils.c, camel-mime-part.c, camel-mime-utils.c,
251         camel-movemail.c, camel-multipart.c, camel-object.c,
252         camel-stream-mem.c, providers/mbox/camel-mbox-folder.c,
253         providers/mbox/camel-mbox-summary.c,
254         providers/mh/camel-mh-folder.c,
255         providers/smtp/camel-smtp-transport.c: Fixed some warnings.
256
257 2000-08-11  Not Zed  <NotZed@HelixCode.com>
258
259         * providers/vee/camel-vee-folder.c (vee_folder_build_folder): Free
260         the search properly.
261         (vee_folder_build): And here too.
262
263 2000-08-10  Jeffrey Stedfast  <fejj@helixcode.com>
264
265         * providers/imap/camel-imap-folder.c (camel_imap_folder_changed):
266         If we go over the max number of messages, don't keep requesting
267         new message summaries, just break.
268
269 2000-08-11  Not Zed  <NotZed@HelixCode.com>
270
271         * camel-mime-parser.c (folder_scan_header): A better way to
272         compress leading whitespace.  The code is probably invalid anyway,
273         I dont think it will work across buffer boundaries.
274
275         * providers/mbox/camel-mbox-folder.c (mbox_append_message): And
276         write out proper format From lines here too.
277
278         * providers/mbox/camel-mbox-summary.c
279         (camel_mbox_summary_build_from): New function to build a more
280         compatible mbox "From " line.
281         (camel_mbox_summary_sync): Write From lines in the proper format.
282
283 2000-08-10  Not Zed  <NotZed@HelixCode.com>
284
285         * providers/mh/camel-mh-store.c (get_folder): Remove warnin g.
286
287         * providers/mbox/camel-mbox-store.c (xrename): Kill some warnings
288         with constification.
289
290         * providers/imap/camel-imap-folder.c (imap_append_message): Fixed
291         for append api change.  Eek this routine seriously wastes memory.
292
293         * providers/mh/camel-mh-folder.c (mh_search_free): Impelemnt.
294         (mh_append_message): Fix for api change, and include user flags
295         and tags in new message.
296
297         * providers/vee/camel-vee-folder.c (vee_search_by_expression): Fix
298         for search api change.
299
300         * camel-folder.c (camel_folder_search_free): New function for
301         freeing search results.
302         (search_free): Changed my mind, implement a default that actually
303         does something.  Free as to the old interface.
304         (camel_folder_append_message): Changed to accept a
305         camelmessageinfo rather than flags, which just doesn't have enough
306         info in it.
307         (copy_message_to): Change for append_message api change.
308         (move_message_to): Likewise.
309
310         * providers/mbox/camel-mbox-folder.c (mbox_search_free):
311         Implement.
312         (mbox_append_message): Fix for api change, and also copy user
313         flags/tags across to new summary.
314
315         * camel-folder-search.c (search_user_tag): A search expression
316         that returns the current use flag by name.
317         (camel_folder_search_free_result): New function to free the result
318         of a search.
319
320         * camel-folder-summary.c: Bump summary version.
321         (message_info_new): 
322         (message_info_load): 
323         (message_info_save): 
324         (camel_message_info_dup_to): 
325         (camel_message_info_free): Added support for arbitrary tag/value
326         pairs (CamelTag's).
327         (camel_tag_get): 
328         (camel_tag_set):
329         (camel_tag_list_size):
330         (camel_tag_list_free): Operations for working with CamelTags.
331
332 2000-08-09  Peter Williams  <peterw@helixcode.com>
333
334         * camel-store.c (camel_store_get_folder): Connect beforehand, if
335         necessary.
336
337         * providers/imap/camel-imap-store.c (camel_imap_store_init): Default
338         the dir_sep to "/" so that certain functions can safely assume that
339         dir_sep is valid (at least, nonnull).
340
341 2000-08-09  Ettore Perazzoli  <ettore@helixcode.com>
342
343         * providers/nntp/camel-nntp-folder.c
344         (nntp_folder_set_message_flags): Get rid of an unused variable.
345
346         * providers/nntp/Makefile.am (INCLUDES): Fix includes so that we
347         don't use installed headers anymore.  [I copied this over from the
348         IMAP provider, that does not seem to have this problem.]
349
350 2000-08-09  Not Zed  <NotZed@HelixCode.com>
351
352         * camel-folder-search.c (camel_folder_search_execute_expression):
353         Reorder search result in summary order if we searched with a
354         summary.
355
356 2000-08-08  Dan Winship  <danw@helixcode.com>
357
358         * camel-uid-cache.c: New code to keep an on-disk cache of what
359         UIDs have been seen in a folder.
360
361         * camel-provider.h: Add new flags CAMEL_PROVIDER_IS_SOURCE (mail
362         can arrive in it by non-Camel means) and CAMEL_PROVIDER_IS_STORAGE
363         (you can work with mail directly without needing to copy it local).
364
365         * providers/*/camel-*-provider.c: Add flags as needed: imap and
366         mbox are SOURCE and STORAGE. mh and nntp are just STORAGE, pop3 is
367         just SOURCE.
368
369         * camel-mime-message.c (process_header): Add another subject
370         g_strstrip that fejj's earlier commit missed.
371
372 2000-08-08  Peter Williams  <peterw@helixcode.com>
373
374         * camel-provider.h: Remove some GTK stuff that I missed.
375
376         * providers/imap/camel-imap-store.c (imap_noop): Turn this
377         back on with the new timeout interface in CamelSession.
378
379         * camel-session.[ch] (camel_session_register_timeout): New
380         interface for Camel to register timeouts. Basically the
381         GTK timeout interface is copied. We do this because Camel isn't
382         allowed to use GTK anymore.
383         
384 2000-08-07  Not Zed  <NotZed@HelixCode.com>
385
386         * providers/mh/camel-mh-folder.c (mh_append_message): Only retry
387         another uid if we had a name clash, otherwise fail.
388
389 2000-08-07  Jeffrey Stedfast  <fejj@helixcode.com>
390
391         * providers/imap/camel-imap-folder.c
392         (imap_get_subfolder_names_internal): If we are trying to get a
393         subfolder listing of the root folder, always make sure INBOX is
394         there...
395
396         * providers/imap/camel-imap-utils.c (imap_parse_list_response): 
397         Check for NIL as a directory separator.
398
399 2000-08-07  Peter Williams  <peterw@helixcode.com>
400
401         * providers/nntp/Makefile.am: Reorder the INCLUDES to pull
402         in the camel headers from the local source tree before
403         the ones in $(includedir). This was causing compile problems
404         because the installed, Gtk-based camel-object.h was included
405         before the uninstall Camel-based one.
406
407 2000-08-07  Jeffrey Stedfast  <fejj@helixcode.com>
408
409         * providers/imap/camel-imap-utils.c (imap_translate_sexp): Strip
410         all \n's from the expression
411
412         * string-utils.c (strip): New convenience function to strip
413         occurences of a single char from a string
414
415         * camel-mime-message.c (camel_mime_message_set_subject): Do a
416         g_strstrip on the subject so we can stop getting those annoying
417         leading spaces
418
419 2000-08-07  Dan Winship  <danw@helixcode.com>
420
421         * camel-folder.c (camel_folder_free_deep): Fix this to not require
422         NULL-termination of the array.
423
424 2000-08-04  Jeffrey Stedfast  <fejj@helixcode.com>
425
426         * providers/imap/camel-imap-store.c (imap_connect): If we fail to
427         get a dir_sep, then supply the default of "/".
428         (get_folder): Undo changes by Peter
429
430 2000-08-04  Peter Williams  <peterw@helixcode.com>
431
432         * providers/imap/camel-imap-store.c (get_folder): Prevent a coredump
433         when get_folder()ing from a store with dir_sep = NULL.
434
435 2000-08-04  Peter Williams  <peterw@helixcode.com>
436
437         * camel-store.h: Include camel-object.h. Ettore said this wasn't
438         compiling.
439
440 2000-08-04  Not Zed  <NotZed@HelixCode.com>
441
442         * camel-url.c (camel_url_set_protocol): 
443         (camel_url_set_host): 
444         (camel_url_set_path): 
445         (camel_url_set_port): Url editing functions.
446
447 2000-08-04  Dan Winship  <danw@helixcode.com>
448
449         * providers/pop3/camel-pop3-folder.c (pop3_set_message_flags): 
450         (pop3_sync): Indexes into the flags array are message_number minus
451         1, not just message_number.
452
453         * providers/pop3/camel-pop3-store.c: add a debugging macro for
454         doing protocol tracing.
455
456 2000-08-03  Jeffrey Stedfast  <fejj@helixcode.com>
457
458         * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Only
459         call imap_get_summary_internal if the folder can hold messages
460
461         * providers/nntp/camel-nntp-provider.c (camel_provider_module_init): 
462         Initialize the service_cache for the news/nntp providers
463
464 2000-08-03  Peter Williams  <peterw@helixcode.com>
465
466         * providers/nntp/Makefile.am (INCLUDES): Add -I$(top_srcdir) to
467         pull in libibex/ibex.h
468
469 2000-08-02  Not Zed  <NotZed@HelixCode.com>
470
471         * providers/mh/camel-mh-summary.c (camel_mh_summary_sync): Expunge
472         from the end, so the index isn't messed up when you remove a
473         message.
474
475         * providers/mh/camel-mh-folder.c (mh_append_message): Fix a bug
476         where it would never open an output file/uid.
477
478         * providers/mbox/camel-mbox-store.c (rename_folder):
479         Implementation for mbox as well.
480
481         * camel-store.c (camel_store_rename_folder): New method to rename folders.
482         (rename_folder): Default implementation.
483
484         * providers/mh/camel-mh-store.c (delete_folder): Implement this.
485         (rename_folder): Implement a rename operation.
486
487 2000-08-02  Dan Winship  <danw@helixcode.com>
488
489         * providers/MH: Kill this. It doesn't have any code to do anything
490         the new mh provider doesn't do better.
491
492         * providers/Makefile.am: Remove reference to MH subdir, and
493         promote nntp to fully-supported status, since it does compile and
494         all.
495
496         * camel-mime-message.c (camel_mime_message_set_subject): Trim
497         trailing space from the subject. I've now seen replies from two
498         different people that tricked the threading code by (a) not having
499         References/In-Reply-To, and (b) adding an extra space to the end
500         of the subject line so the subject-based threading fails too. Who
501         writes these broken mailers anyway?
502
503 2000-08-01  Jeffrey Stedfast  <fejj@helixcode.com>
504
505         * providers/smtp/camel-smtp-transport.c (smtp_helo): When forced
506         to use the IP, place it in square brackets.
507
508         * providers/imap/camel-imap-utils.c (imap_translate_sexp): New and
509         improved sexp parser. An honest try at using e-sexp is wrapped in
510         a #ifdef at the bottom of the file but is currently not used
511
512         * providers/imap/camel-imap-folder.c (imap_search_by_expression):
513         We want to do a UID SEARCH so we get UIDs back instead of sequence
514         numbers
515
516 2000-08-01  Not Zed  <NotZed@HelixCode.com>
517
518         * providers/mh: New mh provider implementation.
519
520         * providers/Makefile.am (SUBDIRS): Added mh provider.
521
522 2000-07-31  Jeffrey Stedfast  <fejj@helixcode.com>
523
524         * providers/imap/camel-imap-folder.c (imap_get_message_info_internal): 
525         Some IMAP servers don't wrap the UID in ()'s so don't depend on that
526         (imap_get_summary_internal): Same
527
528         * providers/imap/camel-imap-utils.c (free_sexp_node): Oops, forgot to
529         free node->function - not good.
530
531 2000-07-31  Peter Williams  <peterw@helixcode.com>
532
533         * providers/vee/camel-vee-folder.c (vee_search_by_expression): Add
534         a NULL to the matches pointer array so that g_strfreev knows where
535         the end is.
536
537 2000-07-31  Jeffrey Stedfast  <fejj@helixcode.com>
538
539         * providers/imap/camel-imap-utils.c (imap_translate_sexp): New
540         convenience function to translate a Camel sexp into the equivalent
541         IMAP sexp.
542
543         * providers/imap/camel-imap-store.c: More places now use
544         imap_next_word
545
546         * providers/imap/camel-imap-folder.c (imap_search_by_expression):
547         Implemented initial version (this may or may not work quite right)
548
549 2000-07-28  Jeffrey Stedfast  <fejj@helixcode.com>
550
551         * providers/imap/camel-imap-folder.c (imap_expunge): Make sure
552         the third word/token (whatever) is "EXPUNGE" and not something
553         else like "EXISTS" or "RECENT". When removing the message from
554         the summary also make sure to free that data to avoid leakage.
555         Also make sure to subtract 1 from the 'id' since IMAP starts
556         at 1 and our summary starts at 0 :-)
557
558 2000-07-28  Jeffrey Stedfast  <fejj@helixcode.com>
559         
560         * providers/imap/camel-imap-store.c (camel_imap_status): Cleaned
561         up a bit, now uses imap_next_word()
562         (camel_imap_command_extended): Now uses imap_next_word(). When
563         checking for RECENT, allow the first digit of the recent-count
564         be between 0 and 9 inclusive instead of exclusive.
565
566         * providers/imap/camel-imap-folder.c (imap_expunge): Optimized.
567         No longer will it need to reload the summary as it now instead
568         removes the appropriate message summaries from the cache.
569         (camel_imap_folder_changed): If recent == 0 then return. If 
570         recent < 0 then just emit the folder_changed signal, don't reload
571         summaries.
572
573 2000-07-28  Jeffrey Stedfast  <fejj@helixcode.com>
574
575         * providers/imap/camel-imap-folder.c
576         (imap_get_message_count_internal): Get message count when STATUS
577         is not available.
578         (imap_init): folder->has_search_capability is required for IMAP so
579         should always be set to TRUE (is currently being set to FALSE as
580         I've not yet implemented SEARCH support).
581         (camel_imap_folder_changed): Seem to have fixed my optimization
582         hack
583
584 2000-07-28  Jon K Hellan  <hellan@acm.org>
585
586         * providers/imap/camel-imap-store.h (CamelImapServerLevel): New
587         enum.
588         (CamelImapStore): Added server_level and has_status_capability
589         members.
590
591         * providers/imap/camel-imap-store.c (imap_connect): Detect
592         IMAP4REV1, IMAP4 and STATUS in capability response.
593
594         * providers/imap/camel-imap-folder.c
595         (imap_get_message_count_internal): Use STATUS only if server
596         supports it. TODO: Get message count when STATUS not supported.
597         (imap_get_message, imap_get_summary_internal,
598         imap_get_message_info_internal): Handle IMAP4 as well.
599         (imap_protocol_get_summary_specifier): New function: Make a data
600         item specifier for the header lines we need, appropriate to the
601         server level.
602
603 2000-07-27  Peter Williams <peterw@helixcode.com>
604
605         * camel-mime-utils.c (header_decode_lwsp): More
606         checks for end of string.
607
608         * providers/imap/camel-imap-store.c:
609         (imap_command_extended): Free the elements of our
610         array (huge mem leak)
611
612         * providers/imap/camel-imap-folder.c:
613         (summary_get_internal): Same as above.
614         
615
616 2000-07-27  Jeffrey Stedfast  <fejj@helixcode.com>
617
618         * providers/imap/camel-imap-folder.c (camel_imap_folder_changed):
619         Fixed my routine to only fetch new headers, my IDs were off by 1
620         on the high end, so when it would fetch the last newly arrived
621         message it would fail and end up fetching all of the summaries
622         because of the corruption.
623
624 2000-07-27  Jeffrey Stedfast  <fejj@helixcode.com>
625
626         * camel-url.c (camel_url_to_string): If the path doesn't begin
627         with a / and there is a host, prepend a / to the path.
628
629 2000-07-27  Jeffrey Stedfast  <fejj@helixcode.com>
630         
631         * providers/imap/Makefile.am: Added camel-imap-utils.[c,h]
632         
633         * providers/imap/camel-imap-utils.[c,h]: Utilities for parsing
634         server responses for use in both camel-imap-store.c and
635         camel-imap-folder.c
636         
637         * providers/imap/camel-imap-folder.c (imap_get_summary_internal):
638         Free all the pointers in the headers array.
639         (imap_get_subfolder_names_internal): Updated to use
640         imap_parse_list_response
641         (imap_parse_subfolder_list): Removed in favor of
642         imap_parse_list_response
643
644         * providers/imap/camel-imap-store.c (camel_imap_command_extended):
645         Free all the pointers in the data array.
646         (imap_connect): Updated to use imap_parse_list_response and fixed
647         a leak
648         (folder_is_selectable): Updated.
649
650 2000-07-27  Jeffrey Stedfast  <fejj@helixcode.com>
651         
652         * providers/imap/camel-imap-folder.c (imap_get_message_info): Now
653         uses a hash table for looking up message info rather than a linear
654         search :)
655
656 2000-07-27  Peter Williams  <peterw@helixcode.com>
657
658         * providers/*/Makefile.am: Don't specify SUBDIRS =
659         [nothing]. Messes up distcheck.
660         
661 2000-07-26  Peter Williams  <peterw@helixcode.com>
662         
663         * camel-mime-parser.c (folder_scan_init): Initialize
664         outbuf to be "" -- it's not guaranteed to be zeroed.
665         
666         * camel-mime-utils.c (header_references_decode): Return
667         if the header is NULL -> or "" <-. Don't do our stupid
668         mailer trick if we point to \0.
669         (header_decode_quoted_string): Don't rip past end of 
670         string!
671         
672 2000-07-26  Dan Winship  <danw@helixcode.com>
673
674         * camel-movemail.c (movemail_external): routine to call an
675         external movemail program.
676         (camel_movemail): Nuke return value, use movemail_external when
677         available and useful, and don't delete "dest" on errors, since
678         it might have started non-empty.
679
680 2000-07-26  Jeffrey Stedfast  <fejj@helixcode.com>
681
682         * camel-url.c (camel_url_to_string): Should now always prepend a '/'
683         before the path if it doesn't already exist.
684
685         * providers/imap/camel-imap-folder.c: Fixed a few compiler warnings
686
687 2000-07-25  Jeffrey Stedfast  <fejj@helixcode.com>
688
689         * providers/imap/camel-imap-folder.c (imap_summary_free): Fixed the
690         real problem that Peter was running into.
691
692 2000-07-25  Dan Winship  <danw@helixcode.com>
693
694         * camel-mime-message.c (write_to_stream): Don't add a Mime-Version
695         header to a message that already has one.
696
697         * camel-internet-address.c (internet_encode): Don't put <>s around
698         addresses with no name part.
699
700 2000-07-25  Peter Williams  <peterw@helixcode.com>
701
702         * providers/imap/camel-imap-folder.c (imap_expunge): Set 
703         imap_folder->summary to NULL after calling imap_summary_free,
704         so we don't get stuck with a junk summary pointer. Should
705         we free it at all?
706
707 2000-07-25  Jeffrey Stedfast  <fejj@helixcode.com>
708
709         * providers/imap/camel-imap-folder.c (camel_imap_folder_changed):
710         Optimized to try and get the new message headers without reloading
711         the entire summary from scratch.
712         (imap_get_summary_internal): Will now sync() before attempting to
713         reload the summary so that flags are set in the reloaded summary
714         as well.
715
716 2000-07-24  Jeffrey Stedfast  <fejj@helixcode.com>
717
718         * providers/imap/camel-imap-store.c (get_folder): Updated to give
719         special attention to the root folder.
720
721         * providers/imap/camel-imap-folder.c
722         (imap_get_subfolder_names_internal): Updated to handle the root
723         folder
724         (imap_get_message_count_internal): return 0 if folder can't hold
725         messages
726         (camel_imap_folder_new): Change so that root folder gets special
727         attention and always gets can_hold_messages set to FALSE
728
729 2000-07-24  Dan Winship  <danw@helixcode.com>
730
731         * camel-folder.c: Remove exceptions from a number of methods that
732         work on what ought to be static data: get_parent_folder,
733         get_parent_store, get_message_count, get_unread_message_count,
734         get_permanent_flags, get_message_flags, set_message_flags,
735         get_message_user_flag, set_message_user_flag, get_uids,
736         get_summary, get_subfolder_names. Turn camel_folder_delete_message
737         into a macro. (Mostly a pull-up from the camel-async branch.)
738
739         * providers/{imap,mbox,nntp,pop3,vee}: Update for CamelFolder
740         changes
741
742 2000-07-24  Jeffrey Stedfast  <fejj@helixcode.com>
743
744         * providers/imap/camel-imap-folder.c (imap_get_message_info): Updated
745         to port easily to the new Camel API
746         (imap_init): Don't SELECT INBOX, we don't need to do that
747
748 2000-07-24  Jeffrey Stedfast  <fejj@helixcode.com>
749
750         * providers/imap/camel-imap-folder.c (camel_imap_folder_new): 
751         Initialize the summary and subfolder listing.
752         (imap_summary_free): Now takes a GPtrArray arg rather than a 
753         CamelImapFolder as it increases it's usefullness for free()'ing
754         temporary summaries.
755         (imap_get_message_count_internal): A new convenience function for
756         getting the actual message count on a server to be used by 
757         imap_get_summary_internal)
758         (imap_get_message_count): Since the Camel API is on the move again, 
759         the future version of this function will not be able to make a
760         call to the store, it must only access previously fetched data (thus 
761         the creation of the _internal function)
762         (imap_get_subfolder_names_internal): Again, because the future version
763         of imap_get_subfolder_names will not take an exception, we must rename
764         this function which will be called by camel_imap_folder_new()
765         (imap_get_subfolder_names): We now return the previously collected
766         subfolder listing that the _internal function fetched previously
767         (imap_get_summary_internal): Again, same idea as the previous _internal
768         functions...
769         (imap_get_summary): Again... now returns a previously aquired summary
770
771         * providers/imap/camel-imap-store.c (imap_noop): This will hopefully
772         prevent the imap store from disconnecting.
773         (imap_connect): Modified to add a gtk timeout event that will call
774         imap_noop() every 10 minutes (we may want to change this time value)
775         (imap_disconnect): Modified to remove the NOOP timeout event from the
776         store.
777         (camel_imap_command_extended): Commented out the code that would try
778         and detect if the store was disconnected and then reconnect if it was
779         needed.
780
781 2000-07-24  Dan Winship  <danw@helixcode.com>
782
783         * camel-folder.[ch]: Remove camel_folder_get_message_uid, which
784         was not used, and not implemented by any provider.
785
786         * providers/nntp/camel-nntp-folder.c: Remove get_message_uid
787         non-implementation.
788
789         * camel-folder-pt-proxy.[ch], camel-arg-collector.c,
790         camel-marshal-utils.[ch]: Bye bye bye.
791
792         * Makefile.am: remove reference to camel-arg-collector.c
793
794 2000-07-23  Jeffrey Stedfast  <fejj@helixcode.com>
795
796         * providers/imap/camel-imap-store.c (imap_disconnect): Made it a
797         little more forgiving. Also set current_folder to NULL as there is
798         no selected folder after a disconnect.
799         (stream_is_alive): Detects whether or not a socket is "alive"
800         (camel_imap_command_extended): Use stream_is_alive() to aid in the
801         detection of a disconnected state.
802
803 2000-07-22  Jeffrey Stedfast  <fejj@helixcode.com>
804
805         * providers/imap/camel-imap-store.c (get_folder): Clear
806         CamelExceptions when appropriate (eg when folder is marked as
807         \NoSelect). Still needs some cleanup and perhaps Dan will have a
808         better way of doing this as this seems like a messy way of
809         handling this.
810
811         * providers/imap/camel-imap-folder.c (imap_get_uids): Took out
812         some debug statements as they are no longer needed.
813
814 2000-07-21  Jeffrey Stedfast  <fejj@helixcode.com>
815
816         * providers/imap/camel-imap-folder.c (imap_get_subfolder_names):
817         Updated to not strip out subfolders that are marked as \NoSelect
818         because this will be correctly handled in store->get_folder from
819         now on.
820
821         * providers/imap/camel-imap-store.c (folder_is_selectable): New
822         convenience function for use in get_folder().
823         (parse_list_response): Now takes a char **flags argument which is
824         needed by folder_is_selectable().
825         (imap_connect): Updated to reflect changes to
826         parse_list_response().
827
828 2000-07-21  Jeffrey Stedfast  <fejj@helixcode.com>
829         
830         * providers/imap/camel-imap-stream.c (stream_read): Updated with
831         some of the same fixes I've made to camel-imap-folder.c like
832         recalculating message part lengths.
833
834         * providers/imap/camel-imap-store.c (camel_imap_command_extended):
835         Rewrote the code to check for "* %d RECENT". Still needs to be
836         modified, but should no longer cause an infinite loop by detecting
837         mis-detecting RECENT messages.
838
839 2000-07-20  Jeffrey Stedfast  <fejj@helixcode.com>
840
841         * providers/imap/camel-imap-folder.c (imap_get_summary):
842         (imap_get_message_info): Oops. Fix UID parser to allow 0 and 9 to
843         be in the range of valid UID chars.
844
845 2000-07-20  Peter Williams  <peterw@helixcode.com>
846
847         * camel-object.c (camel_object_unref): Add a new global mutex
848         'refcount' held when refcounting operations occur.
849
850 2000-07-19  Peter Williams  <peterw@helixcode.com>
851
852         * camel-object.c (camel_type_lock_up): Correct the recursiveness;
853         the locklevel is stored as a private, so each thread has its own
854         idea of the locklevel. Thus one thread can relock, but a different
855         one will think that it's a level 0 and try to lock the type_system
856         mutex.
857
858 2000-07-19  Jeffrey Stedfast  <fejj@helixcode.com>
859
860         * providers/imap/camel-imap-folder.c: General cleanup working
861         towards getting Actions->Expunge working correctly.
862
863         * providers/imap/camel-imap-store.c
864         (cammel_imap_command_extended): Added code to look for "* %d
865         RECENT" and to emit the folder_changed signal if there are any
866         recent messages. Note: this is a hack and needs to be rewritten
867         badly.
868
869 2000-07-19  Jeffrey Stedfast  <fejj@helixcode.com>
870
871         * providers/imap/camel-imap-folder.c (imap_get_summary): If the
872         folder's message count is not the same as the number of summaries,
873         free the old summary and create a new summary.
874
875 2000-07-18  Jeffrey Stedfast  <fejj@helixcode.com>
876
877         * providers/imap/camel-imap-folder.c
878         (camel_imap_folder_class_init): Added in
879         imap_[g,s]et_message_user_flag() methods
880         (imap_get_message_info): Rewrote to use the more efficient way of
881         downloading summary information and also added a UID comparison so
882         that if the UID requested doesn't match the UID received, it
883         returns NULL.  FIXME: When the mailer gets NULL when it requested
884         message info, it seems that it displays a row for that message and
885         when you try and select the blank row, it segfaults.
886
887         * providers/imap/camel-imap-store.c (get_folder): Oops, this
888         should not be checking against "/", it should be checking against
889         dir_sep.
890
891         * providers/imap/camel-imap-folder.c (imap_parse_subfolder_line):
892         Updated to trim out the leading namespace.
893         (imap_get_subfolder_names): Let the subfolder parser trim the
894         namespace off the folder name.
895
896 2000-07-17  Peter Williams  <peterw@helixcode.com>
897
898         * camel-object.c (camel_type_lock_up): New function; the
899         Camel type_system lock is now fakey-recursive, being controlled
900         by a semaphore that goes up and down and is protected by another
901         lock. Theoretically all we need is the lock on the semaphore,
902         but this we catch exceptions "better" (by deadlocking).
903         (camel_type_lock_down): Corresponding to above.
904         (all functions): s,G_LOCK,camel_type_lock_up, etc.
905
906 2000-07-17  Jeffrey Stedfast  <fejj@helixcode.com>
907
908         * providers/imap/camel-imap-store.c (imap_disconnect): Send a
909         "LOGOUT" command.
910
911         * providers/imap/camel-imap-folder.c (imap_get_message): Hacks to
912         get IMAP code to work with CommunigatePro and MS Exchange (and any
913         other servers that send back a UID at the end of each FETCH inside
914         of the main body of the message part).
915         (imap_sync): Un-#if 0 the code that sets the flags on the IMAP
916         server for messages that have changed. Oops, don't mask with
917         DELETED to find out if the message has been answered ;-)
918         (imap_expunge): sync before expunging.
919
920 2000-07-16  Jeffrey Stedfast  <fejj@helixcode.com>
921
922         * providers/imap/camel-imap-store.c: All SELECT calls now pass
923         a NULL folder argument to camel_imap_command_extended() since it's
924         not needed.
925         (imap_connect): Moved service_class->connect() to the point right
926         after a connection is established with the server rather than
927         waiting until the end of the function.
928         (camel_imap_command): Updated the documentation comment
929         (camel_imap_command_extended): Before sending a command, first
930         check to make sure we are connected; if we aren't, then reconnect.
931         Don't strncmp() command with "SELECT" as it's redundant.
932
933         * providers/imap/camel-imap-folder.c: All SELECT calls now pass
934         a NULL folder argument to camel_imap_command_extended() since it's
935         not needed. Also s/camel_imap_command/camel_imap_command_extended as
936         I will probably be doing away with camel_imap_command() or at least
937         only using it for LOGIN and similar commands where the server won't
938         notify us of any recent messages.
939
940 2000-07-15  Jeffrey Stedfast  <fejj@helixcode.com>
941
942         * providers/imap/camel-imap-folder.c (camel_imap_folder_new): 
943         One last fix to get rid of hard-coded "/" directory separators
944
945 2000-07-14  Peter Williams  <peterw@helixcode.com>
946
947         * camel-object.c : Implement 'events', which are suspiciously
948         like signals except without all the marshalling baggage, and
949         with quasi-thread-safety.
950         (camel_object_class_declare_event): New func.
951         (camel_object_hook_event): Ditto.
952         (camel_object_trigger_event): Ditto.
953         (obj_class_init): Declare the "finalize" event.
954         (obj_class_finalize): Free the hashtable of events->preps
955         (obj_finalize): Free the hashtable of events->hooklists
956         (camel_object_unref): Trigger the finalize event (ourselves,
957         to prevent massively unpleasant looping things.)
958         
959 2000-07-14  Peter Williams  <peterw@helixcode.com>
960         
961         * camel-object.c (make_global_classfuncs): Change to return
962         a CamelObjectClass. Change parents to a GSList and free it
963         when done.
964         (camel_object_new): Don't allocate a classfuncs for every object;
965         merely give it a reference to the global_classfuncs. Convert
966         parents to a GSList and free it when done.
967         (camel_object_unref): Don't free the classfuncs. Free the parents
968         list, which is changed to a GSList.
969
970 2000-07-14  Jeffrey Stedfast  <fejj@helixcode.com>
971
972         * string-utils.c (string_unquote): New convenience function
973         to unquote a string if it's encapsulated by "'s
974         
975         * providers/imap/camel-imap-folder.c:
976         * providers/imap/camel-imap-store.c: Made the necessary changes
977         to stop using hard coded directory separators.
978
979 2000-07-13  Dan Winship  <danw@helixcode.com>
980
981         * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load):
982         If the summary is for a smaller mbox, and rebuilding from the
983         last-known end position fails, try rebuilding from the beginning.
984         Deals with the case where the user edits the mbox and makes it
985         bigger, without adding new messages.
986
987 2000-07-13  Peter Williams  <peterw@helixcode.com>
988
989         * camel-object.c: Rewritten to not be based on GtkObject,
990         but a tiny threadsafe ripoff thereof. Objects still cannot
991         be shared across threads, but ref/unref/destroy/new/etc
992         will work. Signals are not implemented because doing it
993         robustly would be a major pain in the butt, but class
994         functions are. There's a small demonstration that it doesn't
995         crash in ./temp-test.c: build it with ./make-test.sh.
996         * camel-stream.c, camel-seekable-stream.c, camel-stream-mem.c:
997         moved over to CamelObject. Proof of concept: two levels of
998         subclass and class functions, all working without coredumps.
999         To port to CamelObject:
1000         - s,GTK_,CAMEL_,g in the cast checks
1001         - s,gtk_type_new,camel_object_new,g
1002         - s,GtkType,CamelType,g
1003         - Change get_type function over to camel_type_declare
1004         - instead of hooking to finalize function, it goes into the
1005           type declaration.
1006         - remove signals.
1007         - instead of GTK_OBJECT(so)->klass, CAMEL_OBJECT_GET_CLASS(so)
1008         - s,gtk_type_class,camel_type_get_global_classfuncs,g
1009         - don't chain finalize handlers; it will be done for you
1010         
1011 2000-07-13  Jeffrey Stedfast  <fejj@helixcode.com>
1012
1013         * providers/imap/camel-imap-folder.c: 
1014         * providers/imap/camel-imap-store.c: If a SELECT fails, set
1015         imap_store->current_folder to NULL so a SELECT is forced before
1016         any message/folder operations are requested. Also, because some
1017         users don't use a namespace, make sure that if the url->path is 
1018         "/" we don't use it when creating the folder_path.
1019         (camel_imap_command[_extended]): Since we allow the passing of
1020         a NULL folder which we can use to bypass a forced SELECT, no need
1021         to check for the individual commands that don't require a folder
1022         to be selected.
1023
1024 2000-07-13  Jeffrey Stedfast  <fejj@helixcode.com>
1025
1026         * providers/imap/camel-imap-folder.c: 
1027         * providers/imap/camel-imap-store.c: Updated to use CAMEL_IMAP_OK, 
1028         CAMEL_IMAP_NO, CAMEL_IMAP_BAD, and CAMEL_IMAP_FAIL rather than the 
1029         ones copied from the POP3 provider. 
1030
1031 2000-07-13  Jeffrey Stedfast  <fejj@helixcode.com>
1032
1033         * providers/imap/camel-imap-folder.c (imap_get_summary): Oops.
1034         If the number of messages in the folder is 0, don't fetch
1035         summaries 1 thru 0, just return an empty summary.
1036         (imap_copy_message_to): Fixed to use message UID and also send
1037         the source folder as an arg to camel_imap_command rather than NULL.
1038         (imap_move_message_to): Same.
1039         (imap_init): If SELECT is successful, we need to set the current
1040         folder to the one selected, this was causing problems with move/copy
1041
1042 2000-07-13  Dan Winship  <danw@helixcode.com>
1043
1044         * camel-service.h: define a set of CAMEL_SERVICE_URL_ALLOW_* flags
1045         parallel to the _NEED_* flags, and make the _NEED_* flags imply
1046         the _ALLOW_* ones.
1047
1048         * providers/imap/camel-imap-store.c (camel_imap_store_init): imap
1049         urls ALLOW_PATH
1050
1051 2000-07-13  Jeffrey Stedfast  <fejj@helixcode.com>
1052
1053         * providers/imap/camel-imap-folder.c (imap_get_summary): New
1054         and improved approach to fetching an entire folder summary
1055         that should be much much faster than the old way as it gets
1056         the entire folder summary in 1 shot rather than requesting
1057         message by message. As with the last update, this version
1058         also only fetches the minimum number of header fields.
1059         (imap_get_summary): Oops, forgot to free the temp 
1060         GPtrArray *headers
1061
1062 2000-07-13  Jeffrey Stedfast  <fejj@helixcode.com>
1063
1064         * providers/imap/camel-imap-folder.c (imap_get_summary): Don't
1065         fetch the entire RFC822 header, just fetch the fields we want.
1066         (imap_get_message_info): Same.
1067
1068 2000-07-13  Not Zed  <NotZed@HelixCode.com>
1069
1070         * camel-mime-filter-basic.c (camel_mime_filter_basic_new_type):
1071         Reset filter on setup.
1072         (reset): When resetting qp encoding, set the state to -1, instead
1073         of 0.
1074
1075         * camel-mime-utils.c (quoted_encode_step): Actually count the
1076         characters output sofar (it never counted any).  Bunch of other
1077         fixes.
1078         (quoted_encode_close): Also flush out final character, if there's
1079         one.
1080
1081 2000-07-12  Jeffrey Stedfast  <fejj@helixcode.com>
1082
1083         Chris forgot to add #include <e-util/e-util.h> to the source files
1084         
1085         * providers/imap/camel-imap-store.c (imap_connect): Fixed Peter's 
1086         fix, we don't want to send a string to a %d.
1087
1088 2000-07-12  Christopher James Lahey  <clahey@helixcode.com>
1089
1090         * camel-folder-search.c, providers/imap/camel-imap-store.c:
1091         Changed from strstrcase to e_strstrcase.
1092
1093         * string-utils.c, string-utils.h: Removed strstrcase (in favor of
1094         e_strstrcase in e-util/e-util.c.)
1095
1096 2000-07-12  Chris Toshok  <toshok@helixcode.com>
1097
1098         * providers/nntp/camel-nntp-folder.c
1099         (nntp_folder_set_message_flags): get the article num out of our
1100         uid and mark it read in the newsrc.
1101         (nntp_folder_get_message): get the message id out of the uid to
1102         fetch the article.
1103
1104         * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): the uid
1105         is now <article-num>,<messageid>
1106         (get_HEAD_headers): same.
1107
1108         * camel-mime-parser.c (folder_scan_step): go to HSCAN_MESSAGE
1109         state when ct->subtype is "news" as well as "rfc822".  this makes
1110         attachments of type "message/news" display properly.
1111
1112 2000-07-12  Dan Winship  <danw@helixcode.com>
1113
1114         * camel-folder.c (camel_folder_free_deep,
1115         camel_folder_free_shallow, camel_folder_free_nop): Useful default
1116         implementations for free_{uids,subfolder_names,summary}.
1117         (free_subfolder_names, free_uids): Make these g_warning-ing
1118         default implementations.
1119
1120         * providers/*/camel-*-folder.c: Use the new functions where
1121         appropriate, remove duplicated code.
1122
1123 2000-07-12  Peter Williams  <peterw@helixcode.com>
1124
1125         * providers/imap/camel-imap-store.c (query_auth_types): Check for
1126         NULL parameters when setting the exception so as to not crash on
1127         Solaris (can't handle a %s passed NULL).
1128         (imap_connect): Same.
1129         
1130 2000-07-12  Jeffrey Stedfast  <fejj@helixcode.com>
1131
1132         * providers/mbox/camel-mbox-folder.c (mbox_delete_message): Use
1133         mbox_set_message_flags () instead of setting the flags by hand. This
1134         fixes the problem of the "message_changed" signal not being emitted
1135         at the correct time.
1136
1137         * providers/imap/camel-imap-folder.c: "folder_changed" signals should
1138         pass a third argument (which is ignored).
1139
1140         * camel-folder.c: Undo gtk signal emits done in set_flags and 
1141         expunge.
1142         (move_message_to): 
1143         (copy_message_to): Create info as a const CamelMessageInfo
1144
1145 2000-07-12  Chris Toshok  <toshok@helixcode.com>
1146
1147         * providers/nntp/Makefile.am: don't add test-newsrc to the build
1148         since it needs libcamel (which isn't built at the time test-newsrc
1149         needs linking.)
1150
1151         * providers/nntp/camel-nntp-utils.c (get_HEAD_headers): fill in
1152         MessageInfo->message_id.
1153         (get_XOVER_headers): same.
1154
1155         * providers/nntp/camel-nntp-folder.c (nntp_folder_init): move
1156         summary loading here.
1157         (nntp_folder_sync): summary/newsrc changes should be stored here.
1158         put a comment to that effect.
1159         (nntp_folder_set_message_flags): don't save the newsrc here.
1160         (nntp_folder_get_uids): use g_ptr_array_index instead of the
1161         cast/addition.
1162         (nntp_folder_get_summary): no need to check if we should generate
1163         the summary here.  already done.
1164         (nntp_folder_get_message_info): implement.
1165
1166         * providers/nntp/camel-nntp-store.c
1167         (camel_nntp_store_get_toplevel_dir): use evolution_dir instead of
1168         computing it ourselves.
1169         (nntp_store_disconnect): call camel_nntp_newsrc_write.
1170         (ensure_news_dir_exists): new function to create the news/<news
1171         server> subdir.
1172         (camel_nntp_store_class_init): hook up connect/disconnect and
1173         finalize.
1174         (nntp_store_connect): if ensure_news_dir_exists fails throw an
1175         exception.
1176
1177 2000-07-12  Peter Williams  <peterw@helixcode.com>
1178
1179         * camel-folder.c (camel_folder_set_message_flags): Emit a message_changed
1180         signal once the flags are set on the message.
1181         (camel_folder_set_user_flag): Ditto.
1182         (camel_folder_expunge): Emit a folder_changed if no exception.
1183
1184 2000-07-12  Jeffrey Stedfast  <fejj@helixcode.com>
1185
1186         * camel-stream.c: Use size_t and ssize_t for read/write methods
1187         
1188         * providers/imap/camel-imap-folder.c (imap_set_message_flags): 
1189         Updated to emit the message_changed signal.
1190         (imap_delete_message): Updated to use imap_set_message_flags ().
1191         (imap_move_message_to): Updated to use imap_set_message_flags ()
1192         and to emit the folder_changed signal on the destination folder.
1193         (imap_copy_message_to): Updated to emit the folder_changed signal 
1194         on the destination folder.
1195         (imap_append_message): Updated to emit the folder_changed signal 
1196         on the destination folder.
1197
1198 2000-07-11  Jeffrey Stedfast  <fejj@helixcode.com>
1199
1200         * camel-folder.c (camel_folder_append_message): Now takes a
1201         flags argument to specify the flags to be set on the message
1202         since we might not necessarily want the flags to be wiped clean.
1203         (move_message_to):
1204         (copy_message_to): Updated to send a flags argument to 
1205         append_message (); currently sends the original message's flags.
1206
1207         * providers/mbox/camel-mbox-folder.c (mbox_append_message): 
1208         * providers/imap/camel-imap-folder.c (imap_append_message): 
1209         Updated.
1210
1211 2000-07-11  Dan Winship  <danw@helixcode.com>
1212
1213         * camel-folder.c: Remove exceptions from a number of methods
1214         that work on what ought to be static data: get_parent_folder,
1215         get_parent_store, get_message_count, get_unread_message_count,
1216         get_permanent_flags, get_message_flags, set_message_flags,
1217         get_message_user_flag, set_message_user_flag, get_message_uid,
1218         get_uids, get_summary, get_subfolder_names. Turn
1219         camel_folder_delete_message into a macro.
1220
1221         * providers/{mbox,pop3,vee}: Update for CamelFolder changes
1222
1223         * providers/Makefile.am: Disable imap and nntp for now
1224
1225 2000-07-11  Jeffrey Stedfast  <fejj@helixcode.com>
1226
1227         * providers/imap/camel-imap-folder.c (imap_search_by_expression): 
1228         This shouldn't return NULL, it should return g_ptr_array_new ()
1229         so the mailer gets what it expects.
1230
1231 2000-07-10  Jeffrey Stedfast  <fejj@helixcode.com>
1232
1233         * camel-folder-summary.c (camel_folder_summary_decode_string): 
1234         Oops, an unsigned integer can never be < 0
1235
1236 2000-07-10  Dan Winship  <danw@helixcode.com>
1237
1238         * providers/vee/camel-vee-folder.c (vee_search_by_expression):
1239         Initialize a variable to make this not crash again. And fix a bug
1240         so it actually does something.
1241
1242 2000-07-10  Jeffrey Stedfast  <fejj@helixcode.com>
1243
1244         * camel-folder-summary.c: Cleaned up a bunch of compile warnings
1245
1246 2000-07-10  Dan Winship  <danw@helixcode.com>
1247
1248         * providers/vee: kill more debugging messages
1249
1250 2000-07-10  Jeffrey Stedfast  <fejj@helixcode.com>
1251
1252         * providers/mbox/camel-mbox-folder.c (mbox_get_unread_message_count): 
1253         * providers/vee/camel-vee-folder.c (vee_get_unread_message_count): 
1254         * providers/imap/camel-imap-folder.c (imap_get_unread_message_count):
1255         Implemented.
1256
1257         * camel-folder.c (camel_folder_get_unread_message_count): New
1258         convenience function to allow the mailer to query the number
1259         of unread messages in a folder (for displaying message stats
1260         in a folder tree?).
1261
1262 2000-07-09  Dan Winship  <danw@helixcode.com>
1263
1264         * camel-mime-utils.c (header_references_dup): New function to copy
1265         a header_references structure.
1266
1267         * camel-folder-summary.c (camel_message_info_dup_to): New function
1268         to (deep) copy the data from one CamelMessageInfo into another.
1269         (camel_message_info_free): And free the data.
1270
1271         * providers/vee/camel-vee-folder.c (vee_sync): Implement. (empty).
1272         (vee_search_by_expression): belatedly update for
1273         camel_folder_search change.
1274         (vee_folder_build): belatedly update for camel_folder_search
1275         change. Use camel_message_info_dup_to and camel_message_info_free
1276         (in particular, so that we get message_id and references info so
1277         vfolders can be threaded).
1278         (vee_folder_build_folder): Ditto.
1279
1280 2000-07-08  Jeffrey Stedfast  <fejj@helixcode.com>
1281
1282         * providers/nntp/camel-nntp-folder.c: 
1283         * providers/nntp/camel-nntp-utils.c: 
1284         * providers/nntp/camel-nntp-store.c: Update to reflect past changes
1285         in the Camel API. Use gtk macro casts wherever possible and use glib's
1286         memory functions instead of standard c's (since they are not 
1287         compatable)
1288
1289         * providers/smtp/camel-smtp-transport.c: 
1290         * providers/imap/camel-imap-store.c: Wrap debug print statements
1291         in a macro
1292
1293         * providers/imap/camel-imap-stream.c (stream_read): Make sure
1294         that we get up to and including the last \n of the mime part.
1295
1296         * providers/imap/camel-imap-folder.c (imap_get_message): Make sure
1297         that we get up to and including the last \n of the mime part.
1298         Wrap debug print statements in a macro.
1299
1300         * providers/imap/camel-imap-stream.c (stream_read): Only cache
1301         the important data (aka the mime part requested and no extra
1302         server response stuff)
1303
1304 2000-07-07  Dan Winship  <danw@helixcode.com>
1305
1306         * camel-mime-utils.c (header_references_decode): Work around
1307         In-Reply-To's with unquoted punctuation. So many broken mailers.
1308
1309         * camel-folder.c (camel_folder_search_by_expression): Make this
1310         return a GPtrArray rather than a GList.
1311
1312         * camel-folder-search.c (camel_folder_search_execute_expression):
1313         * providers/imap/camel-imap-folder.c (imap_search_by_expression):
1314         * providers/mbox/camel-mbox-folder.c (mbox_search_by_expression):
1315         * providers/nntp/camel-nntp-folder.c (nntp_search_by_expression):
1316         Update to return a GPtrArray rather than a GList.
1317
1318 2000-07-07  Jeffrey Stedfast  <fejj@helixcode.com>
1319
1320         * providers/smtp/camel-smtp-transport.c (esmtp_get_authtypes): 
1321         Fixed the parser to actually work
1322
1323 2000-07-06  Dan Winship  <danw@helixcode.com>
1324
1325         * camel-mime-utils.c (header_references_decode): Make this deal
1326         with the full RFC822 References/In-Reply-To format rather than
1327         just the more-nicely-behaved RFC1036 version. (Needed to parse
1328         In-Reply-To headers with extra junk in them.)
1329
1330 2000-07-06  Jeffrey Stedfast  <fejj@helixcode.com>
1331
1332         * providers/imap/camel-imap-folder.c (imap_get_summary): Parse for
1333         more header information to allow message threading in IMAP.
1334         (imap_get_message_info): Same.
1335
1336         * camel-folder-summary.c: Renamed summary_format_* to
1337         camel_summary_format_* and moved them into public scope.
1338
1339         * providers/smtp/camel-smtp-transport.c (smtp_connect): Oops. Don't
1340         pass port # as a string in the error code (if it fails to connect).
1341
1342         * providers/imap/camel-imap-folder.c (imap_append_message): Changed
1343         over to camel_imap_command_extended as that was the source of the
1344         problems - apparently appending replies with more than just 1 line.
1345
1346 2000-07-05  Dan Winship  <danw@helixcode.com>
1347
1348         * camel-folder-search.c (search_header_contains): make header
1349         matching case-insensitive
1350
1351         * camel-folder-summary.c:
1352         * camel-session.c:
1353         * providers/mbox/camel-mbox-folder.c:
1354         * providers/mbox/camel-mbox-summary.c: Remove some non-error case
1355         debugging-type messages.
1356
1357 2000-07-05  Ettore Perazzoli  <ettore@helixcode.com>
1358
1359         * providers/mbox/camel-mbox-summary.c (d): Define to empty so that
1360         we get rid of a ton of debugging messages.
1361
1362 2000-07-05  Jeffrey Stedfast  <fejj@helixcode.com>
1363
1364         * camel-mime-utils.h: Added prototype for uudecode_step
1365
1366         * camel-mime-utils.c (uudecode_step): Cleaned up some junk that
1367         should have been cleaned up when debugging printf's were taken out.
1368
1369 2000-07-05  Ettore Perazzoli  <ettore@helixcode.com>
1370
1371         * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync):
1372         Update the X-Evolution: header even if the in-memory UID and the
1373         saved UID are not the same.  Otherwise mboxes with clashing UIDs
1374         can never be fixed.
1375
1376         * camel-folder-summary.c
1377         (camel_folder_summary_add_from_parser): Add the message to the
1378         summary before doing any ibex stuff.  In fact, this might also
1379         have the side effect of reassigning the UID so it needs to be done
1380         before we start using the UID.
1381
1382         * providers/mbox/camel-mbox-folder.c (mbox_append_message): Add
1383         debugging message to keep track of the UIDs we add.
1384
1385 2000-07-05  Dan Winship  <danw@helixcode.com>
1386
1387         * camel-folder-summary.c: Add "Cc" to summary and bump summary
1388         version number.
1389
1390         * camel-folder-search.c (search_header_contains): make "Cc" a
1391         searchable header.
1392
1393 2000-07-03  Ettore Perazzoli  <ettore@helixcode.com>
1394
1395         * camel-folder-summary.c (camel_folder_summary_next_uid_string):
1396         New.
1397         (camel_folder_summary_add): Use
1398         `camel_folder_summary_next_uid_string()' instead of recomputing
1399         the UID manually here.
1400         (camel_folder_summary_add_from_parser): Likewise.
1401
1402 2000-07-03  Ettore Perazzoli  <ettore@helixcode.com>
1403
1404         * camel-folder-summary.c (camel_folder_summary_set_uid): Removed.
1405
1406 2000-07-03  Dan Winship  <danw@helixcode.com>
1407
1408         * camel-folder-summary.c (message_info_new): Parse In-Reply-To
1409         with header_references_decode, not header_msgid_decode.
1410
1411         * camel-mime-message.c (camel_mime_message_class_init): message
1412         headers are case-insensitive.
1413
1414         * providers/pop3/camel-pop3-store.c (camel_pop3_command): Fix a
1415         bug in error-setting code.
1416         (pop3_connect): Don't re-prompt for password in the KPOP case.
1417         (pop3_get_response): New function, split out from
1418         camel_pop3_command.
1419         (connect_to_server): Use pop3_get_response to parse the greeting
1420         message, and error out appropriately if it's -ERR.
1421
1422 2000-07-02  Dan Winship  <danw@helixcode.com>
1423
1424         * camel-folder.c (camel_folder_freeze, camel_folder_thaw): New
1425         functions to freeze and thaw a folder (to prevent message/folder
1426         changed signals in the middle of a long series of operations).
1427         (camel_folder_class_init): Change signals to GTK_RUN_FIRST.
1428         (message_changed, folder_changed): Add default implementations
1429         that stop the emission and record info for later if the folder is
1430         frozen.
1431
1432         * providers/mbox/camel-mbox-folder.c (mbox_sync): leftover fixes
1433         from the close->sync change: don't destroy the ibex, summary, and
1434         search when syncing.
1435         (append_message): emit "folder_changed" on a successful append.
1436
1437 2000-07-02  Jeffrey Stedfast  <fejj@helixcode.com>
1438
1439         * camel-mime-utils.c (uudecode_step): A rather complex uudecoder
1440         written in the spirit of Zucchi-ness, is it up to par? Only the 
1441         Z-man can tell us :-)
1442
1443 2000-07-01  Dan Winship  <danw@helixcode.com>
1444
1445         * camel-service.c (camel_service_get_name): New method, to return
1446         an end-user-friendly name corresponding to a service. (eg, "POP
1447         service for danw on trna.helixcode.com").
1448
1449         * providers/imap/camel-imap-store.c,
1450         providers/mbox/camel-mbox-store.c,
1451         providers/nntp/camel-nntp-store.c,
1452         providers/pop3/camel-pop3-store.c,
1453         providers/sendmail/camel-sendmail-transport.c,
1454         providers/smtp/camel-smtp-transport.c: Implement.
1455
1456         * providers/imap/Makefile.am: remove unneeded
1457         libcamelimap_la_LDADD.
1458
1459         * providers/pop3/camel-pop3-store.c (connect_to_server): fix the
1460         CAPA-parsing code to not get into an infinite loop.
1461
1462 2000-07-01  Jeffrey Stedfast  <fejj@helixcode.com>
1463
1464         * providers/imap/camel-imap-folder.c (imap_get_message): Fixed
1465         the bug that would sometimes leave part of the server response
1466         tacked on to the end of the message.
1467
1468         * camel-folder.c: Renamed _by_uid methods. Since we no longer
1469         have get-by-number methods, no need to have the _by_uid 
1470         extensions. 
1471         (get_message_by_uid): Renamed to get_message
1472         (delete_message_by_uid): Renamed to delete_message
1473         (summary_get_by_uid): Renamed to get_message_info
1474
1475         * providers/mbox/camel-mbox-folder.c: 
1476         * providers/pop3/camel-pop3-folder.c:
1477         * providers/imap/camel-imap-folder.c:
1478         * providers/vee/camel-vee-folder.c: Updated to reflect
1479         camel-folder changes.
1480
1481 2000-06-30  Jeffrey Stedfast  <fejj@helixcode.com>
1482
1483         * camel-folder.c (camel_folder_copy_message_to): New function, to
1484         copy a message from one folder to another. The default
1485         implementation just uses append_message, but providers can 
1486         implement more efficient versions for use when both folders are on 
1487         the same store.
1488
1489         * broken-date-parser.[c,h]: Utilities for parsing broken
1490         date strings.
1491         
1492         * providers/imap/camel-imap-folder.c (imap_move_message_to): 
1493         (imap_copy_message_to): Implemented.
1494
1495         * camel-mime-utils.c (header_decode_date): Wrote some code to try
1496         and un-mangle broken date formats and then parse that new string 
1497         instead.
1498
1499 2000-06-30  Dan Winship  <danw@helixcode.com>
1500
1501         * camel-folder.c (camel_folder_move_message_to): New function, to
1502         move a message from one folder to another. The default
1503         implementation just uses append_message and delete_message, but
1504         providers can implement more efficient versions for use when both
1505         folders are on the same store.
1506
1507 2000-06-29  Jeffrey Stedfast  <fejj@helixcode.com>
1508
1509         * providers/imap/camel-imap-folder.c (imap_expunge): Should now
1510         print a meaningful error message when it doesn't succeed
1511
1512 2000-06-28  Jeffrey Stedfast  <fejj@helixcode.com>
1513
1514         * providers/imap/camel-imap-store.c (imap_connect): Changed to
1515         keep prompting user for a valid password until it either
1516         authenticates or until Canceled by the user.
1517         (camel_imap_command_extended): Improved speed (replaced the
1518         g_strjoinv call with a faster implementation)
1519
1520         * providers/pop3/camel-pop3-store.c 
1521         (camel_pop3_command_get_additional_data): Fixed.
1522         (pop3_connect): Changed to keep prompting the user for a
1523         password until it either works or until Canceled by the user.
1524
1525         * providers/mbox/camel-mbox-summary.c: General cleanup
1526         (camel_mbox_summary_sync): Fixed a memory leak and added
1527         CamelException handling.
1528
1529         * providers/mbox/camel-mbox-store.c (delete_folder): Fixed a 
1530         memory leak
1531
1532         * providers/mbox/camel-mbox-folder.c (mbox_append_message): 
1533         Default 'off_t seek' to -1 so as to make sure it's initialized
1534         before it's used in the case of a bad stat() call.
1535         (mbox_sync): Updated
1536         (mbox_expunge): Updated
1537
1538 2000-06-27  Jeffrey Stedfast  <fejj@helixcode.com>
1539
1540         * providers/imap/camel-imap-store.c (imap_connect): Move the 
1541         CAPABILITY command here so we don't have to keep checking
1542         each time we open a folder.
1543         (camel_imap_command_extended): If we are doing an EXAMINE,
1544         don't bother doing a SELECT first.
1545
1546         * providers/imap/camel-imap-folder.c (imap_init): Update so
1547         folder->has_search_capability depends on the parent IMAP store
1548         (since this is really dependant on the IMAP implementation and
1549         not the folder)
1550
1551 2000-06-27  Christopher James Lahey  <clahey@helixcode.com>
1552
1553         * providers/smtp/camel-smtp-transport.c: Don't close the filter
1554         stream when done with it (this causes the source stream to close);
1555         Instead, just flush it when done.
1556
1557 2000-06-27  Michael Zucchi  <zucchi@zedzone.mmc.com.au>
1558
1559         * camel-folder-search.c (search_header_contains): Make header
1560         search 'to' match 'to', and not 'from', small typo, fixes #317.
1561
1562 2000-06-26  Christopher James Lahey  <clahey@helixcode.com>
1563
1564         * providers/mbox/camel-mbox-summary.c: Added debugging
1565         information.
1566
1567 2000-06-23  Jeffrey Stedfast  <fejj@helixcode.com>
1568
1569         * providers/imap/camel-imap-store.c: 
1570         * providers/imap/camel-imap-folder.c: Improved folder parsing.
1571         Not specifying a namespace should no longer list the entire
1572         filesystem.
1573
1574 2000-06-22  Chris Toshok  <toshok@helixcode.com>
1575
1576         * providers/nntp/.cvsignore: ignore test-newsrc
1577
1578         * providers/nntp/camel-nntp-store.c,
1579         providers/nntp/camel-nntp-store.h,
1580         providers/nntp/camel-nntp-folder.c,
1581         providers/nntp/camel-nntp-folder.h,
1582         providers/nntp/camel-nntp-utils.c: Bring the nntp provider up to a
1583         state where it builds and is usable with the current camel.  there
1584         are still warts (semi-broken .newsrc file handling, and a lack of
1585         a subscribe ui -- in fact no way to add a new server, really), but
1586         it'll display news messages.
1587
1588         * providers/nntp/Makefile.am (libcamelnntp_la_SOURCES): add
1589         camel-nntp-newsrc.c
1590         (libcamelnntpinclude_HEADERS): add camel-nntp-newsrc.h
1591         also, add test-newsrc stuff.
1592         
1593         * providers/nntp/test-newsrc.c: new file that tests the newsrc
1594         stuff by parsing and regurgitating a .newsrc file for a particular
1595         server.
1596
1597         * providers/nntp/camel-nntp-newsrc.c,
1598         providers/nntp/camel-nntp-newsrc.h: new files, initial support for .newsrc files.
1599
1600 2000-06-22  Jeffrey Stedfast  <fejj@helixcode.com>
1601
1602         * providers/imap/camel-imap-folder.c (imap_get_message_count): 
1603         Oops. Now appends the namespace to the folder before querying
1604         for the number of messages.
1605
1606         * providers/imap/camel-imap-store.c (imap_folder_exists): New
1607         convenience function for use by imap_create().
1608         (get_folder): If folder is specified as "/", we really want
1609         "INBOX".
1610
1611         * providers/sendmail/camel-sendmail-provider.c:
1612         * providers/vee/camel-vee-provider.c:
1613         * providers/smtp/camel-smtp-provider.c:
1614         * providers/mbox/camel-mbox-provider.c:
1615         * providers/pop3/camel-pop3-provider.c:
1616         * providers/imap/camel-imap-provider.c: Updated
1617         
1618         * camel-session.c: Moved service_cache hash table into the
1619         providers.
1620         (service_cache_remove): Updated.
1621         (camel_session_get_service): Updated.
1622
1623         * camel-url.c (camel_url_hash): Took out the hashing of
1624         url->passwd. We don't want this anymore.
1625
1626         * providers/imap/camel-imap-folder.c (imap_init): Took out
1627         references to 'namespace'
1628         (camel_imap_folder_init): Same
1629
1630         * providers/imap/camel-imap-folder.h: No more namespace. We are
1631         instead going to use url->path as the namespace.
1632
1633 2000-06-21  Jeffrey Stedfast  <fejj@helixcode.com>
1634
1635         * providers/imap/camel-imap-store.c (imap_create): Modified to
1636         use the "namespace" (url->path) if it exists.
1637
1638         * providers/imap/camel-imap-folder.c (imap_delete_message_by_uid):
1639         Now just sets the deleted flag on the summary rather than speaking 
1640         directly to the IMAP server. This is both faster and cleaner.
1641
1642 2000-06-21  Dan Winship  <danw@helixcode.com>
1643
1644         * providers/pop3/camel-pop3-store.c (query_auth_types): Fix dumb
1645         bug.
1646
1647 2000-06-21  Jeffrey Stedfast  <fejj@helixcode.com>
1648
1649         * providers/imap/camel-imap-folder.c (imap_get_message_by_uid): 
1650         We are getting mail in IMAP now!! whoo-hoo!. Stripped out the 
1651         filtering so messages may have some dot-stuffing, but the 
1652         filtering can always be added back in later when we know it 
1653         works and isn't the problem.
1654
1655 2000-06-21  Peter Williams  <peterw@curious-george.helixcode.com>
1656
1657         * providers/mbox/camel-mbox-folder.c (mbox_init): Use the basename
1658         of the mailbox so we don't get pathnames like ~/evolution/inbox///movemail.ibex
1659
1660 2000-06-21  Dan Winship  <danw@helixcode.com>
1661
1662         * camel-folder-summary.c (message_info_new): Set date_received
1663         based on the first (most recent) "Received" header.
1664
1665 2000-06-20  Dan Winship  <danw@helixcode.com>
1666
1667         * camel-mime-part.c (write_to_stream): flush the filter stream
1668         before unreffing it, so it will camel_mime_filter_complete.
1669
1670         * camel-stream-filter.c (camel_stream_filter_class_init): Fix a
1671         braino so camel_stream_flush works here.
1672
1673         * camel-stream-mem.c (stream_seek): Fix a bug that resulted in
1674         large attachments being silently dropped.
1675
1676         * providers/pop3/camel-pop3-store.c
1677         (camel_pop3_command_get_additional_data): Don't use g_strjoinv
1678         here, since it is O(n^2) on the length of the output string, and
1679         we can do O(n).
1680
1681         * camel-mime-part-utils.c
1682         (simple_data_wrapper_construct_from_parser): add a CRLF decoder
1683         after the QP/B64 decoder if it's text.
1684
1685 2000-06-20  Jeffrey Stedfast  <fejj@helixcode.com>
1686
1687         * providers/imap/camel-imap-folder.c (imap_get_summary): Only
1688         fetch the summary if the folder summary doesn't already exist.
1689         When the summary *does* exist, start fetching from 1, not 0.
1690         (imap_free_summary): Don't do anything here.
1691         (imap_finalize): Free the summary here instead of in
1692         imap_free_summary().
1693         (imap_set_message_flags): Implemented
1694         (imap_sync): Added code to set flags on messages that have had
1695         their flags changed (however I #if'd it out until we are more
1696         confidant in the IMAP code :)
1697         (imap_summary_get_by_uid): Now parese flags correctly.
1698         (imap_get_summary): Now parese flags correctly. Also correctly
1699         parses the UID correctly.
1700
1701         * camel-url.c (check_equal): No need to check s1 if s2 is NULL
1702         (camel_url_equal): Don't check the passwd component of the url.
1703
1704 2000-06-20  Dan Winship  <danw@helixcode.com>
1705
1706         * camel-folder-summary.c (camel_folder_summary_add): mark the
1707         message info with CAMEL_MESSAGE_FOLDER_FLAGGED if we change the
1708         uid, so the folder will know that it's dirty.
1709
1710 2000-06-20  Jeffrey Stedfast  <fejj@helixcode.com>
1711
1712         * providers/imap/camel-imap-store.c (camel_imap_command_extended): 
1713         Now returns the last line of data that the server sends back as
1714         well. This is needed for commands like SELECT (like Peter pointed
1715         out).
1716         (camel_imap_command): No longer checks for SELECT (no need)
1717
1718         * providers/imap/camel-imap-folder.c: Added namespace stuff
1719         which we will need later on...
1720         (imap_parse_subfolder_line): Convenience function for use in
1721         get_subfolder_names()
1722         (imap_get_subfolder_names): Updated. Also changed it to use LIST
1723         instead of LSUB (temporary change).
1724
1725 2000-06-19  Jeffrey Stedfast  <fejj@helixcode.com>
1726
1727         * providers/imap/camel-imap-folder.c (camel_imap_folder_init): Set
1728         summary equal to NULL.
1729         (imap_get_summary): Store the summary in the ImapFolder
1730         (imap_summary_get_by_uid): If we have a summary cache in the
1731         ImapFolder, first check to see if that message info is in the
1732         cached summary first, if not fetch it directly from the IMAP
1733         server and append it to the summary cache.
1734         (imap_get_message_flags): Don't free the message info that we get
1735         back from summary_get_by_uid as we don't want to be corrupting our
1736         cached summary.
1737
1738 2000-06-19  Peter Williams  <peterw@curious-george.helixcode.com>
1739
1740         * providers/imap/camel-imap-store.c (camel_imap_command{,_extended}): When
1741         SELECT'ing a folder for an IMAP command, use _extended to grab the entire
1742         response (before we just used camel_imap_command and missed the OK codes)
1743
1744 2000-06-18  Jeffrey Stedfast  <fejj@helixcode.com>
1745
1746         * providers/imap/camel-imap-folder.c (imap_summary_get_by_uid): 
1747         Now gets the message flags as it should.
1748         (imap_get_summary): Same as imap_summary_get_by_uid
1749         (imap_get_permanent_flags): Return the permanent flags stored
1750         on the folder.
1751         (imap_get_message_flags): Return message flags associated with
1752         given uid. Note: we may want to somehow cache summary info so
1753         that we don't have to keep querying the IMAP provider in
1754         imap_summary_get_by_uid().
1755
1756 2000-06-17  Jeffrey Stedfast  <fejj@helixcode.com>
1757
1758         * providers/imap/camel-imap-folder.c (imap_free_summary): We were
1759         leaking memory - but not anymore!
1760         (imap_get_summary): We now get the UIDs and the beginnings of the
1761         code to get the message flags as well.
1762
1763 2000-06-17  Dan Winship  <danw@helixcode.com>
1764
1765         * camel-mime-parser.c (folder_scan_header): Don't copy newlines
1766         into the parsed header text, and turn any number of tabs and
1767         spaces after a newline into a single space.
1768
1769 2000-06-17  Jeffrey Stedfast  <fejj@helixcode.com>
1770
1771         * providers/imap/camel-imap-folder.c (imap_init): Should now
1772         correctly do CAPABILITY.
1773
1774 2000-06-17  Dan Winship  <danw@helixcode.com>
1775
1776         * providers/mbox/camel-mbox-summary.c: Add some debugging printfs
1777         when rebulding summary to help figure out why people's summaries
1778         are always being rebuilt.
1779
1780 2000-06-17  Jeffrey Stedfast  <fejj@helixcode.com>
1781
1782         * providers/imap/camel-imap-folder.c (imap_search_by_expression):
1783         Began to implement, need to get information on how to
1784         deconstruct @expression into an IMAP search expression and
1785         parse the results.
1786         (imap_init): Now queries the IMAP provider for CAPABILITY to
1787         determine if SEARCH is implemented or not.
1788
1789         * providers/imap/imap.c: Removed - no longer a need to have
1790         this as an example for anyone interesting to help mecode IMAP
1791         support.
1792         
1793 2000-06-16  Jeffrey Stedfast  <fejj@helixcode.com>
1794
1795         * providers/imap/camel-imap-folder.c (imap_sync): Added code
1796         to expunge if called for (still need to finish coding this).
1797         (imap_get_uids): Implemented.
1798         (imap_get_summary): Found a way to get the date
1799         (imap_summary_get_by_uid): Same.
1800         (imap_free_summary): Implemented.
1801
1802         * string-utils.c (strstrcase): Fixed a compile warning
1803
1804         * providers/imap/camel-imap-summary.c: Removed - we don't
1805         need a CamelImapSummary structure.
1806
1807 2000-06-16  Dan Winship  <danw@helixcode.com>
1808
1809         Move flag handling from CamelMimeMessage to CamelFolder. This
1810         simplifies several flag-handling pieces of code in the mailer, and
1811         lets you change a message's flags without having to fetch the
1812         message body. It also means that fully-constructed
1813         CamelMimeMessages are now essentially constant, which will help
1814         simplify locking issues later since it means two threads
1815         interested in the same message can just work with separate copies
1816         of it.
1817
1818         * camel-mime-message.h (struct _CamelMimeMessage): Removed flags
1819         and user_flags (moved to summary). Removed expunged and
1820         message_number which were unused. Removed message_uid and folder
1821         which are no longer needed in the new scheme.
1822         (struct CamelMimeMessageClass): Removed message_changed signal and
1823         get/set_message_number methods.
1824
1825         * camel-mime-message.c: Updates for CamelMimeMessage changes.
1826         (camel_mime_message_get/set_flags,
1827         camel_mime_message_get/set_user_flag): Replaced with methods in
1828         CamelFolder.
1829         (camel_flag_get, camel_flag_set, camel_flag_list_size,
1830         camel_flag_list_free): Moved verbatim to camel-folder-summary.c
1831         
1832         * camel-folder.c (camel_folder_get/set_message_flags,
1833         camel_folder_get/set_message_user_flag): New methods (and
1834         corresponding useless default implementations)
1835         (camel_folder_class_init): add a message_changed signal
1836
1837         * camel-folder-summary.c (camel_flag_get, camel_flag_set,
1838         camel_flag_list_size, camel_flag_list_free): Moved here from
1839         camel-mime-message.c
1840
1841         * providers/mbox/camel-mbox-folder.c (message_changed): Removed.
1842         (mbox_get_message_flags, mbox_set_message_flags,
1843         mbox_get_message_user_flag, mbox_set_message_user_flag): Tweak
1844         summary bits as appropriate. (Functionality moved here from
1845         message_changed.)
1846         (mbox_get_message_by_uid): Update for CamelMimeMessage changes
1847         (less stuff to initialize).
1848
1849         * providers/imap/camel-imap-folder.c (message_changed): Remove
1850         this. It was just copied from the mbox provider and doesn't deal
1851         with the real IMAP flag stuff anyway. (So there's currently no
1852         flag support in the IMAP provider.)
1853         (imap_get_message_by_uid): Update for CamelMimeMessage changes.
1854
1855         * providers/vee/camel-vee-folder.c: (message_changed): Remove old
1856         one. Add a new one to listen for message_changed on each folder
1857         and re-emit message_changed signals that correspond to messages in
1858         the vfolder.
1859         (vee_get/set_message_flags, vee_get/set_message_user_flag): Proxy
1860         flag setting to the underlying real messages.
1861         (vee_append_message): Removed for now; there's no way to translate
1862         this into the new CamelMimeMessage/CamelFolder scheme, but (a)
1863         there's also no code which would ever call it and (b) we're
1864         probably going want a better interface than append_message for
1865         message drag and drop to work anyway. To be revisited.
1866
1867 2000-06-16  Dan Winship  <danw@helixcode.com>
1868
1869         * camel-mime-utils.c (rfc2047_decode_word): 
1870         * camel-mime-part-utils.c (simple_data_wrapper_construct_from_parser): 
1871         * camel-folder-summary.c (summary_build_content_info): 
1872         KLUDGE! Since neither ETable nor GtkHTML supports UTF-8 yet,
1873         output ISO-8859-1 instead, so Ettore can read his Italian mail. :)
1874         This will be reverted later.
1875
1876 2000-06-15  Jeffrey Stedfast  <fejj@helixcode.com>
1877
1878         * providers/imap/camel-imap-folder.c (imap_get_summary): Started to 
1879         implement - may want to use ENVELOPE instead of BODY.PEEK[HEADER]
1880         (imap_summary_get_by_uid): Started to code, I've got to find a way to 
1881         get the date in time_t format and also get the flags
1882
1883         * string-utils.c (strstrcase): Added this convenience function - I
1884         know about strcasestr() but it's not portable.
1885
1886 2000-06-15  Dan Winship  <danw@helixcode.com>
1887
1888         * camel-service.c: Remove camel_service_connect_with_url. (URLs
1889         must be specified when the service is requested from the session,
1890         so that there can only ever be one service for any URL.)
1891
1892         * camel-folder.c: (camel_folder_open, camel_folder_is_open,
1893         camel_folder_get_mode): Kill. Folders are now always open, and
1894         handle "closing" sorts of operations at sync or finalize time.
1895         (camel_folder_sync): renamed from camel_folder_close. Syncs state
1896         to the store but doesn't necessarily close/disconnect.
1897
1898         * providers/*/camel-*-folder.c: Merge "open" methods into "init"
1899         methods. Rename close to sync and update appropriately.
1900
1901         * providers/imap/camel-imap-store.c: Remove camel_imap_store_open
1902         and camel_imap_store_close, which should not have been copied from
1903         the POP provider (where the exist to work around limitations of
1904         the POP protocol).
1905
1906         * providers/mbox/camel-mbox-summary.c: fix a bug. (don't expunge
1907         deleted messages if called with expunge == FALSE)
1908         
1909         * providers/pop3/camel-pop3-store.c (connect_to_server): Check
1910         server for various interesting extensions.
1911
1912         * providers/pop3/camel-pop3-folder.c (get_uids): If the server
1913         supports UIDL, use real UIDs rather than fake ones.
1914         (etc): Map uids back to numbers appropriately
1915
1916         * providers/mbox/camel-mbox-folder.c (mbox_append_message): Fix to
1917         previous change: make sure the "seek" variable ends up with the
1918         value it should.
1919
1920         * providers/mbox/camel-mbox-summary.c (summary_rebuild): Update
1921         summary mtime as well as size.
1922
1923 2000-06-14  Dan Winship  <danw@helixcode.com>
1924
1925         * providers/mbox/camel-mbox-folder.c (mbox_append_message): if the
1926         mbox doesn't end with a '\n', write one before appending the new
1927         message.
1928
1929 2000-06-14  Jeffrey Stedfast  <fejj@helixcode.com>
1930
1931         * camel-mime-filter-crlf.c (filter): Updated the encoder to allocate 
1932         more memory (since we are also now adding dots). Also updated the
1933         decoder as we have found that it sometimes passes the end of the 
1934         buffer.
1935
1936         * providers/pop3/camel-pop3-folder.c (get_message_by_uid): Took out the
1937         filter code (we already filter in 
1938         camel_pop3_command_get_additional_data)
1939
1940         * camel-folder.c (init): Updated: a separator is now a char* rather 
1941         than a single char because IMAP can have a string for a directory 
1942         separator. Also, since IMAP does not begin with a directory separator,
1943         there is a new argument (path_begins_with_sep) which decides if a 
1944         directory should begin with a directory separator.
1945
1946         * providers/imap/camel-imap-store.c (imap_create): Since, on connect,
1947         Camel tries to create INBOX (which already exists on every IMAP 
1948         provider) we can return TRUE when the folder name is "INBOX".
1949
1950         * providers/vee/camel-vee-folder.c (vee_init): Updated.
1951
1952         * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Updated.
1953
1954         * providers/mbox/camel-mbox-store.c (get_folder): Updated.
1955
1956         * providers/mbox/camel-mbox-folder.c (mbox_init): Updated.
1957
1958         * providers/pop3/camel-pop3-folder.c (camel_pop3_folder_new): Updated.
1959
1960 2000-06-14  Dan Winship  <danw@helixcode.com>
1961
1962         * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync):
1963         Renamed from camel_mbox_summary_expunge. Takes a gboolean saying
1964         whether to expunge or just sync the mbox file. Change some
1965         g_errors to g_warning so we don't abort. Make the quick
1966         X-Evolution updating code lseek around correctly. Update the
1967         mbox mtime in the summary file even in the quick case.
1968
1969         * providers/mbox/camel-mbox-summary.h: make
1970         CAMEL_MESSAGE_FOLDER_NOXEV not conflict with
1971         CAMEL_MESSAGE_FOLDER_FLAGGED defined in camel-mime-message.h
1972
1973         * providers/mbox/camel-mbox-folder.c (mbox_close): call
1974         camel_mbox_summary_sync to save flag state if not expunging.
1975         (mbox_expunge): Update for camel_mbox_summary_expunge rename.
1976
1977 2000-06-13  Jeffrey Stedfast  <fejj@helixcode.com>
1978
1979         * providers/imap/camel-imap-store.c (camel_imap_store_open): 
1980         (camel_imap_store_close): Added.
1981         (camel_imap_command_extended): Fixed a segfault and updated
1982         to use camel_imap_status()
1983         (camel_imap_command): Updated to use camel_imap_status()
1984         (camel_imap_status): New convenience function for parsing
1985         the return status of an IMAP command
1986
1987 2000-06-12  Jeffrey Stedfast  <fejj@helixcode.com>
1988
1989         * providers/imap/camel-imap-folder.c (imap_get_message_by_uid): 
1990         Works like the POP fetch code, should work temporarily until
1991         we get around to coding it the way it "Should Be".
1992
1993         * providers/pop3/camel-pop3-folder.c (get_message_by_uid): Now uses
1994         the camel-mime-filter-crlf decoder when retrieving messages.
1995
1996         * camel-mime-filter-smtp.c: Deprecated.
1997
1998         * providers/smtp/camel-smtp-transport.c (smtp_data): Updated to use
1999         camel-mime-filter-crlf with my 'dot' extension in place of
2000         camel-mime-filter-smtp
2001
2002         * camel-mime-part.c (write_to_stream): Updated to reflect changes
2003         made to camel-mime-filter-crlf.c
2004
2005         * camel-mime-filter-crlf.c (filter): Modified to be able to
2006         encode/decode dots ("\n.\n"<->"\n..\n"). Also fixed the decoder
2007         so that it should no longer get caught in an infinite loop.
2008
2009 2000-06-12  Dan Winship  <danw@helixcode.com>
2010
2011         * providers/*/Makefile.am: don't pass a second (incorrect) -rpath
2012         in addition to the (correct) one automatically provided by
2013         automake.
2014
2015         * camel-mime-filter-crlf.c: New filter to do CRLF<->LF conversion.
2016         (Currently only tested in the LF->CRLF direction.)
2017
2018         * camel-mime-part.c (write_to_stream): if content-type is text,
2019         and it's QP or B64 encoded, pass through the CRLF filter before
2020         the other filter to satisfy the "canonical encoding" rules in the
2021         MIME spec.
2022
2023 2000-06-09  Dan Winship  <danw@helixcode.com>
2024
2025         * camel-session.c (camel_session_query_authenticator): Add another
2026         argument, "mode", which can be CAMEL_AUTHENTICATOR_ASK or
2027         CAMEL_AUTHENTICATOR_TELL, so callers can get the app to un-cache
2028         bad info.
2029
2030         * providers/pop3/camel-pop3-store.c (pop3_connect): uncache the
2031         password if it doesn't work.
2032
2033 2000-06-09  Jeffrey Stedfast  <fejj@helixcode.com>
2034
2035         * providers/imap/camel-imap-stream.c (stream_read): Updated to reflect
2036         changes made in camel-imap-store.c
2037
2038         * providers/imap/camel-imap-store.c (imap_create): No longer checks to
2039         make sure a folder doesn't already exists (as this is no longer needed)
2040         (camel_imap_command): Now takes a CamelFolder argument so it can detect
2041         whether or not it needs to SELECT a folder or not
2042         (camel_imap_command_extended): Same.
2043
2044         * providers/smtp/camel-smtp-transport.c (smtp_connect): Will now always
2045         send EHLO first, if that fails it will fall back on HELO.
2046         (esmtp_get_authtypes): Should now correctly parse authtypes.
2047
2048 2000-06-07  Jeffrey Stedfast  <fejj@helixcode.com>
2049
2050         * providers/imap/camel-imap-summary.c: Now builds (not that it's worth
2051         much yet).
2052         
2053         * providers/imap/camel-imap-folder.c (imap_get_uids): Now uses the 
2054         correct cast to a CamelImapMessageInfo structure (should get rid of 
2055         compile warnings).
2056
2057         * providers/imap/Makefile.am: Added rules to build 
2058         camel-imap-stream
2059         
2060         * providers/imap/camel-imap-store.c (get_folder): Update.
2061         Moved imap_create here.
2062
2063         * providers/imap/camel-imap-folder.c (delete_messages): Remove.
2064         (imap_create): Removed.
2065         (imap_delete): Removed.
2066         (imap_exists): Removed.
2067
2068         * providers/imap/camel-imap-stream.h: Added typedef's for the stream
2069
2070         * providers/imap/camel-imap-stream.c: Modified to build cleanly
2071
2072 2000-06-07  Not Zed  <NotZed@HelixCode.com>
2073
2074         * camel-mime-utils.c (header_msgid_decode_internal): Properly
2075         dereference warning/debug messages.
2076         (header_references_decode): Check we actually have msgid stuff
2077         before trying to decode it ...
2078
2079 2000-06-06  Jeffrey Stedfast  <fejj@helixcode.com>
2080
2081         * camel-imap-stream.[c,h]: Removed
2082
2083         * providers/imap/camel-imap-stream.[c,h]: Relocated to this
2084         location
2085
2086         * providers/imap/camel-imap-summary.c: Added
2087
2088 2000-06-06  Dan Winship  <danw@helixcode.com>
2089
2090         * camel-folder.c: Remove exists, create, delete. A CamelFolder
2091         now always references an existing folder. Remove delete_messages
2092         too since it wasn't being used. Add a "create" flag to
2093         get_subfolder saying whether or not to create the subfolder if it
2094         doesn't yet exist.
2095
2096         * camel-store.c (camel_store_get_folder): Add a "create" flag to
2097         say whether or not to create the folder if it doesn't yet exist.
2098         (camel_store_delete_folder): New method, moved from CamelFolder.
2099         (cache_folder, uncache_folder): Fix up a bit.
2100         (get_folder_name): Explain what this is for.
2101
2102         * providers/mbox/camel-mbox-folder.c: 
2103         * providers/mbox/camel-mbox-store.c: Update. Remove support for
2104         hierarchical folders to simplify this for now, since we're not
2105         using it, and it's not completely clear how they should work in an
2106         ELocalStorage world. Needs to be revisited.
2107
2108         * providers/pop3/camel-pop3-folder.c (delete_messages): Remove.
2109         * providers/pop3/camel-pop3-store.c (get_folder): Update.
2110
2111         * providers/vee/camel-vee-folder.c (exists): Remove.
2112         * providers/vee/camel-vee-store.c (vee_get_folder): Update.
2113
2114 2000-06-06  Jeffrey Stedfast  <fejj@helixcode.com>
2115
2116         * providers/imap/camel-imap-*.[c,h]: Started on getting 
2117         imap to build cleanly (tho some work has not been completed
2118         so it still won't build until camel-imap-summary is finished
2119         along with a few methods in camel-imap-folder)
2120
2121         * camel-stream.[c,h]: Changed the read and write method prototypes
2122         to return an ssize_t type rather than an int and also changed
2123         the 'number of bytes' to read or write to a size_t type
2124
2125         * camel-stream-fs.c: same as above
2126
2127         * camel-stream-mem.c: again, same as above
2128
2129         * camel-stream-buffer.c: same
2130
2131         * camel-imap-stream.[c,h]: Added this new stream, cache's previously 
2132         read data so each successive call will instead read from the cache
2133         
2134 2000-06-05  Dan Winship  <danw@helixcode.com>
2135
2136         * camel-mime-part.c (camel_mime_part_set_disposition): fix
2137         typo/braino (set "Content-Disposition", not "Content-Description")
2138         (camel_mime_part_set_filename): const poison
2139
2140 2000-06-02  Not Zed  <NotZed@HelixCode.com>
2141
2142         * camel-mime-utils.c (base64_encode_step): Ick, damn signs!  Fix a
2143         bug with sign extended bytes.
2144
2145         * camel-mime-filter-smtp.c (filter): Changed layout/logic slightly
2146         (to match From filter)
2147
2148 2000-06-02  Jeffrey Stedfast  <fejj@helixcode.com>
2149
2150         * camel-mime-filter-smtp.c (filter): Fixed the filter so that it 
2151         wouldn't insert garbage under certain conditions.
2152
2153 2000-06-02  Christopher James Lahey  <clahey@helixcode.com>
2154
2155         * camel-session.c: Don't ref the services in the cache.
2156
2157 2000-06-02  Jeffrey Stedfast  <fejj@helixcode.com>
2158
2159         * providers/smtp/camel-smtp-transport.c: Rearanged where debug
2160         fprintf statements we placed so that any data the server sends 
2161         back is printed out before an exception is set and the function
2162         returns.
2163
2164 2000-06-02  Not Zed  <NotZed@HelixCode.com>
2165
2166         * camel-mime-utils.c (header_decode_date): If we get a funny
2167         result, just throw it out.  Basically a fix for the one true
2168         broken TradeClient.
2169
2170 2000-06-01  Not Zed  <NotZed@HelixCode.com>
2171
2172         * camel-folder-summary.c (message_info_free): Free
2173         references/messsage id.
2174         (message_info_save): Save them.
2175         (message_info_load): Load them.
2176         (message_info_new): And get them from the new message.
2177         (CAMEL_FOLDER_SUMMARY_VERSION): Bumped for new changes.
2178
2179         * camel-folder-summary.h: Added references and messageid to
2180         summary.
2181
2182 2000-06-02  Christopher James Lahey  <clahey@helixcode.com>
2183
2184         * camel-session.c: Ref and unref objects in the service cache
2185         properly.
2186
2187         * camel-store.c: Ref the folder when returning it using
2188         lookup_folder.  Used the folder's full name for the key for the
2189         folder cache since that's used to uncache it.
2190
2191 2000-06-02  Dan Winship  <danw@helixcode.com>
2192
2193         Fun with purify.
2194
2195         * providers/pop3/camel-pop3-store.c (pop3_connect): free msg on
2196         success as well as failure.
2197         (camel_pop3_command_get_additional_data): free buf after reading
2198         the last line (".").
2199
2200         * providers/pop3/camel-pop3-folder.c (get_message_by_uid): free
2201         body data after creating the memstream from it (which will copy
2202         the data).
2203
2204         * providers/mbox/camel-mbox-folder.c (mbox_finalize): free summary
2205         and index paths.
2206
2207         * camel-data-wrapper.c (finalize): unref the stream, if it exists.
2208
2209 2000-06-01  Not Zed  <NotZed@HelixCode.com>
2210
2211         * camel-mime-part.c (construct_from_parser): For a message part,
2212         set the default content-type to message/rfc822.  Maybe needs to be
2213         done for multiparts too?
2214
2215 2000-05-31  Not Zed  <NotZed@HelixCode.com>
2216
2217         * camel-mime-message.c (construct_from_parser): Typo in assersion.
2218
2219         * camel-mime-parser.c (folder_scan_step): Use a default type of
2220         message/rfc822 for multipart/digest.  Bug Z192.
2221         (folder_scan_drop_step): Remove warning.
2222
2223 2000-05-30  Not Zed  <NotZed@HelixCode.com>
2224
2225         * providers/mbox/camel-mbox-folder.c (mbox_append_message): Init
2226         filter_from to NULL, for exception case.
2227         (mbox_get_message_by_uid): Cast off_t to long int for diagnostics.
2228
2229         * camel-url.c (camel_url_hash): Hash funciton for using camel
2230         url's as hash keys.
2231         (camel_url_equal): equal function for same.
2232
2233         * camel-session.c (camel_session_finalise): Free cached services.
2234         (camel_session_init): Init service cache.
2235         (service_cache_remove): destroy callback to remove a service from
2236         the cache.
2237
2238         * camel-store.c (get_folder_internal): Remove the extra ref of the
2239         folder.  That seems the right behaviour ...?
2240         (camel_store_get_type): Doh, actually call store init, so the
2241         cache works.
2242         (cache_folder): strdup the folder name!  no wonder it never found
2243         it again.
2244
2245 2000-05-30  Jeffrey Stedfast  <fejj@helixcode.com>
2246
2247         * providers/imap/camel-imap-folder.c: Implemented a few more
2248         methods like imap_append and 1 or 2 others
2249
2250 2000-05-29  Not Zed  <NotZed@HelixCode.com>
2251
2252         * camel-store.c (camel_store_init): Move it to here.  If this
2253         level is going to maintain it, it should set it up.  Lets see what
2254         caching folders breaks :(
2255
2256         * providers/pop3/camel-pop3-store.c (camel_pop3_store_init): Dont
2257         init folder cache here.
2258
2259         * providers/mbox/camel-mbox-summary.c
2260         (camel_mbox_summary_expunge): Make sure we copy messages which are
2261         still intact to the new folder.
2262         (camel_mbox_summary_expunge): Update the frompos as well when
2263         moving the content.
2264         (camel_mbox_summary_expunge): Remove some debug, and dont offset
2265         frompos?
2266
2267         * providers/vee/camel-vee-folder.c (vee_folder_build): Check the
2268         searched folder is open before trying to search it.
2269         (message_changed): Track changes to the source message in the
2270         summary.
2271         (folder_changed): Track folder changes, re-query the folder that
2272         changed, and cascade the changed event as well.
2273         (camel_vee_folder_finalise): Free subfolder and subfolder summary.
2274
2275 2000-05-29  Dan Winship  <danw@helixcode.com>
2276
2277         * camel-service.c (camel_service_new): Fix up some glib
2278         precondition stuff. Try to set the URL in camel_service_new before
2279         checking whether or not it's "empty" so that you can successfully
2280         set "sendmail:" as a URL.
2281
2282 2000-05-28  Dan Winship  <danw@helixcode.com>
2283
2284         * camel-provider.h: Add a domain field to CamelProvider, to say
2285         what kind of data it provides.
2286
2287         * providers/imap/camel-imap-provider.c: 
2288         * providers/mbox/camel-mbox-provider.c: 
2289         * providers/pop3/camel-pop3-provider.c: 
2290         * providers/sendmail/camel-sendmail-provider.c: 
2291         * providers/smtp/camel-smtp-provider.c: Set domain to "mail".
2292
2293         * providers/nntp/camel-nntp-provider.c: Set domain to "news".
2294
2295         * providers/vee/camel-vee-provider.c: Set domain to "vfolder". (So
2296         it doesn't end up being listed as a potential mail source in the
2297         mail config wizard.)
2298
2299         * providers/pop3/camel-pop3-store.c: Split apart password and APOP
2300         auth, since some servers seem to do both, but don't really.
2301         (connect_to_server): Renamed from try_connect. Now actually does
2302         the connection up to the point of checking the greeting for APOP
2303         support.
2304         (query_auth_types): Return APOP, if appropriate. Call
2305         pop3_disconnect after connect_to_server since we don't really want
2306         to be connected.
2307         (pop3_connect): Use connect_to_server rather than duplicating
2308         code. Fix a one-byte buffer overrun in the APOP code.
2309         (pop3_disconnect): Make this able to clean up after a partial
2310         connect.
2311         (connect_to_server): Remove port number from error message since
2312         it's not terribly useful and we were getting it from the wrong
2313         place anyway.
2314
2315         * camel-mime-utils.c (header_address_list_format_append): Use
2316         `foo@bar' rather than `"" <foo@bar>' for email addresses with no
2317         name component.
2318
2319 2000-05-27  Jeffrey Stedfast  <fejj@helixcode.com>
2320
2321         * providers/imap/camel-imap-store.c: Removed 
2322         camel_imap_command_get_additional_data() as it was
2323         completely useless, replaced with 
2324         camel_imap_command_extended() which may eventually replace
2325         camel_imap_command() as well.
2326
2327         * providers/imap/camel-imap-store.h: Modified to reflect
2328         changes made to camel-imap-store.c
2329
2330         * providers/imap/camel-imap-folder.c: Wrote the first of many
2331         methods: camel_imap_init(), imap_open(), imap_expunge(), 
2332         imap_get_message_count(), and imap_get_subfolder_names()
2333
2334 2000-05-26  Dan Winship  <danw@helixcode.com>
2335
2336         * camel-multipart.c (camel_multipart_init): Don't set a default
2337         boundary. Require the caller to do that.
2338         (set_boundary): if boundary is NULL, generate a "random" boundary.
2339
2340         * camel-mime-part-utils.c
2341         (camel_mime_part_construct_content_from_parser): Add a call to
2342         camel_multipart_set_boundary after creating a new multipart.
2343
2344 2000-05-25  Jeffrey Stedfast  <fejj@helixcode.com>
2345
2346         * providers/imap/camel-imap-store.c (try_connect): Removed
2347         Exception code - Pop doesn't seem to set exceptions
2348
2349         * providers/imap/camel-imap-folder.c: Initial code, mostly
2350         just a template for future code
2351
2352         * providers/imap/imap.[c,h]: Source code from my personal
2353         mailer - for reference only!
2354
2355 2000-05-25  NotZed  <NotZed@HelixCode.com>
2356
2357         * camel-mime-part-utils.c
2358         (camel_mime_part_construct_content_from_parser): Replace simple
2359         data wrapper here too, oops.
2360
2361         * Makefile.am (libcamel_la_SOURCES): Removed
2362         camel-simple-data-wrapper again.  Less code to maintain == better
2363         code.
2364         
2365         * camel-data-wrapper.c (construct_from_stream): Fixes for bug
2366         where text attachments dont work.  Made data-wrapper concrete for
2367         the second time.
2368
2369 2000-05-23  NotZed  <NotZed@HelixCode.com>
2370
2371         * providers/vee/camel-vee-folder.c (vee_folder_build_folder):
2372         Update the vfolder details for a single folder.
2373
2374 2000-05-25  Jeffrey Stedfast  <fejj@helixcode.com>
2375
2376         * providers/smtp/camel-smtp-transport.c (_send_to): Took out code
2377         that had been there to reconnect to the server if it was not
2378         already connected - Mailer code was fixed so that this should not
2379         be needed.
2380
2381         * providers/imap/camel-imap-store.[c,h]: Initial code.
2382
2383 2000-05-24  Dan Winship  <danw@helixcode.com>
2384
2385         * camel.h: Re-add camel-simple-data-wrapper.h, which was removed
2386         for some reason.
2387
2388 2000-05-24  Jeffrey Stedfast  <fejj@helixcode.com>
2389
2390         * providers/smtp/camel-smtp-transport.[c,h]: Moved global
2391         variables into struct CamelSmtpTransport to make SMTP
2392         thread-safe
2393
2394         * providers/imap/camel-imap-*.h: Stolen from Mbox. Rough structure
2395         for Imap.
2396         
2397 2000-05-23  Jeffrey Stedfast  <fejj@helixcode.com>
2398
2399         * providers/imap: Added some initial code to the camel tree
2400         for IMAPv4
2401
2402         * providers/imap/.cvsignore: Added to repository
2403
2404         * providers/smtp/camel-smtp-transport.c: Added debug fprintf's
2405         so that testers can provide more information. Tested with simple
2406         messages and a reply to the hello@helixcode.com default message
2407         but should really be tested more.
2408         (smtp_data): Fixed to use data_wrapper_write_to_stream.
2409
2410         * camel-mime-filter-smtp.c (filter): Modified to escape all lines
2411         beginning with a '.' and to place a \r before each \n if one did
2412         not previously exist. Removed code to escape "From " as it was
2413         found to not be needed for SMTP.
2414
2415 2000-05-22  Jeffrey Stedfast  <fejj@helixcode.com>
2416
2417         * providers/smtp/camel-smtp-transport.c (smtp_data): Fixed the 
2418         filtered stream. Fixes for stream changes, updated to use 
2419         camel-mime-filter-smtp.
2420
2421         * Makefile.am: Added camel-mime-filter-smtp.c
2422         
2423         * camel-mime-filter-smtp.[c,h]: Added to camel tree
2424         Smtp filter used to change \n into \r\n, escape lone dots,
2425         and escape "From "'s.
2426
2427 2000-05-19  NotZed  <NotZed@HelixCode.com>
2428
2429         * camel-simple-data-wrapper.c (construct_from_stream): If we
2430         already have been constructed, unref our content.
2431         (write_to_stream): Check we've been constructued, and change for
2432         stream api changes.
2433
2434         * camel-mime-parser.c: Removed exception stuff.
2435
2436         * md5-utils.c (md5_get_digest_from_stream): repaired.
2437
2438         * camel-mime-message.c: Remove exception from write_to_stream, and
2439         fix, and fix formatting.
2440
2441         * providers/sendmail/camel-sendmail-transport.c (_send_internal):
2442         Fix for stream changes.
2443
2444         * providers/pop3/camel-pop3-store.c (camel_pop3_command): Fixes
2445         for stream changes.
2446
2447         * providers/mbox/camel-mbox-folder.c, and elsewhere, fix all
2448         stream api changes.
2449         (mbox_append_message): Use stream_close() now its back.
2450         (mbox_append_message): unref the from filter.
2451
2452         * camel-stream-mem.c: And here.
2453
2454         * camel-stream-fs.[ch]: Here too.
2455
2456         * camel-stream-filter.c: Likewise.  This is getting tedious.
2457
2458         * camel-stream-buffer.c (stream_write): Fix a few little problems.
2459         (stream_close): Reimplement.
2460         (camel_stream_buffer_read_line): Slightly more efficient version,
2461         that also only allocates the right amount of memory for strings.
2462
2463         * camel-seekable-substream.c: Likewise.
2464
2465         * camel-seekable-stream.[ch]: Remove exceptions, fix formatting,
2466         changes for stream (re)fixes.  set_bounds returns an error.
2467
2468         * camel-stream.[ch]: Remove exceptions.  Make flush and reset return
2469         an error code, repair all the screwed up formatting, and put back
2470         close.
2471
2472         * camel-mime-part-utils.c
2473         (camel_mime_part_construct_content_from_parser): And here.
2474
2475         * camel-mime-part.c (camel_mime_part_set_content): And this too.
2476         (write_to_stream): Fixed for stream changes.
2477
2478         * camel.h: Fixed.
2479
2480         * providers/vee/camel-vee-folder.c (vee_search_by_expression):
2481         Implement.  Performs an intersection of the two searches.
2482         (camel_vee_folder_finalise): Unref search folders.
2483         (vee_append_message): Implement append.
2484
2485 2000-05-18  Dan Winship  <danw@helixcode.com>
2486
2487         * camel-folder.c: remove message_number_capability and require uid
2488         capatibility.
2489         (camel_folder_list_subfolders, camel_folder_get_uid_list,
2490         camel_folder_get_subfolder_info, camel_folder_get_message_info):
2491         removed
2492         (camel_folder_get_subfolder_names,
2493         camel_folder_free_subfolder_names): new subfolder interfaces.
2494         (camel_folder_get_uids, camel_folder_free_uids): new uid
2495         interfaces
2496         (camel_folder_get_summary, camel_folder_free_summary): new summary
2497         interfaces
2498
2499         * providers/mbox/camel-mbox-folder.c,
2500         * providers/nntp/camel-nntp-folder.c:
2501         * providers/vee/camel-vee-folder.c: Update for changes
2502
2503         * providers/pop3/camel-pop3-folder.c: Implement get_uids, update
2504         for other changes.
2505
2506 2000-05-18  NotZed  <NotZed@HelixCode.com>
2507
2508         * providers/vee/camel-vee-folder.c: Guess!
2509
2510         * camel-folder-search.c (search_user_flag): Implement user_flag
2511         search term.
2512
2513         * camel-folder-search.h: Added user_flag search capability
2514         (user-flag "blah")
2515
2516         * providers/mbox/camel-mbox-folder.c (mbox_init): Set USER flag in
2517         permanent flags for the folder.
2518
2519 2000-05-17  Dan Winship  <danw@helixcode.com>
2520
2521         * camel-folder.c: Remove unused async open/close and
2522         copy_message_to functions.
2523         Rename functions without initial _. Fix glib preconditions and
2524         gtk-doc comments.
2525
2526 2000-05-17  Dan Winship  <danw@helixcode.com>
2527
2528         * camel-data-wrapper.c: remove get/set_output_stream operations.
2529         They're redundant with write_to_stream, and CamelMimePart and
2530         CamelMimeMessage only implement the latter, meaning that trying to
2531         get_output_stream on a CamelMimeMessage that was built from pieces
2532         rather than being parsed from a stream doesn't work. Anything that
2533         uses get_output_stream can be rewritten to use write_to_stream, so
2534         we'll standardize on that.
2535         (camel_data_wrapper_new): remove this: CamelDataWrapper is
2536         supposed to be an abstract class.
2537         (write_to_stream): remove default implementation. (Moved to
2538         CamelSimpleDataWrapper)
2539         
2540         * camel-simple-data-wrapper.c: resurrect, although it's not really
2541         the same thing it was before. A simple data wrapper, which is
2542         backed by a CamelStream.
2543
2544         * camel-mime-part-utils.c
2545         (simple_data_wrapper_construct_from_parser): Use
2546         construct_from_stream rather than set_output_stream.
2547         (camel_mime_part_construct_content_from_parser): Change
2548         camel_data_wrapper_new to camel_simple_data_wrapper_new.
2549
2550         * camel-mime-part.c (camel_mime_part_set_content): Change
2551         camel_data_wrapper_new to camel_simple_data_wrapper_new.
2552         
2553
2554 2000-05-17  Darin Adler  <darin@eazel.com>
2555
2556         * camel-folder-summary.c: (message_info_load):
2557         Quick fix to get it to compile. I hope I don't get into trouble.
2558
2559 2000-05-17  Dan Winship  <danw@helixcode.com>
2560
2561         * camel.h: Don't include the no-longer-distributed
2562         possibly-to-be-removed headers.
2563
2564         * providers/smtp/camel-smtp-transport.c
2565         (smtp_get_email_addr_from_text): fix an off-by-one error in
2566         address parsing
2567         (smtp_data): use camel_data_wrapper_get_output_stream rather than
2568         data_wrapper->output_stream
2569
2570 2000-05-17  NotZed  <NotZed@HelixCode.com>
2571
2572         * providers/mbox/camel-mbox-folder.c (message_changed): Snoop
2573         changes to user flags on the message into the summary as well.
2574
2575         * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_init):
2576         Changed version init to include the parent class version info
2577         (i.e. add it not overwrite it).
2578
2579         * camel-folder-summary.c (message_info_new): Initialise user_flags
2580         to empty.
2581         (message_info_load): And load user flags.
2582         (message_info_save): And save user flags.
2583         (message_info_free): And free them.
2584         (CAMEL_FOLDER_SUMMARY_VERSION): Bumped file revision.
2585
2586         * camel-folder-summary.h: Added user-flags to summary.
2587
2588         * camel-mime-message.c (camel_mime_message_set_user_flag): Dont
2589         use a hashtable for user flags.
2590         (camel_mime_message_get_user_flag): And changed here too.
2591         (camel_flag_get): New interface to get a flag from a flag
2592         list.  Flag lists are easier to work with than hash tables, and
2593         save memory too.
2594         (camel_flag_set): And set.
2595         (camel_flag_list_free): And free.
2596         (free_key_only): Discard.
2597         (finalize): Remove the flag list.
2598
2599 2000-05-17  Jeffrey Stedfast  <fejj@stampede.org>
2600
2601         * providers/smtp/camel-smtp-transport.c: (smtp_helo): Error
2602         checking on gethostbyaddr() eliminating a possible segfault.
2603
2604 2000-05-16  NotZed  <NotZed@HelixCode.com>
2605
2606         * providers/mbox/camel-mbox-folder.c (mbox_delete_message_by_uid):
2607         Implement.
2608
2609 2000-05-12  NotZed  <NotZed@HelixCode.com>
2610
2611         * camel-movemail.c (camel_movemail): Open the destination with
2612         O_APPEND, so we dont blow away a partially transferred mbox.
2613         (camel_movemail): Loop if we get errno=INTR, and not fail.
2614
2615 2000-05-11  NotZed  <NotZed@HelixCode.com>
2616
2617         * providers/mbox/camel-mbox-summary.c (summary_rebuild): Update
2618         the summarised file size, if everything went ok.
2619         (camel_mbox_summary_expunge): Clear header flags after updating.
2620
2621 2000-05-16  Chris Toshok  <toshok@helixcode.com>
2622
2623         * providers/nntp/camel-nntp-folder.c:
2624         * providers/nntp/camel-nntp-folder.h:
2625         * providers/nntp/camel-nntp-provider.c: 
2626         * providers/nntp/camel-nntp-store.c: 
2627         * providers/nntp/camel-nntp-utils.c: 
2628         * providers/nntp/camel-nntp-utils.h: 
2629         get things working with new camel summary stuff.
2630
2631         * providers/nntp/camel-nntp-summary.c: 
2632         * providers/nntp/camel-nntp-summary.h: 
2633         removed files since camel-folder-summary does all we need.
2634
2635 2000-05-15  Jeffrey Stedfast  <fejj@stampede.org>
2636
2637         * providers/smtp/camel-smtp-transport.c: Added some preliminary
2638         AUTH support.
2639
2640 2000-05-15  Dan Winship  <danw@helixcode.com>
2641
2642         * camel-folder.h: Remove camel_folder_get_summary, which no longer
2643         exists.
2644
2645 2000-05-11  Dan Winship  <danw@helixcode.com>
2646
2647         * Makefile.am: remove some cruft that we're not currently using.
2648
2649         * camel-stream-mem.c (camel_stream_mem_new_with_buffer): Change
2650         to match prototype (size_t vs unsigned int) so it works on 64-bit
2651         machines. Noted by msw.
2652
2653 2000-05-11  NotZed  <NotZed@HelixCode.com>
2654
2655         * providers/mbox/camel-mbox-folder.c (message_changed): Indicate
2656         the summary changed also.
2657
2658 2000-05-11  Jeffrey Stedfast  <fejj@stampede.org>
2659
2660         * providers/smtp/camel-smtp-transport.c: (smtp_helo): 
2661         Updated to more closely comply with RFC 821 standards
2662
2663 2000-05-11  NotZed  <NotZed@HelixCode.com>
2664
2665         * camel-mime-part.c (write_to_stream): Unref the filter after
2666         adding it to the filtering stream.
2667
2668         * providers/mbox/camel-mbox-summary.c
2669         (camel_mbox_summary_finalise): Free the folder path.
2670         (camel_mbox_summary_update): Also save summary when done.
2671         (camel_mbox_summary_expunge): Unindex items when deleting them.
2672         (camel_mbox_summary_expunge): Save the index as well as the
2673         summary.
2674
2675         * camel-folder-summary.c (camel_folder_summary_finalise): Free the
2676         summary path.
2677         (camel_folder_summary_touch): New function, indicate the summary
2678         info changed.
2679         (camel_folder_summary_remove): Dirty here.
2680
2681         * camel-internet-address.c (internet_decode): Free multiple entry
2682         addresses properly.
2683
2684         * camel-mime-utils.c (header_decode_mailbox): Plugged another
2685         memleak, free text after converting it.
2686         (header_decode_addrspec): More leaks plugged.
2687
2688         * camel-mime-message.c (finalize): Free message_uid.
2689         (finalize): Free the recipients hashtable.
2690
2691 2000-05-11    <notzed@helixcode.com>
2692
2693         * camel-folder-summary.c (camel_folder_summary_finalise): Free
2694         summary items and charset filters.
2695
2696 2000-05-10    <notzed@helixcode.com>
2697
2698         * camel-folder-summary.c (camel_folder_summary_finalise): Don't
2699         free stuff in p, after we've free'd p.
2700
2701         * providers/mbox/camel-mbox-folder.c (mbox_append_message): Unref
2702         the stream we created for appending.
2703
2704 2000-05-10  Jeffrey Stedfast  <fejj@stampede.org>
2705
2706         * providers/smtp/camel-smtp-transport.c: (camel_smtp_transport_class_init):
2707         Added initialization for service_class
2708
2709 2000-05-10  Dan Winship  <danw@helixcode.com>
2710
2711         * camel-multipart.c (write_to_stream): fix a stupid typo. Thank
2712         you, C.
2713
2714         * camel-mime-part.c (write_to_stream): don't ref the stream before
2715         wrapper a filter around it, since nothing will ever unref it.
2716
2717 2000-05-10  Christopher James Lahey  <clahey@helixcode.com>
2718
2719         * Makefile.am: Added camel-types.h, camel-folder-pt-proxy.h, and
2720         camel-thread-proxy.h.
2721
2722 2000-05-09  Dan Winship  <danw@helixcode.com>
2723
2724         * providers/sendmail/camel-sendmail-transport.c (_send_internal):
2725         Bleah. Can't fsync a pipe. As a quick kludge, just don't
2726         stream_flush it. The right fix will require bringing back
2727         stream_close though.
2728
2729 2000-05-09  Jeffrey Stedfast  <fejj@stampede.org>
2730         * camel-internet-address.[c,h]: Undid my changes (moved
2731         struct _address back into came-internet-address.c)
2732         * providers/smtp/camel-smtp-transport.c: (_send): changed
2733         from using it's own address manipulation (using struct _address)
2734         to using camel_internet_address_get(). Also some format changes
2735         to keep consistant with the rest of Camel
2736
2737 2000-05-09  Jeffrey Stedfast  <fejj@stampede.org>
2738
2739         * camel-internet-address.[c,h]: Moved struct _address from
2740         camel-internet-address.c to camel-internet-address.h
2741         (hopefully this doesn't break anything...)
2742         * providers/smtp/camel-smtp-transport.c: (_send): now
2743         populates the recipient list with To, Cc, and Bcc addresses.
2744         Should now be able to use this module.
2745
2746 2000-05-09  Dan Winship  <danw@helixcode.com>
2747
2748         * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid):
2749         one more refcounting fix I missed before.
2750
2751 2000-05-08  Jeffrey Stedfast  <fejj@stampede.org>
2752
2753         * providers/smtp/camel-smtp-transport.c: no longer frees memory it
2754         shouldn't, updated to reflect camel-stream changes involving
2755         CamelException (perhaps it should use a different CamelException
2756         variable than is passed to the camel smtp module?)
2757
2758 2000-05-08  Dan Winship  <danw@helixcode.com>
2759
2760         * camel-stream.c (camel_stream_read, camel_stream_write,
2761         camel_stream_flush, camel_stream_reset, camel_stream_printf,
2762         camel_stream_write_to_stream): Use CamelException to signal
2763         failure.
2764         (camel_stream_write_strings): Remove. camel_stream_printf is more
2765         useful in most of the places that used this.
2766         (camel_stream_write_string): Change from macro to function to
2767         prevent problems with double-evaluation.
2768
2769         * camel-seekable-stream.c (camel_seekable_stream_seek,
2770         camel_seekable_stream_set_bounds): Use CamelException.
2771         (reset): Update.
2772
2773         * camel-seekable-substream.c, camel-stream-buffer.c,
2774         camel-stream-filter.c, camel-stream-fs.c, camel-stream-mem.c:
2775         Update.
2776
2777         * camel-stream-fs.c: Remove the virtual init functions and move
2778         the code into the creator functions. Add CamelExceptions to
2779         creation functions that could fail.
2780
2781         * camel-data-wrapper.c (camel_data_wrapper_write_to_stream): Use
2782         CamelException.
2783         * camel-mime-message.c, camel-mime-part.c, camel-multipart.c
2784         (write_to_stream): Update.
2785
2786         * camel-mime-parser.c: add an exception to the mime parser private
2787         data and pass that to stream functions as needed.
2788         
2789         * gmime-content-field.c, md5-utils.c: Update (badly) for stream
2790         changes.
2791         
2792         * camel-exception.h (camel_exception_is_set): convenience macro.
2793
2794         * providers/Makefile.am: disable SMTP for now
2795
2796         * providers/mbox/camel-mbox-folder.c (mbox_append_message): Pass
2797         CamelException to the functions that now need it. Check the
2798         exception after calling camel_stream_flush, and fail if it fails.
2799         (mbox_get_message_by_uid): More updates.
2800
2801         * providers/pop/camel-pop3-folder.c,
2802         providers/pop/camel-pop3-store.c,
2803         providers/sendmail/camel-sendmail/transport.c: Update.
2804
2805
2806 2000-05-08  NotZed  <NotZed@HelixCode.com>
2807
2808         * camel-mime-message.c (process_header): Format From and Reply-To
2809         to at least a decoded string.  Should probably store them as an
2810         camelinternetaddress.
2811
2812         * Merged NEW_SUMMARY branch back to trunk, and resolved conflicts.
2813         
2814         * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_update):
2815         Return status.
2816         (camel_mbox_summary_expunge): Force an update of the summary
2817         before we do anything.
2818         (camel_mbox_summary_expunge): Build new xev line in xevnew, and
2819         free that, and consify xev.
2820         (camel_mbox_summary_load): If we are rebuilding from scratch, make
2821         sure we clear the summary content.
2822
2823         * camel-stream-filter.c (do_close): We NEED a stream close.
2824
2825 2000-05-07  Dan Winship  <danw@helixcode.com>
2826
2827         Make camel not leak like a sieve.
2828
2829         * camel-object.c: New subclass of GtkObject which is now the base
2830         of the Camel object hierarchy. Currently the only difference
2831         between CamelObject and GtkObject is that CamelObjects don't start
2832         out floating.
2833
2834         * *.h: Move a bunch of typedefs to camel-types.h. Standardize on
2835         using <camel/foo.h> in header files rather than <foo.h>, "foo.h",
2836         or "camel/foo.h". Remove some unneeded includes.
2837
2838         * camel-address.c, camel-data-wrapper.c, camel-folder-search.c,
2839         camel-folder-summary.c, camel-folder.c, camel-mime-filter.c,
2840         camel-mime-parser.c, camel-service.c, camel-session.c,
2841         camel-stream.c: These are now subclasses of CamelObject.
2842
2843         * camel-data-wrapper.c (set_output_stream):
2844         * camel-medium.c (set_content_object):
2845         * camel-seekable-substream.c
2846         (init_with_seekable_stream_and_bounds):
2847         * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid): 
2848         remove gtk_object_sink calls.
2849
2850         * camel-stream-buffer.c (init_vbuf): 
2851         * camel-stream-filter.c (camel_stream_filter_new_with_stream):
2852         ref the original stream.
2853
2854         * camel-folder-summary.c (camel_folder_summary_finalise): unref
2855         the filters when finalizing.
2856
2857         * camel-mime-part-utils.c
2858         (simple_data_wrapper_construct_from_parser,
2859         camel_mime_part_construct_content_from_parser):
2860         * camel-mime-part.c (camel_mime_part_set_content): Unref objects
2861         that are created only to be handed off to other objects. If
2862         they're going to be needed later, they will have been additionally
2863         ref'ed by the object that needs them.
2864
2865         * providers/pop3/camel-pop3-folder.c (get_message_by_number):
2866         unref the message stream after creating the data from it.
2867
2868         * camel-stream.c, camel-stream-buffer.c, camel-stream-filter.c,
2869         camel-stream-fs.c, camel-stream-mem.c: Remove camel_stream_close,
2870         since its semantics are dubious (what happens when you close a
2871         stream other people still have references on?).
2872
2873         * providers/nntp/camel-nntp-store.c:
2874         * providers/smtp/camel-smtp-transport.c:
2875         * providers/pop3/camel-pop3-store.c:
2876         replace camel_stream_close calls with gtk_object_unref.
2877
2878         * providers/mbox/camel-mbox-folder.c:
2879         * providers/nntp/camel-nntp-folder.c:
2880         * providers/sendmail/camel-sendmail-transport.c:
2881         replace camel_stream_close with camel_stream_flush +
2882         gtk_object_unref
2883
2884 2000-05-06  Dan Winship  <danw@helixcode.com>
2885
2886         * providers/pop3/camel-pop3-store.c (query_auth_types): A machine
2887         which serves neither POP nor KPOP is not a POP server.
2888
2889         * providers/smtp/camel-smtp-provider.c: Note in the description
2890         that this provider is not yet tested.
2891
2892 2000-05-08    <notzed@helixcode.com>
2893
2894         * camel-mime-part.c (write_to_stream): Free the filter stream when
2895         done.
2896
2897         * camel-mime-parser.c (folder_seek): Make sure we add the \n
2898         terminal when we seek as well (frob!).
2899
2900         * camel-mime-utils.c (header_decode_addrspec): Plug minor memleak.
2901
2902         * camel-mime-part.c (finalize): Free header tables once finished.
2903
2904         * camel-folder-summary.c (camel_folder_summary_remove): Dont try
2905         to access info after its free'd.
2906
2907 2000-05-07  NotZed  <NotZed@HelixCode.com>
2908
2909         * camel-mime-part.c (write_to_stream): Apply encoding to content
2910         part, when writing to a stream *sigh*.
2911
2912         * camel-stream-filter.c (do_write): implement write for the
2913         filtering stream.  Writes shouldn't be mixed with reads.
2914         (do_flush): Implemented flush.  Again write/flush shouldn't be
2915         mixed with reads.  Only flushes if the last op was write.
2916         (do_close): Force flush on close.
2917
2918         * camel-mime-filter.c (filter_run): Oops, make sure we include the
2919         backlen in the total length before passing onto the filter.
2920
2921         * camel-mime-filter-from.c: New filter, munges 'From ' lines into
2922         '>From ', for mbox.
2923
2924         * camel-mime-parser.c (camel_mime_parser_header_remove): New
2925         function to remove the parser's raw header, rather than
2926         manipulating the header directly (wich doesn't work with
2927         mempools).
2928
2929         * camel-mime-utils.c (header_address_list_clear): Fixed some
2930         broken(tm) logic, which would leak entries on multivalued lists.
2931
2932         * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load):
2933         Use ibex_save() to save the ibex.  Makes a big difference to
2934         startup times for very large mailboxes.
2935         (camel_mbox_summary_expunge): Dum de dum, reimplemented.  Designed
2936         to be much more robust, and to stop immediately if anything awry
2937         happens.
2938         (copy_block): Utility function to copy n bytes from one fd to
2939         another.
2940         (header_write): Utility function to write out raw headers to an
2941         fd.
2942         (camel_mbox_summary_update): Incremental summary updater.
2943
2944         * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid):
2945         Dont unref the stream, because of the broken(tm) ref model of gtk
2946         widget that for some odd reason is being perpetuated in camel.  
2947         (mbox_expunge): Reenable expunge again.
2948         (mbox_append_message): Removed the optimised mbox append.  If its
2949         an issue, it can go back later.  Cleaned up a lot, checks error
2950         returns, and automagically translates 'From ' into '>From' as
2951         necessary.
2952
2953 2000-05-07    <notzed@helixcode.com>
2954
2955         * camel-mime-filter.c (filter_run): Oops, forgot to add the
2956         backlen to the pre-buffer (*poof*).
2957
2958 2000-05-07  NotZed  <NotZed@HelixCode.com>
2959
2960         * camel-mime-message.c (construct_from_parser): Allow
2961         HSCAN_FROM_END to terminate the processing of a message.
2962
2963         * camel-folder-summary.c (perform_content_info_load): Ick, dont
2964         try and append a node onto its own list.
2965         (camel_folder_summary_clear): Actually clear the indexes after
2966         we've removed the messages.
2967         (camel_folder_summary_clear): Set dirty if it changes.
2968         (camel_folder_summary_load): Clear dirty.
2969         (camel_folder_summary_save): Only save if dirty.
2970
2971         * providers/mbox/camel-mbox-summary.c (summary_header_load): Oops,
2972         remember to call that parent class first ...
2973         (summary_header_save): Here too.
2974         (camel_mbox_summary_load): Do more checking to verify the index
2975         contents as well as teh summary contents, against the mbox
2976         contents.
2977         (camel_mbox_summary_load): Removed some fo that checking, it needs
2978         more code to work reliably.
2979
2980 2000-05-07    <notzed@helixcode.com>
2981
2982         * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load):
2983         Set the size and mtime of the mbox we indexed once done.
2984
2985         * camel-folder-summary.c (camel_folder_summary_set_index): Dont
2986         write the index if it changes - let the claler fix it (uh, kind of
2987         impacts performance).
2988         (camel_folder_summary_load): close in.
2989
2990         * camel-folder-summary.c (summary_format_string): Check header
2991         exists before trying to strip its leading spaces.
2992
2993 2000-05-06  NotZed  <NotZed@HelixCode.com>
2994
2995         * camel-folder.h: Removed summary info from here, and include
2996         camel-folder-summary.h as well.
2997         
2998         * camel-mime-parser.c (camel_mime_parser_step): Allow it to accept
2999         a NULL databuffer.
3000
3001         * providers/mbox/camel-mbox-summary.c: Totally new file, now
3002         subclasses camel-folder-summary.
3003
3004         * camel-folder-summary.c (message_info_load): Load the uid as a
3005         string.
3006         (message_info_save): And save too.
3007         (camel_folder_summary_clear): New function, clears the contents of
3008         the summary.
3009
3010         * providers/mbox/camel-mbox-folder.c: Fixes for summary changes.
3011         (mbox_get_message_by_uid): Completely redone.  Now cross-checks
3012         the summary information to make sure we get a real message.
3013         (mbox_append_message): Disabled the copy version of append for
3014         now.
3015         (mbox_expunge): Temporarily disabled the expunge function, until
3016         it is put back in camel-mbox-summary.c
3017
3018 2000-05-05  NotZed  <NotZed@HelixCode.com>
3019
3020         * camel-folder-summary.c: And same here ...
3021         (camel_folder_summary_encode_fixed_int32): Ugh, fwrite doesn't
3022         return -1 on error ..
3023         (camel_folder_summary_decode_fixed_int32): Neither deos fread.
3024         (camel_folder_summary_encode_token): Fix here too.
3025         (summary_build_content_info): Use start-headers to get the pos of
3026         the message, not parser_tell(), which might not be what we
3027         expected because of parser_unstep().
3028         (camel_folder_summary_encode_token): Use bserch() to tokenise the
3029         values, rather than a linear search.
3030
3031         * camel-mime-utils.c: Defined out some memory profiling stuff I
3032         left there by mistake.
3033         (header_decode_mailbox): Dont try to append the word part of a
3034         local address if we ran out of words.
3035
3036         * camel-mime-parser.c (folder_scan_content): Apply the fix from
3037         the header scanner to here too.
3038         (folder_scan_header): Only check for end of header if we have
3039         space for it (didn't end the read with a newline)
3040         (folder_scan_header): inptr is the only real thing we need
3041         registerised for performance.  Try to help the compiler be smart
3042         about it ..
3043         (folder_scan_header): Simplified the save header case a tad.
3044
3045         Commented out some memory profiling stuff.
3046
3047 2000-05-05    <notzed@helixcode.com>
3048
3049         * camel-mime-utils.c (header_decode_mailbox): Plug a memory leak.
3050         (header_decode_text): Fixed memory leaks with g_string_append().
3051         (header_encode_string): And here too, and a few other places.  The
3052         glib api is so awful ...
3053         (header_content_type_decode): More memory leaks.
3054
3055 2000-05-05    <notzed@helixcode.com>
3056
3057         * camel-mime-parser.c (folder_scan_init_with_fd): Make sure we
3058         init the end of buffer sentinal!
3059         (folder_scan_init_with_stream): And here too ...
3060
3061 2000-05-04  NotZed  <NotZed@HelixCode.com>
3062
3063         * providers/mbox/camel-mbox-folder.c (summary_get_message_info):
3064         Maxcount is minimum of the max and the requested count, not the
3065         maximum :)
3066
3067         * camel-mime-parser.c (folder_scan_content): Properly set midline,
3068         so we dont falsely catch offset boundary markers (i.e. From inside
3069         content).
3070         (folder_read): Set a sentinal on the end of the read data (\n) so
3071         we dont have to check the buffer boundary in the inner loop.
3072         (mempool_*): New experimental memory management routines, speed
3073         up simple structure parsing by about 25% ... not compiled in by
3074         default.  Something similar may be needed for camel-mime-utils to
3075         address performance issues with g_malloc and friends.
3076
3077         * camel-mime-utils.c: Added a macro w(x) used to wrap all warnings
3078         about mime/rfc violations, so they can be turned off.
3079
3080         * camel-folder-summary.c (summary_build_content_info): Step after
3081         the end of a message ...
3082         Turn into a stand-alone program for testing and profiling.
3083
3084 2000-05-04  Dan Winship  <danw@helixcode.com>
3085
3086         * providers/pop3/camel-pop3-store.c (pop3_connect): Don't fall
3087         back to plaintext passwords if APOP fails, since it should also
3088         fail.
3089
3090 2000-05-04  Dan Winship  <danw@helixcode.com>
3091
3092         * camel-session.c (camel_session_list_providers): New function to
3093         replace camel_provider_scan. Returns a list of either (a) all
3094         currently-loaded providers, or (b) all available providers.
3095
3096         * camel-url.[ch]: Add an "empty" flag to CamelURL (indicating that
3097         it contains only a protocol).
3098
3099         * camel-service.c (camel_service_query_auth_types): Make this take
3100         a CamelException (since it may have to try to connect to the
3101         server, and it might not able to.)
3102
3103         * providers/pop3/camel-pop3-store.c: add KPOP (Kerberized POP)
3104         support. This is mostly so I have two kinds of authmech to play
3105         with instead of just one. (But it does actually work.)
3106
3107         * providers/smtp/camel-smtp-transport.c (query_auth_types): update
3108         for prototype change, but disable the functionality, since it
3109         doesn't really support any auth types yet.
3110         (camel_smtp_transport_get_type): add an object init function to
3111         set the service url_flags.
3112
3113 2000-05-04  NotZed  <NotZed@HelixCode.com>
3114
3115         * providers/mbox/camel-mbox-summary.c: Yes, and anotherone.
3116
3117         * camel-mime-utils.c: And another one.
3118
3119         * camel-mime-part.c: And another one.
3120
3121         * camel-mime-part-utils.c: And another one.
3122
3123         * camel-folder-search.c: And another one.
3124
3125         * camel-mime-parser.c: Reverted a change wihtout a ChangeLog entry.
3126
3127 2000-05-04  NotZed  <NotZed@HelixCode.com>
3128
3129         * camel-folder-summary.[hc]: Yes, CamelFolderSummary is back ...
3130         ... re-usable class to summarise and index any stream or message
3131         and to manage/load/save the created summaries.
3132         
3133         * camel-folder.c: Include string.h to kill a warning.
3134
3135 2000-05-03  Jason Leach  <leach@wam.umd.edu>
3136
3137         * Makefile.am (INCLUDES): add $(UNICODE_CFLAGS) to the INCLUDES,
3138         people who installed libunicde in non-standard include paths need
3139         this.
3140
3141 2000-05-03  NotZed  <NotZed@HelixCode.com>
3142
3143         * camel-folder.h: Added pos/bodypos/endpos to the basic message
3144         content info object.  Size to be removed?  Moved the
3145         messageconentinfo and messageinfo back to camel-folder-summary.h.
3146
3147         * camel-mime-filter-index.c (camel_mime_filter_index_set_ibex):
3148         New function to (re)set the index to use on a filter.
3149
3150         * camel-mime-parser.c (camel_mime_parser_scan_from): Whole bunch
3151         of inline docs.
3152         (camel_mime_parser_drop_step): New function to drop a state from
3153         the parser.  Needs more testing.
3154
3155         * camel-mime-utils.c (rfc2047_decode_word): If the iconv handle is
3156         -1, then dont try and convert (crashes unicode_iconv?).
3157         (rfc2047_decode_word): Use alloca for variables instead of
3158         g_malloc - by the rfc they should always be short.
3159         (rfc2047_decode_word): If we can't do the charset conversion, undo
3160         the quoted-printable/base64 at least?  Should probably convert
3161         unknown characters to the utf-8 unknown character.
3162
3163 2000-05-02  Larry Ewing  <lewing@helixcode.com>
3164
3165         * camel-mime-utils.c (header_decode_date): fix typo when
3166         dereferencing saveoffset.
3167
3168 2000-05-02  NotZed  <NotZed@HelixCode.com>
3169
3170         * camel-folder-search.c: Added some header doco.
3171
3172         * camel.h: REmove gmime-utils.h from here.
3173
3174         * providers/mbox/camel-mbox-search.[ch]: Removed.  Functionally
3175         redundant.
3176
3177         * providers/mbox/camel-mbox-folder.c (mbox_search_by_expression):
3178         Use the new CamelFolderSearch class to do the actual searching,
3179         just setup the search here.
3180
3181         * camel-folder-search.[ch]: A helper class that providers may
3182         subclass to provide their own search functionality, or they can
3183         simply use as is, it supports body searches if an ibex is
3184         supplied, and header searches if a summary is supplied.
3185
3186 2000-05-02  Matt Loper  <matt@helixcode.com>
3187
3188         * Makefile.am: set G_LOG_DOMAIN.
3189         * providers/MH/Makefile.am: same.
3190         * providers/maildir/Makefile.am: same.
3191         * providers/mbox/Makefile.am: same.
3192         * providers/nntp/Makefile.am: same.
3193         * providers/pop3/Makefile.am: same.
3194         * providers/sendmail/Makefile.am: same. 
3195         * providers/smtp/Makefile.am: same.             
3196
3197 2000-05-02  NotZed  <NotZed@HelixCode.com>
3198
3199         * providers/mbox/camel-mbox-search.c
3200         (camel_mbox_folder_search_by_expression): Dont store/remove
3201         current search from the search list.
3202         
3203         * providers/mbox/camel-mbox-folder.h: Removed searches list,
3204         searches are all sync now.
3205
3206         * gmime-utils.[ch]: What the hell, remove it.  This will break the
3207         nntp provider.  The mime parser can be used instead though.
3208         Removed from all code including it (but none were using it).
3209
3210         * gmime-utils.c (_store_header_pair_from_string): Removed bizarre
3211         string_dichotomy version of this.  This code is somewhat redundant
3212         now, and is headed for death anyway.
3213
3214         * gstring-util.c (g_string_dichotomy): Same with this one.
3215         (g_string_clone): Removed a memory leak, g_string_new() allocates
3216         its own memory.
3217         (g_string_append_g_string): Allow to append an empty gstring onto
3218         another gstring, dont abort()!
3219
3220         * string-utils.c (string_dichotomy): Removed this incredibly weird
3221         function.
3222
3223         * camel-folder.c (_create): Replaced the rather obtuse use of
3224         "string_dichotomy" function with a simple strrchr().  Still not
3225         sure it'll work.
3226
3227         * camel-folder-summary.c: cvs removed a long-removed file.
3228
3229         * camel-mime-parser.c (folder_scan_header): Fix the previous
3230         overflow problem properly (can happen in 2 places).
3231         (header_append): A new macro to include the code changed above, so
3232         it only appears in one place.
3233         (folder_scan_step): Change the content type to text/plain if the
3234         multipart is broken.  Doesn't actually change the header though.
3235         (header_append): Also move the header-start tracking stuff here.
3236         Could be a static function to save code.
3237
3238 2000-05-02    <notzed@helixcode.com>
3239
3240         * camel-mime-part-utils.c
3241         (simple_data_wrapper_construct_from_parser): Dont use autofill on
3242         these fucking long function anmes!!!!!!
3243
3244 2000-05-02  NotZed  <NotZed@HelixCode.com>
3245
3246         * providers/mbox/camel-mbox-summary.c
3247         (camel_mbox_summary_expunge): Fix the offset for the summary when
3248         an item is expunged to take account of the From line.
3249
3250 2000-05-01  NotZed  <NotZed@HelixCode.com>
3251
3252         * providers/mbox/camel-mbox-folder.h (CamelMboxFolder): Removed
3253         search_id.
3254
3255         * providers/mbox/camel-mbox-search.c
3256         (camel_mbox_folder_search_cancel): Remove.d
3257         (camel_mbox_folder_search_complete): Removed.
3258         (camel_mbox_folder_search_by_expression): Changed back to sync
3259         api.
3260         (struct _searchcontext): Removed cancelled flag.
3261         (find_context): Removed.
3262         (func_header_contains): Debug out some search stuff.
3263
3264         * providers/mbox/camel-mbox-search.h
3265         (camel_mbox_folder_search_by_expression): Moved back to sync api.
3266
3267         * providers/mbox/camel-mbox-summary.c
3268         (camel_mbox_summary_set_flags_by_uid): New function to update the
3269         flags in the summary.
3270         (camel_mbox_summary_expunge): Expunge messages from a folder.
3271         (offset_content): Re-align offsets of summary when messages
3272         added/removed to an existing summary.
3273         (camel_mbox_summary_remove_uid): Remove a message summary entry by
3274         uid.
3275         (index_folder): Restore flags from X-Evolution header, if they are set.
3276         (index_folder): Make sure we index using a decimal uid, since
3277         thats what everything else indexes off (oops).
3278         Upped SUMMARY_VERSION as a result.
3279         (camel_mbox_summary_expunge): Oops, my wrong, use the string uid
3280         to unindex on.
3281
3282         * providers/mbox/camel-mbox-folder.c (_get_message_by_uid):
3283         Connect to the message_changed signal.
3284         (_init): Set permanent flags to something reasonable.  No user
3285         flags yet ...
3286         (message_changed): If the flags of the message change, update the
3287         flags in the summary.
3288         (mbox_expunge): Implement the expunge.
3289         (camel_mbox_folder_class_init): Renamed all leading _'s to mbox_'s
3290         (mbox_expunge): Emit a folder_changed signal on expunge (uh, even
3291         if it didn't ...)
3292
3293         * camel-folder.c (_finalize): Uh, dont free permanent_flags
3294         anymore (this wouldn't failed anyway, it was a GList !!!)
3295         (camel_folder_search_complete): Removed.
3296         (camel_folder_search_cancel): Removed.
3297         (camel_folder_expunge): Changed to only allow expunge on an open
3298         folder.  It doesn't make sense for mbox, otherwise (?)
3299         (camel_folder_class_init): Added a folder_changed signal.
3300
3301         * camel-folder.h (struct _CamelFolder): Change permanent_flags to
3302         a bitfield.
3303         (list_permanent_flags): Renamed to get_permanent_flags, and
3304         returns a bitfield.
3305         (camel_folder_expunge): Changed expunge to a void type.  The
3306         messages would no longer be useful after they have been removed
3307         ...
3308         (CamelFolderClass): New function summary_get_by_uid() to get a single
3309         summary.
3310         (*search*): Moved back to synchronous search api ... *sigh*
3311         
3312         * camel-folder.h: Removed CamelSearchFunc.
3313
3314         * camel-mime-message.c (set_flag): Removed.
3315         (camel_mime_message_set_flag): Removed.
3316         (get_flag): Removed.
3317         (camel_mime_message_get_flag): Removed.
3318         (add_flag_to_list): Removed.
3319         (get_flag_list): Removed.
3320         (camel_mime_message_get_flag_list): Removed.
3321         (camel_mime_message_get_flags): New interface to get system flags.
3322         (camel_mime_message_set_flags):  " to set ".
3323         (camel_mime_message_get_user_flag): To get a user flag.
3324         (camel_mime_message_set_user_flag): To set a user flag.
3325         (finalize): Hmm, the old one free'd the key and data, not good
3326         when the data is a boolean ...
3327
3328 2000-04-30  Dan Winship  <danw@helixcode.com>
3329
3330         * camel-provider.h: Tweak the definition of CamelProvider. Among
3331         other things, a provider may now be both a store and a transport.
3332
3333         * camel-provider.c: Remove a lot of code we had no intention of
3334         using. This now only contains two functions: camel_provider_init
3335         to read the installed .urls files, and camel_provider_load to
3336         load and register a new provider.
3337
3338         * camel-session.c: Remove more unused code and simplify some of
3339         the remaining code. The list of available provider modules is now
3340         stored in the session, and it handles calling camel_provider_load
3341         to load them as needed. Provider registration is now done by
3342         calling back from the module init routine, which allows a single
3343         module to register providers for multiple URL types.
3344
3345         * providers/*: Update provider structures and init routines for
3346         the new stuff. Add a .urls file to each provider specifying what
3347         urls it handles, and install that with the library.
3348
3349         * providers/nntp/camel-nntp-provider.c: Add hints towards
3350         supporting both news: and nntp: URLs, and using nntp as both a
3351         store and a transport.
3352
3353 2000-04-29  Dan Winship  <danw@helixcode.com>
3354
3355         * camel-internet-address.c (camel_internet_address_get): const
3356         poison
3357
3358         * camel-mime-part-utils.c
3359         (simple_data_wrapper_construct_from_parser):
3360         camel_mime_parser_tell() returns an offset from where it started
3361         parsing, not necessarily from the start of data. Since we're
3362         parsing a bounded seekable_stream, we need to add the stream's
3363         starting bound to camel_mime_parser_tell's return value to
3364         create the substream in the right place.
3365
3366         * camel-seekable-substream.c
3367         (camel_seekable_substream_new_with_seekable_stream_and_bounds):
3368         say CAMEL_STREAM_UNBOUND rather than -1 in doc.
3369
3370         * camel-seekable-stream.c (camel_seekable_stream_seek): Add more
3371         info to docs.
3372
3373 2000-04-28  Dan Winship  <danw@helixcode.com>
3374
3375         * camel-mime-parser.c (folder_scan_header): fix a bug that would
3376         cause corruption with very long headers.
3377
3378 2000-04-27  Ettore Perazzoli  <ettore@helixcode.com>
3379
3380         * providers/pop3/Makefile.am (INCLUDES): Add `-I$(srcdir)/../../..'
3381         to pick the Camel includes.
3382         * providers/sendmail/Makefile.am (INCLUDES): Likewise.
3383
3384         * camel.h: Don't #include <camel/data-wrapper-repository.h> anymore.
3385
3386 2000-04-27  NotZed  <NotZed@HelixCode.com>
3387
3388         * camel-mime-utils.c (check_header): Dont try and check a NULL
3389         header.
3390
3391         * camel-recipient.[ch]: Dead.  Its not pining.
3392
3393         * camel-mime-message.h: Dont include recipients.h anymore.
3394
3395         * camel-mime-message.c (camel_mime_message_add_recipient): Accept
3396         name/address separately, and store in an CamelInternetAddress.
3397         (add_recipient): Removed.
3398         (remove_recipient): Removed.
3399         (remove_recipient_address): Renamed from remove_receipient, works
3400         via address.
3401         (camel_mime_message_remove_recipient_name): New function to remove
3402         by name.
3403         (get_recipients): Removed.
3404         (camel_mime_message_get_recipients): Return a camel-internet-address.
3405         (write_to_stream): No longer write receipients directly.
3406         (write_recipients_to_stream): Removed.
3407         (write_one_recipient_to_stream): Removed.
3408         (camel_mime_message_init): Setup recipients hashtable, rather than
3409         usign the recipients stuff.
3410         (set_recipient_list_from_string): Killed, a violent and lengthy
3411         death.
3412         (process_header): Simplified recipient handling code a lot.
3413         (received_date_str, sent_date_str, reply_to_str, subject_str,
3414         from_str): Removed some oddly-defined global statics.
3415         (camel_mime_message_class_init): Dont initialise above variables
3416         anymore.
3417         (init_header_name_table): Removed, use a table to init this, and
3418         do it in class init (2 lines of code ...).
3419
3420         * camel-news-address.c: Class to represent news addresses -
3421         currently empty, and not built.
3422
3423         * camel-internet-address.h: Class to represent internet (email)
3424         addresses.
3425
3426         * camel-address.h: Abstract class to represent (lists of)
3427         addresses.
3428
3429 2000-04-27  Dan Winship  <danw@helixcode.com>
3430
3431         * camel-mime-part.c (write_to_stream): Revert previous change. I
3432         was confused.
3433
3434         * camel-url.[ch] (camel_url_encode, camel_url_decode): expose
3435         these routines.
3436
3437 2000-04-26  Dan Winship  <danw@helixcode.com>
3438
3439         * camel-mime-part.c (write_to_stream): Only write a newline
3440         between the headers and the content object if the content object
3441         is not a CamelMedium. (If the content is a medium, it may have its
3442         own headers, which then need to go before the blank line.)
3443
3444         * camel-mime-body-part.[ch]: Remove. We weren't using the fields
3445         that made this different from camel-mime-part, so it basically
3446         just forced us to do lots of gratuitous typecasting.
3447
3448         * camel-multipart.[ch]: Use CamelMimePart. Remove the multipart
3449         parent stuff, since we weren't using that either.
3450
3451         * etc: update for CamelMimeBodyPart -> CamelMimePart
3452
3453 2000-04-26  Dan Winship  <danw@helixcode.com>
3454
3455         * camel-medium.c (set_content_object): sink the content object
3456         after referencing it.
3457
3458         * camel-mime-part.c: fix various little things in the handling
3459         of CamelMedium methods. Change camel_mime_part_set_text to the
3460         more generic camel_mime_part_set_content.
3461
3462         * camel.h: sync to current reality
3463
3464         * camel-folder-utils.[ch]: removed
3465
3466         * camel-mime-utils.c (header_format_date): fix format specifier
3467         for time zone. Fix typo in month names array.
3468
3469 2000-04-26  NotZed  <NotZed@HelixCode.com>
3470
3471         * camel-seekable-substream.c (stream_seek): Changed to have
3472         absolute seek semantics, not relative to the bounds.
3473
3474         * camel-seekable-stream.c (reset): When we reset, seek to the
3475         start of the bound, if there is one.
3476         (stream_tell): Make tell virtual.
3477
3478         * camel-stream-filter.c (do_available): Removed.
3479
3480         * camel-stream-buffer.c: Remove leading _'s from static functions.
3481         (stream_read): Renamed from read().  Fancy that conflicting!  (my
3482         boo!)  Others too.
3483
3484         * providers/pop3/camel-pop3-folder.c (get_message_by_number):
3485         Changed to stream_mem interface.
3486
3487         * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): Fixed
3488         for streamfs interface changes, and implement a failure case.
3489         (_append_message): Changed for fs stream interface change.
3490
3491         * camel-multipart.c (print_part): Iterate rahter than callback.  I
3492         hate glists's interface (hence, move this to write_to_stream).
3493         (write_to_stream): Return an error (yuck, this is a royal PITA to
3494         do with the stream write interface).
3495
3496         * camel-mime-message.c: Removed leading _ from static names.
3497
3498         * camel-mime-part.h: construct_from_parser() now returns an error
3499         code.
3500
3501         * camel-mime-part-utils.c
3502         (camel_mime_part_construct_content_from_parser): Changed to use a
3503         camel-data-wrapper instead of a camel-simple-data-wrapper (no
3504         change needed elsewhere?).
3505         (simple_data_wrapper_construct_from_parser): Fixes for stream-mem
3506         interface changes.
3507
3508         * camel-simple-data-wrapper.[ch],
3509         camel-simple-data-wrapper-stream.[ch],
3510         camel-stream-data-wrapper.[ch], removed.  Fixed including of these
3511         files.
3512         
3513         * camel-mime-part.c (camel_mime_part_set_text): Remove the use of
3514         the camel-simple-data-wrapper-stream, just use a mem stream.
3515         (write_to_stream): Renamed from my_*
3516         (construct_from_stream): Return an error on error.
3517
3518         * camel-stream-mem.c (camel_stream_mem_new*): Remove mode
3519         parameter.
3520
3521         * camel-stream-mem.h (enum CamelStreamMemMode): Removed.  It
3522         wasn't used at all.
3523
3524         * camel-data-wrapper.h: Add camel_data_wrapper_new() to create
3525         these.
3526         (write_to_stream, construct_from_stream): Return an error
3527         indicator for success.  Fixed all methods to match (ICK).
3528
3529         * Makefile.am (libcamel_la_SOURCES): Remove
3530         camel-simple-data-wrapper.c, camel-simple-data-wrapper-stream.c,
3531         camel-stream-data-wrapper.c.  Obsoleted by code re-use!
3532
3533         * camel-data-wrapper.c (construct_from_stream): Change the default
3534         implementation to just set the output stream == construction
3535         stream.  Well, this lets me get rid of both simple-data-wrapper
3536         and stream-data-wrapper (unused anyway), and
3537         simple-data-wrapper-stream in one hit.  CamelDataWrapper is now
3538         also a concrete class.
3539         (write_to_stream): Use camel_stream_write_to_stream() to
3540         calculate/return values (and save code).
3541         Include <errno.h> for obvious reasons.
3542
3543         * camel-stream.c (eos): Provide a default implementation of .eos().
3544         (camel_stream_write_to_stream): Make it return an error code on
3545         error.
3546         (camel_stream_printf): Changed to return the number of bytes
3547         written/error.
3548         (camel_stream_available): Removed.
3549
3550         * camel-stream-fs.h (enum CamelStreamFsMode): Removed.  Changed to
3551         use unix modes and so forth (wasn't used for anything but new file
3552         creation and didn't work well either).
3553
3554         * camel-stream-fs.c: Removed leading _'s for names.  And removed
3555         some virtual method 'documentation'.
3556         (destroy): Dont try and close a closed/error fd.  Only report
3557         error if close returns -1.  Moved all the code to finalise(), and
3558         killed this function.
3559         (init_with_fd): Properly setup the seek offset, if it is a
3560         valid and seekable file descriptor.
3561         (init_with_fd_and_bounds): Use off_t for bounds, set bounds on the
3562         seekable stream.
3563         (init_with_name): Return error codes.
3564         (init_with_name_and_bounds): Ditto.
3565         (camel_stream_fs_new_with_name): REturn NULL object if it failed.
3566         (camel_stream_fs_new_with_name_and_bounds): Return NULL object on
3567         failure.  Changed with_name* api's to take unix open style args
3568         and flags.
3569         (read): The bounded stream bounds checking seemed off, simplified
3570         code a bit.
3571         (write): Implement bounds checking for writing, the comment was
3572         wrong, it could make sense to bound writing.  Cleaned up a little.
3573         (available): Gone.
3574         (eos): Removed.  Use CamelStream's implementation now.
3575         (close): Reset the fd to -1, provide a warning for bad usage.
3576         (seek): Cleaned up.  Changed the behaviour a little, the returned
3577         offset is the absolute position in the file, even in bounded
3578         streams.        
3579         (seek): Seek from end mirrors lseek() behaviour (reverse seeking).
3580
3581 2000-04-25  NotZed  <NotZed@HelixCode.com>
3582
3583         * camel-stream-fs.h (struct _CamelStreamFs): Moved bounds and eof
3584         indicator to other parent classes.
3585
3586         * camel-stream.c (camel_stream_printf): New utility
3587         function.  Obvious use.
3588
3589         * camel-stream-mem.c: Removed leading _'s from static func's.
3590         (camel_stream_mem_new_with_byte_array): Fixed for api changes, set
3591         the owner for the byte array to us.
3592         : Removed A bunch of gtk doc stuff for static (implementation) functions.
3593         (available): Removed.
3594         (write): Fixed the write implementation so that seek() works on a
3595         seekable memory stream, as expected.  Seeking past the end of the
3596         buffer has unix semantics (filling with 0).
3597         (available): Removed.
3598         (write): Implement seekable stream bounded stream.
3599         (read): Implement seekable stream bounded stream.
3600         (close): Dont free the stream_mem if we're not the owner.
3601         (seek): Allow to seek beyond the end of memory area,
3602         implement bounds checking.
3603         (seek): Set errno on bad policy.
3604
3605         * camel-stream-mem.h (struct _CamelStreamMem): Changed position to off_t.
3606         (new_with_buffer): Changed len to be a size_t.
3607         (set_buffer, set_byte_array): New interface functions.
3608         (struct _CamelStreamMem): Removed position, it is stored in the
3609         superclass.
3610
3611         * camel-stream.h: Removed some of the seemingly random
3612         whitespace.  Removed the available method (its not
3613         impelemented/useful enough).
3614
3615         * camel-seekable-substream.c
3616         (init_with_seekable_stream_and_bounds): Remove the data_available
3617         stuff, it hasn't been properly implemented/finished, and may never
3618         work (unfortunately *sigh).
3619         (reemit_parent_signal): Removed part of the above change.
3620         (set_bounds): Removed (moved to seekable-stream).
3621         : Fixed up some of the generally unreadable indenting (sorry,
3622         wrapping at 80 characters with
3623         camels_really_long_function_names()
3624         just_doesnt_work_very_well_does_it().
3625         (available): Removed.
3626         (stream_seek): Fixup for object changes.  Make sure we return -1
3627         if the parent stream can't seek.
3628
3629         * camel-seekable-stream.c (ccamel_seekable_stream_set_bounds): New
3630         function to bound any seekable stream.
3631         : Removed _'s.
3632         (camel_seekable_stream_class_init): Implement an init function, to
3633         setup the stream bounds to unbound.
3634
3635         * camel-seekable-stream.h (CamelSeekableStreamClass): New virtual
3636         method set_bounds for seekable streams.
3637         (CAMEL_STREAM_UNBOUND): New define for no bound.
3638
3639         * camel-seekable-substream.h (struct _CamelSeekableSubstream):
3640         Removed sup_bound and inf_bound, moved to CamelSeekableStream (and
3641         renamed, and changed to off_t's).
3642         (new_with_seekable_stream_and_bounds): Use off_t as the bounds.
3643         (CamelSeekableSubstreamClass): Uh, why was the intialiser virtual?
3644         Removed.
3645
3646         * camel-seekable-stream.[ch] (CamelSeekableStreamClass): Changed seek
3647         to accept an off_t as the offset.
3648         (struct _CamelSeekableStream): Renamed cur_pos to position and
3649         changed it to an off_t type.
3650         (enum CamelStreamSeekPolicy): Set to match the SEEK_* constants
3651         from lseek().
3652         (get_current_position): Renamed to tell().
3653
3654         * camel-stream-buffer.h: Commented out set_vbuf - never implemented.
3655
3656 2000-04-25  Dan Winship  <danw@helixcode.com>
3657
3658         * camel-stream-buffer.c (_eos): only return TRUE if the parent is
3659         at eos AND the buffer has been exhausted
3660
3661         * camel-mime-message.c: fix some incorrect macro usage that
3662         resulted in bogus casts
3663
3664 2000-04-24  Dan Winship  <danw@helixcode.com>
3665
3666         * camel-mime-part-utils.c
3667         (simple_data_wrapper_construct_from_parser): fix a cut-and-pasto.
3668
3669         * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): ref
3670         (and sink) the message stream if we're going to unref it later.
3671         Otherwise it could get destroyed while there are still substreams
3672         attached to it. This needs a cleaner solution.
3673
3674         * camel.h: remove data-wrapper-repository.h include(s)
3675
3676 2000-04-24  NotZed  <NotZed@HelixCode.com>
3677
3678         * camel-mime-message.c (construct_from_parser): Allow MESSAGE_END
3679         _or_ EOF as valid termination conditions.
3680
3681         * providers/mbox/camel-mbox-summary.c (message_struct_new): Decode
3682         and then re-encode the addresses, so they are consistently
3683         formatted.
3684
3685         * camel-mime-utils.c (header_decode_mailbox): Store the address in
3686         a _header_address.  And try to get a comment-stored name if there
3687         is one.
3688         (header_decode_address): Actually return an address.
3689         (header_to_decode): Renamed to header_address_decode()
3690         (header_mailbox_decode): New function to get a single mailbox.
3691         (header_mime_decode): Return the major/minor value, as
3692         appropriate.
3693         (header_address_new, and friends): Whole bunch of utility
3694         functions for working with the address thingies.
3695         (header_decode_domain): Free the string header, and dont expand
3696         '.' into ' . '.
3697
3698         * camel.c (camel_init): No longer call
3699         data_wrapper_repository_init.
3700
3701         * camel-medium.c (write_to_stream): Moved (back) to
3702         camel-mime-part.
3703         (add_header):
3704         (set_header):
3705         (remove_header): 
3706         (get_header): Make all these abstract, and spit warnings if
3707         called.  I guess it could manage the list, but well, it doesn't.
3708
3709         * camel-medium.h (struct _CamelMedium): Dont store headers here,
3710         the implementor is the only one who knows their format.
3711         (CamelMediumClass): Changed header values to be void *'s.  They
3712         need not be strings?
3713
3714         * camel-simple-data-wrapper.c (construct_from_stream): And we're
3715         back.  Set the output stream.
3716         (construct_from_parser): Moved to camel-mime-part-utils.
3717
3718         * camel-mime-part-utils.c
3719         (camel_mime_part_construct_content_from_parser): Create the
3720         contents of multipart and simple messages.
3721         (camel_mime_part_construct_content_from_parser): Oops, this was
3722         totally screwed up, try creating the right cotnent on the right
3723         object.
3724
3725         * camel-multipart.c (construct_from_parser): Moved to
3726         camel-mime-part-utils.
3727         (separate_part): Removed.
3728
3729         * camel-mime-part.c (construct_from_stream): Back again!  This now
3730         switches over to using a mime parser for any mime parts, only.
3731         (my_write_to_stream): Write our headers and so forth here.
3732         (add_header): Add header directly, parent class is abstract.
3733         (remove_header): Ditto.
3734         (set_header): Ditto.
3735
3736         * camel-data-wrapper.c (camel_data_wrapper_construct_from_stream):
3737         Remade abstract.
3738         (camel_data_wrapper_construct_from_parser): Moved to
3739         camel_mime_part.
3740
3741         * camel-data-wrapper.h: Put back construct_from_stream.
3742
3743         * camel-mime-part.h: Put construct_from_parser in here, the
3744         data-wrapper shouldn't know about mime.  Ok, so now to undo half
3745         of the last hours changes ... duh.
3746         
3747 2000-04-23  Dan Winship  <danw@helixcode.com>
3748
3749         * camel-mime-utils.c (header_to_decode, header_mime_decode): fix
3750         some obvious minor bugs noted by -Wall.
3751
3752 2000-04-23  NotZed  <NotZed@HelixCode.com>
3753
3754         * providers/pop3/camel-pop3-folder.c (get_message_by_number): Use
3755         construct_from_stream instead of set_input_stream().
3756
3757         * camel-simple-data-wrapper-stream.c
3758         (camel_simple_data_wrapper_stream_construct): REmoved the destroy
3759         callback code.
3760         (wrapper_destroy_cb): Removed.
3761
3762         * camel-simple-data-wrapper.h: Add prototype for _construct()
3763         method.
3764
3765         * camel.c: Include unicode.h to kill a warning.
3766
3767         * camel-data-wrapper.h (CameldataWrapperClass): Removed
3768         construct_from_stream virtual method.
3769         Removed get/set input stream.
3770
3771         * data-wrapper-repository.[ch]: Removed&from build.  Obsoleted?
3772         The justification as is follows: It is mixing storage
3773         protocol/format with message architecture.  It really just doesn't
3774         serve any purpose, as each medium implementor will have to have its
3775         own type->handler mapping, and the only current implementor,
3776         mimepart has a very simple structure and no need for this.
3777
3778         * camel-medium.c (write_to_stream): Moved here from most of the
3779         stuff in camel-mime-part.  Well, the MEDIUM is the one that knows
3780         what the headers are, and the content is, let it write it out.
3781
3782         * camel-mime-part-utils.c (camel_mime_part_construct_content):
3783         Copied from camel-mime-part.c, removed handling of message
3784         followon state (moved to camel-mime-message).
3785         (camel_mime_part_construct_content_from_parser): Renamed from
3786         construct_content.
3787         (camel_mime_part_construct_headers_from_stream):
3788         (camel_mime_part_construct_content_from_stream):
3789         (camel_mime_part_store_stream_in_buffer): Removed.  Replaced by
3790         the new construct from parser stuff.
3791
3792         * camel-mime-message.c (construct_from_parser): Do
3793         construct_from_parser for mime-message.
3794         (_write_to_stream): Set the mime-version header for medium to
3795         write out, rather than writing it out ourselves.
3796
3797         * camel-data-wrapper.c (set_mime_type_field): Ref the
3798         content_field when we get it?
3799         (construct_from_stream): Removed.
3800         (camel_data_wrapper_construct_from_stream): Changed to a helper
3801         function, creates a mime_parser, and constructs from that.
3802         (set_input_stream): Removed.
3803         (camel_data_wrapper_set_input_stream): Removed.
3804         (get_input_stream): Removed.
3805         (camel_data_wrapper_get_input_stream): Removed.
3806
3807         * camel-mime-parser.c (camel_mime_parser_unstep): New function.
3808         Cause a subsequent call to mime_parser_step() to return the same
3809         state over again.
3810
3811         * providers/mbox/camel-mbox-folder.c (_get_message_by_uid):
3812         Initial test code using the mime parser to construct the message.
3813         (_get_message_by_uid): Use construct_from_stream() instead of
3814         creating our own parser.
3815
3816         * camel-mime-part.c (construct_from_parser): part constructor.
3817         (camel_mime_part_construct_content): Basically a simpler
3818         replacement for the datawrapper repository.
3819         (camel_mime_part_init): Set the default type to text/plain.
3820         (camel_mime_part_construct_content): Removed to
3821         camel-mime-part-utils.c
3822         (my_get_output_stream): Removed.  The streeam is in the
3823         data-wrapper.
3824         (my_get_content_object): Removed.  The content object is stored in
3825         the medium.  If none is there, the object wasn't created properly.
3826         (my_write_content_to_stream): Removed.  The content object is the
3827         one that knows how to write itself out!!!!!!!!
3828         (my_write_to_stream): Remove the base header writing stuff - has
3829         been moved to camel-medium, where it belongs.  This can just be
3830         used to check for mandatory headers.
3831         (my_construct_from_stream): Removed.
3832         (my_set_input_stream): What the hell, i'll remove this too.
3833         Nobody seems to understand how it differs from create from stream,
3834         and they both seem to serve the same purpose ...
3835
3836         * camel-simple-data-wrapper.c (construct_from_parser): Initial
3837         implementation of a content constructor.
3838         (construct_from_stream): Removed!  Job taken over by
3839         construct_from_parser.
3840
3841         * camel-multipart.c (construct_from_parser): Multipart
3842         construction routine.
3843         (camel_multipart_init): Set the default multipart type to
3844         multipart/mixed.  Duh, no subtype is not allowed anyway.
3845         (set_input_stream): REmoved.  Replaced by construct_from_parser.
3846
3847 2000-04-22  Dan Winship  <danw@helixcode.com>
3848
3849         * camel-multipart.[ch]: clean, document, etc.
3850         (camel_multipart_init): pick a prettier default boundary. Still
3851         need to deal with the larger problem
3852
3853 2000-04-22  NotZed  <NotZed@HelixCode.com>
3854
3855         * camel-mime-message.h (struct _CamelMimeMessage): Removed
3856         send_date, and received_date, and replaced it with a time_t
3857         'date' (this is what the header is called), and date_offset to
3858         store the GMT offset of the date.
3859
3860         * camel-mime-message.c (camel_mime_message_set_from): Update raw
3861         header as we go.
3862         (_set_from): Removed.
3863         (_get_from): Removed.
3864         (camel_mime_message_get_from): Moved implementation here.
3865         (camel_mime_message_get_subject): Move implementation here.
3866         (_get_subject): Nuked.
3867         (camel_mime_message_set_subject): Handle utf-8 input, and also
3868         update raw header when changed.
3869         (_set_subject): Removed.
3870         (_set_received_date): Removed.
3871         (camel_mime_message_set_received_date): Removed.
3872         (_get_received_date): Removed.
3873         (camel_mime_message_get_received_date): Removed.
3874         (_get_sent_date): Removed.
3875         (camel_mime_message_get_sent_date): Removed.
3876         (camel_mime_message_get_date): New function to get the date as a
3877         time_t/offset.
3878         (camel_mime_message_set_date): Set the date as a time_t/offset.
3879         (camel_mime_message_get_date_string): Get the date as a string.
3880         (camel_mime_message_init): Initialise the current date as
3881         'CMAEL_MESSAGE_DATE_CURRENT'.
3882         (_set_reply_to): Removed.
3883         (camel_mime_message_set_reply_to): Moved implementation here.
3884         This is still broken, reply-to can have multiple addresses.
3885         (_get_reply_to): Removed.
3886         (_set_field): Removed, no longer used anywhere.
3887         (_get_field): Also removed.
3888         (_init_header_name_table): Add the Date header.
3889         (process_header): Also handle snooping of Date header here.
3890
3891         * camel-stream-filter.c (finalise): Unref the source stream on
3892         finalise, and also call the parent class (oops).
3893
3894         * camel-mime-parser.c (camel_mime_parser_state): New function to
3895         get the current parser state.
3896         (camel_mime_parser_stream): Allow you to get the stream back from
3897         the mime_parser.
3898         (camel_mime_parser_fd): Alternative to allow you to get the fd
3899         back from the mime_parser.
3900         (folder_scan_init_with_stream): Properly ref/unref the stream.
3901         (folder_scan_close): Properly unref the stream/close the fd on
3902         exit.
3903         (folder_scan_init_with_fd): Close the old fd if there is one.
3904
3905         * camel-data-wrapper.c (camel_data_wrapper_construct_from_parser):
3906         New method, construct a data wrapper from an initialised parser.
3907         (construct_from_parser): Empty implementation.
3908         
3909         * providers/mbox/camel-mbox-summary.c (message_struct_new):
3910         Convert subject line to unicode, before storing in the summary.
3911         (strdup_trim): Removed, no longer needed.
3912
3913         * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): Ref
3914         the folder after setting it in the new message.
3915
3916         * camel-mime-part.c (my_set_content_object): Have the headers
3917         follow the content-type change here too.
3918         (my_write_to_stream): Dont write content-type here, automatically
3919         stored in the headers ...
3920         (my_write_to_stream): Use header_disposition_format() to format
3921         the content-disposition header.
3922         (my_write_to_stream): Removed old code, all headers are now stored
3923         in the camel-medium level, always.  Need to do the same with
3924         camel-mime-message i suppose ...
3925         (my_write_to_stream): Write the content using the parent class,
3926         not some weird function.
3927         (camel_mime_part_class_init): Dont override get_output_stream.
3928         (camel_mime_part_encoding_from_string): Bleh, make it
3929         case-insensitive.
3930
3931         * camel-mime-utils.c (header_content_type_is): Handle empty types.
3932         (header_encode_string): Start of an implementation of the rfc2047
3933         encoder.  It does iso-8859-1, and us-ascii, and utf-8 (others get
3934         tricky *sigh*)
3935         (rfc2047_encode_word): Convert a single word/string into rfc2047
3936         encoding.
3937         (quoted_encode): Different quoted-printable encoding for rfc2047
3938         encoding of headers.
3939
3940         * gmime-content-field.c (gmime_content_field_write_to_stream): Use
3941         header_content_type_format() to format it.
3942
3943 2000-04-21  NotZed  <NotZed@HelixCode.com>
3944
3945         * camel-mime-utils.h: Add prototype for header_param_list_free.
3946
3947         * camel-recipient.c: New function to remove all the types of a
3948         recipient list.  I think this whole object needs a major review.
3949
3950         * camel-mime-message.c (camel_mime_message_class_init): Removed
3951         parse_header_pair override, override add_header instead.
3952         (_parse_header_pair): Renamed to add_header.
3953         (remove_header): Add this method, to make sure we keep upto date
3954         with removed headers too.
3955         (_set_field): If given a NULL value, clear it out.
3956         (_set_recipient_list_from_string): Constify.
3957         (set_header): Override set_header from camel_medium.
3958         (process_header): Local function to handle set/add/remove of each
3959         header we know about.
3960
3961         * camel-mime-part.c (camel_mime_part_class_init): Removed
3962         parse_header_pair setup.
3963         (my_parse_header_pair): Moved into add_header(), removed.
3964         (my_set_disposition): Allow a NULL disposition to clear it.
3965         (my_set_content_id): Allow NULL content id to clear it.
3966         (remove_header): Track removed headers.
3967         (my_set_description): Allow NULL description to clear it.
3968         (my_set_content_MD5): Make sure we copy the md5 value, and allow a
3969         NULL value to reset it.
3970         (my_set_filename): Copy the filename.
3971         (my_set_header_lines): Removed.  Nothing uses it, it doesn't
3972         actually serve any purpose.
3973         (camel_mime_part_set_header_lines): Ditto.
3974         (my_get_header_lines): Ditto.
3975         (camel_mime_part_get_header_lines): Ditto.
3976         (camel_mime_part_class_init): Remove *_header_lines setup.
3977         (camel_mime_part_init): Remove header_lines init.
3978         (my_finalize): Remove header_lines finalise.
3979         (my_write_to_stream): Write the headers here.  This is just WRONG,
3980         camel_medium should be doing this.
3981         (my_get_output_stream): Kill a warning.
3982         (camel_mime_part_encoding_to_string): Ditto.
3983         (camel_mime_part_set_description): Unvirtualiase, use add_header()
3984         to do the processing.
3985         (my_set_description): Removed.
3986         (set_disposition): Renamed from my_set_disposition.
3987         (camel_mime_part_get_description): Get the descriptionf rom the
3988         get_header method.
3989         (my_get_description): Removed.
3990         (my_set_filename): Removed.
3991         (camel_mime_part_get_filename): Get the parameter from the
3992         disposition.
3993         (camel_mime_part_encoding_from_string): Handle NULL string.
3994         (camel_mime_part_init): Remove reference to filename.
3995         (my_finalize): Dont free filename.
3996
3997         * camel-mime-part.h (CamelMimePartClass): Removed
3998         parse_header_pair() method, it doesn't add anything that
3999         add_header() can't be used for.
4000         (CamelMimePartClass): Remove *_header_lines methods.
4001         (struct _CamelMimePart): Remove header_lines list.
4002         (struct _CamelMimePart): Removed filename attribute.
4003
4004         * camel-medium.c (camel_medium_init): Init headers to null, not a
4005         hashtable.
4006         (add_header): Append the headers as a list.
4007         (remove_header): Remove headers as a list.
4008         (get_header): Likewise for lookup.
4009         (free_header): Removed, no longer needed.
4010         (finalize): Free headers using header_raw_clear().
4011         (camel_medium_set_header): New function, to reset and override all
4012         values of a header with a new value.
4013
4014         * camel-medium.h (struct _CamelMedium): Changed to use a
4015         header_raw struct rather than a hash table, to store headers
4016         (many headers can occur multiple times).
4017
4018         * camel-mime-utils.c (header_raw_find_next): New function, allows
4019         you to find multi-valued header fields.
4020         (header_disposition_format): New function to format/create
4021         content-disposition header string.
4022         (header_param_list_format_append): Function to format parameter
4023         lists into a GString.
4024         (header_content_type_format): Function to format content-type into
4025         a usable format.
4026         (header_set_param): allow NULL value to remove the parameter.
4027         (decode_token): Renamed from header_decode_token.
4028         (header_decode_token): New interface for external use.
4029         (quoted_decode): Made static to kill annoying warnings.
4030         (g_strdup_len): Killed, replaced with calls to g_strndup().
4031         (rfc2047_decode_word): Made static to kill warnings.
4032         (decode_coded_string): Terminated.
4033         (g_string_append_len): Made static to kill warnings.
4034         (header_decode_text): Made static to kill warnings.
4035         (header_decode_text): Constify.
4036         (rfc2047_decode_word): Constify.
4037         (header_param): Constify.
4038         (header_content_type_new): Copy the type/subtype strings.
4039         (header_param_list_decode): Made static.
4040         (header_param_list_format_append): Made static.
4041         (quoted_decode): Constify.
4042         (g_string_append_len): Constify.
4043         (header_token_decode): New function to decode a single token.
4044
4045         * providers/mbox/camel-mbox-summary.c (header_write): Append a
4046         trailing \n when writing headers.
4047         (strdup_trim): Killed a warning.
4048         (camel_mbox_summary_set_uid): Make sure the next uid is at least 1
4049         higher than any existing one.
4050         (header_evolution_decode): Use header_token_decode to get the
4051         token.
4052
4053         * camel-mime-parser.c (folder_scan_header): Strip the trailing \n
4054         of the end of all header lines.
4055
4056 2000-04-20  NotZed  <NotZed@HelixCode.com>
4057
4058         * providers/mbox/camel-mbox-utils.[ch]: Removed.
4059
4060         * providers/mbox/camel-mbox-parser.[ch]: Removed.  Removed
4061         references to it.
4062
4063 2000-04-20  Dan Winship  <danw@helixcode.com>
4064
4065         * camel-mime-utils.c (rfc2047_decode_word): use libunicode iconv
4066         functions rather than libc ones (since libc might not have them).
4067         (header_decode_date): add autoconfiscation on timezone code
4068
4069         * camel.c (camel_init): call unicode_init ()
4070
4071 2000-04-20  NotZed  <NotZed@HelixCode.com>
4072
4073         * providers/mbox/camel-mbox-summary.c (message_struct_new): Trim
4074         leading/trailing spaces off the raw headers.
4075
4076         * MERGE NEW_PARSER branch into HEAD, fixed conflicts.
4077         
4078         * gmime-content-field.c (_print_parameter): Duh, removed again
4079         (@@#$@ cvs merge).
4080
4081         * camel-mime-utils.c (header_content_type_is): Constify.
4082         (header_content_type_unref): Killed a couple warnings.
4083
4084         * camel-folder.c (_init): Removed more log crap.
4085
4086         * providers/Makefile.am (SUBDIRS): Removed nntp, pending fixes for
4087         summary changes.
4088
4089         * providers/mbox/camel-mbox-folder.c (_get_message_by_number):
4090         Fixed for new summary interface.  Added a warning for using this
4091         broken api.
4092         (_get_message_by_uid): Fixed for message new with session
4093         vanishing.
4094
4095 2000-04-19  Dan Winship  <danw@helixcode.com>
4096
4097         * camel-simple-data-wrapper-stream.c
4098         (camel_simple_data_wrapper_stream_get_type): This is a subtype of
4099         CamelSeekableStream, not CamelStream.
4100
4101         * camel-seekable-substream.c: clean up a lot.
4102         (eos): When testing for end-of-stream, reset the parent position
4103         before testing if it is at end-of-stream, since either (a) it may
4104         have been seek'ed to eos by someone else, or (b) we may have been
4105         seek'ed away from eos and it hasn't been synced yet.
4106
4107         * camel-medium.[ch] (camel_medium_add_header): const poison.
4108         (Belatedly goes with my change of 2000-02-23.)
4109         (camel_medium_init): Use g_strcase_{hash,equal} on the header
4110         array.
4111         
4112 2000-04-18  Dan Winship  <danw@helixcode.com>
4113
4114         * camel-mime-part.c (my_set_input_stream): 
4115         * camel-data-wrapper.c (set_input_stream, set_output_stream): do
4116         better reference counting of streams so they actually go away
4117         when they should.
4118
4119         * camel-log.[ch], *: Nuke camel log stuff. Replace calls to
4120         CAMEL_LOG_WARNING with calls to g_warning.
4121
4122         * camel-data-wrapper.[ch]:
4123         * camel-simple-data-wrapper.[ch]:
4124         * camel-medium.[ch]: Clean, polish, document. Most of the gtk-doc
4125         comments added to camel-data-wrapper.c note serious problems that
4126         need to be fixed.
4127
4128 2000-04-17  Dan Winship  <danw@helixcode.com>
4129
4130         * camel-mime-message.[ch]: Remove the "session" field from
4131         CamelMimeMessage. Nothing uses it, about half of the existing
4132         calls to camel_mime_message_new_with_session pass NULL, and
4133         there's no obvious reason for it to be there.
4134
4135         * providers/MH/camel-mh-folder.c:
4136         * providers/maildir/camel-maildir-folder.c:
4137         * providers/mbox/camel-mbox-folder.c:
4138         * providers/mbox/camel-mbox-utils.c:
4139         * providers/nntp/camel-nntp-folder.c:
4140         * providers/pop3/camel-pop3-folder.c: Use camel_mime_message_new
4141         instead of camel_mime_message_new_with_session.
4142
4143         * camel-session.c (get_store_for_protocol_with_url): Set the
4144         exception if no provider is found.
4145
4146         * camel-url.c: Add code to encode and decode %-escapes in URLs,
4147         and do some additional correctness-checking on URL syntax. From
4148         Tiago Antào with modifications by me.
4149
4150 2000-04-14  Chris Toshok  <toshok@helixcode.com>
4151
4152         * providers/Makefile.am (SUBDIRS): add nntp
4153
4154 2000-04-14  Christopher James Lahey  <clahey@helixcode.com>
4155
4156         * providers/mbox/camel-mbox-folder.c: Fix switch statement.
4157
4158 2000-04-14  Chris Toshok  <toshok@helixcode.com>
4159
4160         * providers/nntp/camel-nntp-folder.c (_exists): always return TRUE
4161         for now.  we need to check the server response to make sure the
4162         group exists.
4163         (_get_message_by_uid): make sure to account for the \n we add to
4164         the string after every line.
4165
4166         * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): function
4167         to get the headers using the XOVER command.
4168         (get_HEAD_headers): function to get the headers using the HEAD
4169         command on each message. slooooooow.
4170         (camel_nntp_get_headers): make this function use either XOVER or HEAD
4171         versions depending on whether or not the server extension is present.
4172
4173 2000-04-14  Dan Winship  <danw@helixcode.com>
4174
4175         * camel-formatter.[ch]: This didn't belong in Camel. Move to mail/
4176
4177         * Makefile.am, camel-types.h: remove references to
4178         camel-formatter.
4179
4180 2000-04-12  Matt Loper  <matt@helixcode.com>
4181
4182         * camel-folder-pt-proxy.c (_folder_open_cb): Print warning message
4183         for broken function.
4184         (_folder_close_cb): Same.
4185
4186 2000-04-12  Miguel de Icaza  <miguel@gnu.org>
4187
4188         * Makefile.am (pthread_SRC): Use correct names for the pthread
4189         source variables.
4190
4191 2000-04-10  Dan Winship  <danw@helixcode.com>
4192
4193         * providers/pop3/camel-pop3-store.c (pop3_connect): fix various
4194         bugs in APOP code (still untested) and some of the error cases.
4195
4196         * camel-provider.h: Clarify what provider.protocol, provider.name,
4197         and provider.description should be.
4198
4199         * providers/mbox/camel-mbox-provider.c: 
4200         * providers/pop3/camel-pop3-provider.c: 
4201         * providers/sendmail/camel-sendmail-provider.c: 
4202         * providers/smtp/camel-smtp-provider.c: update protocols, names,
4203         and descriptions
4204
4205         * providers/mbox/camel-mbox-folder.c (_get_message_by_number):
4206         implement get_message_by_number for the mail fetch code.
4207
4208 2000-04-09  Jeffrey Stedfast  <fejj@stampede.org>
4209
4210         * providers/smtp/camel-smtp-transport.c: reformatted to fit
4211         the standard indent format used by helix code
4212
4213 2000-04-09  Dan Winship  <danw@helixcode.com>
4214
4215         * camel-movemail.c: New file with new function to dot-lock an mbox
4216         file and copy it to a safe private directory.
4217
4218 2000-04-08  Christopher James Lahey  <clahey@helixcode.com>
4219
4220         * providers/smtp/.cvsignore: Added a .cvsignore file.
4221
4222 2000-04-08  Dan Winship  <danw@helixcode.com>
4223
4224         * providers/sendmail/camel-sendmail-transport.c (_send_internal):
4225         actually record the pid returned by fork(). Noticed by clahey.
4226
4227         * providers/smtp/camel-smtp-transport.c: #include <sys/param.h>
4228         for MAXHOSTNAMELEN. (This is a stopgap: some of the uses of
4229         MAXHOSTNAMELEN are wrong anyway...)
4230
4231 2000-04-07  Jeffrey Stedfast  <fejj@stampede.org>
4232
4233         * providers/smtp/camel-smtp-transport.c: fixes to numerous bugs;
4234         should now build fine.
4235         * providers/Makefile.am: Readded smtp now that smtp builds without
4236         error.
4237
4238 2000-04-20  NotZed  <NotZed@HelixCode.com>
4239
4240         * providers/mbox/camel-mbox-summary.c
4241         (camel_mbox_summary_next_uid): Public function to get the next
4242         uid, makes sure its saved to disk too.
4243
4244         * camel-mime-part.c (my_finalize): Fix disposition crap with a
4245         real disposition.
4246         (my_set_disposition): Likewise.
4247         (my_get_disposition): And here.
4248         (my_write_to_stream): And here, needs more cleanup.
4249
4250         * providers/mbox/camel-mbox-folder.c (_append_message): Assign a
4251         new uid at this point.
4252
4253         * gmime-content-field.c (gmime_content_field_write_to_stream):
4254         Make something up if we have an invalid/missing content type
4255         (i.e. text/plain).
4256
4257 2000-04-19  NotZed  <NotZed@HelixCode.com>
4258
4259         * providers/mbox/camel-mbox-folder.c (_delete): Fixed completely
4260         broken switch() syntax, only compiled because errno is a macro on
4261         some systems.
4262         (_list_subfolders): Likewise.
4263
4264 2000-04-18  NotZed  <NotZed@HelixCode.com>
4265
4266         * camel-mime-parser.c (folder_scan_init): init stream to null.
4267
4268         * providers/mbox/camel-mbox-summary.c
4269         (CAMEL_MBOX_SUMMARY_VERSION): Moved to .c file, incremented.
4270         (index_folder): Changed to have index passed via the summary.
4271         (decode_string): Do a sanity check on the string size, so we dont
4272         visit g_malloc()'s friendly abort().
4273
4274         * camel-folder-pt-proxy.c (camel_folder_pt_proxy_class_init):
4275         Removed reference to set_name.
4276         (_set_name): Removed.
4277
4278         * providers/mbox/camel-mbox-utils.c
4279         (parsed_information_to_mbox_summary): Removed.  Most of this file
4280         is about to be binned.
4281
4282         * providers/mbox/camel-mbox-search.c (func_header_contains): Fixes
4283         for changes to summary interface.
4284         (struct _searchcontext): Remove pointer to message info, get it
4285         straight from the mboxsummary.
4286         (camel_mbox_folder_search_by_expression): New summary interface.
4287         (camel_mbox_folder_search_by_expression): Uh, the summary is not
4288         an object anymore (well not yet).
4289
4290         * providers/mbox/camel-mbox-folder.c
4291         (camel_mbox_folder_class_init): Removed set_name init.
4292         (_set_name): Removed.
4293         (_open): Call new summary interface.
4294         (_close): Use new summary interface.
4295         (_create): Removed a summary object leak.
4296         (_get_message_count): New summary interface.
4297         (_get_uid_list): Use new summary interface. FIXME: this is leaky.
4298         (_get_message_by_uid): Use the new summary interface, some
4299         cleanup.
4300         (_append_message): Totally changed, basically just appends the
4301         message directly, ignores the summary (for now), the summary will
4302         fix itself up if it needs to.
4303         (_check_get_or_maybe_generate_summary_file): Bye bye old code.
4304         (summary_get_message_info): Implement get_message_info again, for
4305         folder.
4306
4307         * camel-folder.c (camel_folder_class_init): Removed set_name
4308         setup.
4309         (_set_name): Moved contents into _init.
4310         (_init): Perform the old functions of set_name here.
4311
4312         * camel-folder.h: Removed the set_name internal interface.
4313
4314 2000-04-14  NotZed  <NotZed@HelixCode.com>
4315
4316         * providers/mbox/camel-mbox-summary.[ch]: Completely replaced with
4317         new code.
4318
4319         * Makefile.am (libcamel_la_SOURCES): Removed
4320         camel-folder-summary.[ch].
4321
4322         * camel-folder.h (struct _CamelFolder): Removed summary.
4323         (struct _CamelFolder): Changed flags to be 1 bit bitfields.
4324
4325         * camel-folder-summary.[ch]: Class removed entirely.
4326
4327         * camel-folder.c (camel_folder_get_summary): Removed.
4328         (camel_folder_summary_get_message_info): Moved from
4329         camel-folder-summary.c
4330         (camel_folder_summary_get_subfolder_info): Moved from
4331         camel-folder-summary.c
4332
4333         * camel-mime-parser.c (folder_scan_step): Store the start of
4334         headers and start of from in the scan state.
4335         (camel_mime_parser_tell_start_headers): Query the start of the
4336         headers.
4337         (camel_mime_parser_tell_start_from): Query the cached start of
4338         from marker.
4339
4340 2000-04-13  NotZed  <NotZed@HelixCode.com>
4341
4342         * gmime-content-field.c (gmime_content_field_free): Removed this
4343         function.  If its too dangerous to use, it shouldn't be here.
4344         (gmime_content_field_ref): Also ref the embedded content-type.
4345         (gmime_content_field_unref): Ditto to unref it.
4346
4347         * camel-mime-utils.h: Add a refcount for content-type header.
4348
4349         * camel-mime-utils.c (header_content_type_unref): Implement unref
4350         for content-type.
4351         (header_content_type_ref): Implement ref for header content type.
4352
4353 2000-04-12  NotZed  <NotZed@HelixCode.com>
4354
4355         * gmime-content-field.h: Changed to use a _header_content_type.
4356         Added type/subtype back for compatability with clients.
4357         
4358         * gmime-content-field.c: Basically a total rewrite, and now just a
4359         thin wrapper ontop of header_content_type.
4360         (_free_parameter): Got rid of it.
4361         (gmime_content_field_new): Use header_content_type_* functions.
4362         (gmime_content_field_set_parameter): Likewise.
4363         (_print_parameter): Blow away.
4364         (gmime_content_field_write_to_stream): Get details from the
4365         content_type field.  Should check if it needs to escape chars in
4366         the paramter value.
4367         (gmime_content_field_get_mime_type): Likewise.
4368         (___debug_print_parameter): Get rid of this rather annoyingly
4369         named function.
4370         (gmime_content_field_get_parameter): Simplified function.
4371         (gmime_content_field_construct_from_string): Fixed this to use a
4372         real parser.
4373         (gmime_content_field_is_type): New function to test if a type matches.
4374         (gmime_content_field_construct_from_string): Track type/subtype
4375         from subordinate content_type header struct.
4376
4377         * gmime-rfc2047.[ch]: Removed.  Unused.
4378
4379         * camel-stream-b64.[ch]: Blown away more duplicated code.
4380
4381         * Makefile.am: Removed camel-stream-b64.[ch], and
4382         gmime-base64.[ch].
4383
4384         * camel-mime-part.c (my_get_content_object): Replaced
4385         camel-stream-b64 with camel-stream-filter/camel-mime-filter-basic.
4386         (my_write_content_to_stream): Replaced camel-stream-b64 with the
4387         camel-stream-filter with an encoder.
4388         (my_get_content_object): Also implement quoted-printable decoding.
4389         (my_write_content_to_stream): Also implement quoted-printable
4390         encoding.
4391         (my_get_output_stream): Took out stream-b64 code (nothing's being
4392         executed yet anyway).
4393
4394         * gmime-base64.[ch]: Blown away.  Not used, dont need it.
4395
4396         * camel-mime-utils.h: Added offset for this header.  Records where
4397         it is in the source.
4398
4399         * camel-mime-utils.c (header_raw_append_parse): Add offset
4400         parameter, to store where the header is stored in the stream.
4401         (header_raw_append): Added offset param.
4402         (header_raw_find): Return offset, if a pointer supplied for it.
4403         (header_raw_replace): Add offset param.
4404         (header_content_type_new): New function, to create an empty
4405         content type.
4406         (header_content_type_set_param): Set a parameter in the
4407         content-type.
4408         (header_set_param): Generic header parameter setting function.
4409         (header_decode_string): Handle NULL input.
4410
4411         * camel-mime-parser.c (camel_mime_parser_headers_raw): New
4412         function to get access to all the raw headers.
4413         (folder_scan_header): Keep track of the header start position, and
4414         store it when saving the header.
4415
4416 2000-04-11  NotZed  <NotZed@HelixCode.com>
4417
4418         * camel-mime-utils.c: Moved a bunch of printf's to debug.
4419
4420         * camel-mime-parser.c: Moved a bunch of printf's to debug.
4421         (folder_scan_header): Detect end of each header line using the
4422         last scanned char, and not the last scanned position.
4423
4424         * camel-mime-filter-index.[ch]: Indexing filter.  Indexes unicode
4425         sequences into ibex files.
4426
4427 2000-04-09  NotZed  <NotZed@HelixCode.com>
4428
4429         * camel-mime-part.c: Dont include gmime-base64.h
4430
4431         * camel-mime-filter-charset.c (complete): Implement the completion
4432         function.
4433
4434         * camel-mime-parser.c (folder_scan_step): If we get to the end of
4435         the body data, check any filters for outstanding completion data.
4436         (camel_mime_parser_scan_from): Set whether we scan for "From "
4437         headers or not.
4438
4439         * camel-stream-filter.c (do_read): If we get to end of stream on
4440         the source, then call the filtering completion function to see if
4441         we have any more data to return.
4442
4443         * camel-mime-filter-basic.c (filter): Implement quoted printable
4444         encoding and decoding filters.
4445         (complete): And the complete function as well.
4446
4447         * camel-mime-utils.c (base64_encode_close): Also take an input
4448         buffer, allow closing of filters.
4449         (quoted_encode_step): First cut, simple quoted-printable encoder.
4450         Doesn't handle trailing spaces/tabs on end of line properly yet.
4451         (quoted_encode_close): Complete a quoted-encoding.
4452         (is_qpsafe): New type check, for quoted-printable safe characters
4453         (that do not need encoding).  Thats all bits used in the type
4454         table!  Rebuilt the types table.
4455         (header_content_type_is): Checks a content type against at
4456         type/subtype match.
4457         (header_content_type_param): Handle NULL content type pointer.
4458
4459 2000-04-08  NotZed  <NotZed@HelixCode.com>
4460
4461         * camel-mime-filter-basic.c (filter): Implement the base64
4462         encoder.  Problem is, there is no way to know when to close it.
4463         Close/Reset will have to provide the same args as filter, so it can
4464         flush remaining data *sigh*
4465
4466         * camel-mime-utils.c (base64_encode_step): A rather complex base64
4467         encoder, fast?
4468         (base64_step_close): Companion function to finish off the base64
4469         sequence.
4470
4471         * camel-mime-part.c (my_write_content_to_stream): Changed to use
4472         camel_stream_write_to_stream().
4473
4474         * camel-stream.[ch] (camel_stream_write_to_stream): From
4475         camel_stream_b64_write_to_stream().  Fixed some infinite loop
4476         bugs with error conditions.
4477
4478         * camel-stream-b64.[ch] (camel_stream_b64_write_to_stream): Removed.
4479         This has nothing to do with stream-b64, so i've moved it to
4480         CamelStream.
4481
4482         * camel-mime-utils.h: Add a comment about refcounting
4483         header_content_type struct.
4484
4485         * Makefile.am: Added camel-stream-filter*.[ch].
4486
4487         * camel-stream-filter.[ch]: Class to implement a generic
4488         (multipass) filter ontop of a stream.  Only implements a read-only
4489         stream.
4490
4491         * camel-mime-parser.c (camel_mime_parser_filter_add): Ref the
4492         filter we just added.
4493
4494         * Makefile.am: Added camel-mime-filter*.[ch].
4495
4496         * camel-mime-filter-charset.[ch]: A filter to preform character set
4497         conversion (uses unicode_iconv).
4498
4499         * camel-mime-filter-save.[ch]: A simple filter which will save all
4500         data directly to a file or file descriptor.
4501
4502         * camel-mime-filter-basic.[ch]: Implements the basic mime filters,
4503         base64 and quoted-printable decoding (encoding not implemented yet).
4504
4505         * camel-mime-filter.[ch]: A filtering class, which can filter streams
4506         of data without having to copy them.  Simpler than stream classes,
4507         and can be plugged into a single stream class (when i write it).
4508
4509 2000-04-07  Dan Winship  <danw@helixcode.com>
4510
4511         * providers/pop3/camel-pop3-store.c (pop3_connect): Clarify error
4512         messages.
4513         (finalize): fix a bug in camel_exception usage
4514         (pop3_connect): Remember the password after asking for it the
4515         first time.
4516
4517 2000-04-07  NotZed  <NotZed@HelixCode.com>
4518
4519         * Makefile.am: Added camel-mime-parser/camel-mime-utils.
4520
4521         * camel-mime-parser.c: Fast mime parser.
4522
4523         * camel-mime-utils.c: Mime utility functions, and email header
4524         parsers.
4525
4526 2000-04-07  NotZed  <NotZed@HelixCode.com>
4527
4528         * providers/Makefile.am: Removed smtp for now, its a long way from
4529         building.
4530         * providers/smtp/Makefile.in: Removed file that shouldn't have been
4531         checked in.
4532
4533 2000-04-06  Matt Loper  <matt@helixcode.com>
4534
4535         * camel-folder-pt-proxy.c (_get_full_name): Remove exception param
4536         from get_full_name() called, since get_full_name() was changed to
4537         not have an exception in the last param (see dan's notes below).
4538         (_get_name): same.
4539
4540 2000-04-06  Dan Winship  <danw@helixcode.com>
4541
4542         * camel-store.[ch]: Reorganize the folder-fetching methods and
4543         implement a folder cache so that multiple requests for the same
4544         folder will yield the same CamelFolder object (as long as it
4545         remains active). Includes some code to remove no-longer-active
4546         folders from the cache, but it doesn't get used since nothing is
4547         ever unref'ed in Camel right now...
4548         
4549         * providers/mbox/camel-mbox-store.c:
4550         * providers/pop3/camel-pop3-store.c: update for CamelStore
4551         changes.
4552
4553         * camel-folder.[ch]: Remove the (unused) CamelException argument
4554         from camel_folder_get_name and camel_folder_get_full_name.
4555         (camel_folder_set_name): make this go away since changing a
4556         folder's name after it has been created could result in it
4557         conflicting with a separately-issued folder.
4558         
4559 2000-04-05  Dan Winship  <danw@helixcode.com>
4560
4561         * g_url_new really wanted to take a CamelException. So, rename
4562         Gurl to CamelURL, g_url_* to camel_url_* (with camel_url_new
4563         taking an exception), and url-util.[ch] to camel-url.[ch]. Also
4564         force url->port to be numeric and remove camel_service_getport. (I
4565         was confused before: the URL RFC says the port must be numeric, so
4566         we don't want to do getportbyname.)
4567
4568 2000-04-01  Dan Winship  <danw@helixcode.com>
4569
4570         * providers/mbox/camel-mbox-folder.c
4571         (_check_get_or_maybe_generate_summary_file): Compare
4572         mbox_file_size and mbox_modtime to the results of stat()ing the
4573         mbox file, not the summary file. Duh.
4574         (_close): Update the summary's mbox_file_size and mbox_modtime
4575         before writing it to disk.
4576
4577         * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_save,
4578         camel_mbox_summary_load): Wow. I must have been tired when I wrote
4579         this code. First, the comparison bug above. Second, it was using
4580         ntohs and htons instead of ntohl and htonl. Third, I was reading
4581         the status flag byte in two different places and thus getting out
4582         of sync. Fourth, it was writing out field_length bytes of each
4583         header field after having converted field_length to network byte
4584         order, resulting in lots of random crap being appended, and the
4585         summary files being huge. (Fortunately, since the size/modtime
4586         comparison was biffed, the garbage summary read from disk was
4587         always immediately discarded.)
4588
4589         * providers/mbox/camel-mbox-parser.c (camel_mbox_parse_file): fix
4590         an off-by-one error that caused the last-used UID to be reused if
4591         the summary file was regenerated. (That one wasn't my fault. :-)
4592
4593 2000-03-31  Dan Winship  <danw@helixcode.com>
4594
4595         * camel-stream-mem.c: implement unimplemented methods
4596
4597         * gmime-content-field.c
4598         (gmime_content_field_construct_from_string):
4599         * data-wrapper-repository.c
4600         (data_wrapper_repository_get_data_wrapper_type):
4601         * camel-simple-data-wrapper.c (my_write_to_stream):
4602         * camel-mime-part.c (my_set_input_stream):
4603         remove debugging printf()s that no longer seem useful.
4604
4605 2000-03-31  Matt Loper  <matt@helixcode.com>
4606
4607         * camel-formatter.c (text_to_html): Added "convert_newlines_to_br"
4608         boolean param, to give the option of not converting '\n's to <br>
4609         tags. This way, when we stick stuff in a <pre> tag, newlines stay
4610         newlines.
4611
4612 2000-03-30  Matt Loper  <matt@helixcode.com>
4613
4614         * camel-formatter.c (handle_text_plain): Use <pre> tag to force
4615         the use of monospaced fonts.
4616
4617 2000-03-30  Dan Winship  <danw@helixcode.com>
4618
4619         * camel-service.c (camel_service_getport): Add a htons in the
4620         default_number case, and document the fact that the function
4621         returns the port in network byte order.
4622
4623         * providers/pop3/camel-pop3-store.c (pop3_connect): Revert
4624         Miguel's change. The port number bug was actually somewhere
4625         else, and the IP address copying code was fine already.
4626         
4627 2000-03-29  Miguel de Icaza  <miguel@gnu.org>
4628
4629         * providers/pop3/camel-pop3-store.c (pop3_connect): Add htons
4630         (port), and only copy 4 bytes for the IP address to prevent a DNS
4631         attack. 
4632
4633 2000-03-28  Dan Winship  <danw@helixcode.com>
4634
4635         * camel-seekable-substream.c
4636         (camel_seekable_substream_new_with_seekable_stream_and_bounds):
4637         make this return a CamelStream rather than a
4638         CamelSeekableSubstream, because that's the way Gtk objects tend to
4639         work.
4640
4641         * camel-service.c (camel_service_gethost,
4642         camel_service_getport): convenience functions to canonicalize
4643         the host and port values of a service's URL.
4644         * providers/pop3/camel-pop3-store.c: use them
4645
4646         * providers/mbox/camel-mbox-folder.c
4647         (_check_get_or_maybe_generate_summary_file): Make this work when
4648         the inbox file doesn't yet exist.
4649
4650 2000-03-27  Dan Winship  <danw@helixcode.com>
4651
4652         * providers/mbox/camel-mbox-folder.c (_append_message): uncomment
4653         the call to unlink the temp file: there's no way to tell
4654         camel_stream_fs to truncate a file, so reusing the same file was
4655         resulting in junk at the ends of messages.
4656
4657         * camel-folder.[ch]: add delete_message_by_{number,uid}.
4658
4659         * providers/pop3/camel-pop3-folder.[ch]: implement
4660         delete_message_by_uid. Add a close method to do expunging
4661         of deleted messages if requested.
4662
4663         * providers/pop3/camel-pop3-store.[ch]: support for
4664         CamelPop3Folder::close. (You have to close the connection
4665         in order to expunge the folder, thus the store may be
4666         connected in the CamelService::is_connected sense when it
4667         is not actually connected to the server.) Also some bugfixes.
4668
4669 2000-03-27  NotZed  <NotZed@HelixCode.com>
4670
4671         * providers/mbox/camel-mbox-folder.c (_append_message): Unref the
4672         output_stream when done, close doesn't do it.
4673         (_append_message): Clear all uid's from the appending messages, so
4674         they are reassigned proper unique id's.
4675
4676         * gmime-utils.c (get_header_array_from_stream): Actually free the
4677         header, it is copied elsewhere.
4678
4679 2000-03-26  NotZed  <NotZed@HelixCode.com>
4680
4681         * providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): Added
4682         folder parameter to function.  Fixed callers.
4683         (index_message): Index a message as it is assigned a unique id.
4684
4685         * camel-mime-part.c (my_set_content_id): Make sure we malloc and
4686         copy the content_id, otherwise *poof*
4687
4688 2000-03-25  NotZed  <NotZed@HelixCode.com>
4689
4690         * camel-medium.c (_finalize): Another leak, unref the content if
4691         finished with it.
4692
4693         * camel-recipient.c (camel_recipient_table_free): Plug another
4694         memory leak - actually free the recipient table.
4695
4696         * camel-mime-message.c (_finalize): Plugged a memory leak with the
4697         flags table.
4698
4699         * gmime-utils.c (_store_header_pair_from_string): A simpler, more
4700         debuggable and functionally identical header extraction function.
4701
4702 2000-03-24  NotZed  <NotZed@HelixCode.com>
4703
4704         * gmime-content-field.c (gmime_content_field_set_parameter):
4705         Remove the hash table entry before freeing its key and data.
4706
4707 2000-03-27  Dan Winship  <danw@helixcode.com>
4708
4709         * providers/Makefile.am (SUBDIRS): Add pop3.
4710
4711         * providers/pop3/camel-pop3-store.c: keep separate input and
4712         output streams so the output doesn't end up being buffered.
4713
4714         * providers/pop3/camel-pop3-folder.c (get_message_by_number):
4715         finish implementing this.
4716
4717 2000-03-27  Michael Meeks  <michael@helixcode.com>
4718
4719         * camel-mime-part.c (my_set_disposition): fix so less broken.
4720         (my_finalize): remove dodgy disposition free.
4721
4722         * camel-data-wrapper.c (my_set_mime_type_field): unref instead of
4723         free on mime_type.
4724
4725 2000-03-27  Dan Winship  <danw@helixcode.com>
4726
4727         * camel-service.c (camel_service_free_auth_types): new routine to
4728         free the data allocated by camel_service_query_auth_types.
4729
4730         * providers/pop3/camel-pop3-store.c (free_auth_types): implement
4731
4732         * camel-stream-mem.c (camel_stream_mem_new_with_buffer): rename
4733         camel_stream_mem_new_with_buffer to ..._with_byte_array and add a
4734         new ..._with_buffer that takes a char * rather than a GByteArray.
4735
4736         * Remove CamelStreamBufferedFs, since CamelStreamBuffer makes it
4737         redundant.
4738
4739 2000-03-25  Dan Winship  <danw@helixcode.com>
4740
4741         * camel-folder-summary.[ch]: change the CamelFolderSummary
4742         interfaces to allow partial summary queries (for dealing
4743         with very large folders). Remove the "extended_fields" from
4744         CamelFolderInfo and CamelMessageInfo: this is better dealt
4745         with by subtyping.
4746
4747         * providers/mbox/camel-mbox-summary.[ch]: Make CamelMboxSummary a
4748         subclass of CamelFolderSummary. Update interfaces for that. Remove
4749         the internal/external summary distinction. Remove the (unused) md5
4750         checksum in the folder summary. Change the summary file format
4751         (primarily to make it no longer byte-order dependent) and add a
4752         version number to it so it will be easier to change in the future.
4753         
4754         * providers/mbox/camel-mbox-folder.[ch]
4755         * providers/mbox/camel-mbox-search.c
4756         * providers/mbox/camel-mbox-utils.c: update for summary changes
4757
4758         * camel-exception-list.def: add
4759         CAMEL_EXCEPTION_FOLDER_SUMMARY_INVALID
4760         
4761 2000-03-23  NotZed  <NotZed@HelixCode.com>
4762
4763         * providers/mbox/camel-mbox-provider.c: Added flag to provider
4764         initialisation, to match changed structure.
4765
4766 2000-03-22  NotZed  <NotZed@HelixCode.com>
4767
4768         * camel-folder.[ch]: Added async search api.
4769
4770         * providers/mbox/camel-mbox-search.c
4771         (camel_mbox_folder_search_by_expression): Changed to use an
4772         asynchronous interface.
4773         (camel_mbox_folder_search_cancel): Cancel function for async
4774         interface.
4775
4776 2000-03-23  Dan Winship  <danw@helixcode.com>
4777
4778         * camel-stream-buffer.c (camel_stream_buffer_read_line): Function
4779         to read one line of any size from a stream and return it in
4780         allocated memory.
4781
4782 2000-03-22  Dan Winship  <danw@helixcode.com>
4783
4784         * camel-service.c (camel_service_query_auth_types): New function
4785         to query a service for the authentication protocols it supports.
4786         * providers/pop3/camel-pop3-store.c (query_auth_types): implement
4787
4788         * camel-provider.c (camel_provider_scan): New function to
4789         scan the provider dir and return a list of all providers.
4790
4791         * providers/pop3/camel-pop3-folder.c: fill this in partially
4792         * providers/pop3/camel-pop3-store.c: make camel_pop3_command
4793         return the text after "+OK"/"-ERR" and add a separate
4794         camel_pop3_get_additional_data to get the message body or
4795         whatever. Also make them take a CamelPop3Store rather than
4796         a CamelStreamBuffer.
4797
4798 2000-03-22  Matt Loper  <matt@helixcode.com>
4799
4800         * camel-formatter.c (debug): Disabled some useless debug
4801         messaging.
4802
4803 2000-03-21  Dan Winship  <danw@helixcode.com>
4804
4805         * providers/pop3: some initial bits of the POP3 provider, to
4806         make Matt happy. Incomplete, untested, etc.
4807
4808 2000-03-21  bertrand  <bertrand@helixcode.com>
4809
4810         * providers/mbox/camel-mbox-summary.c 
4811         (camel_mbox_summary_append_internal_to_external): copy the size field
4812
4813         * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): initialize 
4814         message_info to NULL
4815
4816         * camel-folder-summary.h: added the size field.
4817
4818         * providers/mbox/camel-mbox-summary.h: 
4819         added the received_date field.
4820
4821         * providers/mbox/camel-mbox-summary.c:
4822         documented all functions.
4823
4824         * camel-folder-summary.h: name change and 
4825         new fields.
4826
4827         * providers/mbox/camel-mbox-search.c: update to 
4828         conform to name change in the summary fields.
4829
4830 2000-03-10  bertrand  <bertrand@helixcode.com>
4831
4832         * camel-service.h: cosmetic changes.
4833
4834 2000-03-09  Dan Winship  <danw@helixcode.com>
4835
4836         * s/HelixCode/Helix Code, Inc./ in the copyrights
4837
4838 2000-03-07  bertrand  <bertrand@helixcode.com>
4839
4840         * camel-formatter.c (handle_mime_part): 
4841         plug mem leaks due to bad documentation
4842         of camel_content_field_get_mime_type
4843         (print_camel_body_part): idem
4844         (handle_multipart_alternative): idem
4845
4846         * gmime-content-field.c (gmime_content_field_get_mime_type): 
4847         documentation fix.
4848
4849
4850         * camel-mime-part.c (my_finalize): unref the 
4851         content_input_stream if any. 
4852
4853 2000-03-06  bertrand  <bertrand@helixcode.com>
4854
4855         * camel-stream-fs.c (_seek): fix a bogus calculation
4856         in the return position.
4857
4858 2000-03-05  bertrand  <bertrand@helixcode.com>
4859
4860         * camel-session.h: cosmetic fixes.
4861
4862         * camel-stream-fs.c (_read): 
4863         (_seek): fixed the current position so that it refers
4864         to the current position in the stream, not in its parent.
4865
4866 2000-03-04  NotZed  <NotZed@HelixCode.com>
4867
4868         * providers/mbox/camel-mbox-search.c
4869         (camel_mbox_folder_search_by_expression): Ref the summary
4870         after we have got it.
4871
4872 2000-03-04  bertrand  <bertrand@helixcode.com>
4873
4874         * camel-mime-part.c (my_write_content_to_stream): 
4875         stream the raw content instead of nothing if the encoding
4876         is not supported.
4877
4878         * camel-stream-fs.c (_seek): handle eos more
4879         properly.
4880
4881         * camel-formatter.c (get_bonobo_tag_for_object): 
4882         bonobo-goad-id is the good key to look for. 
4883         (get_bonobo_tag_for_object): close the <object> tag.
4884         (get_bonobo_tag_for_object): the correct syntax for the
4885         to set a parameter inside an <object> tag is :
4886         <object classid="..."> <param name="uid" value="..."> <param ...>
4887         </object>
4888
4889 2000-03-03  bertrand  <bertrand@helixcode.com>
4890
4891         * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): 
4892         use set_input_stream instead of construct_from_stream
4893         to feed the message object. 
4894
4895         * camel-data-wrapper.c (my_write_to_stream): reset output stream.
4896         (my_set_input_stream): unref the previous input stream.
4897         use the set_output_stream for default behaviour.
4898         (my_set_output_stream): unref previous output stream.
4899
4900         * camel-mime-part.c (my_write_content_to_stream): reset content
4901         object output stream.
4902
4903 2000-03-03  NotZed  <NotZed@HelixCode.com>
4904
4905         * providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): Make
4906         sure we open with create with a creation mask.
4907
4908 2000-03-01  NotZed  <NotZed@HelixCode.com>
4909
4910         * camel-mime-part-utils.c
4911         (camel_mime_part_construct_content_from_stream): DO NOT assert on
4912         content type, we have fallback code 4 lines below it ... *sigh*
4913
4914 2000-02-29  NotZed  <NotZed@HelixCode.com>
4915
4916         * Makefile.am (libcamelinclude_HEADERS): Added camel-stream-buffer
4917         to build.
4918
4919         * camel-stream-buffer.[ch]: Generic buffer which can be applied to
4920         any stream.
4921
4922 2000-03-03  bertrand  <bertrand@helixcode.com>
4923
4924         * camel-formatter.c (handle_image): in the case
4925         of images, put the content object output stream
4926         in the url. This allows the message browser
4927         to show inline images.
4928
4929         * camel-stream-b64.c (my_read_encode): fixed state
4930         0 keep value. 
4931
4932 2000-03-02  bertrand  <bertrand@helixcode.com>
4933
4934         * camel-stream-b64.c (my_read_encode): don't forget to 
4935         set the state to 0 after 3.
4936         (my_read_encode): don't forget to encode, even in state 3.
4937
4938         * camel-simple-data-wrapper.c: static functions are prefixed 
4939         with my_ instead of _
4940         * camel-multipart.c: static functions are prefixed 
4941         with my_ instead of _
4942         (my_write_to_stream): commented.
4943         (my_write_to_stream): warning in case the boudary is set
4944         but is a zero length string.
4945
4946         * camel-mime-part.c (camel_mime_part_encoding_from_string): 
4947         remove debug trace. 
4948         
4949         * camel-mime-part.c: Replaced all static functions
4950         with name begining with _ by the same name begining
4951         with "my_" to prevent the possible conflicts 
4952         with system symbols Dan warned us about. 
4953         
4954         * camel-stream-b64.c (camel_stream_b64_write_to_stream): 
4955         use CamelStreamB64 type for the input stream.
4956
4957         * camel-mime-part.c (_get_content_object): remove 
4958         debugging trace
4959         (_write_content_to_stream): implement the b64 
4960         encoding the new way (that is using camel_stream_b64)
4961
4962         * camel-data-wrapper.c (my_write_to_stream): 
4963         fix implementation so that it writes properly
4964         to the output stream even.
4965
4966         * camel-stream-b64.c (camel_stream_b64_write_to_stream): 
4967         fix implementation. 
4968
4969 2000-02-29  bertrand  <bertrand@helixcode.com>
4970
4971         * camel-stream-b64.c (camel_stream_b64_write_to_stream): new
4972         utility function. 
4973
4974         * camel-data-wrapper.c (_write_to_stream): default
4975         implementation. 
4976
4977         * gmime-utils.c (_store_header_pair_from_string): 
4978         revert strange changes. 
4979
4980         * camel-stream-b64.c (my_read_decode): set eos to true when we
4981         have read the whole input stream. 
4982         (my_reset): set eos to FALSE.
4983
4984 2000-02-28  NotZed  <NotZed@HelixCode.com>
4985
4986         * camel-mime-part.c (_parse_header_pair): Dont free this either.
4987
4988         * camel-medium.c (_remove_header): Ugh, dont free the header
4989         before we actually remove it.
4990         (_add_header): Ugh, dont free hashtable entries which may be
4991         duplicated (hash_insert _will_ reference that memory).
4992
4993         * string-utils.c (string_trim): Trimming a 0-length string is not
4994         an error.
4995
4996         * camel-mime-message.c (_parse_header_pair): Fixed very broken
4997         memory handling of header_name/value.
4998
4999         * providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev):
5000         Initialise end_of_last_message always.
5001         (camel_mbox_copy_file_chunk): Stop trying to read if we run out of
5002         data, rather than looping forever.
5003         (camel_mbox_write_xev): Use an open flag when opening with create.
5004
5005         * camel-folder.c (camel_folder_search_by_expression): No, its not
5006         a fatal error to search on a non-searchable folder, you just dont
5007         get any matches.
5008         (_open): Dont open an opened folder (i dont see why this is really
5009         a bug, but what the hell ...)
5010
5011         * providers/mbox/camel-mbox-folder.c (_init): Set search cap on.
5012         (_open): Call parent class to perform open.  Remove folder-open
5013         check to parent instead.
5014         (_create): open takes a creation mask, dont use umask to try and
5015         set the open mode.
5016         (_delete): Dont bother checking folder==NULL, its already been
5017         checked on the external interface (changed to an assertion, this
5018         would have to be a camel bug).
5019         (_delete_messages): Likewise.
5020         (_create): Ditto.
5021         (_init): Dont go and clear all the paths and shit that the parent
5022         open just setup for us.
5023         (_delete_messages): Get rid of more umask stuff.
5024         (_append_message): Make sure we pass file mode to open with create.
5025         (_append_message): Cleaned up some indenting to make it readable.
5026
5027         * camel-stream-b64.c (my_read_encode): Fixed a typo.
5028
5029         * providers/mbox/camel-mbox-search.c: Changed to use e-sexp,
5030         rather than filter-sexp.
5031
5032 2000-02-28  bertrand  <bertrand@helixcode.com>
5033
5034         * camel-stream-b64.c (my_read_encode): encoding
5035         filter.
5036
5037 2000-02-23  bertrand  <Bertrand.Guiheneuf@aful.org>
5038
5039         * camel-stream-b64.c: changed the __static 
5040         suffix into a my_ prefix. 
5041         (camel_stream_b64_set_mode): reset the persistent
5042         status. 
5043         (my_read_decode): remove superfluous %
5044         
5045         * providers/mbox/camel-mbox-utils.c (camel_mbox_copy_file_chunk): 
5046         fix exception description message.
5047
5048 2000-02-24  Dan Winship  <danw@helixcode.com>
5049
5050         * camel-session.c: Add camel_session_get_transport_for_protocol.
5051
5052         * camel-transport.h:
5053         * camel-transport.c: Add an abstract CamelTransport class.
5054
5055         * providers/sendmail/*: A CamelTransport that uses sendmail
5056         to deliver mail.
5057
5058 2000-02-24  Dan Winship  <danw@helixcode.com>
5059
5060         * camel-folder.c: use CamelExceptions for run-time errors, not
5061         incorrect code. Don't bother validating that an object exists from
5062         inside one of its methods, since you couldn't have gotten there if
5063         it didn't. Fix some code style bugs.
5064
5065         (_init): Rename init_with_store to init and add parent_folder,
5066         separator, and name arguments.
5067         (_set_name): Get separator from self, not parent_store now.
5068
5069         * camel-store.h:
5070         * camel-store.c: Remove get/set_separator.
5071
5072         * providers/mbox/: Update for above.
5073
5074 2000-02-23  Dan Winship  <danw@helixcode.com>
5075
5076         * camel-medium.c (_finalize): Free the data in the headers hash
5077         table.
5078         (_add_header): g_strdup the header name and value when adding it.
5079
5080         * camel-mime-part-utils.c
5081         (camel_mime_part_construct_headers_from_stream): Free the header
5082         data after calling camel_medium_add_header, since it will have
5083         g_strdup()ed it itself.
5084
5085 2000-02-22  NotZed  <NotZed@HelixCode.com>
5086
5087         * providers/mbox/camel-mbox-search.c: Dont compile by default.
5088
5089         * providers/mbox/Makefile.am: Fuck off the filter code.
5090
5091 2000-02-22  bertrand  <Bertrand.Guiheneuf@aful.org>
5092
5093         * camel-stream-b64.c (read_decode__static): 
5094         don't read the char if we reached the length
5095         of the output buffer. Hours lost on this
5096         %$!@# bug : 3.5
5097
5098         * camel-folder.c (camel_folder_get_subfolder): 
5099         (camel_folder_create): 
5100         (camel_folder_delete): 
5101         (camel_folder_delete_messages): 
5102         (camel_folder_list_subfolders): 
5103         (camel_folder_expunge): 
5104         (camel_folder_get_message_by_number): 
5105         (camel_folder_get_message_count): 
5106         (camel_folder_append_message): 
5107         (camel_folder_copy_message_to): 
5108         (camel_folder_get_summary): 
5109         (camel_folder_get_message_uid): 
5110         (camel_folder_get_message_by_uid): 
5111         (camel_folder_get_uid_list): 
5112         Check folder state (open/close) and raise an
5113         exception if it is not ok. 
5114         
5115         * providers/mbox/camel-mbox-folder.c (_create): 
5116         create the file and the path with two different
5117         names.
5118
5119         * camel-folder.c (_create): handle the case 
5120         when the folder name starts with '/'
5121
5122         * camel-exception.c (camel_exception_new): use 
5123         (void) instead of () in decl.
5124
5125         * camel-exception.h: cosmetic fixes.
5126
5127         * camel-exception.c (camel_exception_init): new routine.
5128         Fix a bug in mail/message-list.c
5129         
5130
5131         * camel-folder.h: cosmetic changes.
5132
5133         * camel-stream-b64.c (reset__static): added a
5134         reset method. Thanks message-browser to find
5135         so much bugs :)
5136
5137         * providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): readd
5138         Unicode libs.
5139
5140 2000-02-21  bertrand  <Bertrand.Guiheneuf@aful.org>
5141
5142         * camel-formatter.c (lookup_unique_id): 
5143         awful hack to test get_output_stream.
5144         * camel-stream-b64.[ch] :
5145         b64 encoding/decoding is now implemented as
5146         a stream. 
5147         
5148
5149 2000-02-21  bertrand  <Bertrand.Guiheneuf@aful.org>
5150
5151         * camel-seekable-substream.c (_reemit_parent_signal): 
5152         emit "data_available" when parent stream emits it. 
5153
5154
5155 2000-02-21  NotZed  <NotZed@HelixCode.com>
5156
5157         * providers/mbox/Makefile.am: Uh, fixed LIBADD again.  What was
5158         there was never ever going to work, wasn't it tested?
5159
5160
5161 2000-02-21  Dan Winship  <danw@helixcode.com>
5162
5163         * camel-session.h: (struct _CamelSession): Add authenticator.
5164
5165         * camel-session.c (camel_session_new): Add authenticator.
5166         (camel_session_query_authenticator): New function to query the
5167         session authenticator for password, etc, information.
5168
5169 2000-02-21  Dan Winship  <danw@helixcode.com>
5170
5171         * camel-session.c: add CamelExceptions to several functions. Use
5172         camel_session_new to initialize the session and URL fields of
5173         created CamelStores as appropriate.
5174
5175         * camel-store.h:
5176         * camel-store.c
5177         * camel-service.h:
5178         * camel-service.c: Move the session and url (and associated
5179         functions) from CamelStore to CamelService. Add url_flags to
5180         CamelService so subclasses can specify which URL components
5181         are mandatory for them. Add camel_session_new for
5182         camel_session_get_store* to use.
5183
5184         * providers/mbox/camel-mbox-folder.c:
5185         * providers/mbox/camel-mbox-store.c:
5186         * providers/mbox/camel-mbox-store.h: Update for above changes.
5187
5188         * camel-exception-list.def: Once camel is being used for real,
5189         exceptions won't be renumberable. So renumber them now to make
5190         more room to add exceptions to the various categories later, and
5191         add a big warning message.
5192
5193 2000-02-20  Dan Winship  <danw@helixcode.com>
5194
5195         * providers/mbox/Makefile.am: add libibex back to
5196         libcamelmbox_la_LIBADD
5197
5198 2000-02-18  NotZed  <NotZed@HelixCode.com>
5199
5200         * providers/mbox/camel-mbox-search.h
5201         (camel_mbox_folder_search_by_expression): Added exception to call,
5202         and fixed caller.
5203
5204         * providers/mbox/camel-mbox-search.c
5205         (camel_mbox_folder_search_by_expression): Major changes, to use
5206         the sexp evaluator from filter/filter-sexp.c to implement the
5207         searching.
5208         (func_body_contains): Changed to support multiple strings in 1
5209         command (results or'd together)
5210
5211         * url-util.c (g_url_new): Fixed a typo (colon == 0 isn't right),
5212         and made it so full url's are absolute pathed (Dan, this is how it
5213         has to work!).  Also, always include a path part, even if it is an
5214         empty string.
5215
5216 2000-02-18  Dan Winship  <danw@helixcode.com>
5217
5218         * camel/camel-types.h: New header with the typedefs for all camel
5219         classes. Now the class headers can just include this and the
5220         header for the parent type. This makes it possible for
5221         CamelService to include a CamelSession without creating an
5222         #include loop.
5223
5224         * camel/*:      
5225         * composer/e-msg-composer-attachment-bar.h:
5226         * mail/folder-browser.c:
5227         * mail/message-list.c: frob #includes to match the new reality
5228
5229 2000-02-17  Dan Winship  <danw@helixcode.com>
5230
5231         * camel/camel-service.h:
5232         * camel/camel-service.c: Make camel-service us a Gurl internally.
5233         Remove the login/password interfaces and instead provide
5234         camel_service_connect_with_url. Add CamelExceptions
5235
5236 2000-02-17  bertrand  <Bertrand.Guiheneuf@aful.org>
5237
5238         * camel/camel-formatter.c (handle_text_plain): 
5239         (handle_text_html): use camel_stream_reset instead
5240         of seek. The formatter should be able to work 
5241         with all streams, not only seekable streams. 
5242         In the case where some provider implementation
5243         would not be able to provide a reset method 
5244         to their stream, implementors would have
5245         to find a workaround.
5246
5247         * camel/camel-session.c (camel_session_new): use
5248         (void) instean of () in function decl.
5249
5250         * camel/camel-folder.c: ifdef async operation 
5251         related code. 
5252
5253         * camel/camel-seekable-stream.c (_seek): added a warning.
5254         (_reset): default implementation of reset for seekable
5255         stream.
5256
5257         * camel/camel-mime-message.h: set_received_date declaration fix.
5258         cosmetic changes.
5259
5260         * camel/providers/mbox/camel-mbox-provider.c (camel_provider_module_init): 
5261         use (void) instead of ().
5262
5263         * camel/camel-stream.c (camel_stream_reset): 
5264         new method for CamelStream.
5265
5266 2000-02-17  Dan Winship  <danw@helixcode.com>
5267
5268         * camel/url-util.c (g_url_to_string): New function to convert
5269         a Gurl back into a char *.
5270
5271 2000-02-17  bertrand  <Bertrand.Guiheneuf@aful.org>
5272
5273         * camel/camel-formatter.c (handle_text_plain): 
5274         revamped so that it uses the output stream
5275         of the data wrapper
5276         (handle_text_html): ditto.
5277         
5278         
5279         * camel/camel-simple-data-wrapper.h: 
5280         * camel/camel-simple-data-wrapper.c (camel_simple_data_wrapper_new): 
5281         use (void) instead of ().
5282         (_get_output_stream): simple implementation. 
5283
5284 2000-02-16  bertrand  <Bertrand.Guiheneuf@aful.org>
5285
5286         * camel/camel-data-wrapper.c (_set_input_stream): ref input stream
5287         (_set_output_stream): ref output stream
5288         (_finalize): unref input and output streams
5289
5290         * camel/camel-seekable-substream.c (_set_bounds): don't
5291         seek the begining of the substream.
5292         (_eos): fix eos condition testing. 
5293         (_finalize): unref parent stream
5294         (_init_with_seekable_stream_and_bounds): ref parent stream
5295
5296         * camel/gstring-util.c (g_string_equal_for_hash): 
5297         (g_string_equal_for_glist): return type is int.
5298
5299         * camel/camel.h: 
5300         * camel/camel.c (camel_init): use (void) 
5301         instead of ().
5302         
5303 2000-02-16  NotZed  <NotZed@HelixCode.com>
5304
5305         * providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): Added
5306         libfilter to link line (temporarily?).  Required for
5307         filter-sexp.
5308
5309 2000-02-15  bertrand  <bertrand@helixcode.com>
5310
5311         * camel/camel-multipart.c (_localize_part): 
5312         this routine replaces the _read_part routine
5313         and does not store the part in a buffer. 
5314         (_set_input_stream): use the set_input_stream
5315         instead of the construct_from_stream.
5316         each bodypart is given an input stream. 
5317
5318         * camel/camel-mime-part-utils.c: 
5319         include the data-wrapper-repository header. 
5320         (camel_mime_part_construct_content_from_stream): 
5321         use the set_input_stream instead of the 
5322         construct_from_stream method. 
5323
5324         * camel/camel-seekable-substream.c (_set_bounds): 
5325         cur position is set to 0 not to inf_bound.
5326
5327 2000-02-15  bertrand  <Bertrand.Guiheneuf@aful.org>
5328
5329         * camel/camel-mime-part.c: include gmime-base64.h
5330         various compilation and runtime fixes.
5331         (_set_input_stream): store the input substream 
5332         for the content object.
5333
5334         * camel/camel-data-wrapper.h: declare the 
5335         set/get function on input/output stream.
5336
5337         * camel/camel-mime-part.c (_get_content_object): 
5338         don't use a temporary mem stream.       
5339
5340         * camel/camel-seekable-substream.c (_seek): 
5341         (_eos): 
5342         (_read): the substream can be unlimited in length
5343
5344         * camel/camel-data-wrapper.c (camel_data_wrapper_class_init): 
5345         set the get/set_input/output_stream methods.    
5346
5347         * camel/camel-multipart.c (_construct_from_stream): 
5348         camel_stream_seek -> camel_seekable_stream_seek
5349
5350 2000-02-14  Miguel de Icaza  <miguel@gnu.org>
5351
5352         * camel/providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): Add
5353         the unicode libraries as well.
5354
5355         * camel/camel-provider.c (camel_provider_register_as_module): Add
5356         error reporting here.  Desire to use Solaris increases.  Hair loss
5357         in the last two hours: 5,400.
5358
5359         * camel/providers/mbox/camel-mbox-provider.c
5360         (camel_mbox_get_provider): Renamed function.
5361
5362         * camel/camel.h: All include files use camel/ now here.
5363
5364         * camel/providers/mbox/Makefile.am: Drop all the dynamism from
5365         Camel, and make this a standard library.
5366
5367 2000-02-14  bertrand  <Bertrand.Guiheneuf@aful.org>
5368
5369         * camel/gmime-utils.c (get_header_array_from_stream): use the 
5370         eos stream method. 
5371         (gmime_read_line_from_stream): ditto.
5372
5373         * camel/camel-stream-fs.h (struct ): add the eof field
5374         cosmetics changes. 
5375
5376         * camel/camel-stream-fs.c (camel_stream_fs_init): set eof.
5377         (_read): set eof on end of file.
5378         (_eos): implemented.
5379
5380         * camel/gmime-utils.c (get_header_array_from_stream): 
5381         make a blocking version of the header parser. 
5382         When the fs stream uses gnome-vfs, this should
5383         be changed. 
5384         (gmime_read_line_from_stream): ditto. 
5385
5386 2000-02-11  bertrand  <Bertrand.Guiheneuf@aful.org>
5387
5388         * camel/camel-stream-fs.c: 
5389         everywhere, when using the cur_pos field, do it
5390         on the CamelSeekableStream object.
5391         (_seek): small fix. 
5392
5393         * camel/camel-seekable-stream.c (camel_seekable_stream_seek): 
5394         s/camel_stream_seek/camel_seekable_stream_seek/g
5395
5396         * camel/camel-seekable-stream.h: 
5397         (struct ): added a field to store the
5398         current position.
5399
5400         * camel/camel-seekable-stream.c (camel_seekable_stream_get_current_position): 
5401         New function. Allows to get the current position 
5402         of a seekable stream.
5403         
5404
5405 2000-02-13  NotZed  <notzed@zedzone.helixcode.com>
5406
5407         * providers/mbox/camel-mbox-search.c: New file, implements the
5408         search api for mbox folders.
5409
5410         * providers/mbox/Makefile.am: Link with ibex.
5411
5412         * camel-folder.c (camel_folder_has_search_capability): Api
5413         additions.
5414         (camel_folder_search_by_expression): Ditto.
5415
5416 2000-02-12  NotZed  <notzed@zedzone.helixcode.com>
5417
5418         * providers/mbox/camel-mbox-folder.c (_set_name): Setup index
5419         filename as well.
5420         (_init_with_store): Init index filename.  Hmm, none of these
5421         names ever seem to get free'd (FIXME?)
5422
5423         * providers/mbox/camel-mbox-folder.h: Add index file name.
5424
5425 2000-02-12  NotZed  <notzed@helixcode.com>
5426
5427         * camel-folder.h: Add folder search functions.
5428
5429         ** Created ChangeLog just for camel **
5430          - refer to ../ChangeLog for changes prior to this date.