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