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