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