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