diff options
Diffstat (limited to 'camel')
-rw-r--r-- | camel/ChangeLog | 22083 | ||||
-rw-r--r-- | camel/ChangeLog.pre-1-4 | 22083 |
2 files changed, 22083 insertions, 22083 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index 7ea58c89d4..e69de29bb2 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,22083 +0,0 @@ -2003-06-01 Jeffrey Stedfast <fejj@ximian.com> - - * broken-date-parser.c (d): Turn off debugging. - - * providers/pop3/camel-pop3-engine.c (get_capabilities): Move the - code that prepends the 'password' authtype to the auth list so - that we don't add it again when regetting the capabilities. - -2003-05-30 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (run_only_once): Turned off a debugging - printf. - -2003-05-27 Jeffrey Stedfast <fejj@ximian.com> - - This should finish fixing all variations of bug #42854, which, - funnily enough specified "copying" as the scenario for reproducing - this bug, but somehow I found/fixed it only for expunging for some - reason? I can't even guess as to how this happened. Oh well, - expunging needed fixing either way. - - * providers/imap/camel-imap-folder.c (imap_transfer_online): Sort - the uids here too (just like I had fixed for expunge a week or so - ago). - (imap_transfer_resyncing): Sort them here too. - (imap_search_by_uids): Sort here too, even though I don't think it - is necessary. Can't hurt. - (imap_expunge_uids_offline): Might as well sort here too. - -2003-05-22 Jeffrey Stedfast <fejj@ximian.com> - - * camel-object.c (camel_object_bag_destroy): Lets try this - again. We don't actually want to free the key here, because - camel_object_bag_remove() does that for us. This should fix bug - #43406 properly. - -2003-05-20 Jeffrey Stedfast <fejj@ximian.com> - - * camel-object.c (camel_object_bag_destroy): Create a second - GPtrArray for the keys. We don't want to use bag->free_key() on - the object. Fixes bug #43406. - -2003-05-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-summary.c (camel_folder_summary_load): Only display - a warning if errno != EINVAL (EINVAL means there was a version - mismatch, so we don't really need to warn here since we are - supposed to be able to handle this situation). - (perform_content_info_load): Turn off debugging message. - (summary_assign_uid): Turn off uid-clash warning. - (camel_folder_summary_decode_token): Turn off debug messages. - (summary_header_load): Turn off version-mismatch warning. - -2003-05-16 Jeremy Katz <katzj@redhat.com> - - * providers/smtp/camel-smtp-transport.c (smtp_helo): Ensure cmdbuf - is initialized to avoid compiler warning. - - * providers/local/camel-mbox-summary.c (summary_header_load): Cast - folder_size to uint32 to fix warning. - (camel_mbox_summary_sync_mbox): Update for new API. - - * providers/imap/camel-imap-utils.c (parse_params): - imap_parse_nstring expects size_t, not int - (imap_body_decode): Likewise. - - * camel-stream-filter.c (do_read): presize needs to be size_t - instead of int. - (do_write): Likewise. - - * camel-seekable-substream.c (stream_read): Return ssize_t instead - of int to match prototypes. - (stream_write): Likewise. - - * camel-mime-part.c (construct_from_parser): len needs to be - size_t instead of int. - - * camel-mime-parser.c (folder_scan_step): datalength needs to be a - size_t* instead of an int* to make dependent APIs safe. - (camel_mime_parser_step): Likewise. - (folder_scan_content): Likewise. - * camel-mime-parser.h: Likewise. - - * camel-mime-message.c (camel_mime_message_class_init): Use glib - macro for pointer/int conversions. - (construct_from_parser): Update for new API. - - * camel-folder-summary.c - (camel_folder_summary_info_new_from_parser): Update len to be - size_t for new API. - (summary_build_content_info): Likewise. - * camel-http-stream.c (http_get_headers): Likewise. - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): Likewise. - * camel-multipart-signed.c (signed_construct_from_parser): Likewise. - * camel-multipart.c (construct_from_parser): Likewise. - - * camel-folder-search.c (match_words_index): Use glib macros for - pointer/int conversions. - * camel-html-parser.c (tokenise_setup): Likewise. - (convert_entity): Likewise. - * camel-block-file.c (block_hash_func): Likewise. - (camel_block_file_get_block): Likewise. - (camel_block_file_get_block): Likewise. - (camel_block_file_detach_block): Likewise. - * camel-session.c (session_thread_msg_new): Likewise. - (session_thread_msg_free): Likewise. - (session_thread_wait): Likewise. - * camel-text-index.c (text_index_compress_nosync): Likewise. - (text_index_compress_nosync): Likewise. - (camel_text_index_validate): Likewise. - * camel-vee-folder.c (vee_folder_remove_folder): Likewise. - (unmatched_check_uid): Likewise. - (folder_added_uid): Likewise. - (vee_folder_build_folder): Likewise. - (folder_changed_add_uid): Likewise. - (folder_changed_remove_uid): Likewise. - * providers/imap/camel-imap-search.c (imap_body_contains): Likewise. - * providers/pop3/camel-pop3-folder.c (cmd_list): Likewise. - (cmd_uidl): Likewise. - - * camel-data-cache.c (data_cache_init): Cast to CamelCopyFunc. - Fixes a warning. - -2003-05-15 Not Zed <NotZed@Ximian.com> - - * camel-mime-utils.c (header_decode_word): Simplistic quick-fix - for #42710. Add a charset argument. If the data is 8 bit, try to - decode into the passed in charset (i.e. the message header?), at - worst, fall back to latin1, similarly to header_decode_text. - Fixed all callers to pass in a charset if available, or NULL. - -2003-05-14 Not Zed <NotZed@Ximian.com> - - ** See bug #42540 - - * camel-service.c (camel_gethostbyname): pre-initialise the error - return to invalid, so if we cancel, we definetly get a bad result. - Also, for a valid return against result, not herr. - (camel_gethostbyaddr): Likewise. - -2003-05-13 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-local-folder.c (local_delete): Only delete - the index if it is non-NULL. Fixes bug #42763. - -2003-05-13 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-utils.c (imap_uid_array_to_set): Added - a note to the comment block for this function noting that uids - MUST be in sorted order. - - * providers/imap/camel-imap-folder.c (imap_expunge_uids_online): - Sort the uids before splitting them into UID set chunks. The code - that splits the uid array into sets expects the uids to be in - sorted order. Fixes bug #42854. - - * providers/imap/camel-imap-command.c (imap_command_start): - Re-enable camel_verbose_debug logging. - -2003-05-12 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_helo): If - host->h_name is NULL or an empty string, default back to using the - IP address rather than the hostname in the EHLO command. - -2003-05-13 Ettore Perazzoli <ettore@ximian.com> - - * providers/imap/camel-imap-folder.c (d): Disable debugging. - - * providers/imap/camel-imap-command.c (d): Disable debugging. - - * providers/imap/camel-imap-search.c (d): Disable debugging. - -2003-05-02 Dan Winship <danw@ximian.com> - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): Don't call - g_utf8_validate on an empty message. Fixes a warning. - -2003-05-01 Jeffrey Stedfast <fejj@ximian.com> - - Workaround for POS mailers like the one in bug #42045. - - * camel-mime-utils.c (header_decode_date): Make sure the numeric - timezone is between -1200 and 1200, otherwise it is invalid. - - * broken-date-parser.c (get_tzone): Make sure the numeric timezone - is between -1200 and 1200, otherwise it is invalid. - -2003-04-29 Dan Winship <danw@ximian.com> - - * Makefile.am (camel_lock_helper_SOURCES): Remove camel-lock.c - from here because it upsets automake 1.6 for some reason - (camel_lock_helper_LDADD): Add camel-lock.o here - -2003-04-29 Jeremy Katz <katzj@redhat.com> - - * providers/imap/camel-imap-folder.c (parse_fetch_response): - body_len needs to be a size_t instead of int - -2003-04-22 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-utils.c: Disable debugging printfs. - - * providers/imap/camel-imap-store.c (imap_connect_online): #if 0 - out some code that parsed the namespaces since the results aren't - used and they generate debugging output. - -2003-04-23 Not Zed <NotZed@Ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_helo): only free the - host if it was set. removes a run-time warning. - - * camel-session.c (get_service): oops, the service owns the url - after we construct it. - -2003-04-22 Not Zed <NotZed@Ximian.com> - - ** Should fix #41629, #41448, et al. - - * tests/folder/test10.c: a new torture test for object bag - creation/unreffing. - - * camel-url.c (camel_url_copy): new function to copy a url. - - * camel-object.c (camel_object_bag_new): add arguments for key - copy and key free functions. Fixed all callers. - (camel_object_bag_destroy): fix a memleak, free the bag key. - (camel_object_bag_get, camel_object_bag_reserve) - (camel_object_bag_abort, save_bag, save_object): Make the key a - void type, rather than char *. - (camel_object_bag_add): As above, and also copy the key. - (camel_object_bag_remove_unlocked): free the key using - bag->free_key. - - * camel-session.c (register_provider) - (camel_session_destroy_provider, get_service): Changed to use an - object bag instead of a hash table for the service 'cache'. - (service_cache_remove): Removed, no longer required. - -2003-04-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_ctx_parse_status): Don't set seen_eof1 - here anymore once we get a trust metric. - (gpg_ctx_new): Init seen_eof1 to TRUE here. - (gpg_ctx_set_ostream): Change seen_eof1 to FALSE here this way we - only ever have to set this if we are expecting output. - (gpg_ctx_parse_status): Don't set seen_eof1 for importing either. - (gpg_ctx_op_step): Only FD_SET() those fd's that we have not yet - finished reading. - -2003-04-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-url-scanner.c (camel_url_web_end): Urls are unlikely to - end with punctuation or closing braces, so strip any of those off - the end of the url. Fixes bug #41461. - - * tests/mime-filter/data/html.1.out: Removed a trailing \n at the - end of the file, this is incorrect (since out input file does not - contain one). - - * camel-mime-filter-tohtml.c (html_convert): Only output a <br> if - we found an eoln in the input. Along the same lines, don't write a - '\n' to the output buffer unless we've encountered that eoln in - the input. Fixes bug #41407. - -2003-04-17 Not Zed <NotZed@Ximian.com> - - ** for #40989 - - * camel-text-index.c (text_index_delete): delete the block - file/key file directly, not just its files. - - * providers/local/camel-local-folder.c (local_delete): implement, - just delete the index file if it exists. - camel-store-delete-folder will delete other data (maybe it all - should be done here). - - * camel-block-file.c (camel_key_file_finalise): keep lock around - decrementing key file use count. - (camel_key_file_delete): new function to delete the key file (& - close it off). - (key_file_use): if we've been deleted, always fail. - (camel_block_file_finalise): only close the file if its a valid - fd. - (block_file_use): if we've been deleted, always fail. - (camel_block_file_delete): delete the block file & close. - (struct _CamelBlockFilePrivate): fix the !ENABLE_THREADS case to - still compile this. - - ** for #41163 - - * camel-multipart-signed.c (parse_content): Dont assume adding 1 - to line length will go to the next line. e.g. for dos lines that - end in \r\n. Fix for #41163. - (parse_boundary): util function to help above. - -2003-04-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_verify): The gpg child process exiting - does not necessarily mean that we've ready everything that we can - from its pipes, so don't use gpg_ctx_op_exited() as a loop-exit - condition. If for some reason the gpg child process does exit (due - to an error), gpg_ctx_op_step() will eventually fail (as soon as - it has finished reading any data in the pipes) and cause the loop - to be terminated anyway. This fixes truncation of the gpg --verify - stderr output that Evolution displays as the "validity report" - (for lack of a better description). - (gpg_ctx_op_step): Removed some debugging printf's - (gpg_ctx_get_diagnostics): Use a bitfield to decide if we've - already flushed the diagnostics stream, much simpler (plus we have - plenty of bits to spare so might as well use them). - (gpg_ctx_new): Fixed another logic bug which determined whether or - not we should convert the gpg output from the locale charset into - UTF-8. - -2003-04-10 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c: Turn off debugging if - CAMEL_VERBOSE_DEBUG isn't set. - -2003-04-10 Not Zed <NotZed@Ximian.com> - - * tests/mime-filter/data: filter data test cases. - - * tests/mime-filter/test-tohtml.c: New test for html filter. - - ** See bug #40969 - - * camel-mime-filter-tohtml.c (html_convert): Change the logic - slightly, scan a whole line within the main loop. - -2003-04-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_ctx_get_utf8_diagnostics): Removed. I - just realised that we ALWAYS want to get gpg's stderr in UTF-8, so - the better solution (plus less code duplication) is to just have - the diagnostics buffer be a CamelStreamMem with a charset filter. - (gpg_ctx_new): Setup a filter stream to convert our gpg stderr - diagnostics into UTF-8 if needed. - (gpg_ctx_free): Unref the diagnostcis stream. - (gpg_ctx_parse_status): Flush the diagnostics stream if we are - going to use the data in an exception. - (gpg_ctx_op_step): Use camel_stream_write() to append to the - diagnostics stream rather than appending the buffer to a - GByteArray like we used to do. - (gpg_ctx_op_step): Flush the diagnostics stream here too. - (gpg_verify): Use a const char *diagnostics string here, forcing a - slight rearrangement of calls - use the const char *dignostics - before we gpg_ctx_free, otherwise we'll be passing free'd memory - off to the cipher_validity. - (gpg_ctx_get_diagnostics): Do the work here to flush the - diagnostics stream and nul-terminate the buffer. Also return const - now, instead of strdupping. No need for that. - (gpg_ctx_parse_status): Convert the user hint to UTF-8. - -2003-04-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_ctx_get_utf8_diagnostics): Changed my - mind a bit on how I wanted this to work. Instead of aborting on an - illegal sequence, do like we do with camel-mime-filter-charset and - just skip over invalid sequences. Also, in the noop failure case, - close the iconv_t so we don't leak it. - -2003-04-09 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-utils.c (imap_body_decode): Save the - content size in a temp variable until after we've successfully - parsed all of the body_type_1part expr. Also fixed a type-o in the - body_type_mpart case that caused the parser to fail. - (imap_parse_body): On failure to parse the body, as we iterate - through the child nodes, set their children/parent/next nodes to - NULL so that content_info_free() won't double-free any of the - other nodes we have already free'd (or are about to free). - - * camel-gpg-context.c (gpg_ctx_get_utf8_diagnostics): New function - to get the UTF-8 version of the diagnostics (if the locale isn't - already UTF-8 safe). - (gpg_verify): Use the utf-8 diagnostics here. Also fixed a memleak - in the exception case. - - * camel-mime-filter-charset.c - (camel_mime_filter_charset_new_convert): NULL-protect the to/from - charsets in the g_warning call. - -2003-04-08 Jeffrey Stedfast <fejj@ximian.com> - - Fixes for bug #40778. Probably others as well. - - * providers/imap/camel-imap-utils.c (parse_params): Return 0 on - success, or -1 on fail. The other small utility functions should - probably do the same, but I was too lazy to fix them. Setting - inptr to NULL is just lame. - (imap_body_decode): New function to correctly parse a BODY - response. - (imap_parse_body): Rewritten to use the above function. - -2003-04-08 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_helo): Make sure - host->h_name is not an empty string too? Apparently for one user - his resolved hostname is "". Go figure. Probably a broken system, - but easy enough to work around. - - * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): If - store->engine->line is NULL, use _("Unknown error") as the error - string instead. - -2003-04-08 Not Zed <NotZed@Ximian.com> - - * camel-folder-summary.c (camel_folder_summary_load): use - g_strerror, and use errno directly rather than ferrno(). - (summary_header_load): set errno when we get a version mismatch. - -2003-04-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c: Disable debug printf's - -2003-03-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-gssapi.c (gssapi_challenge): If we are using the - heimdal krb5 implementation, don't free outbuf ever. Seems to - segfault if we do. - -2003-03-31 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-enriched.c (enriched_to_html): Use strncasecmp - for matching the nofill and /nofill tags. Also fixed to handle - enriched tags that require <param> tags. - -2003-03-28 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-store.c (get_folder): remove unused - var. - - * providers/imap/camel-imap-utils.c (imap_parse_list_response): - moved an unused var to the #if 0'd out block. - - * providers/imap/camel-imap-store.c - (parse_list_response_as_folder_info): remove unused vars. - - * camel-index-control.c (main): deifne camel_init() before using - it. - - * camel-vee-store.c (vee_get_folder): removed unused var. - - * camel-stream-mem.c (stream_write): warning -> fixme. - - * camel-stream-filter.c (_CamelStreamFilterPrivate): Add a ; to - the end of the struct definition. - - * camel-store.c (camel_store_delete_folder): remove unused var. - (camel_store_rename_folder): " - (camel_store_unsubscribe_folder): " - - * camel-mime-part.c (write_to_stream): Changed warning into a - TODO. - (construct_from_parser): removed warning, the code was fixed. - - * camel-mime-message.c (construct_from_parser): Remove the - warning, the code was fixed. - - * camel-mime-filter-enriched.c (camel_mime_filter_enriched_new): - Remove unused var. - - * camel-medium.c (camel_medium_get_header): Removed warning, and - changed docs to reflect it. - - * camel-gpg-context.c (gpg_ctx_parse_status): handle MODE_EXPORT - as a noop (warning). - - * camel-folder.c (get_message_user_tag): changed a warning into a - fixme (its not that important). - (camel_folder_get_message_user_tag): " - - * camel-data-cache.c (data_cache_finalise): removed unused vars. - (data_cache_expire): " - -2003-03-27 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-gssapi.c (gssapi_challenge): Get rid of debug - printf's that are no longer needed. In the case of errors, don't - release the outbuf gss_buffer_t since it shouldn't be set. Also - g_free (str) when we are done with it. - - * camel-mime-utils.c (header_encode_phrase_merge_words): When we - remove a node from the list, make sure to g_list_free_1(). - (header_encode_phrase_merge_words): Don't use - CAMEL_FOLD_PREENCODED as the upper-bound for merged-word length if - the merged-word will not be an rfc2047 encoded word. Instead, use - CAMEL_FOLD_SIZE-8 (which is the value we use in other places for - determining upper-bound lengths). Solves bug #38659. - -2003-03-27 Dan Winship <danw@ximian.com> - - * camel-url.c (append_url_encoded): Like camel_url_encode, but - works directly on an existing GString. - (camel_url_to_string, output_param): Use it. - (camel_url_encode): Likewise. Remove "escape_unsafe" arg since the - "unsafe" chars are the ones that should *always* be escaped, and - the places we were passing FALSE were wrong. - (camel_url_decode): replace with a new version - - * camel-file-utils.c (camel_file_util_safe_filename): Remove extra - arg to camel_url_encode. - - * tests/misc/url.c (main): Add tests of basic URL parsing and - unparsing - -2003-03-28 Not Zed <NotZed@Ximian.com> - - * - camel-mime-part-utils.c (simple_data_wrapper_construct_from_parser): - Do a more thorough check for html marked as text/plain. Check - that the text starts with <html or <!doctype. More complete fix - for #16817. - -2003-03-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-gssapi.c (camel_sasl_gssapi_finalize): Pass in the - addresses of the second args to the delete/release functions. - -2003-03-27 Not Zed <NotZed@Ximian.com> - - * camel-object.c (camel_object_bag_list): Ignore whether or not - the bag is currently reserved. We'll miss the new potential - object, but only 1. Should address #40103. - -2003-03-25 Jeffrey Stedfast <fejj@ximian.com> - - * camel-service.c (camel_gethostbyaddr): Don't use setv when we - don't need the stdarg interface. - (camel_gethostbyname): Same. - -2003-03-24 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-search.c (search_user_tag): This expression can - never return an array. We must always return a string value. - -2003-03-24 Timo Sirainen <tss@iki.fi> - - * camel-imap-command.c (imap_read_untagged) Integer overflow fix. - If server sent a huge literal length, only a few bytes of memory - was allocated to it, but server could write as much data there as - it wanted. - -2003-03-21 Jeffrey Stedfast <fejj@ximian.com> - - Camel part of the fix for Lewing's bug #39204. Second half of the - patch should also fix it so that text/plain parts that are - detected as being text/html are rendered as html (not that I agree - with this mind you, but corporate customers want this "feature"). - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): If the part is - text/html and doesn't have a charset and we are able to find a - charset in the meta tags of the html content, set the charset - param on the content-type. - (camel_mime_part_construct_content_from_parser): After setting the - content object on the mime part, re-set the content-type of the - content object back to the one from the parser (as it may contain - changes from the original - see changes made to the ct in - simple_data_wrapper_construct_from_parser for details). - -2003-03-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (camel_certdb_nss_cert_get): continue - reading the cert file until we've read it all or get a non-EINTR - errno. - -2003-03-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-gssapi.c: #include <com_err.h> instead of - #include <et/com_err.h> - -2003-03-20 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl.c: Plug in GSSAPI support. - - * camel-sasl-gssapi.[c,h]: Various fixes to make it compile (fixed - type-o's mostly). - -2003-03-20 Dan Winship <danw@ximian.com> - - Handle raw 8-bit From data "correctly". (The same way we handle - raw 8-bit Subject data.) - - * camel-mime-utils.c (header_decode_mailbox): Take a charset arg - and pass it to header_decode_string. - (header_decode_address): Take a charset arg and pass it to - header_decode_mailbox. - (header_mailbox_decode): Likewise. - (header_address_decode): Take a charset arg and pass it to - header_decode_address. - - * camel-folder-summary.c (summary_format_address): Take a charset - arg and pass to header_address_decode. - (message_info_new, camel_message_info_new_from_header): Pass - charset to summary_format_address - - * camel-internet-address.c (internet_decode): Update for - header_address_decode change. (Unfortunately we don't have a - charset to pass here.) - - * camel-mime-message.c (camel_mime_message_build_mbox_from): Move - this here from camel-mbox-summary since the same functionality is - needed by evolution-mail too (and update for header_address_decode - change) - - * providers/local/camel-mbox-summary.c - (camel_mbox_summary_build_from): Moved to CamelMimeMessage - -2003-03-17 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part.c (process_header): Removed unused variable left - over from my previous fix. - - * providers/smtp/camel-smtp-transport.c (smtp_send_to): Don't pass - 'has_8bit_parts' to smtp_data() anymore. - (smtp_data): No longer takes 'has_8bit_parts' argument. Ignore - whether or not the message has 8bit parts when deciding what the - required encoding type we need to enforce. Fixes bug #39744. - -2003-03-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part.c (process_header): Use - header_contentid_decode() as this new function should be safer - than the hack that we had before. - - * camel-mime-utils.c (header_contentid_decode): New function to - try and parse a content-id string in such a way as to work around - some of the known bugs in other MIME implementations. Try to be as - "safe" as we can - ie. don't allow for more than 1 @ (since the - mailer uses "@@@%d" as a fake content-id value for parts without - content-ids) and don't allow for invalid content-type chars. - -2003-03-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder.c (get_uids): Don't add bogus uids to the uid - array. Might fix bug #38868 (it's the only way I can figure that - camel_folder_get_message_info() could possibly return NULL for the - Outbox folder). - -2003-03-12 Not Zed <NotZed@Ximian.com> - - * camel-object.c (remove_bag): removed, it was double-freeing the - key. - (save_object): Just save the object in an array. - (camel_object_bag_destroy): first save the object bag's objects in - a list, then remove them one at a time from the bag since we can't - remove hash table entries while we're in a foreach (PITA glib - shit). For #39486. - (camel_object_bag_*): killed some warnings. - -2003-03-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-url-scanner.c (camel_url_addrspec_end): Doh! If inptr == - pos + 1, then return FALSE (before it was checking for inptr == - pos, but it will never be pos). - -2003-03-07 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (vee_search_by_expression): handle a null - return from search_by_expression, for bug #33786. - -2003-03-06 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-utils.c (imap_next_word): - s/g_strncasecmp/strncasecmp/g - - * camel-iconv.c: Updated to be an exact copy of e-iconv (except - names changed). We don't use this yet, but we may in the future. - - * camel-url.c (camel_url_new_with_base): Here too. - - * camel-sasl-kerberos4.c (krb4_challenge): Use camel_strdown() - here instead of g_strdown() since the latter has been deprecated. - - * providers/imap/camel-imap-utils.c (imap_parse_body): Use - camel_strdown() since g_ascii_strdown() does not do what we - thought. - - * providers/imap/camel-imap-store.c: - s/strstrcase/camel_strstrcase/g - - * providers/imap/camel-imap-folder.c (do_append): - s/strstrcase/camel_strstrcase/ - (handle_copyuid): Same. - - * string-utils.c (camel_strdown): New function because the - g_ascii_strdown interface sucks. - (camel_strstrcase): Renamed from strstrcase. - -2003-03-06 Jeffrey Stedfast <fejj@ximian.com> - - * camel-text-index.c (camel_utf8_next): Same as below. - - * camel-search-private.c (camel_utf8_getc): Updated since not all - platforms/compiles support __inline__. - -2003-03-06 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part.c (camel_mime_part_get_encoding): Get rid of the - const return - it mismatches the prototype and we don't need it - anyway. Fixes bug #39173. - -2003-03-06 Jeffrey Stedfast <fejj@ximian.com> - - Fixes for bug #39170 - - * camel-store-summary.c (camel_store_info_set_string): Remove - return keyword. - - * camel-session.c (camel_session_thread_msg_free): Remove return - keyword. - (camel_session_thread_wait): Same. - - * camel-index.c (camel_index_cursor_reset): Remove return keyword. - -2003-03-06 Jeffrey Stedfast <fejj@ximian.com> - - Fixes for bug #39168 - - * providers/local/camel-spool-summary.c: Get rid of the empty - private struct. - - * providers/local/camel-mbox-summary.c: Get rid of the empty - private struct. - - * camel-vee-store.c: Get rid of the empty private struct. - - * camel-mime-filter-from.c: Get rid of the empty private struct. - -2003-03-05 Jeffrey Stedfast <fejj@ximian.com> - - * providers/sendmail/camel-sendmail-transport.c - (sendmail_send_to): Add a CRLF filter to the output stream to - convert any CRLF sequences into plain old line-feeds to work - around a bug in some local transport programs. - -2003-03-04 Jeffrey Stedfast <fejj@ximian.com> - - * camel-object.h: s/class/klass in one place so that the header is - c++-safe. - -2003-03-03 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-openssl.c (camel_tcp_stream_ssl_new): Updated - to use the new API from a fe commits ago for the NSS stream. This - is just to make it compile, but does not update the behaviour to - act like the NSS stream. Note that people shouldn't be using - OpenSSL anyway. - (camel_tcp_stream_ssl_new_raw): Same. - - * camel-process.[c,h]: New source file containing convenience - functions for process creation/termination mainly for use with - Pipe filters but should be usable for anything we want. - - * camel-io.[c,h]: New source files implementing read/write system - calls with proper error checking and cancellation - (ie. StreamFs::read/write and CamelTcpStreamRaw::read/write). No - sense duplicating the same code over and over. Now I can use this - same code easily in other i/o code (such as Pipe filters and gpg - code?). - -2003-03-03 Not Zed <NotZed@Ximian.com> - - * camel-store.c (camel_store_unsubscribe_folder): Do similar - folder != NULL checking as for delete_folder before passing a NULL - to object_bag_remove. - -2003-02-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-http-stream.c (http_connect): Here too. - - * providers/smtp/camel-smtp-transport.c (connect_to_server): Same - as IMAP and POP. - - * providers/imap/camel-imap-store.c (connect_to_server): Same as - the POP3 code. - - * providers/pop3/camel-pop3-store.c (connect_to_server): Pass in - appropriate flags for camel_tcp_stream_ssl_new*() functions. - - * camel-tcp-stream-ssl.c (enable_ssl): Not all ssl/tls streams - will want to allow each of SSLv2, SSLv3 and TLSv1 so use flags to - decide which to enable/disable. - (camel_tcp_stream_ssl_new): Now takes a flags argument to mask out - which SSL/TLS versions the stream should be compatable with. - (camel_tcp_stream_ssl_new_raw): Same. - -2003-02-27 Jeffrey Stedfast <fejj@ximian.com> - - * camel-stream-filter.c: Add a 'flushed' state variable to the - private struct. - (do_read): Set p->flushed to TRUE after we call - camel_mime_filter_complete() on all the filters. - (do_reset): Set p->flushed to FALSE. - (do_eos): Make sure the filters have been flushed before returning - that the stream is at EOS. - - * camel-mime-filter-canon.c (complete): Don't add a eol - - otherwise we will fail to verify some mutt signatures that do not - have a blank line before the boundary line (and note that the last - \n before the boundary really belongs to the boundary anyway) so - #if 0 this code out for now. - -2003-02-27 Not Zed <NotZed@Ximian.com> - - * camel-multipart-signed.c: Undo jeff's changes. - - * providers/local/camel-spool-store.c (scan_dir): Fix a paste-o in - the object_bag_get key. - -2003-02-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-multipart-signed.c: Updated to use g_alloca instead of - alloca so that we can skip all the #ifdef checks and skip checking - for alloca in configure.in and all that foo. - - * camel-store.c (camel_store_delete_folder): Make sure the folder - is non-NULL before trying to remove it from the store's - object-bag. - -2003-02-25 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): canonicalise the - charset name (if it is an iso charset) so that our strncasecmp to - see if it is an iso-8859-# charset will be guarenteed to work on - all systems. - (canon_charset_name): New function to return the canonical iso - charset name. - (simple_data_wrapper_construct_from_parser): If the charset is - NULL *or* the charset == "us-ascii" then check that it is 7bit - clean to decide if it is rawtext (we did not check the case where - charset was "us-ascii" before). - -2003-02-25 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-message.c: Same as the ones below. - - * camel-mime-part.c: Reverted back to pre-camel-iconv - - * camel-filter-search.c: Same as below. - - * camel-folder-summary.c: Reverted back to pre-camel-iconv - - * camel.c (camel_init): Reverted to pre-camel-iconv - - * camel-charset-map.c (camel_charset_locale_name): Removed (part - of the revert). - (camel_charset_canonical_name): Same. - - * camel-mime-filter-charset.c: Revert back to using e_iconv from GAL. - - * camel-mime-part-utils.c: Revert back to using e_iconv from GAL. - - * camel-mime-utils.c: Revert back to using e_iconv from GAL. - - * camel-sasl-digest-md5.c: Revert back to using e-iconv from GAL. - -2003-02-24 Jeffrey Stedfast <fejj@ximian.com> - - * camel-charset-map.c (camel_charset_canonical_name): g_alloca - (strlen (charset) + 1) so we don't overflow the buffer. - - * providers/pop3/camel-pop3-stream.c (stream_write): Don't write - the passwd, fixes "bug" #38601. - - * camel-iconv.c: Make bucket->refcount 31 bits and bucket->used 1 - bit instead of having each use their own 32bit int. - (iconv_cache_bucket_expire): Use g_iconv_close() here, missed this - before. - (camel_iconv): Might as well call g_iconv here even though it just - calls iconv directly. - -2003-02-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-iconv.c (camel_iconv_charset_name): New function...back - from the depths of hell from whence it came originally. Turns out - that g_iconv_open() is lame and can't handle all the stuff we used - to handle in e_iconv_charset_name(). - (camel_iconv_open): Use camel_iconv_charset_name() on the to/from - charsets rather than camel_charset_canonical_name(). Now maybe - g_iconv_open will work for charsets such as "ks_c_5601-1987". - - * providers/pop3/camel-pop3-store.c (pop3_connect): Reget the - capabilities after a successful authentication. - - * providers/pop3/camel-pop3-engine.c (get_capabilities): If we are - in the TRANSACTION state and CAPA did not list UIDL as a supported - command, try checking for it the hard way. - -2003-02-23 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_data): Do it the - same way we just made the sendmail code do it. - - * providers/sendmail/camel-sendmail-transport.c - (sendmail_send_to): My last change but in a better way. - -2003-02-22 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_data): Remove all - Bcc headers before sending to the smtp server. - - * providers/sendmail/camel-sendmail-transport.c - (sendmail_send_to): Remove all Bcc headers before sending to - sendmail. - -2003-02-20 Jeffrey Stedfast <fejj@ximian.com> - - * camel.c (camel_init): Call camel_iconv_init(). - (camel_shutdown): Call camel_iconv_shutdown(). - - * camel-sasl-digest-md5.c (digest_response): Updated to use - camel-iconv and the new camel-charset-map functions. - - * camel-mime-utils.c: Updated to use camel-iconv and the new - camel-charset-map functions. - - * camel-mime-part-utils.c (check_html_charset): Use - camel_charset_canonical_name() instead of e_iconv_charset_name() - which is longer available. - (convert_buffer): Use camel-iconv. - (simple_data_wrapper_construct_from_parser): Since - camel_charset_iso_to_windows() returns the charset in it's - canonical format, no need to re-canonicalise it. - - * camel-mime-part.c (process_header): Use - camel_charset_canonical_name() instead of e_iconv_charset_name() - which is longer available. - - * camel-mime-message.c (process_header): Use - camel_charset_canonical_name() instead of e_iconv_charset_name() - which is longer available. - - * camel-mime-filter-charset.c: Use camel-iconv. - - * camel-folder-summary.c (message_info_new): Use - camel_charset_canonical_name() instead of e_iconv_charset_name() - which is longer available. - (content_info_new): Use camel_charset_locale_name(). - (camel_message_info_new_from_header): Same as message_info_new(). - - * camel-search-private.c: Use g_alloca() instead of alloca(). - - * camel-filter-search.c (check_header): Use - camel_charset_canonical_name() instead of e_iconv_charset_name() - which is longer available. - - * camel-charset-map.c (camel_charset_locale_name): New function, - replaces e_iconv_locale_charset(). - (camel_charset_canonical_name): New function, similar to - e_iconv_charset_name() but instead of returning the iconv-friendly - name, it returns the canonical name. (g_iconv will do the - iconv-friendly name conversions for us). - -2003-02-20 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-search.c (run_command): Redirect program's stdout - and stderr to /dev/null - - * camel-filter-driver.c (pipe_to_system): Redirect the program's - stderr to /dev/null - (pipe_to_system): Write the pipe to a mem stream and use the mem - stream in the parser. Also, when setting an exception get the - errno from the parser so we can give more info about the error to - the user. - -2003-02-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (stream_connect): Fixed a type-o in the - ENABLE_IPv6 ifdef section. - -2003-02-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (pipe_message): New filter action that - pipes the message source to the user-program and reads back the - modified message and replaces driver->priv->message with the new - message object. - (do_copy): Check p->modified to make sure the message hasn't been - modified by the pipe-message action - if it has been modified, - default to the slower camel_folder_append_message() way of - copying. - (do_move): Same. - (pipe_to_system): Set p->modified to TRUE if the user-program gave - us back a message stream and we were able to parse it. - (camel_filter_driver_filter_message): If the message has been - modified, always use camel_folder_append_message() when appending - it to the default folder. - -2003-02-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-search.c: Added a (get-size ) function to fix bug - #38073. - (search_get_size): Implemented. - -2003-02-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-url-scanner.c (url_scanner_table_init): Mark chars with - the high-bit set as CTRL chars. - (camel_url_web_end): If the char before the start of the url is an - open-brace, watch out for the matching close-brace. - (camel_url_file_end): Same. - -2003-02-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-smime-context.c (smime_get_password): Same as the gpg and - pkcs7 contexts. - - * camel-sasl-popb4smtp.c (popb4smtp_challenge): Updated for - camel_session_get_password(). - - * camel-pkcs7-context.c (get_password): Same as the gpg code. - - * camel-gpg-context.c (gpg_ctx_parse_status): Updated for - camel_session_get_password(). - - * providers/smtp/camel-smtp-transport.c (smtp_connect): No need to - set USER_CANCEL exception here as it is done by - camel_session_get_password(). Also updated for the new - get_password() API change. - - * providers/imap/camel-imap-store.c (imap_auth_loop): Updated for - camel_session_get_password() changes. We don't need to play the - "bad passwd" game here too, do we? Bah, probably should but I - don't feel like it for now. Maybe when we rewrite the IMAP - provider. - - * camel-session.c (camel_session_get_password): Now takes a - 'reprompt' argument that will force user-input to be given even if - we have the passwd cached. - - * providers/pop3/camel-pop3-store.c (pop3_connect): Instead of - uncaching the passwd after we receive a -ERR from the POP server, - set 'reprompt' to TRUE to force user-input for the next password - prompt (ie, make sure the front-end knows not to just return the - cached value). The front-end can then decide to fill-in the - user-input field with the last passwd that the user supplied. - (pop3_try_authenticate): Now takes a reprompt argument which we - pass into camel_session_get_password(). - -2003-02-05 Dan Winship <danw@ximian.com> - - * Makefile.am (libcamelincludedir): Define in terms of - privincludedir. - (camellibexecdir): Define in terms of privlibexecdir - (libcamel_la_LDFLAGS): Remove -rpath. (automake will add that) - - * providers/imap/Makefile.am (libcamelimapincludedir): Define in - terms of privincludedir. - (INCLUDES): Remove -I$(includedir) - * providers/local/Makefile.am: Likewise - * providers/nntp/Makefile.am: Likewise - * providers/pop3/Makefile.am: Likewise - * providers/sendmail/Makefile.am: Likewise - * providers/smtp/Makefile.am: Likewise - -2003-02-04 Not Zed <NotZed@Ximian.com> - - * camel-object.c (camel_object_bag_new): Init bag->owner to 0. - -2003-01-31 Not Zed <NotZed@Ximian.com> - - * camel-object.c (camel_object_bag_*): Changed to use a posix - semaphore instead of a condition variable + flag to reserve the - object bag because e_mutex_cond is broken. - -2003-02-04 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-utils.c (imap_parse_body): Use - g_ascii_strdown() instead of g_strdown, since g_strdown is - deprecated. - (imap_parse_body): Same. - - * providers/imap/camel-imap-folder.c (decode_internaldate): Use - strncasecmp() here too. - (parse_fetch_response): And here. - (camel_imap_folder_selected): Here too. - - * providers/imap/camel-imap-utils.c (imap_namespace_decode): Use - strncasecmp() instead of g_strncasecmp() because the latter is - deprecated. - - * providers/imap/camel-imap-store.c (imap_get_capability): Again here. - (hash_folder_name): Here too. - (compare_folder_name): And here. - (get_folder_online): Again. - (get_folder_offline): And again. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): - Same as below again. - - * providers/imap/camel-imap-command.c (camel_imap_response_free): - Same as below. - - * providers/smtp/camel-smtp-transport.c (smtp_data): Use - strcasecmp() because g_strcasecmp() is deprecated. - - * camel-url.c (camel_url_new_with_base): Use g_ascii_strdown() - instead of g_strdown, since g_strdown is deprecated. - -2003-01-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-gssapi.c (gssapi_challenge): Pass in some default - flags to gss_init_sec_context() (these default flags are defined - as a MUST in rfc1964). - -2003-01-22 Hans Petter Jansson <hpj@ximan.com> - - * Makefile.am: $(libexec) -> $(libexecdir) - -2003-01-22 Ettore Perazzoli <ettore@ximian.com> - - * providers/imap/Makefile.am (libcamelimapincludedir): Update to - the new $(BASE_VERSION)-versioned path. - * providers/smtp/Makefile.am (libcamelsmtpincludedir): Likewise. - * providers/sendmail/Makefile.am (libcamelsendmailincludedir): - Likewise. - * providers/pop3/Makefile.am (libcamelpop3includedir): Likewise. - * providers/nntp/Makefile.am (libcamelnntpincludedir): Likewise. - * providers/local/Makefile.am (libcamellocalincludedir): Likewise. - - * camel-lock-client.c (camel_lock_helper_init): Use - CAMEL_LIBEXECDIR instead of CAMEL_SBINDIR to find - camel-lock-helper. - - * Makefile.am: Install camel-lock-helper and camel-index-control - in $(libexec)/evolution/$(BASE_VERSION)/camel. Install - libcamel.la in $privlibdir. - (install-exec-hook): Update for the new location of - camel-lock-helper. - (libcamelincludedir): Version using $(BASE_VERSION). - (INCLUDES): Define CAMEL_LIBEXECDIR. - -2003-01-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-canon.c (complete): Set the backbuflen to 0 so - that calling us again won't re-flush the same data. - -2003-01-17 Larry Ewing <lewing@ximian.com> - - * camel-mime-filter-enriched.c (enriched_to_html): only grow the - buffer when we are out of space. - -2003-01-14 Not Zed <NotZed@Ximian.com> - - * camel-mime-parser.c (folder_scan_step): If we have no - content-type header, set it to text/plain explcitly, rather than - NULL, because some code doesn't handle NULL. - -2003-01-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-gssapi.[c,h]: New source files implementing the - GSSAPI SASL mechanism. - -2003-01-13 Not Zed <NotZed@Ximian.com> - - * camel-mime-filter-tohtml.c: fix header include order. - - * camel-object.c (camel_object_bag_reserve): Add an assert to - check we're not trying to reserve the bag more than once in a - given thread. - (camel_object_bag_list): If we have reserved the bag, dont try and - cond wait. Fixes a deadlock. - - * camel-mime-filter-tohtml.c (writeln): Read the characters as - utf8, rather than as 8 bit bytes. Remove the PRESERVE_8BIT as it - has no meaning. Also change the default logic slightly so that 8 - bit or greater characters are properly converted to entities. - - * camel-utf8.c (camel_utf8_getc_limit): new function, gets a utf8 - char, bounded by an end pointer. - -2003-01-07 Dan Winship <danw@ximian.com> - - * camel-provider.h (CamelProvider): add a "translation_domain" - field. (NULL for all providers in the camel source tree itself). - - * camel-session.c (register_provider): Translate provider strings - in the correct domain - -2003-01-06 Not Zed <NotZed@Ximian.com> - - * camel-store.c (store_sync): init local exception before doing - anything. fixes a crash. - -2003-01-04 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_send_to): Instead of - checking recipients != NULL, check that camel_address_length - (recipients) != 0 since it is illegal for recipients to be NULL - (camel_transport_send_to already checks this). - -2002-12-17 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-utils.c: Replace calls to - g_string_sprintfa() with g_string_append_printf() since the former - seems to have been deprecated. - - * providers/imap/camel-imap-search.c: Same. - - * providers/imap/camel-imap-folder.c: Here too. - - * providers/local/camel-mbox-summary.c: And here. - - * providers/local/camel-local-summary.c: Replace - g_string_sprintf() with g_string_printf(). - - * camel-data-cache.c (data_cache_expire): Replace - g_string_sprintf() with g_string_printf(). - - * camel-url.c: Replace calls to g_string_sprintfa() with - g_string_append_printf() since the former seems to have been - deprecated. - - * camel-service.c: Same. - - * camel-mime-utils.c: Here too. - -2002-12-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): Detect text/html - parts that were marked as text/plain and re-tag them as text/html - parts. Note: currently just checks if the first non-lwsp char is a - '<' - but we might need to be smarter about this? *sigh* Stupid - Windows mailers. - - * camel-mime-filter-tohtml.c (camel_text_to_html): New convenience - function to replace calls to e_text_to_html() in the - mailer/composer etc. - - * camel.h: #include some headers we had forgotten to add - previously, also added camel-mime-filter-enriched.h. - - * camel-mime-filter-enriched.[c,h]: New stream filter to convert - text/enriched and text/richtext into HTML. - -2002-12-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-multipart-signed.c (camel_multipart_signed_verify): Don't - apply the CANON_STRIP filter here, since we are verifying whatever - raw data we received (all we want to do is convert o the canonical - CRLF format). - -2002-12-10 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-tohtml.c (html_convert): Use camel-url-scanner - instead of regex. - -2002-12-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-url-scanner.c (camel_url_addrspec_end): Fixed to not be - fooled in the case where the address is followed immediately by a - period. - (camel_url_web_end): Made more robust. - (camel_url_scanner_scan): Oops. We need to set the match->pattern - string pointer to the correct pattern before executing the - start/end methods (as some of them rely on this info). - -2002-12-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-url-scanner.c: New code to scan for patterns (used only - for url pattern matching atm, but we may find other uses for this - and thus rename it? I dunno). Uses ETrie. - -2002-12-07 Not Zed <NotZed@Ximian.com> - - * camel-data-cache.c (data_cache_init): Use a bag instead of a - hashtable to track the cache streams. - (data_cache_finalise): Same. - (free_busy): No longer needed. - (data_cache_expire): use bag instead of hashtable. - (stream_finalised): No longer required. - (camel_data_cache_add): objectbagise - (camel_data_cache_get): " - (camel_data_cache_remove): " - (data_cache_path): Set the now expired date before running expiry, - so it plays better with multiple threads. Still a couple of - harmless races. - -2002-12-06 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-store.c (scan_dir): folders -> - object bag. - (get_folder_info_mbox): folders -> object bag. - - * providers/local/camel-mh-store.c (folder_info_new): folders -> - object bag. - - * providers/local/camel-maildir-store.c (scan_dir): folders -> - object bag. - - * providers/local/camel-local-store.c (rename_folder): folders -> - object bag. - - * camel-private.h (CamelStorePrivate): Remove 'cache' lock, - handled by the objectbag. - - * providers/imap/camel-imap-store.c (copy_folder): Removed. - (imap_store_refresh_folders): folders -> object bag. - (get_folder_counts): folders -> object bag. - - * camel-vee-store.c (vee_get_folder): changes for folders - objectbag. - (vee_get_folder_info): Change to use folders objectbag. Also, - dont refresh the base folder if we're in FAST mode. - (build_info): Removed, no longer needed. - (vee_rename_folder): Fixed for folders objectbag. - - * camel-store.c (camel_store_init): init the folders objectbag. - (camel_store_finalize): Destroy the folders object bag. - (folder_matches): - (folder_finalize): Removed, now handled implicitly by the - objectbag. - (camel_store_get_folder): object bag changes. - (camel_store_delete_folder): " - (get_subfolders): Removed, now handled without a callback. - (camel_store_rename_folder): Changed to use object bag of folders. - (trash_add_folder): Removed. - (init_trash): use folders object bag. - (copy_folder_cache): - (sync_folder): Removed, no longer needed. Weird arsed code anyway. - (store_sync): Use folder object bag instead of hashtable. - (camel_store_unsubscribe_folder): " - (camel_store_init): remove cache_lock init, no longer used. - (camel_store_finalize): Same for cleanup. - -2002-12-05 Not Zed <NotZed@Ximian.com> - - * camel-store.h (struct _CamelStore): change folders from a - hashtable into a CamelObjectBag. - - * camel-object.c (camel_object_ref): Use type_lock instead of - class lock for ref counting. - (camel_object_unref): Use type_lock instead of class lock for - unref. - (camel_object_unref): If the object is 'bagged', then also look - hooks, and remove it from any bags. - (camel_object_bag_new): - (camel_object_bag_destroy): - (camel_object_bag_add): - (camel_object_bag_get): - (camel_object_bag_remove_unlocked): - (camel_object_bag_list): - (camel_object_bag_abort): - (camel_object_bag_remove): New functions to implement a utility - object which can manage a 'bag' of weakly ref'd children in an - atomic & threadsafe way. - -2002-12-04 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store-summary.c - (camel_imap_store_summary_add_from_full): Properly handle the case - where the namespace is "". Fixes bug #34975 - -2002-12-03 Jeffrey Stedfast <fejj@ximian.com> - - * broken-date-parser.c (get_tzone): Fixed to not get false - positives when the token is shorter than the actual timezone - string (but matches the first little bit of it). - (datetok): Modified to properly handle when the first char of a - token is a special char (such as a '-') that is also used as a - token delimiter. - -2002-11-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (stream_read): Use the new - camel_operation_cancel_prfd() function to get the cancellation fd - so we can poll on it for cancellation stuff. - (stream_write): Same. - -2002-11-22 Not Zed <NotZed@Ximian.com> - - * camel-operation.c (camel_operation_cancel_prfd): Implement, gets - a nspr pr filedesc to poll/wait on - (struct _CamelOperation): include a pr filedesc. - -2002-11-21 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store-summary.c - (camel_imap_store_summary_namespace_find_path): If we have a - namespace of "", then always match any path. - (camel_imap_store_summary_namespace_find_full): Same, for full - names. Should address #33309 & friends. - -2002-11-19 Radek Doulik <rodo@ximian.com> - - * camel-mime-filter-tohtml.c (html_convert): added - CAMEL_MIME_FILTER_TOHTML_PRESERVE_8BIT flag - -2002-11-18 Rodney Dawes <dobey@ximian.com> - - * tests/*/Makefile.am: Removed $(GNOME_LIBDIR) and $(GNOMEUI_LIBS) - -2002-11-15 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (imap_connect_online): If the - namespace is at/below INBOX, check for the INBOX explicitly (since - it obviously won't show up in a LSUB INBOX.*). If either INBOX is - not returned in the response or if the folder flags contain - \NoSelect, subscribe to INBOX and then try LSUB again. - -2002-11-11 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-tohtml.c (html_convert): Rewritten. Much much - much cleaner implementation now, though uses malloc/free more - often than I'd like. - -2002-11-11 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (get_message_simple): Use - g_strerror when setting an exception string (we need it to be in - UTF-8). - - * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): Use - g_strerror when setting an exception string (we need it to be in - UTF-8). - - * providers/pop3/camel-pop3-folder.c (pop3_refresh_info): Use - g_strerror when setting an exception string (we need it to be in - UTF-8). - (pop3_get_message): Same. - - * providers/local/camel-spool-summary.c (spool_summary_sync_full): - Use g_strerror when setting an exception string (we need it to be - in UTF-8). - (spool_summary_check): Here too. - - * providers/local/camel-spool-store.c (construct): Use g_strerror - when setting an exception string (we need it to be in UTF-8). - (get_folder): Same. - (scan_dir): Here too. - - * providers/local/camel-spool-folder.c (spool_lock): Use - g_strerror when setting an exception string (we need it to be in - UTF-8). - - * providers/local/camel-mh-summary.c (mh_summary_check): Use - g_strerror when setting an exception string (we need it to be in - UTF-8). - - * providers/local/camel-mh-store.c (delete_folder): Use g_strerror - when setting an exception string (we need it to be in UTF-8). - - * providers/local/camel-mbox-summary.c (summary_update): Use - g_strerror when setting an exception string (we need it to be in - UTF-8). - (mbox_summary_sync_full): Here too. - (mbox_summary_sync_quick): Same. - (mbox_summary_sync): Also here. - (camel_mbox_summary_sync_mbox): Again here. - - * providers/local/camel-mbox-folder.c (mbox_lock): Use g_strerror - when setting an exception string (we need it to be in UTF-8). - (mbox_append_message): Same. - (mbox_get_message): Here too. - - * providers/local/camel-maildir-summary.c (maildir_summary_load): - Use g_strerror when setting an exception string (we need it to be - in UTF-8). - (maildir_summary_check): Same. - - * providers/local/camel-maildir-store.c (get_folder): Use - g_strerror when setting an exception string (we need it to be in - UTF-8). - (delete_folder): Same. - (delete_folder): Here too. - - * providers/local/camel-local-summary.c (local_summary_sync): Use - g_strerror when setting an exception string (we need it to be in - UTF-8). - - * providers/local/camel-local-store.c (get_folder): Use g_strerror - when setting an exception string (we need it to be in UTF-8). - (create_folder): Same. - (xrename): Here too. - (rename_folder): And here. - (delete_folder): Also here. - - * camel-provider.c (camel_provider_init): For debugging printfs, - we want to use normal strerror (we want locale charset, not - UTF-8). - - * camel-movemail.c (camel_movemail): Use g_strerror when setting - an exception string (we need it to be in UTF-8). - (movemail_external): Same. - (camel_movemail_copy_file): Here too. - (camel_movemail_solaris): Also here. - - * camel-mime-utils.c (rfc2047_decode_word): For debugging printfs, - we want to use normal strerror (we want locale charset, not - UTF-8). - (header_encode_param): Same. - - * camel-mime-part-utils.c (convert_buffer): For debugging printfs, - we want to use normal strerror (we want locale charset, not - UTF-8). - - * camel-lock-client.c (camel_lock_helper_init): Use g_strerror - when setting an exception string (we need it to be in UTF-8). - - * camel-data-cache.c (camel_data_cache_remove): Use g_strerror - when setting an exception string (we need it to be in UTF-8). - - * camel-tcp-stream-raw.c (flaky_tcp_write): For debugging printfs, - we want to use normal strerror (we want locale charset, not - UTF-8). - (flaky_tcp_read): Same. - - * camel-gpg-context.c (gpg_ctx_op_step): For debugging printfs, we - want to use normal strerror (we want locale charset, not UTF-8). - - * camel-service.c (camel_gethostbyname): Use g_strerror when - setting an exception string (we need it to be in UTF-8). - - * camel-lock.c (camel_lock_dot): Use g_strerror when setting an - exception string (we need it to be in UTF-8). - (camel_lock_fcntl): Same. - -2002-11-07 Not Zed <NotZed@Ximian.com> - - * camel-mime-part.c (camel_mime_part_set_content_type): constify - the content_type. - -2002-11-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-i18n.h: Added. - - * camel-object.h: #include camel-i18n.h instead of gnome-i18n.h - - * camel-lock.c: Same. - -2002-11-07 Rodrigo Moya <rodrigo@ximian.com> - - * camel-object.h: removed gnome-defs.h, it does not exist. - -2002-11-05 Not Zed <NotZed@Ximian.com> - - * Makefile.am (camel_lock_helper_LDADD): Created temporary link - list, we need to link with something for gettext. - - * camel.h: Remove gstring-util.h and hash-table-utils.h. - - * camel-text-index.c: - (text_index_normalise): Changed for g_utf8_strdown api change. - - * camel-search-private.c: - * camel-mime-utils.c: - * camel-mime-part-utils.c: - * camel-html-parser.c: - * camel-charset-map.c: Include glib/gunicode.h from glib instead - of gal. - - * camel-filter-driver.c: Remove include of gtk/gtk.h, should never - have been there. - -2002-11-01 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (g_string_append_len): Removed. Glib2 has - this function. - - * providers/local/camel-local-store.c (delete_folder): Use - g_path_get_basename instead of g_strdup (g_basename (filename)). - - * camel-uid-cache.c (camel_uid_cache_new): Use g_path_get_dirname - since g_dirname has been deprecated. - -2002-10-31 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (camel_gpg_context_class_init): Set the - virtual method pointers to the import/export methods. - (camel_gpg_context_init): Set the key_protocol string. - (gpg_hash_to_id): Handle 2 more hash types. - (gpg_id_to_hash): Same. - (gpg_ctx_op_step): Slight fixes to support import/export. - (gpg_ctx_parse_status): Fix to hack around the fact that importing - keys doesn't write to stdout. - (gpg_import_keys): Implemented. - (gpg_export_keys): Implemented. - - * camel-cipher-context.c (camel_cipher_context_class_init): Hook - up default virtual methods for import/export. - (camel_cipher_import_keys): Implemented. - (camel_cipher_export_keys): Implemented. - -2002-10-31 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: Removed hash-table-utils.[c,h] from the build. - - * hash-table-utils.[c,h]: Removed. - - * string-util.c: Imported g_strcase[hash,equal] into here so we - can remove hash-table-utils.[c,h]. - - * camel-medium.c: Removed #include "hash-table-utils.h" - - * camel-mime-message.c: Same here. - - * camel-mime-part.c: And here. - - * camel-session.c: Here too. - - * providers/imap/camel-imap-store-summary.c: #include - string-utils.h instead of hash-table-utils.h - - * camel-charset-map.c: Same. - - * camel-folder-summary.c: Here too. - - * camel-provider.c: Again here. - - * camel-store-summary.c: And again... - -2002-10-31 Jeffrey Stedfast <fejj@ximian.com> - - Remove a ton of useless snot. - - * Makefile.am: Remove gstring-util.[c,h] from the build. - - * gstring-util.[c,h]: Removed. - - * string-utils.c (string_equal_for_glist): Removed. - (string_split): Removed. - (string_trim): Removed. - (string_prefix): Removed. - (string_unquote): Removed. - (strip): Removed. - - * hash-table-utils.c (g_hash_table_generic_free): Removed. - - g_str[n]casecmp functions are deprecated in glib2. - - * string-utils.c (strstrcase): Use strncasecmp instead of - g_strncasecmp. - - * hash-table-utils.c (g_strcase_equal): Use strcasecmp - instead of g_strcasecmp. - - * camel-smime-utils.c (camel_smime_is_smime_v3_signed): Same. - (camel_smime_is_smime_v3_encrypted): Here too. - - * camel-sasl-digest-md5.c (decode_data_type): And here. - (parse_server_challenge): Again here. - - * camel-pgp-mime.c (camel_pgp_mime_is_rfc2015_signed): Same. - (camel_pgp_mime_is_rfc2015_encrypted): Same - - * camel-mime-part-utils.c (check_html_charset): Here too. - - * camel-folder-summary.c (camel_system_flag): Same. - -2002-10-25 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_ctx_parse_status): Don't prematurely - set gpg->complete to TRUE. Let gpg_ctx_op_step () set it to TRUE - when gpg closes the status-fd instead. - -2002-10-24 Not Zed <NotZed@Ximian.com> - - ** For bug #31647 and bug #31456. - - * camel-store-summary.c (store_info_string): for STORE_INFO_NAME, - skip the leading /. - - * providers/imap/camel-imap-store.c - (parse_list_response_as_folder_info): Remove jeff's last patch, - and use the store summary to create the name and path of the - folderinfo so it manages namespace issues. - (get_folder_info_online): Just pass @top directly to - build_folder_info always, since namespace is mapped to 1 tree - level. - (imap_build_folder_info): Remove jeff's last patch, dont strip - leading /'s, they shouldn't exist. - (imap_connect_online): Remove adding the INBOX here, we add it - later. - (get_subscribed_folders): Make sure INBOX is always in the list. - some imap servers dont seem to let you subscribe to it(?), so - always have it act as subscribed. - - * camel-store.c (camel_folder_info_build): back out the last 2 - patches from Jeff (for #31456) to get the original behaviour. - (camel_folder_info_build): When creating a fake - parent, dont strip the namespace from the full_name. malloc keys - in hash since we dont have them anymore. - (free_name): Helper to free names. - - * providers/imap/camel-imap-store-summary.c - (camel_imap_store_summary_namespace_new): Canonicalise the - namespace (strip trailing dir_sep), and change the path to remove - any /'s. - (camel_imap_store_summary_namespace_find_path): - (camel_imap_store_summary_namespace_find_full): new, find - namespace by path/full name. - (camel_imap_store_summary_full_from_path): Changed to a simple - wrapper around path_to_full, after checking namespace. - (camel_imap_store_summary_add_from_full): map the namespace if - present. - (camel_imap_store_summary_path_to_full): If namespace exists, - unmap it. - -2002-10-18 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_folder): - Canonicalise the source_uri to not have a path. Fixes bug #32268. - -2002-10-17 Jeffrey Stedfast <fejj@ximian.com> - - Possible fix for bug #32270 - - * providers/pop3/camel-pop3-store.c (try_sasl): If we get an I/O - error, we should not be setting the CANT_AUTH exception but should - instead be setting the SYSTEM exception. Also check for EINTR - which signifies a USER_CANCEL exception. - (pop3_try_authenticate): If the auth mechanism isn't supported, - don't set the CANT_AUTH exception since then we will loop and try - again with the same data which will just cause an infinite loop. - (pop3_connect): Simplified a bit. - -2002-10-17 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (camel_certdb_nss_cert_set): If - ~/.camel_certs doesn't exist, create it. - -2002-10-15 Not Zed <NotZed@Ximian.com> - - * camel-tcp-stream-ssl.c (cert_fingerprint): helper, build - fingerprint. - (camel_certdb_nss_cert_get): Helper for nss certs. Lookup cert. - As well as fingerprint, the whole raw cert is checked for - validity. - (camel_certdb_nss_cert_add): Add an nss cert to a certdb, also - saves the cert by fingerprint in ~/.camel_certs/. - (ssl_bad_cert): Changed to use above functions to simplify logic. - (ssl_bad_cert): Also added non-compiled code which mimics what - mozilla does, but it doesn't work right :-/ - (camel_certdb_nss_cert_set): Save the raw cert associated with a - cert. - - * camel-certdb.c (certdb_cert_free): Free the raw cert data if - set. - -2002-10-14 Not Zed <NotZed@Ximian.com> - - * camel-file-utils.c (camel_file_util_encode_string): Encode a - length of 0 as 1, not 0, to match the decode code. - -2002-10-03 Not Zed <NotZed@Ximian.com> - - * camel-folder.c (filter_filter): Do the filtering ourselves. - This is so a problem like a missing uid (which can happen - legitemitely) doesn't prematurely abort filtering. Stop on all - other errors. See #31667. - -2002-10-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (camel_gpg_context_new): No longer takes a - path argument. - (camel_gpg_context_fianlise): No need to free ctx->path. - (gpg_ctx_new): No longer takes a path argument either. - (gpg_ctx_free): No need to free ctx->path, it's no longer used. - (gpg_ctx_op_start): Don't stat the path anymore and change the - first arg to execvp to "gpg" so that we use the shell's - environment to find gpg. - (gpg_sign): Updated. - (gpg_verify): Updated. - (gpg_encrypt): Updated. - (gpg_decrypt): Updated. - (gpg_ctx_get_argv): Removed some debug printfs. - -2002-10-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_id_to_hash): If the hash id is NULL, - return CAMEL_CIPHER_HASH_DEFAULT. Fixes bug #32229. - -2002-10-08 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-command.c (imap_read_response): If the - response from the IMAP server is "No", don't set the - SERVICE_UNAVAILABLE exception, this makes error reporting in the - UI for deleting IMAP folders that cannot be deleted inaccurate - (ie, it reports "Cannot delete in offline mode" which is not the - problem). - -2002-10-07 Jeffrey Stedfast <fejj@ximian.com> - - Fixes bug #31752 - - * providers/smtp/camel-smtp-transport.c (connect_to_server): Don't - forget to send another EHLO command to the server once we toggle - into STARTTLS mode. - (smtp_helo): Reset any flags set using the EHLO response and also - any authtypes. - -2002-10-06 Jeffrey Stedfast <fejj@ximian.com> - - Fixes bug #31681 - - * camel-mime-utils.c: Fix all mailing list regex patterns to allow - any number of spaces *or* tabs as pre-padding for the header - values. - -2002-10-03 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part.c (write_to_stream): Use the content-object's - rawtext flag to decide if it needs to be filtered through the - charset filter instead of using the mime part's rawtext flag since - this will never be set. Partial fix for bug #31655. - -2002-10-03 Not Zed <NotZed@Ximian.com> - - * camel-folder.c (folder_changed): Dont get the filter driver - inside the change_lock. Its not necessary, and can cause deadlock - with the way the mailer gets the filter driver via g_mainloop. - Should fix #31572. - -2002-10-02 Jeffrey Stedfast <fejj@ximian.com> - - * camel-charset-map.c (camel_charset_iso_to_windows): Map us-ascii - to windows-1252 also. - -2002-10-02 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-folder.c (get_matching): Set *set to - NULL if we dont get any matches. - (imap_sync_online): If we get no matches, skip any work, also - reorder some code to make it easier to skip. See #31031. - - * providers/imap/camel-imap-store.c - (imap_check_folder_still_extant): Default to "TRUE", if the list - command failed, it probably means a server problem, assume the - worst. This makes imap_refresh_info not clear the exception and - crash. Fixes crash of #31000. - -2002-10-01 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-folder.c (imap_refresh_info): Make - sure we pass the exception to imap_folder_selected(), otherwise - failures can be lost. See bug #31000. - -2002-10-01 Not Zed <NotZed@Ximian.com> - - * camel-folder.c (thaw): Add an assertion that the frozen count>0. - (freeze): Same for >= 0. - - * camel-vee-folder.c (camel_vee_folder_remove_folder): Use the - unmatched freeze_count when thawing folders removed from - unmatched, rather than the folder's freeze_count. Might be - related to #27391. - -2002-10-01 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (decode_internaldate): Use - strtol when decoding the timezone (since it can be negative) and - don't forget to increment inptr to the start of the time (ie, - don't leave inptr pointing to the year when decoding the - hour:min:sec). - -2002-09-30 Jeffrey Stedfast <fejj@ximian.com> - - Fixes bug #31456. - - * providers/imap/camel-imap-store.c (imap_connect_online): Don't - LSUB "" "*", instead get both an LSUB containing the subfolders of - the namespace and an LSUB of INBOX (assuming namespace was - non-empty). This fix really has nothing to do with bug #31456 but - is what should have been done in the first place. - (parse_list_response_as_folder_info): Simplify a tad and strip - extra leading /'s from fi->path. - (imap_build_folder_info): Strip extra leading /'s from fi->path. - - * camel-store.c (camel_folder_info_build): Don't strip the - namespace from the fi->full_name when hashing or creating fake - parent folder-infos. Fixes a bug I found while trying to reproduce - bug #31456. - (camel_folder_info_build_path): Strip off extra leading dir_sep - chars from the path. - -2002-09-30 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-folder.c (imap_get_message): Remove - debug content_info_dump, could cause a crash, and not really - needed anymore. - - * camel-folder-summary.c (camel_content_info_dump): Check ci->type - != NULL before dereferencing it. Should fix crash #31331. - -2002-09-27 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (decode_internaldate): New - function to decode the INTERNALDATE response from an IMAP server - so we don't have to use my broken-date-parser routines. - -2002-09-27 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (connect_to_server): - NULL-check the streams before unreffing them in the case of a - failure during ssl negotiations. - - * camel-tcp-stream-ssl.c (camel_tcp_stream_ssl_enable_ssl): Check - SSL_ResetHandshake() for errors. Also force a handshake after - we've reset the handshake state on the socket. - -2002-09-27 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-folder.c (imap_update_summary): Use - the summary's last uid as the one to fetch from, ignoring the - cache. Use strtoul instead of atoi as well. - - * providers/imap/camel-imap-store.c (get_folder_counts): If we - have the folder open, and the unread count has changed, refresh - it. Should fix #30399 enough. Also in non-check-all mode, if we - have the folder open, use it anyway. - -2002-09-26 Not Zed <NotZed@Ximian.com> - - * tests/folder/test2.c (main): Treat spool as a local folder, so - the ref checks work right. - - * providers/local/camel-spool-store.c (get_folder): Implement - FOLDER_CREATE flag. - (scan_dir): Dont free name on exception, its alloca'd. - (scan_dir): If we start scanning from a file, just add that - directly. - (scan_dir): Allow empty files to also show up in folder list, as - well as files starting with "From ". - (get_folder): Use creat() instead of open() to create file. - - * providers/local/camel-spool-folder.c (camel_spool_folder_new): - Check folder != NULL before writing to it. - - * providers/local/camel-local-store.c (create_folder): Handle a - parent of NULL for creating top-level dirs. Part of #31186. - - * providers/imap/camel-imap-store.c - (parse_list_response_as_folder_info): Store the folder flags in - the store summary. - (get_one_folder_offline): Set the noselect url parameter if this - is a noselect folder, from the stored summary flags. #30877. - -2002-09-23 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-charset.c (complete): Handle EILSEQ by eating - bytes in the input buffer until conversion is successful. The old - behaviour aborted when it got EILSEQ and just dumped the raw data. - (filter): Same. Fixes bug #30873. - -2002-09-24 Not Zed <NotZed@Ximian.com> - - * camel-mime-utils.c (mail_list_magic[]): Changed the Mailing-List - rule to get the complete domain (* in wrong spot). #31087. - - * camel-text-index.c (text_index_compress_nosync): If we have no - data written to a key, dont add it, or its partition header. - -2002-09-23 Not Zed <NotZed@Ximian.com> - - * camel-block-file.c (sync_nolock): Mark root block dirty if we're - going to sync it. - (camel_key_file_finalise): de-count the active list if we close - it. - - * camel-text-index.c (text_index_delete): Implement. - (text_index_compress_nosync): Use index_delete when we're finished - with the old one, so it is properly deactivated. - - * camel-index.c (camel_index_delete): Remove api call. Mark index - deleted in new state variable. - (camel_index_*): Wrap all calls in check for deleted state. - -2002-09-23 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder.c (transfer_message_to): If the original message is - deleted, reset the deleted flag when we're done. Fixes bug #30876. - - * providers/imap/camel-imap-folder.c (add_message_from_data): - Decode the INTERNALDATE if we've got one. - (imap_update_summary): Instead of requesting a list of specific - headers, request HEADER.FIELDS.NOT (RECEIVED) to reduce bandwidth - usage even more. - (parse_fetch_response): Change slightly to allow HEADER.FIELDS or - HEADER.FIELDS.NOT so that we can make changes in - imap_update_summary and not need to keep changing this function to - match. Also parse an INTERNALDATE response. - -2002-09-22 Dan Winship <danw@ximian.com> - - * camel-mime-parser.c (folder_scan_drop_step): fix non-ANSI switch - statement. - - * camel-service.c (service_getv): Likewise. - - * providers/imap/camel-imap-store.c (imap_getv): Likewise. - - * providers/pop3/camel-pop3-folder.c (cmd_builduid): Likewise. - -2002-09-20 Not Zed <NotZed@Ximian.com> - - * tests/misc/split.c: New regression test for word - splitting/search input parsing code. - - * tests/folder/test9.c (main): Fix for filter_driver api change. - - * camel-search-private.c (camel_search_words_split): Handle "'s - and \'s to escape characters. For fat, lazy, slobs who dont like - anything changing. - -2002-09-19 Not Zed <NotZed@Ximian.com> - - * camel-filter-search.c (camel_filter_search_match): Take new - session arg. Update callers. - (symbols[]): changed get-source to header-source - (header_source): Changed from get_source. Now a boolean, returns - true if source matches one of the arguments. Uses the provider - url comparison directly for accurate checking. Makes 'filter on - source' work. - - * camel-filter-driver.c (camel_filter_driver_new): Take new arg, - session. - (camel_filter_driver_finalise): Free session. - -2002-09-19 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (parse_fetch_response): Don't - increment the response pointer when deciding what type of header - response we got, this screws up the string that we strdup into the - part_spec string later. Also, instead of using the entire blob of - HEADER.FIELDS that we get in the response, shorten it to just - HEADER.FIELDS to use as the part_spec key. - -2002-09-18 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (CAMEL_MESSAGE_INFO_HEADERS): - Include MIME-VERSION and CONTENT-TYPE. - -2002-09-18 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-command.c - (camel_imap_command_response): If we get an ALERT, pass it to the - user. An rfc2060 MUST, and bug #22496. - -2002-09-17 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (parse_fetch_response): - Handle when the response is from a HEADER.FIELDS (if so, we don't - want to cache the result). - (imap_update_summary): Request specific headers when building the - CamelMessageInfo's rather than fetching the full headers. - -2002-09-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part.c (process_header): If header_msgid_decode fails - for the content-id field, just grab whatever is between the <>'s - (yes, this means that the content-id is invalid - but what can ya - do?). Addresses bug #21027. - -2002-09-11 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_encode_string): Revert a patch that I - had not meant to commit that was aimed at fixing bug #29234. - -2002-09-10 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store-summary.c (camel_store_summary_load): Same as - below. Also save errno before closing the file so our caller can - figure out why we failed. - (camel_store_summary_save): Same here, but also flush the output - stream to disk. - - * camel-folder-summary.c (camel_folder_summary_load): s/fclose(in) - == -1/fclose(in) != 0/ since fclose doesn't necessarily return -1 - on fail, all we really know is that it returns 0 on success and - non-zero on fail. - - * camel-certdb.c (camel_certdb_save): fsync() the stream after we - fflush it. - - * camel-folder-summary.c (perform_content_info_save): Do proper - error checking and return -1 on fail. - (camel_folder_summary_save): Check the return of - perform_content_info_save and a few other output calls within the - message_info_save loop. If any of them fail, save errno, close the - file, and return -1. If we finish the loop without fail, fflush - the stream and then fsync (fflush only flushes user-space buffers, - you still need to fsync afterward to flush the data to disk). If - either fail, treat it as an exception by saving errno, closing the - stream, and returning -1. I suspect that this also fixes bug - #30150 because the old code would fclose if fflush or fclose - failed in the check after the loop (man fclose(3) states that any - further calls using the stream (even another call to fclose) will - have undefined behaviour no matter what the first fclose call - returned). - - * providers/local/camel-local-summary.c - (camel_local_summary_init): Don't malloc a private struct of 0 - size. - - * providers/imap/camel-imap-folder.c - (camel_imap_folder_fetch_data): Clear the exception even if we - failed to get the message (part) from the imap-message-cache if we - are online and able to try fetching it from the IMAP server. - -2002-09-10 Not Zed <NotZed@Ximian.com> - - * camel-data-cache.c (data_cache_expire): Remove the hash table - entry using the right path. Related to #29731. - (camel_data_cache_remove): " - -2002-09-09 Jeffrey Stedfast <fejj@ximian.com> - - Fixes bug #4224 - - * providers/imap/camel-imap-folder.c - (camel_imap_folder_fetch_data): Pass ex into - camel_imap_message_cache_get(). - - * providers/imap/camel-imap-message-cache.c - (camel_imap_message_cache_get): Now takes an exception and sets it - on fail. - (camel_imap_message_cache_copy): Updated to properly handle - cache_get error conditions. - -2002-09-04 Dan Winship <danw@ximian.com> - - * camel-mime-utils.c (header_decode_date): Use e_mktime_utc. - - * camel-mime-message.c (camel_mime_message_set_date): Use - e_localtime_with_offset. - - * broken-date-parser.c (decode_broken_date): Use e_mktime_utc. - -2002-09-04 Not Zed <NotZed@Ximian.com> - - * tests/folder/test4.c (main): clear nonfatal stuff. - - * tests/folder/test6.c (main): check inbox and 'another folder' - because some servers do different things w/ inbox. - - * providers/imap/camel-imap-message-cache.c - (camel_imap_message_cache_get): Dont try to open the directory - instead of an empty "" uid. - - * providers/imap/camel-imap-folder.c (imap_get_message): we dont - want to g_return_if_fail, we need to set an exception and always - handle the case. - (get_message_simple): Set an exception if we get a construct - failure. - (imap_refresh_info): if we're refreshing inbox, force a reselect. - this is required for at least cyrus. CHECK doesnt work either :( - - * tests/lib/folders.c (test_folder_basic): for non-local stores, - the folder will have an extra ref for selection, take this into - account when checking ref leaks. - (test_folder_message_ops): Dont try to delete folder with messages - in it, it works generally with imap. also, change params so we - can test different mailbox types. - (test_folder_message_ops): disconnect remote services before - finishing off. doesn't need to stricly but makes ref count - checking more accurate. - (test_folder_message_ops): removed explicit remote sync, imap does - it itself now ... - - * providers/imap/camel-imap-store.c: - (camel_imap_store_finalize): call service_disconnect, so it isn't - called later in the finalise chain, to properly cleanup on exit. - - * camel-mime-parser.c (folder_scan_content): If we fake the from - eof file boundary, also make sure we say we matched nothing. Also - make the end case a little more robust to make sure we expired all - hope of finding a sub-boundary. - - * providers/imap/camel-imap-store.c, - providers/imap/camel-imap-folder.c: Lots of changes, too numerous - to list. Changed to use camel-imap-store-summary to cache list - requests. Changed to use a canonicalised url path with / instead - of per-store directory separator. Indirects folder name so - invalid folder names can still be accessed. Summary now stored in - a new expandable format in .ev-store-summary. - -2002-08-29 Not Zed <NotZed@Ximian.com> - - * tests/folder/test3.c: Change the case sensitive search of - subject to expect case insensitive results, as the behaviour has - changed. - (main): Made the search content before sync nonfatal. its - something that needs to be fixed but not practical concern in - evolution. - - * camel-block-file.c (block_file_validate_root): Only spit out the - invalid root warnings if the file isn't empty. - - * camel-text-index.c (text_index_compress_nosync): Swap the path - as well when we compress. - - * camel-mime-parser.c (folder_scan_content): Treat the end of file - as a boundary if we're scanning From lines, and drop the last \n. - (folder_scan_init_with_fd): Dont pre-read from the fd, and init eof. - (folder_scan_init_with_stream): Similar. - (folder_read): Handle eof, and set eof on 0 read. - (folder_seek): Dont pre-read after a seek, and reset eof flag. - (camel_mime_parser_init_with_fd): Fix doco, no pre-read occurs - anymore. - (camel_mime_parser_init_with_stream): Same. - - * providers/local/camel-mbox-summary.c - (camel_mbox_summary_sync_mbox): Add a \n to end of content of each - message, not at start. - - * providers/local/camel-mbox-folder.c (mbox_append_message): - Instead of appending "\nFrom " to a mailbox, start with "From ", - and append a \n after the message always. For better mutt/elm - compatability. Also, unlock after we've stat'd. - (mbox_append_message): Set the message's from_pos exactly as the - mbox size. - -2002-08-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-openssl.c (stream_setsockopt): Fixed `set' to - hold the correct value when setting the flags. - - * camel-tcp-stream-raw.c (stream_setsockopt): Fixed `set' to hold - the correct value when setting the flags. - - * camel-mime-filter-tohtml.c (is_protocol): Match file: urls too. - -2002-08-28 Not Zed <NotZed@Ximian.com> - - * tests/folder/test8.c (test_add_message): Change message number - to use hex, so its properly unique. - (worker): Same here. - - * tests/misc/utf7.c: some utf7/utf8 tests. - - * providers/imap/camel-imap-utils.c (imap_mailbox_encode): Changed - to use camel_utf8_utf7 code. - (imap_mailbox_decode): As above, using camel_utf8_utf7. 'UTF-7' - isn't a widely support iconv() codeset, and besides the new code - is simpler. - - * camel-utf8.[ch]: robust utilities for working with utf8 and utf7. - -2002-08-27 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-thread.c (camel_folder_thread_messages_new): Now - takes a third argument to specify whether or not to group messages - by subject when threading. It seems some people don't want this - feature (see bug #22791 for details). - (thread_summary): If thread_by_subject is enabled, group - un-threaded messages by subject otherwise don't bother. - -2002-08-26 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-command.c - (camel_imap_response_free_without_processing): If the response is - NULL, just return. (now works the same way as imap_response_free - which allowed a NULL response argument). Fixes bug #25491. - -2002-08-26 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c: - - * providers/imap/camel-imap-folder.c: - - * providers/imap/camel-imap-command.c: Lock the - CamelService->priv->connect_lock instead of using our own - command_lock. This fixes bug #28177. - -2002-08-23 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_helo): If we fail to - send the EHLO/HELO command successfully, set transport->connected - to FALSE when we close the tcp connection. Also updated to work on - an IPv6 network. - (smtp_connect): transport->authtypes can be NULL, so NULL-protect - the call to g_hash_table_size() - this should fix a warning that - was reported on the evolution@ximian.com mailing list. - (smtp_set_exception): If the status message is multi-line, add a - \n between lines. - (connect_to_server): If we are going to ignore the EHLO/HELO error - as if it were non-fatal, then we should clear the exception. - -2002-08-22 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (imap_noop): If current_folder - is not NULL and the summary for that folder is dirty, sync the - flags rather than sending a NOOP. - - * providers/imap/camel-imap-utils.c (imap_parse_list_response): - Workaround for Courier imap's brokeness when LSUBing the INBOX - folder when it isn't subscribed to. Fixes bug #28929. - -2002-08-21 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (connect_to_server): If - imap_get_capability() fails, after unlocking the command_lock, - disconnect the service. - -2002-08-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-session.c (get_service): Don't register the noop timeout - here anymore, we're gonna handle all this in the mailer now. - (camel_session_register_timeout): Removed. - (camel_session_remove_timeout): Removed. - -2002-08-28 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c (construct): Load store - summary if it exists. - (can_work_offline): Just see if we have any folders to say whether - we can work offline or not. Should probably always just return - true. - -2002-08-27 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store-summary.[ch]: New files to - handle offline definition of folders, etc. - - * camel-url.h: Define CamelURL to be struct _CamelURL rather than - anonymous struct. - - * camel-store-summary.[ch]: a few api tweaks. Also, the summary - header is versioned separately at each level, so that version - upgrades can be handled separately. Renamed FolderInfo -> - StoreInfo to avoid namespace with current FolderInfo code. This - should be reversed when the FolderInfo code is rationalised to - this new base. - -2002-08-23 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-command.c (camel_imap_command): domt - encode folder name. - - * providers/imap/camel-imap-folder.c (do_copy): dont encode folder - name. - (do_append): dont encode folder name. - - * providers/imap/camel-imap-store.c (get_folder_status): don - encode folder name in imap request. - (get_folder_online): here too for creating folder. - (rename_folder): Assume the incoming 'new name' is a utf8 path, - whereas the 'old name' is as from get folder info (raw). - (create_folder): Dont encode parent_name, assume its the raw - thing. - -2002-08-22 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c (get_folder_online): Select - based on unconverted name. - (imap_build_folder_info): New function to create a folderinfo - properly based on raw name. - (subscribe_folder): Use above helper. - (imap_folder_effectively_unsubscribed): Same here. - (imap_forget_folder): Same here. - (get_one_folder_offline): " - -2002-08-21 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c - (parse_list_response_as_folder_info): Setup path properly, as - decoded path with / separator. Setup full_name as non-decoded raw - name. Keep url as decoded path but with server separator - ... (ick). - (create_folder): Dont call build_path anymore, get_folders() does - it for us. - (subscribe_folder): Build the path ourself. - (imap_folder_effectively_unsubscribed): Same here. - (get_subscribed_folders): list using %S not %F, we're using the - raw server provided name directly. - (subscribe_folder): As above, for SUBSCRIBE. - (unsubscribe_folder): Same here. - (delete_folder): Same. - (rename_folder_info): Same here for source name. - (rename_folder): And here? - (get_folders_online): Amd here. - - * providers/imap/camel-imap-utils.c: - (imap_parse_list_response): Dont decode the mailbox. - - * camel-utf8.[ch]: some new utf8 & utf7 utilities. - - * providers/imap/camel-imap-utils.c (imap_mailbox_encode): - (imap_mailbox_decode): use camel_utf7/8* functions instead. - : Add config.h and alloca.h headers. - -2002-08-20 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (imap_noop): Override the - default noop implementation. - - * camel-store.c (camel_store_noop): New virtual method to ping a - store. - - * camel-session.c (get_service): Register a timeout that calls - camel_store_noop() every 10 minutes. - -2002-08-19 Peter Williams <peterw@ximian.com> - - Plug some large leaks in the indexing code. - - * camel-mime-filter-index.c (camel_mime_filter_index_set_index): Unref - the old index if necessary. - - * camel-text-index.c (camel_text_index_get_type): Give it the correct - parent type so that finalize handlers chain. - (camel_text_index_name_get_type): Here too. - (camel_text_index_cursor_get_type): Here too. - (camel_text_index_key_cursor_get_type): Here too. - -2002-08-20 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (get_folders): Don't let the - minimum recursive depth be negative. - (get_folders): Pass flags & CAMEL_FOLDER_INFO_SUBSCRIBED as the - `lsub' argument to get_folders_online() otherwise we'll end up - doing a LIST when we really wanted to do an LSUB. - - * camel-session.c: Set CAMEL_URL_NEED_PATH for the vFolder - provider. - -2002-08-19 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c: Changed the STOREINFO_VERSION - - should fix bug #28571, but if it doesn't - oh well, I don't - care. I'm considering it fixed no matter what. - - * camel-gpg-context.c (gpg_sign): If the diagnostics are empty, - just explain that gpg failed to execute. - (gpg_encrypt): Same. - (gpg_decrypt): And here too. - - * tests/lib/camel-test.c (camel_test_init): Updated to pass the - needed arguments to camel_init() and to init gthreads before camel - (since camel expectes it to be initialised already). - - * tests/lib/session.c: #include <config.h> needed for - ENABLE_THREADS so that sizeof (CamelSessionClass) gives the - correct size. - - * tests/*: Updated to work with camel API changes. - -2002-08-16 Dan Winship <danw@ximian.com> - - * camel-session.c (get_service): If the passed-in URL contains a - path, but the service doesn't allow paths, then the path part must - be a folder name, and we should ignore it here. #29010 - -2002-08-16 Chris Toshok <toshok@ximian.com> - - * camel-arg.h: remove the outer parens from the expansion of - camel_argv_{start,end} since at least on freebsd va_end is - #defined to be nothing, so (va_end(..)) causes a syntax error. - -2002-08-16 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c (get_folders): Fix the logic - check for working out if we add inbox or not, we do it if we - listed the namespace. - -2002-08-15 Not Zed <NotZed@Ximian.com> - - * camel-store.h (CamelFolderInfo): added a flags field, defined - some flags, currently only used by imap. This and below is first - step to getting incremental folder tree loading. - - * providers/imap/camel-imap-store.c (get_subscribed_folders): If - the subscribed list is empty, always add inbox. - (imap_connect_offline): If the 'storeinfo' namespace isn't the - same as our own (if its set), then ignore it, assume we changed - settings. Otherwise you can't change the namespace ... - (get_folders): allow the env variable CAMEL_IMAP_MAX_DEPTH to - override the default maximum recursion depth if 10 levels. - (camel_imap_store_readline): Dont depend the log debug on d(x) - being defined. - (get_folder_info_online): changed to use new functions/names. - -2002-08-14 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c (get_subscribed_folders): - Removed the by_hand sillyness. Return an array instead. - (get_folders): New method to get folders recursively without - having to use '*'. Uses '%', and stops if it gets too deep - (current max of 10). - (get_folder_counts): New method to fill out unread counts on - folderinfo tree. - (get_subscribed_folders): Fix some failure logic. - - * providers/imap/camel-imap-utils.[ch]: Changed IMAP_LIST_FLAGS to - use the new CamelFolderInfoFlags directly. - -2002-08-09 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-folder.c (get_temp_uid): New function, - generate a UID that has better chances of being unique. - (imap_append_offline): Use it here. - (imap_transfer_offline): And here. - -2002-08-09 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-store.c - (get_folder_info_online): Tweak how we build the tree based on whether - a full tree or a subtree is being requested. Fixes subscribe dialog - on UW servers. - (get_one_folder_offline): Don't add folders that we're not subscribed - to; fixes UW folders that weren't being marked as NoSelect because - the storeinfo doesn't record that information. - -2002-08-09 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_rename): When renaming our - cache, add the "/folders" to the path. - -2002-08-08 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_init): Set - some default permanent_flags. This is the other cause of bug - #28038. - (imap_refresh_info): After calling camel_imap_command() with a - NULL format value (this is a shortcut to change the current_folder - by SELECTing it), call camel_imap_folder_selected(). This may have - been why permanent_flags never got set on the folder even after - going online in bug #28038. - (imap_update_summary): Same here. Also NULL-guard - camel_imap_response_free(). - -2002-08-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_encode_param): Oops - outbuf pointed - to alloca'd memory but we were g_free'ing it after using - it. Instead use g_malloc for this outbuf buffer since it may be - kinda large. Also don't depend on a single byte to nul-terminate - the outbuf buffer so as to be safe with charsets such as UCS2 and - UCS4, instead keep a pointer to the end of the buffer. - - * providers/imap/camel-imap-folder.c (parse_fetch_response): Only - add the stream to the gdatalist if it is non-NULL. - -2002-08-06 Jeffrey Stedfast <fejj@ximian.com> - - * providers/sendmail/camel-sendmail-transport.c - (sendmail_send_to): If writing to the sendmail pipe fails, wait - for the sendmail process to exit before returning. Fixes bug - #19636. - -2002-08-06 Not Zed <NotZed@Ximian.com> - - * providers/pop3/camel-pop3-folder.c (cmd_list): Add messageinfo - to id table, and store array index in messageinfo too. - (fi_to_index): Removed, use index member of messageinfo, fixed - callers. - (cmd_builduid): Parse the headers of the data, and ignore any - status or x-status headers. - (uid_to_fi): Removed, use the hashtable instead. - (id_to_fi): Same. - (cmd_uidl): Add messageinfo to uid table. - (pop3_refresh_info): Setup hash tables, and fill out uid table for - nonuid capable servers. - (pop3_finalize): Destroy hash tables. Only free resources if the - uids table is not null (if finalised before we ran refresh info). - (id_to_fi): Removed. Use id hash table instead, fixed caller. - -2002-08-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel.c (camel_init): Always set a g_atexit handler to - flush/save the camel-certdb. - - * providers/imap/camel-imap-store.c (get_folder_info_online): If - we are asking for the toplevel folders, use the IMAP store's - namespace as the toplevel folder rather than an empty - string. Fixes bug #28574. - (imap_forget_folder): Rearrange the code so that name can never be - used uninitialised. - - * providers/imap/camel-imap-utils.c (imap_namespace_concat): - Removed. - -2002-08-05 Dan Winship <danw@ximian.com> - - * camel-folder-summary.h (CamelMessageFlags): Add - CAMEL_MESSAGE_ANSWERED_ALL, for folders that can distinguish a - reply-to-sender from a reply-to-all. (eg, Exchange) - - * providers/local/camel-local-folder.c (local_init): Add - ANSWERED_ALL to permanent_flags too. - -2002-08-02 Jeffrey Stedfast <fejj@ximian.com> - - Fixes bug #26237. - - * providers/imap/camel-imap-command.c - (imap_command_strdup_vprintf): Don't prepend any namespace shit in - the %F case. - - * providers/imap/camel-imap-utils.c (imap_parse_list_response): - Don't strip off the namespace. - -2002-08-01 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-store.c (create_folder): If the folder - name contains the directory separator, reject it. - -2002-08-02 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-mbox-summary.c (mbox_summary_check): Clear - the summary after building the 'removed uid' list. - - * camel-folder-summary.c (message_info_load): revert jeff's patch - below, and do it slightly differently, and stop the auto-reformatting - bullshit. - -2002-08-02 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-maildir-summary.c (message_info_new): If - we get a duplicate, just re-use the old info. - (remove_summary): Add any removed to a change list. - (maildir_summary_check): If we find new ones in 'cur' track them - in the change list. Removed FIXME about it. For #18348. - -2002-08-01 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-summary.c (message_info_load): Do more error - checking to prevent crashing if we fail to read a string for - example. - -2002-07-29 Peter Williams <peterw@ximian.com> - - Fix bug #28238 - - * providers/imap/camel-imap-store.c (imap_forget_folder): New - function, breaking out the code in delete_folder() to handle when - a folder is removed. - (imap_folder_effectively_unsubscribed): New function, breaking out - the code in unsubscribe_folder() to handle when a folder is - unsubscribed. - (imap_check_folder_still_extant): New function, check whether a - folder exists by LIST'ing it. - (imap_store_refresh_folders): Add code here to check if the folder - still exists if we're unable to refresh its info. If so, pretend - that it was unsubscribed (to get the mailer to remove it from - the tree) and delete its cache. If somehow this goofs up, the - worst that can happen is that we must redownload the headers. - (get_folder_status): If we can't get the status, behave as above. - (delete_folder): Call imap_forget_folder() where the bulk of this - code has gone. - (unsubscribe_folder): Call imap_folder_effectively_unsubscribed() - where the bulk of this code has gone. - -2002-07-31 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (parse_fetch_response): - Disable my fix to not cache headers as it means that each time we - load the message, we've got to re-fecth the headers. - - * camel-mime-filter-tohtml.c (is_addr_char): Don't use - "isprint(c)" to mean "c >= 32 && c < 128" since it doesn't in most - locales. - (is_url_char): Same. - (is_trailing_garbage): Same. - (is_domain_name_char): New macro for dns-valid characters - (email_address_extract): Use is_domain_name_char rather than - is_addr_char for the part after the @. - -2002-07-30 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream.c (camel_tcp_address_new): Update the comment. - - * camel-tcp-stream-raw.c (socket_connect): If building with IPv6 - support and the address is an IPv6 address, connect using a - sockaddr_in6 otherwise use the standard IPv4 sockaddr_in - structure. - (stream_get_local_address): Fix to work with IPv6 addresses. - (stream_get_remote_address): Same. - - * camel-tcp-stream-openssl.c (socket_connect): Same as above. - (stream_get_local_address): Fix to work with IPv6 addresses. - (stream_get_remote_address): Same. - - * camel-tcp-stream-ssl.c (stream_connect): If building with IPv6 - support and the address is an IPv6 address, initialise the - PRNetAddr accordingly. - (stream_get_local_address): Fix to work with IPv6 addresses. - (stream_get_remote_address): Same. - -2002-07-30 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-openssl.c (ssl_verify): X509_digest() needs a - pointer to an int len. Also fixed some other compiler errors. - - * camel-certdb.h: #include <stdio.h> - -2002-07-30 Jeffrey Stedfast <fejj@ximian.com> - - * camel-certdb.c: New source file implementing a very basic - certificate database. This is mostly just here because the Mozilla - NSS certdb seems to not be working for everyone's Evolution - install (works fine for me and Ettore but not many other people). - - * camel-tcp-stream-ssl.c (ssl_bad_cert): If we have this - certificate in our own CamelCertDB, then get the trust value from - that and only prompt the user if the trust is unknown. - - * camel-tcp-stream-openssl.c (ssl_verify): Same. - - * camel.c (camel_init): Create our default certdb. - -2002-07-30 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_transfer_offline): Use - the same command-counter mojo that the append code uses in case - the use tries to copy the same message to the folder repeatedly. - -2002-07-29 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (unset_flag): New filter action to unset a - system flag. The exact opposite of set_flag. - -2002-07-26 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-local-store.c (get_folder): If the path - exists and is a directory, return non-NULL. Missed this before - which is how we could return NULL even on success. Oops. - -2002-07-26 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-summary.c - (camel_imap_summary_add_offline_uncached): The flags'n'tags - copy was unnecessary. Removed it. - -2002-07-25 Jeffrey Stedfast <fejj@ximian.com> - - If we're gonna do an elite hack, lets do it right. - - * providers/local/camel-local-store.c (get_folder): On success, - return non-NULL so that our caller doesn't have to depend on 'ex' - being non-NULL in order to work correctly. - - * providers/local/camel-mbox-store.c (get_folder): Don't bother - checking if an exception was set, just use the return value of - camel-local-store's get_folder. - - * providers/local/camel-maildir-store.c (get_folder): Same as the - mbox change. - - * providers/local/camel-mh-store.c (get_folder): Here too. - -2002-07-25 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-summary.h - (camel_imap_summary_add_offline_uncached): Prototype. - - * providers/imap/camel-imap-summary.c - (camel_imap_summary_add_offline_uncached): New function to add an - uncached message to the summary while offline. - - * providers/imap/camel-imap-store.c (imap_connect_online): Only - refresh the folders if the disco diary is empty (ie, we're not - resyncing.) - - * providers/imap/camel-imap-folder.c (imap_transfer_offline): Emit - an event for the source if deleting its originals. Also, if we - can't load the message, still process it, using the new imap - summary function. - -2002-07-25 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c: Remove "possibly - non-fatal" exception strings, all exceptions are fatal unless - their caller decides otherwise. - (connect_to_server): If smtp_helo() fails due to us getting - disconnected, treat the exception as fatal. - (smtp_connect): Abort if smtp_helo() fails and we got - disconnected. - (smtp_send_to): If smtp_mail() fails, abort the send operation. - (smtp_set_exception): If respbuf was NULL, then we got - disconnected and so update our state accordingly. - (smtp_disconnect): Only send a QUIT if we are still in the - connected state (or, at least think we are). - -2002-07-24 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-folder.c - (imap_expunge_uids_resyncing): It would help to mark the UIDs as - deleted before we try to expunge them - (in the case when no other UIDs were marked deleted this didn't - happen.) Also fix an FMR. - (imap_expunge_uids_offline): Trigger a folder_changed event with - our own changeinfo because camel_imap_response_free won't be able - to do that for us. - -2002-07-25 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (do_shell): Renamed from - shell_exec(). Also, we now want to pass argc/argv on to the - CamelFilterDriverShellFunc. - (camel_filter_driver_set_shell_func): Renamed a bit. - - * camel-filter-search.c (pipe_message): Renamed from shell_exec(). - -2002-07-25 Not Zed <NotZed@Ximian.com> - - * camel-folder-summary.c (camel_folder_summary_save): When writing - the summary, use TRUNC flag, duh. Also, write to a temp file - first, and rename when closed successfully, and check ferror() and - fclose() against 0 rather than -1. - - * providers/local/camel-mbox-summary.c (summary_update): Decrement - i if we remove the summary item so we dont skip every 2nd one. - - * camel-mime-utils.c (header_decode_mailbox): Use - rfc2047_decode_word explicitly incase we just found an encoded - word. Stops us re-decoding the string twice, which fixes memory - corruption in #26330 when the HUGE string is used later. - -2002-07-24 Not Zed <NotZed@Ximian.com> - - * camel-partition-table.c (camel_key_table_next): Didn't unlock if - we exited on an empty key list. - - * providers/imap/camel-imap-folder.c (imap_expunge_uids_online): - Sync before doing an expunge if we dont have uidplus. See #25766. - (imap_expunge_uids_resyncing): Same here. - - * providers/imap/camel-imap-store.c (get_folder_info_online): - Duplicated the very much hack in imap_store_refresh_folders() to - avoid a deadlock in #27959. A decent fix has to wait for a - rewrite. - (get_folder_online): Move folders to a subdirectory of - storage_path, rather than in it. Bye bye everyones settings. See - 24947. - (get_folder_offline): And here too. - (delete_folder): And here too. - (rename_folder): and here too. - (get_folder_info_offline): And here too. I love code reuse. - -2002-07-23 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream.c: #include <string.h> for memcpy. - -2002-07-22 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (vee_set_message_user_tag): Oops, forgot to - implement this. Fixes #24604. - -2002-07-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-crlf.c (filter): Only add a \r if the - character before the \n wasn't already a \r - this covers for when - people add DOS files as attachments. Fixes bug #28056. - -2002-07-19 Not Zed <NotZed@Ximian.com> - - * camel-mime-part-utils.c (convert_buffer): Changed to use a - different length calculator. - -2002-07-17 Jeffrey Stedfast <fejj@ximian.com> - - * camel-lock.c: Add the appropriate #include for the _() macro. - -2002-07-17 Not Zed <NotZed@Ximian.com> - - * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): Got - rid of the stupid "tryagain" semantics, which didn't work. - (pop3_connect): Fixed here to only retry under proper conditions. - -2002-07-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-canon.c (filter): When CRLF encoding, "empty" - (after stripping trailing whitespace characters) lines need to end - in CRLF also, not just lines with data in them. - -2002-07-16 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_sync_online): Clean - up some improper usage of CamelExceptions (looking at - camel_exception_is_set when ex = NULL). - - * providers/imap/camel-imap-store.c (get_folder_online): Here too. - - * providers/imap/camel-imap-message-cache.c - (camel_imap_message_cache_new): Nothing sets the exception so - don't bother to check it at the end of this function. Prevents - a warning about checking a NULL exception's value. - -2002-07-16 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_helo): Make the - standard AUTH format take priority over the AUTH= priority, since - sometimes servers only list a subset of the supported authtypes in - the AUTH= response while they list all authtypes in the standard - AUTH response. Fixes "bug" #27841. - -2002-07-15 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_get_message): If we're - not online and the message isn't in our cache, give up. - -2002-07-15 Not Zed <NotZed@Ximian.com> - - * camel-filter-search.c (get_label): Removed. - (get_score): Removed. Labels & scores are stored in tags, we - already have a function to get tags. - (user_tag): Fail if we dont get valid arguments, it must be a - string type. - (system_flag): Same here. - -2002-07-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_msgid_generate): Try to get the FQDN - from the results of gethostname(). If that fails, then fall back - to the results gotten from gethostname() or if that fails just use - "localhost.localdomain". Addresses bug #17416. - (header_decode_param): Protect against a NULL value. - - * providers/smtp/camel-smtp-transport.c (smtp_data): Get rid of - the constant 'required' variable, just use the value when calling - set_best_encoding. - - * providers/local/camel-local-provider.c: Changed the mbox and - spool provider descriptions to try and be more clear. I'm not sure - I like the mention of Evolution in the mbox provider description, - but there was no other way to make it clear that it MOVED mail out - of the mbox folder into a folder managed by Evolution without - mentioning Evolution. *sigh* Anyways, to me "retrieve" means move, - but apparently this isn't clear to the weak minded. - -2002-07-15 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_rescan): >= is not - appropriate here because the sequences are 1-based; so seq = - summary_len is valid. Hopefully addresses 15646, because this - caused the last message in a folder to be reloaded, replacing its - CamelMessageInfo, and the tree view was using the old - CamelMessageInfo. - -2002-07-13 Not Zed <NotZed@Ximian.com> - - * camel-folder-summary.c - (camel_folder_summary_info_new_from_message): Only assign a uid if - indexing is enabled. This stops us always assigning a uid in the - imap folder and disco folder? - - * providers/imap/camel-imap-folder.c (imap_update_summary): Also - check the uid is set at all, another bit of a fix for #15667. - -2002-07-09 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-folder.c (imap_update_summary): Check - for existing messages of the same uid before doing anything. If - it exists, do nothing (perhaps it should merge?). A dirty hack for - #15667. - -2002-07-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel-multipart-encrypted.c (camel_multipart_encrypted_decrypt): - On error, do not unref the parts gotten using - camel_multipart_get_part() since that function does not ref the - parts. Also don't forget to reset the decrypted stream before - trying to parse it ;-) - -2002-07-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel-multipart.c (camel_multipart_class_init): Updated to not - use camel_type_get_global_classfuncs() since this is just a cast - macro now. - - * providers/imap/camel-imap-folder.c (get_content): Handle - multipart/encrypted parts too. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Handle - multipart/encrypted types too. - -2002-07-11 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_data): Don't let any - parts have a binary encoding. - -2002-07-11 Jeffrey Stedfast <fejj@ximian.com> - - Fixes bug #27672 - - * camel-mime-filter-bestenc.c: Conditionally #include <config.h> - - * camel-mime-filter-linewrap.c: Same here... although we could - probably just get rid of this filter? We don't seem to use it - anywhere since we try to QP/Base64 encode any text parts with long - lines. Besides, we couldn't use this filter for SMTP anyway since - we can't risk possibly linewrapping a binary mime part. I dunno, - maybe this could be useful in the composer though? *shrug* - - * providers/smtp/camel-smtp-transport.c (smtp_data): Always call - camel_mime_message_set_best_encoding() even if the server allows - 8BITMIME and even if we don't have any 8bit parts because we may - have parts with long lines (>998 octets) which also need to be - encoded. - - * camel-mime-message.c (check_8bit): Don't forget to check for the - binary encoding here as well. - -2002-07-11 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (parse_fetch_response): If we - are fetching HEADERs, don't cache the stream - instead just create - a mem-stream and return that. This reduces a significant amount of - overhead due to disk i/o. - - * camel-multipart-encrypted.c (camel_multipart_encrypted_decrypt): - Don't forget to set an appropriate exception before returning - NULL. - -2002-07-10 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (get_message_cb): Make sure message is - non-NULL before setting the source on it. - - * camel-gpg-context.c: Renamed stdin to stdin_fd, stdout to - stdout_fd, and stderr to stderr_fd in struct _GpgCtx since - Solaris' stdin/stdout/etderr variables seem to be macros and are - thus breaking the compilation. - -2002-07-04 Jeffrey Stedfast <fejj@ximian.com> - - * providers/nntp/camel-nntp-provider.c: Set the IS_SOURCE provider - flag. - - * providers/pop3/camel-pop3-store.c: Change all exceptions to - report which POP server failed (and tried to make a few of the - exceptions a bit more clear). - -2002-07-03 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (vee_sync): If we get an exception from the - child sync, update the exception string so we know where it really - was. - - * camel-vee-store.c (change_folder): Util to emit created/deleted - events. - (vee_get_folder): If the folder has path elements, and its parents - dont exist, create dummy no-select nodes. This is for bug #4246. - (vee_delete_folder): Use change_folder() to save code. - - * providers/local/camel-mbox-folder.c (mbox_set_message_flags): - Only set xevchange if we're storing status headers in pine format, - so we dont do a full sync every time any flag changes. - -2002-06-27 Not Zed <NotZed@Ximian.com> - - * camel-object.c (camel_object_hook_event): Take a void object arg. - (camel_object_remove_event): " - (camel_object_unhook_event): " - (camel_object_trigger_event): ", also, execute events in the same - order they were added, i.e. reverse hook-list order. - -2002-06-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_ctx_get_argv): Don't use - --no-auto-key-retrieve, this option has apparently been deprecated - in gpg 1.0.7. - -2002-06-27 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_ctx_op_step): Loop on our reads while - errno is EINTR or EAGAIN. Also make sure to completely read stdout - and stderr by keeping better state. - (gpg_ctx_parse_status): In the case of a NODATA response from gpg, - try to use the diagnostics that gpg may have written to its - stderr. - (gpg_verify): Check that the gpg process has not exited. - (gpg_ctx_op_wait): Make sure we haven't already exited (as by - gpg_ctx_op_is_exited()) and if we have, retrieve the exit status - from the gpg context. - -2002-06-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.[c,h]: Removed. - - * camel-pgp-mime.c (pgp_mime_part_sign_restore_part): Removed. - (pgp_mime_part_sign_prepare_part): Removed. - (camel_pgp_mime_part_sign): Removed. - (camel_pgp_mime_part_verify): Removed. - (camel_pgp_mime_part_encrypt): Removed. - (camel_pgp_mime_part_decrypt): Removed. - (camel_pgp_mime_is_rfc2015_signed): Documented. - (camel_pgp_mime_is_rfc2015_encrypted): Same. - -2002-06-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-multipart-encrypted.c (camel_multipart_encrypted_encrypt): - Oops, this needs to take a userid argument. - - * camel-gpg-context.c (gpg_clearsign): Removed (never did anything - anyway). - - * camel-pgp-context.c (pgp_clearsign): Removed. - - * camel-cipher-context.c (camel_cipher_clearsign): Removed unused - method. - - * camel-multipart-encrypted.[c,h]: New class implementing the - multipart/encrypted content type. Contains methods for encrypting - and decrypting a multipart/encrypted MIME object. - - * camel-gpg-context.c (gpg_ctx_parse_status): Check for NODATA - too. - -2002-06-25 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-local-provider.c: Remove the #include for - camel-spoold-store.h - -2002-06-26 Not Zed <NotZed@Ximian.com> - - * camel-gpg-context.c: Include <sys/time.h> for struct timeval. - - * providers/local/camel-local-provider.c - (camel_provider_module_init): Removed spoold provider. The spool - provider does it now. - (): Spoold doesn't exist anymore, remove its header. - -2002-06-25 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-folder.c (camel_spool_folder_new): - Support a new xstatus option - folders update/honour the - Status/X-Status headers in addition to X-Evolution. - - * providers/local/camel-local-summary.c - (camel_local_summary_write_headers): If supplied with an - additional status or xstatus arg, write a Status header and/or - X-Status. Also fix the case of properly terminating the headers - if an xev line isn't supplied. - - * providers/local/Makefile.am (libcamellocalinclude_HEADERS,SOURCES): - Removed spoold-store.[ch]. - - * providers/local/camel-local-provider.c - (camel_provider_module_init): For the spoold type, just use the - spool store instead. - - * providers/local/camel-spool-store.h: Added a type field, so the - 1 store can implement different types without having to subclass. - - * providers/local/camel-spool-store.c - (camel_spool_store_get_toplevel_dir): Removed, inherits from local - store now. - (construct): If we're pointing to a file, treat it as mbox mode, - otherwise treat it as 'elm' mode. - (get_folder): Only test for INBOX in mbox mode. - (get_folder_info_elm): - (get_folder_info_mbox): Two alternatives for getting folder info, - depending on the type of folder we're looking at. - (get_folder_info_mbox): Make the url include the protocol. - (scan_dir): " - - * providers/local/camel-spoold-store.c - (camel_spoold_store_get_toplevel_dir): Removed, inherits from - local store now. - - * camel-folder.c (get_message_user_tag): Dont use a - g_return_if_fail for info==NULL. This is not an error. - (set_message_user_tag): And same here. - (set_message_user_flag): Sigh, and here. - (get_message_user_flag): And here. - (set_message_flags): and here ... - (get_message_flags): Dum de dum, de done at last. - - * providers/local/camel-mbox-folder.c (mbox_get_message): Check - for new messages whenever we retrieve one. In the common - no-update case, this is a single stat. - (mbox_get_message): If we need to rescan, then force a full rescan - to make sure it does the right thing. - (mbox_get_message): Cleanup the exception handling a bit, if we do - get an error, propagate any folder changes anyway as well. - (mbox_set_message_user_flag): Argh more of these stupid g_returns - taht shouldn't be. - (mbox_set_message_user_tag): Here too. - (mbox_set_message_flags): If the read flag is being changed, mark - it as an xevchange (i.e. Status line change). - - * providers/local/camel-mbox-summary.c (summary_rebuild): Merged - into summary_update. - (summary_update): Changed to allow it to update existing lists of - messages without clearing out the summary. - (mbox_summary_check): Dont clear the summary, just re-scan. - (message_info_new): Attempt to support the 'Status: RO' elm/pine - thing. - (camel_mbox_summary_encode_status): - (camel_mbox_summary_decode_status): Util functions for - creating/parsing the Status line. - (camel_mbox_summary_sync_mbox): Write out the status line if we're - going to try support it. - (camel_mbox_summary_xstatus): Implement option to control - read/write of (x-)status. - (message_info_new): Do x-status stuff based on run-time option. - (camel_mbox_summary_sync_mbox): " - (mbox_summary_add): If x-status enabled, then always add - status/x-status headers to message. - - * camel-folder-summary.c (summary_assign_uid): If the messageinfo - is already in the summary, AND is the same messageinfo, dont do - anything, return a value to indicate this. - (camel_folder_summary_add): Do nothing if this info already in the - summary, so we can perform updates. - -2002-06-24 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-summary.c - (camel_local_summary_check_force): New method to force the next - summary check to be a full check, set if a mismatch occurs. - - * camel-folder-summary.c (camel_folder_summary_load): If we have - no summary path set, dont do any i/o, rather than abort. - (camel_folder_summary_save): " - (camel_folder_summary_header_load): " - - * providers/local/camel-spool-store.h: Inherit from camel mbox - store, even if we override almost everything. - - * providers/local/camel-local-folder.c - (camel_local_folder_construct): If the base path points to a file, - use that as the folder path as well. - - * providers/local/camel-spool-folder.h: Inherit from - camel-mbox-folder. - - * providers/local/camel-spool-summary.c (spool_summary_sync_full): - Use camel_mbox_summary_sync_mbox to do most of the work. - - * providers/local/camel-spool-summary.[ch]: Make spool-summary - inherit from mbox summary rather than foldersummary. - - * providers/local/camel-mbox-summary.c (mbox_summary_sync): Make - sync_full/quick virtual methods. - (camel_mbox_summary_sync_mbox): The full sync method put into a - simple function that sync's from fd to fd. - (mbox_summary_sync_full): Use summary_sync_mbox to do the real - work. - (mbox_summary_check): Create removed events if the folder gets - cleared. Also, dont clear the summary before a rebuild, try to - merge. - -2002-06-25 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c: #include <sys/time.h> - -2002-06-25 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_hash_str): Return the option as - --digest-algo=<micalg> - (gpg_ctx_parse_status): Decode more status information and keep - track of trust and such. - (gpg_ctx_op_complete): Make sure we aren't waiting for gpg to - write data to stdout (such as encrypted/decrypted data or a - signature). - (gpg_encrypt): Remove the fejj@stampede.org hard-coded value - (which had only meant to be for testing). - -2002-06-24 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_ctx_get_argv): Use --command-fd rather - than --passphrase-fd since what we really want is an interactive - mode (besides, --passphrase-fd requires a passphrase to be sent - before --status-fd will send a NEED_PASSPHRASE status message). - (gpg_ctx_parse_status): When we encounter a BAD_PASSPHRASE, tell - the session to uncache it. - (camel_gpg_context_set_always_trust): Implemented. - -2002-06-23 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_ctx_parse_status): Check for ERRSIG - also. - (gpg_ctx_op_step): Don't try writing a passphrase unless our - operation requires it. - -2002-06-22 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.c (gpg_encrypt): Return -1 on error. - (gpg_decrypt): Same. - (gpg_sign): Again here. - (gpg_ctx_op_step): Only attenmpt to read from the status-fd if we - are not already 'complete'. - - * camel-pgp-mime.c (camel_pgp_mime_part_encrypt): Flush the - filtered stream. - -2002-06-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-gpg-context.[c,h]: New source files implementing the - CamelCipherContext class for gnupg. - - * camel-pgp-context.c (camel_pgp_context_new): Return a - CamelCipherContext. - - * camel-pgp-mime.c (camel_pgp_mime_part_decrypt): Take a - CamelCipherContext argument rather than a CamelPgpContext since we - now have a CamelGpgContext also. - (camel_pgp_mime_part_encrypt): Same. - (camel_pgp_mime_part_verify): Same. - (camel_pgp_mime_part_sign): Same. - -2002-06-20 Jeffrey Stedfast <fejj@ximian.com> - - * camel-digest-folder.c: Updated to support searching as well as - making it use CamelDigestSummary. - - * camel-digest-summary.[c,h]: New class to handle the summary for - CamelDigestFolder. - - * camel-tcp-stream-ssl.c (set_errno): PR_IO_TIMEOUT_ERROR should - map to ETIMEDOUT and not EAGAIN. - (stream_connect): Reset the PR_Poll() timeout back to 2 minutes as - this wasn't the problem afterall. - -2002-06-19 Not Zed <NotZed@Ximian.com> - - * camel-mime-parser.c (folder_scan_drop_step): Drop back to - initial state if we came from eof state. - -2002-06-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (stream_connect): Set the poll timeout to - be PR_INTERVAL_MIN, this one shouldn't need to be 2 minutes (plus - it blocks my connection at home for far too long). - - * providers/imap/camel-imap-folder.c (imap_refresh_info): Make - sure we hold the command_lock before accessing current_folder. - (imap_append_online): Same. - (imap_transfer_online): Same. - - * providers/imap/camel-imap-store.c (delete_folder): We need to - hold the command_lock before we can set the current_folder to - NULL. - (rename_folder): Same. - (get_folder_info_online): We need to make sure we hold the - command_lock in order to use current_folder. - (everywhere): Same. - -2002-06-19 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_connect): Don't - bother trying to authenticate (and thus don't throw up an error - dialog) unless the server is an ESMTP server and supports - authentication. - - * camel-sasl-plain.c: Change the user-friendly name to PLAIN, this - is what it should be. Not "Password" because user's immediately - think that they need authentication when they see "Password" even - if they don't need it at all. - -2002-06-17 Jeffrey Stedfast <fejj@ximian.com> - - * camel-vee-folder.c (camel_vee_folder_add_folder): Update the - freeze state of the new source folder. - (camel_vee_folder_remove_folder): Undo any freeze state that we - have imposed on this source folder. - -2002-06-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-vee-folder.c (vee_freeze): Freeze source folders. - (vee_thaw): Thaw all source folders. Fixes bug #24317. - - * providers/imap/camel-imap-folder.c (imap_sync_online): Unlock - the command_lock after each UID STORE command so that other - (probably more important) threads can send their requests. - - * camel-arg.c: - * camel-disco-diary.c: - * camel-index-control.c: - * camel-mime-part.c: - * camel-pgp-mime.c: - * camel-store.c: - * camel-tcp-stream-ssl.c: - * camel-text-index.c: Fixed compiler warnings. - - * camel-multipart-signed.c: Updated to use ctx->sign_protocol - rather than ctx->protocol. - - * camel-cipher-context.h: Add an ecnryption protocol member. - - * camel-pgp-context.c (camel_pgp_context_init): Set the encryption - protocol. - -2002-06-11 Not Zed <NotZed@Ximian.com> - - * camel-vtrash-folder.c (camel_vtrash_folder_class_init): Our - parent class is camel_vee_folder, not camel_folder, fix setting of - parent folder (unused anyway, but removes a run-time warning). - -2002-06-07 Not Zed <NotZed@Ximian.com> - - * camel-pgp-context.c (camel_pgp_context_init): Duh! The protocol - is application/pgp-signature. TODO: need to have a signed and an - encrypted protocol specified separately. - -2002-06-06 Not Zed <NotZed@Ximian.com> - - * camel-folder-thread.c (thread_summary): Do the work here. - (camel_folder_thread_messages_remove): Implement. Remove some - uid's from the tree. Disalbe from build, for now. - (remove_uid_node_rec): Actually do the work. - (camel_folder_thread_messages_add): Implement. Add some summary - items to the tree. Disable from build though. - (camel_folder_thread_messages_apply): Make a thread tree built - using camel_folder_thread_new() map to a new set of uids, - preserving some order. Meant primarily to manage deleted + added - uids in a user-friendly manner. - -2002-06-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-multipart-signed.c (camel_multipart_signed_verify): Use - CAMEL_EXCEPTION_SYSTEM rather than '1' for clarity. - -2002-06-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (stream_connect): Up the timeout on the - connect code to 2 minutes. - -2002-06-05 Dan Winship <danw@ximian.com> - - * camel-mime-utils.c (header_decode_mailbox): Parse - "From: Dan Winship <danw>" (with no domain) in the way the sender - meant it, even though it's completely wrong. - -2002-06-04 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-provider.c: Remove the - CONF_DEFAULT_PATH entry, as this is handled by the url config - stuff. This made it basically impossible to configure any local - folder from the gui. - - * providers/local/camel-local-folder.c (local_refresh_info): Force - a refresh. Should work for all local folders to force them to - refresh. - - * providers/local/camel-maildir-folder.c (maildir_refresh_info): - Removed, moved into camel-local-folder. - - * providers/local/camel-mh-summary.c (mh_summary_next_uid_string): - Once we assign or get a uid, tell the summary of this, so the next - uid we get will be higher than any previously. - - * camel-object.c (camel_object_ref, camel_object_unref): I got - sick of casting, these now take void * like they should, and - perform their own run-time type checking. - - * providers/local/camel-mh-store.c (recursive_scan): Changed to - use stat, not lstat (*shrug* maybe someone wants to softlink their - maildir tree?). - (inode_hash): - (inode_equal): - (inode_free): Copied from camel-maildir store (should put into - camel-local-store or utils?). - (recursive_scan): Changed to check for re-visiting inodes. Also, - it builds the tree itself, rather than using folder_info_build. - (add_folder): Changed to folder_info_new. - (recursive_scan): Properly honour the recursive flag. Also, - lookup unread count from folder. - (folder_info_new): Init unread message count to -1, since we dont - know yet. - (folder_info_new): Take the name as an argument, and perform the - merging here. - (folders_update): Util func to add/remove folders from .folders - file. I'm assuming its sorted. - (get_folder): Add the folder to .folders if we created a new one, - and if it exists. - (delete_folder): Remove from .folders, etc. - (folders_scan): If we have a .folders file, read and use that - instead. - (recursive_scan): Handle scanning from a particular directory - properly. - (rename_folder): Implement so we can track any changes to the - .folders file if its turned on. - - ** Applied patch below from Greg Hudson. - -2002-05-10 Greg Hudson <ghudson@mit.edu> - - * camel-mh-store.c (get_inbox, get_folder_info, recursive_scan, - add_folder): Implement support for MH stores. - - * camel-mh-summary.c (mh_summary_check, sort_uid_cmp): Sort MH - messages by message number (uid), like we sort maildir messages by - date. - - * camel-local-provider.c (mh_provider): Turn on source and store - flags. - -2002-06-03 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (camel_vee_folder_add_folder): - (folder_changed_change): - (folder_changed_remove_uid): - (folder_changed_add_uid): - (vee_folder_build_folder): Check that any unmatched operation is - not concerning any vfolder. Other vfolders should never be part of any - unmatched handling. For #24615, and others probably. - -2002-06-02 Not Zed <NotZed@Ximian.com> - - * camel-sasl.c (camel_sasl_new): - (camel_sasl_finalize): setup/free the mech string. - - * camel-sasl.h: Added 'mech' mechanism string. - -2002-06-01 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-folder.c (imap_getv): Implement. Only - the object_description arg. - (camel_imap_folder_get_type): Init parent_class holder. - - * providers/local/camel-local-folder.c (local_getv): Implement, - object_description arg. - - * camel-folder.c (folder_getv): Implement, add a bunch of args you - can get -> camel_folder_get_unread_count etc will be going RSN i - hope. - (camel_folder_finalize): Free cached description string. - - * camel-object.c (cobject_getv): Implement - CAMEL_OBJECT_ARG_DESCRIPTION, just return the classname of the - object. - (camel_object_getv): - (camel_object_get): - (camel_object_setv): - (camel_object_set): Take object = void *, to simplify usage. - (camel_object_setv): Removed unecessary locals. - (camel_object_getv): Same. - (camel_object_free): New method, free an arg, upto implementations - whether args are static/const or not. - (cobject_free): Implement a dummy do nothing free. - -2002-05-31 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (camel_vee_folder_get_location): new function - to get the real location (folder) (and uid) of a vfolder object. - Using the folderinfo, since we already have it, maybe it should - use the uid. - -2002-05-31 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (get_content): When the part - is a multipart/signed, make sure to free the part_spec before - returning (the other types already did this properly). - - * providers/imap/camel-imap-message-cache.c - (camel_imap_message_cache_get): Free the path buffer when we're - done with it. - - * providers/imap/camel-imap-folder.c (imap_update_summary): Free - the final tagged response buffer. - - * providers/imap/camel-imap-command.c (imap_read_untagged): If we - fail to read a literal, free the temporary string buffer. - - * providers/imap/camel-imap-folder.c (imap_rescan): Revert my fix - from the other day since camel_imap_command_response() doesn't - guarentee that resp will be set to NULL on error. - - * camel-data-cache.c (camel_data_cache_get): If we fail to be able - to create a stream to insert into the cache, then free the 'real' - path. - -2002-05-30 Not Zed <NotZed@Ximian.com> - - * camel-cipher-context.h: Added a protocol field for users to use. - - * camel-stream-filter.c (do_read): Sigh, the pre-size is READ_PAD - not READ_SIZE. Big difference. - (READ_PAD): Bumped upto 128 from 64, so we can fit a typical line - in full. - - * providers/imap/camel-imap-folder.c (get_content): Changed to - load multipart/signed as an opaque block into the right kind of - object. - - * camel-multipart.h (struct _CamelMultipart): Removed the boundary - field. It wans't actually used anywhere. - - * camel-seekable-substream.c - (camel_seekable_substream_new_with_seekable_stream_and_bounds): - Shortened this stupidly long name to just :new(), its the only way - its ever used. Fixed all callers. - - * camel-multipart-signed.[ch]: new wrapper for multipart/signed - types. We need to treat the entire content as a blob of data for - transport purposes. This also cleans up a lot of the sign/verify - handling. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Just call - camel_multipart_construct_from_parser for multipart parts, also - use a multipart_signed for multipart/signed types. - - * camel-multipart.c (camel_multipart_construct_from_parser): New - virtual function for multiparts to buld themselves. - (construct_from_parser): Implement for normal multiparts. - (toplevel): Got rid of a warning, it'll never be an abstract - class. - - * camel-pgp-context.c (pgp_hash_to_id): - (pgp_id_to_hash): Implement. - (camel_pgp_context_init): Init the pgp protocol specifier. - - * camel-cipher-context.c (camel_cipher_id_to_hash): - (camel_cipher_hash_to_id): Util virtual methods to handle the - cipher id string. - - * camel-mime-filter-canon.[ch]: A new filter, end/start of line - canonicalisation filter. Can escape "From " and strip trailing - whitespace, and canonicalise the end of line to crlf or to lf. - -2002-05-29 Not Zed <NotZed@Ximian.com> - - * camel-multipart.h (struct _CamelMultipart): Removed the - 'parent', nothing used it, anywhere. Cleaned up some formatting - slightly. - -2002-05-30 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (camel_imap_store_readline): - On error, don't leak the GByteArray buffer. - - * providers/imap/camel-imap-folder.c (imap_rescan): Free the - response before checking for errors. I'm not sure this'll actually - fix the memory leak here, but it might? Certainly can't hurt. - - * camel-block-file.c (camel_block_file_finalise): Destroy the - blocks hash table. - -2002-05-29 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (connect_to_server): Only free - the LOGOUT response if it is non-NULL. - -2002-05-28 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-maildir-folder.c (maildir_refresh_info): - Implement. Run a summary check to update for any newly arrived - messages. - - * providers/local/camel-maildir-store.c (scan_dir): If we have a - folder, execute a refresh_info on it, to suck in any new stuff. - -2002-05-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_log): Use the - CamelMessageInfo rather than the CamelMimeMessage because the - message may not have been loaded (thus NULL). - -2002-05-27 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (connect_to_server): On - connection failure, unref the tcp stream. - - * providers/pop3/camel-pop3-store.c (connect_to_server): On - connection failure, unref the tcp stream. - - * providers/imap/camel-imap-store.c (connect_to_server): On - connection failure, unref the tcp stream. - - * providers/nntp/camel-nntp-store.c (nntp_store_query_auth_types): - Our parent class is no longer CamelRemoteStore. - (nntp_store_init): Same. - (camel_nntp_store_get_type): Here too. - (nntp_connect): Rewritten to try to connect via SSL. Also remove - code using CamelRemoteStore. - (camel_nntp_command): Don't call camel_remote_store_connected(). - -2002-05-24 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (content_info_get_part_spec): - Helps if we allocate enough space here. Also, start smoking the - same purple flavoured IMAP crack when counting parts (parts don't - count if their parent part is a message/* part with a parent - part). Fixes bug #25260. - -2002-05-24 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-command.c (imap_read_untagged): Use - the new readline function. - - * providers/imap/camel-imap-store.c (connect_to_server): Use the - new camel_imap_store_readline() function which doesn't suck quite - as bad as the original camel_remote_store_recv_line() function. - (camel_imap_store_readline): New function to replace - camel_remote_store_recv_line(). This function is at least safe - with embedded nul chars. Not that any of our callers use it - *sigh*. - -2002-05-24 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (connect_to_server): Added - some NULL protection fixes. - -2002-05-22 Jeffrey Stedfast <fejj@ximian.com> - - * camel-remote-store.c: Removed from the build. Glory glory - hallelujah. - - * camel-disco-store.c: Updated to inherit from - CamelStore rather than CamelRemoteStore. - - * providers/imap/camel-imap-command.c (imap_command_start): Don't - use the camel-remote-store shit to send a string. Just use - camel_stream_printf for chrissakes. - - * providers/imap/camel-imap-store.c: Updated to not depend on - CamelRemoteStore and to handle STARTTLS. - (imap_disconnect_online): Unref the streams. - (imap_keepalive): Removed. - (camel_imap_store_connected): New function to replace - camel_remote_store_connected(). - (camel_imap_store_finalize): Unref the streams. - (camel_imap_store_recv_line): New function to replace - camel_remote_store_recv_line(). - (imap_get_capability): Renamed from connect_to_server - (connect_to_server): New function to try and connect to the - server. - (connect_to_server_wrapper): New wrapper function around - connect_to_server that takes the ssl modes into consideration. - (query_auth_types): Don't bother calling our parent's - implementation of query_auth_types() since CamelDiscoStore doesn't - have any anyway. - (imap_get_name): New method to implement CamelService::get_name - -2002-05-18 Not Zed <NotZed@Ximian.com> - - * camel-search-private.c (camel_utf8_getc): If we get an invalid - start char, just ignore it and goto the next character. - -2002-05-16 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (get_folder_offline): Don't - call some retarded function to simply set an exception. - - * camel-filter-search.c (get_label): New e-sexp callback function - to get a user_tag label value. - -2002-05-15 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-utils.c - (imap_parse_namespace_response): New function to parse a NAMESPACE - response properly. - (imap_namespaces_destroy): New function to destroy the returned - structure from the above function. - -2002-05-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-service.c (service_setv): Only reconnect if we are already - connected, if we are in a disconnected state then no need to - reconnect. - - * providers/imap/camel-imap-folder.c (get_content): If the - part_spec is an empty string for a leaft part, use "1" since we - don't actually want to get the raw message headers too. - -2002-05-15 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c (refresh_folder_info): removed. - (imap_store_refresh_folders): Copy the folders first, then refresh - them, outside of the cache_lock, which could cause deadlocks - because of a workaround for crappo exchange. - (imap_disconnect_online): Dont pass an exception to LOGOUT - command. The required response 'BYE' always sets an exception - when we call LOGOUT. This also interfered with a lot of other - processing causing partial failures and messed up offline/online - state. - - * camel-disco-folder.c (disco_prepare_for_offline): Do progress - reporting. - -2002-05-14 Jeffrey Stedfast <fejj@ximian.com> - - Fixes bug #24136. - - * providers/imap/camel-imap-folder.c (content_info_get_part_spec): - New function to take a CamelMessageContentInfo and generate a - part-specification string. - (get_content): Stop passing around part_spec strings and use - content_info_get_part_spec instead. - - * camel-folder-summary.c (camel_content_info_dump): Made this into - a public debugging function. - - * providers/imap/camel-imap-utils.c (imap_parse_body): Make sure - to set the parent of any message/rfc822 subparts. - -2002-05-13 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_get_message): Previous - fix reverted. - -2002-05-13 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (camel_imap_store_class_init): - Overload the setv/getv CamelObject virtual methods. - (imap_setv): Implemented. - (imap_getv): Implemented. - -2002-05-13 Dan Winship <danw@ximian.com> - - * camel-folder.c (camel_folder_append_message): Add a "char - **appended_uid" argument, for the caller to optionally pass in a - variable to receive the UID of the appended message (if the - provider knows it). - (camel_folder_transfer_messages_to): Likewise, add "GPtrArray - **transferred_uids" - (transfer_messages_to): Update default implementation to handle - transferred_uids. - - * camel-disco-folder.c (disco_append_message, - disco_transfer_messages_to): Update for API changes. - - * camel-disco-diary.c (camel_disco_diary_replay): Update the - diary's temporary uid->real uid map when replaying appends and - transfers. - - * providers/imap/camel-imap-folder.c (imap_append_offline, - imap_append_online, imap_transfer_offline): Pass back the new - UIDs, when requested and available. - (imap_append_resyncing): Pass back the new UIDs when requested and - available. Remove the diary uidmap managing code since - CamelDiscoDiary can handle that itself now. - (imap_transfer_online, imap_transfer_resyncing): Update for new - APIs, but don't actually pass back the new UIDs yet. (It's tricky - since the COPYUID response may not be in the same order as the - input uids.) - - * providers/local/camel-maildir-folder.c (maildir_append_message): - Pass back the new UID if requested. - - * providers/local/camel-mbox-folder.c (mbox_append_message): - Likewise. - - * providers/local/camel-mh-folder.c (mh_append_message): Likewise. - - * providers/local/camel-spool-folder.c (spool_append_message): - Likewise. - - * camel-digest-folder.c (digest_append_message, - digest_transfer_messages_to): Update for API changes. - - * camel-filter-driver.c (camel_filter_driver_filter_message, - do_copy, do_move): Update for API changes. - - * camel-vee-folder.c (vee_append_message, - vee_transfer_messages_to): Likewise. - - * camel-vtrash-folder.c (vtrash_append_message, - vtrash_transfer_messages_to): Likewise. - -2002-05-13 Not Zed <NotZed@Ximian.com> - - * camel-folder-thread.c - (camel_folder_thread_messages_new_summary): - (camel_folder_thread_messages_new): Since the fix for #3357 uses - 'order=0' to indicate tree structure nodes, make sure we dont - actually set order=0 for valid messages, otherwise we silently - lose duplicates of the first message (i==0). Fixes #19920. - -2002-05-10 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_get_message): Fetch the - BODYSTRUCTURE rather than BODY since BODY seems to be lacking some - of the data we need. This fixes bug #24136. - - * camel-transport.c (camel_transport_get_type): Might help if we - called camel_transport_class_init. - -2002-05-10 Dan Winship <danw@ximian.com> - - * camel-folder.c (camel_folder_transfer_messages_to): Replace - copy_messages_to and move_messages_to with a single function that - just takes a "delete_originals" flag. Also, use the vtrash - implementation if *either* folder is a vtrash. - (transfer_messages_to): Make this use camel_operation_progress - (previously move_messages_to did but copy_messages_to didn't), and - freeze/thaw the folder(s) if doing multiple messages. - - * camel-vtrash-folder.c (vtrash_transfer_messages_to): Update for - move/copy merge. Move the "move messages into vtrash" code here - from mail-ops.c. Now all of the vtrash move/copy special casing is - in camel instead of half of it being here and half in mail/. (This - should also make it so that "Move to Trash" will work in filter - rules.) - - * camel-vee-folder.c (vee_transfer_messages_to): Make this just - return an exception, since it will only be called when trying to - move/copy messages from one vfolder to another. - (vee_append_message): Add this too so we get a nicer error message - than the default "unimplemented" one in camel-folder.c. - - * camel-digest-folder.c: Replace copy_messages_to and - move_messages_to with transfer_messages_to. - - * camel-disco-folder.c: Likewise - - * camel-disco-diary.c (camel_disco_diary_log, - camel_disco_diary_replay): replace MOVE/COPY with TRANSFER. - - * providers/imap/camel-imap-folder.c (imap_transfer_offline, - imap_transfer_online, imap_transfer_resyncing): Update for - changes. (This ends up being a bit more complicated than it was - before for now, but later disconnected operation changes should - resimplify it.) - - * camel-filter-driver.c (camel_filter_driver_filter_message, - do_copy, do_move): Use transfer_messages_to instead of copy. - -2002-05-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-search.c (shell_exec): New filter function to pipe - a message to another program. - (run_command): Fixed some bugs to make this work. - -2002-05-09 Not Zed <NotZed@Ximian.com> - - * camel-service.c (camel_service_disconnect): Instead of testing - for SERVICE_CONNECTED, we need to also handle SERVICE_CONNECTING - too, as it will often have setup some details before it failed. - Make it !DISCONNECTED (and !DISCONNECTING for recursive calls, - which happen). Fixes #23782, and maybe also #21604 and many other - random crashes. - -2002-05-08 Jeffrey Stedfast <fejj@ximian.com> - - * camel-digest-store.c (digest_setv): Implemented. - (digest_getv): Implemented. - - * camel-disco-store.c (disco_setv): Implemented. - (disco_getv): Implemented. - - * camel-remote-store.c (remote_store_setv): Implemented. - (remote_store_getv): Implemented. - - * camel-transport.c (camel_transport_class_init): Implemented. - (transport_setv): Implemented. - (transport_getv): Implemented. - - * camel-store.c (store_setv): Implemented. - (store_getv): Implemented. - - * camel-service.c (service_setv): Implemented. - (service_getv): Implemented. - - * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): - camel_pop3_engine_iterate doesn't return the state, it returns -1 - on fail, 0 when finished processing request or >0 if more ops are - in the queue, so don't check status against CAMEL_POP3_STATE_OK, - instead check pcp->state against that. - -2002-05-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-object.h: s/class/klass for arguments so that c++ - developers don't complain later. - -2002-05-07 Dan Winship <danw@ximian.com> - - * camel-object.c (camel_object_class_cast): Fix a crash in a - g_warning. - -2002-05-07 Not Zed <NotZed@Ximian.com> - - * camel-remote-store.c (remote_send_string): Check for LOGIN xxxx - as well if debug is on, so we dont print passwords to evolution - logs. - - * providers/imap/camel-imap-utils.c (imap_is_atom_char): This was - really broken. 1. isprint() is locale dependent, and 2. it looked - up an 8 bit value in a 7 bit table without truncating it. I've - removed the isprint() stuff and just put it directly into the - special table, which i've expanded to the right size too. - - * providers/imap/*: Applied patch from Preston Elder - <prez@magick.tm> to make camel only use literals if it needs to - for simple strings. Changed slightly to use imap_is_atom() and - more consistent formatting. - * providers/imap/camel-imap-utils.c (imap_is_atom): Changed from - imap_needs_quoting(). - - ** Merged in camel-object2 branch. Simpler camelobject - implementation + object args interface. - - * camel.c (camel_init): Call camel_object_get_type() to make sure - camel_object_type is initialised. - - * camel-object.h (CAMEL_OBJECT_TYPE): Changed to return global - camel_object_type pointer, not call camel_object_get_type. - -2002-05-06 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): If - the pop3 command status is -1, then we probably have a TCP error - (?) so set a SYSTEM exception so our caller can distinguish - between a "bad password" and a "tcp error". - (pop3_connect): Only uncache the password on "bad password" - errors. - - * camel-pgp-mime.c (pgp_mime_part_sign_prepare_part): Use - CamelMimeFilterBestenc to get a more appropriate encoding rather - than just blindling assigning QP. - - * providers/imap/camel-imap-folder.c (do_append): Call - camel_mime_message_encode_8bit_parts() which fixes bug #10885. - - * camel-tcp-stream-raw.c (socket_connect): Don't bother with - counting down the timeout. - -2002-05-02 Jeffrey Stedfast <fejj@ximian.com> - - * camel-stream-fs.c (stream_read): Same fix as the tcp stream. - (stream_write): Again here. Just like tcp stream's stream_write(), - also make sure to save errno before calling fcntl to restore the - fd flags. - - * camel-tcp-stream-raw.c (stream_read): Handle EINTR errors for - select(). - (stream_write): Same and also preserve errno when setting the fd - flags back. If w == -1, return -1. - -2002-05-02 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_decode_mailbox): Fixed the fix for - stupidly-broken-mailer bug #5 to work when multiple unescaped - characters were in a row. Fixes bug #24140. - - * camel-tcp-stream-raw.c (socket_connect): Check select() for - EINTR errors. - - * camel-pgp-context.c (crypto_exec_with_passwd): Change the order - of some code so that we check if the select() failed before we - check for user-cancellation. - - * camel-service.c (camel_gethostbyname): Check for EINTR when - select()ing. - (camel_gethostbyaddr): Same. - -2002-04-29 Jeffrey Stedfast <fejj@ximian.com> - - * camel-provider.c (camel_provider_auto_detect): Now takes a - CamelURL argument rather than a GHashTable *settings argument. - -2002-04-29 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-store.c (get_folder_info): We want - to set unread_count to get_unread_message_count, not - get_message_count(). Might fix #17174. Also removed FIXME: as it - was fixed. - -2002-04-26 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/Makefile.am: Don't link to libibex.a anymore. - - * providers/nntp/Makefile.am: Same. - - * providers/imap/Makefile.am: And again here. - - * camel-store-summary.h: No longer want to #include - <libibex/ibex.h> - - * camel-provider.c (camel_provider_auto_detect): New function to - auto-detect configuration settings. - -2002-04-26 Not Zed <NotZed@Ximian.com> - - * camel-block-file.c (block_file_validate_root): Remove the - excessive \n's, after printfs. - - * camel-text-index.c (text_index_compress_nosync): @!#$@#$!@$#!. - Since the rename op was fixed, this broke compression's rename, - resulting in the index 'vanishing' after every compress - (i.e. after every reindex). Fix this code to account for the - fixed rename operation. - -2002-04-25 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_rcpt): Don't put a - space between the "RCPT TO:" and the "<recipient>" strings - - rfc0821 was not clear on this but it seems rfc2821 defines a - grammar excluding that SP. - (smtp_mail): Same. - -2002-04-24 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-local-provider.c - (camel_provider_module_init): Configure the default paths for mh, - mbox, maildir, spools, etc. - - * camel-provider.h: Add a CAMEL_PROVIDER_CONF_LABEL enum and - define some default CamelProviderConfEntry macros. - -2002-04-19 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-folder.c (pop3_refresh_info): Free the - LIST pop3 command. - - * camel-data-cache.c (data_cache_finalise): Free the cdc->path. - - * camel-multipart.c (write_to_stream): Don't g_return_val_if_fail - here if the boundary is an empty string. See bug #23676 for - details. The way I see it, we have 2 options: 1) leave this fix - the way it is, thus allowing multipart boundaries to be - empty-strings; or 2) make camel_multipart_get_boundary() change - the boundary to something legal if the boundary is an - empty-string. Since the parser should be able to handle an - empty-string boundary *and* more importantly because we want to - keep the same boundaries as the original raw message so as to be - able to verify multipart/signed parts, I vote for solution #1. - -2002-04-19 Not Zed <NotZed@Ximian.com> - - * devel-docs/camel-index.txt: Start of a white-paperish document - describing camel-index and older libibex. - -2002-04-18 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-store.c (rename_folder): If we get a - failure, make sure we set an exception. - - * camel-text-index.c (camel_text_index_rename): If the file - doesn't exist, just assume it never did, dont return failure. - (text_index_rename): Add '.index' to the path name we're using, - since we dont get it passed in. - - * camel-folder-search.c (check_header): When doing a contains - match, split the words and perform an and on it. - (match_words_messages): If we have an index, but were forced to do - a full search, first lookup a subset of messages using - the index and a simplified word set. Only do a manual search of - this subset. - -2002-04-17 Not Zed <NotZed@Ximian.com> - - * camel-folder-search.c (match_message_index): Changed to take a - utf8 string not a regex pattern. - (match_words_index): Matches against a camel_search_words list. - (match_words_1message): Matches a single message against a - camel_search_words list. - (match_words_message): Same, but gets the message from the folder - for you. - (match_words_messages): Matches a list of messages against a words - list. - (search_body_contains): Rewritten to handle multiple word - searches. For #23371. - - * providers/imap/camel-imap-search.c (sync_match): Split words - when searching, to support multiple search words. Also, try - searching specifying charset of utf8 if we can, if that fails, - fall back to not specifying charset. TODO: It should translate - the strings into the locale default charset? - - * providers/imap/camel-imap-store.c (connect_to_server): Added new - cap - utf8_search, if set, we tell the server we're searching - using utf8, otherwise we dont (incorrectly, since we always use - utf8 to search). - - * camel-search-private.c (camel_ustrstrcase): Make this class public. - (camel_search_words_split): Split a word into multiple words based - on whitespace, and keep track of whether the word is simple - (indexable directly), or not. - (camel_search_words_free): Free 'em. - -2002-04-17 Jeffrey Stedfast <fejj@ximian.com> - - * camel-vee-folder.c (vee_search_by_expression): If the vee-folder - is the unmatched, we don't have our own expression so we cannot - merge them. Instead, just use the expression passed in. This fixes - a Null-Pointer-Read crash on Solaris systems at least. - -2002-04-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_folder): Get - rid of an unused variable. - - * providers/smtp/camel-smtp-transport.c (smtp_helo): Use - camel_gethostbyaddr since gethostbyaddr is not reentrant. - - * camel-http-stream.c (http_connect): Updated after the rename of - camel_get_host_byname. - - * camel-service.c (camel_gethostbyname): Renamed. - (camel_gethostbyaddr): New cancellable/reentrant version of - gethostbyaddr. - -2002-04-14 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-spoold-store.c: Added #include - <sys/types.h> for dirent.h which needs it on MacOS X. - - * providers/local/camel-maildir-store.c: Same. - - * providers/nntp/camel-nntp-store.c: Same. - - * providers/imap/camel-imap-message-cache.c: Same. - - * camel-provider.c: Same. - - * camel-data-cache.c: Same. - -2002-04-12 Jeffrey Stedfast <fejj@ximian.com> - - * broken-date-parser.c (datetok): Treat commas as token - delimeters. - (WEEKDAY_CHARS): Use full weekday names in case the broken mailer - used the full names. - (MONTH_CHARS): Same as above but for months. - -2002-04-15 Not Zed <NotZed@Ximian.com> - - * *.c: Fix callers for api changes to camel-object, mainly - declare_event->add_event, and classfuncs->klass, and a couple - of missing #include <config.h>'s - - * camel-arg.[ch], Makefile.am: New support code for - camel_object_get/set arg. - - * *.h: Fixed all uses of get_type to return a CamelType rather - than a guint (now a pointer). - - * camel-object.[ch]: Major cleanup of object implementation. Also - added a get/set interface, and some debugging options. - -2002-04-11 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-summary.c (spool_summary_sync_full): - If the last message(s) were deleted, and we had any messages - output, account for the lost \n of the following From line by - adding an extra \n. fix for #8214. - -2002-04-10 Not Zed <NotZed@Ximian.com> - - * camel-mime-part-utils.c (convert_buffer): If we get a 0 length - input, return a 0 lenght output as valid - fixes bugs with some - iconv impl and its simpler anyway. - -2002-04-11 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c: Set the UID_SET_LIMIT value - to 4096. I ran into an issue tonight where apparently the IMAP - server changed the UIDVALIDITY and so Evo needed to re-fetch all - headers and it was trying to send a uid set of some 25k (yes, I - have a very large INBOX). Anyways, it was set to unlimited - before. Courier IMAPd can safely handle up to ~16k per token, but - UW IMAPd can only handle 8k per command-line, so I set it to 4k - just to be safe. - -2002-04-10 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part-utils.c (convert_buffer): Fixed a bug that would - miscalculate how much data to copy into the GByteArray (negative - value) thus causing a segfault. Also optimized it while I was at - it. - -2002-04-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store.c (camel_store_init): Make the folder_lock - recursive. See bug #22363 for details. Basically, - get_folder_info() is requesting a diary folder which in turn - connects which requests then calls get_folder() but deadlocks - because get_folder_info already holds the lock. - - * camel-mime-message.c (camel_mime_message_set_date): Don't adjust - the timezone offset if we used tm.tm_gmtoff because it is already - adjusted. - -2002-04-09 Not Zed <NotZed@Ximian.com> - - * camel-mime-part.c (construct_from_parser): If we get multiple - Content-Type header values, change subsequent headers to - X-Invalid-Content-Type so it doesn't wreck processing. This fixes - the reported case in #18929, but i dont know if it fixes the - original posters problems. - -2002-04-08 Not Zed <NotZed@Ximian.com> - - * camel-vtrash-folder.c (vtrash_move_messages_to): If we find - we're moving from the vtrash to another folder, we need to convert - the uid from a vfolder uid to the source uid (+8). Fix for - #20886. Also changed to batch multiple moves to different folders - so they are done as efficiently as possible rather than one at a - time. - - * camel-mime-utils.c (base64_decode_step): If we only get passed - '=', we back track only if we actually output any data. Fix for - #21716. - (quoted_decode): Pass out size_t instead of int, and use 0 instead - of -1 for error since its not signed. This will fix similar bug - to above in different circumstances since the result is taken as - unsigned. This is only an internal func. - (quoted_encode): Return size_t just for consistency. - - * camel-block-file.c (block_file_validate_root): Comment out the - debug and move it into a warning when the validation fails. - -2002-04-08 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (uuencode_close): Don't count our filler when - encoding our line-length octet. - -2002-04-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel-http-stream.c (http_get_headers): Don't get the statuscode - here anymore. - (http_method_invoke): Use a User-Agent header and do basic proxy - authentication. - (stream_read): Handle redirects. - (camel_http_stream_set_user_agent): New function to allow client - to set the User-Agent string. - (camel_http_stream_set_proxy): New function for setting the proxy - server. - (camel_http_stream_set_proxy_authrealm): New function for setting - the proxy auth realm. - (camel_http_stream_set_proxy_authpass): New function for setting - the proxy auth password. - -2002-04-04 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-summary.c (message_info_new): Simplified since we - can now decode in-reply-to without getting extra cruft. Get rid of - the FIXME about having to check scan->id because of the - possibility of it being NULL, this can no longer happen. - - * camel-mime-utils.c (header_references_inreplyto_decode): New - function to decode in-reply-to headers. Only grabs the first thing - that looks like a message-id and then returns. - (header_references_decode): Loop calling - header_references_decode_single (a new internal function). - -2002-04-04 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-search.c (imap_body_contains): If - (body-contains) is not passed any arguments, return empty/false. - Fixes a crash exposed by #15001. - - * camel-remote-store.c (remote_connect): Reset the keepalive - timeout to 10 minutes rather than the 30 seconds I was using for - testing. - -2002-04-03 Dan Winship <danw@ximian.com> - - * camel-provider.h (CamelProvider): make service_cache be an array - of CAMEL_NUM_PROVIDER_TYPES elements so you can have a single - provider offer both stores and transports. (Eg, Exchange, NNTP) - - * providers/imap/camel-imap-provider.c: Don't initialize - service_cache here. (The session code can do it itself since the - url_hash and url_equal functions are stored as part of the - provider.) - - * providers/nntp/camel-nntp-provider.c: Likewise. - - * providers/local/camel-local-provider.c: Likewise. - - * providers/pop3/camel-pop3-provider.c: Likewise. - - * providers/sendmail/camel-sendmail-provider.c: Likewise. - - * providers/smtp/camel-smtp-provider.c: Likewise. - - * camel-session.c (register_provider): Initialize the provider's - service cache(s) here. - (camel_session_class_init): Don't initialize. - vee_provider.service_cache here. - (camel_session_destroy_provider): Update to destroy multiple - service_caches. - (service_cache_remove, get_service): Tweak these a bit to deal - with multiple service_caches. - -2002-04-02 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (set_errno): Handle a ton more nspr i/o - errno's. - (stream_connect): Act as if we are doing a non-blocking - connect. This is to try and work around bug #15120 where users get - an EINPROGRESS error. Maybe importing a PRFileDesc into SSL mode - automagically makes it non-blocking? I dunno. - -2002-04-01 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-summary.c (message_info_new): Updated the - construction of the references to match JWZ's updated algorithm - initialization (ie, append any In-Reply-To reference onto any - References header and never take more than a single message-id - from the In-Reply-To header since anything after the first will - probably just be email addresses). Fixes bug #1336. - -2002-04-03 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-folder.c - (camel_local_folder_construct): Turn indexing back on, fingers - crossed ... - - * camel-block-file.c (sync_nolock): #!@$@$#@~#$ - DF@#$!Q@$#!@$#!#%. Well it helps if we're iterating a list to - iterate the node pointer ... - - * camel-text-index.c (text_index_sync): Sync the key tables - explcitly. - (text_index_sync): Debug out frag info. - (camel_text_index_dump): Added a (rather large, but optional) raw - dumping mode for debugging purposes. - - * camel-partition-table.c (camel_key_table_finalise): Sync root - block when done. - (camel_key_table_sync): New function, sync key table (root) explicitly. - (camel_partition_table_sync): Method to explicitly sync the - partition table. - -2002-04-02 Not Zed <NotZed@Ximian.com> - - * camel-block-file.c (camel_block_file_free_block): Mark root - block dirty when we change it (this function isn't used yet - anyway). - - * camel-text-index.c (text_index_add_name_to_word): Touch the root - block when we modify the counts. Also, abort processing on any - errors. - (text_index_sync): Fix typo in comments. Sync the block file - inside the lock. - (text_index_compress_nosync): Lock the old index while we're - compressing. - (text_index_compress_nosync): Remove the bogus while() at the end - of the while() loops! Also plug a memleak - records weren't - freed. - (text_index_rename): Lock around rename op. - (text_index_add_name): More typos. - (text_index_sync): Touch root when changing it. - (text_index_add_name): " - (text_index_delete_name): " - (camel_text_index_new): Touch root if we change it. - (text_index_cursor_reset): Make sure we NULL pointers after we - free them (nothing uses this yet). - - * camel-partition-table.c (hash_key): Remove some debug - accidentally left in. - (camel_partition_table_add): When linking in the next block list, - set the right previous pointer. - (camel_key_table_add): Simplify the 'left' calculation (it was - already ok though). - (camel_key_table_next): Initialise returns before processing. - Broaden the lock slightly, and simplify validity calculations. - - * providers/imap/camel-imap-store.c (imap_keepalive): Put back in - the exception setup stuff i disabled for debugging. - - * providers/local/camel-local-folder.c - (camel_local_folder_construct): Temporarily disable indexing. - -2002-03-28 Not Zed <NotZed@Ximian.com> - - * camel-partition-table.c (camel_key_table_lookup): Change range - checking assert to a warning. - - * providers/pop3/camel-pop3-folder.c (pop3_finalize): Make sure we - flush out all outstanding commands before finalising, stops being - finalised while outsanding requests are processed by the store - finalise. - (pop3_get_message): Instead of pre-fetching all messages, just - pre-fetch a maxiumum number at any one time, stops us running out - of cache fd's. - - * providers/nntp/camel-nntp-folder.c (nntp_folder_init/finalise): - Setup priv data + locks, & free. - - * providers/imap/camel-imap-folder.c (imap_rescan): Batch all - message_chagned events into a single folder_changed event - (otherwise updates can be >>> expensive, like >5 hours for 80K - messages changing!). Alternately it could use folder - freeze/unfreeze perhaps. - -2002-03-27 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c (imap_keepalive): Pass an - exception to called code so it behaves properly since it uses the - passed exception to check returns. - -2002-04-01 Dan Winship <danw@ximian.com> - - * providers/imap/Makefile.am (libcamelimap_la_LDFLAGS): Use - -avoid-version instead of -version-info 0:0:0, and specify - -module. (From Max Horn <max@quendi.de>). - - * providers/local/Makefile.am (libcamellocal_la_LDFLAGS): Likewise. - - * providers/nntp/Makefile.am (libcamelnntp_la_LDFLAGS): Likewise. - - * providers/sendmail/Makefile.am (libcamelsendmail_la_LDFLAGS): - Likewise. - - * providers/smtp/Makefile.am (libcamelsmtp_la_LDFLAGS): Likewise. - - * providers/pop3/Makefile.am (libcamelpop3_la_LDFLAGS): Likewise. - Also remove $(KRB4_LDFLAGS) since KPOP is gone. - (INCLUDES): and $(KRB4_CFLAGS) - -2002-03-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (do_copy): We now have to check to make - sure that p->message is non-NULL because we only load the message - when we have to. - (do_move): Same here. - -2002-03-28 Dan Winship <danw@ximian.com> - - * camel-transport.c (camel_transport_send_to): Change the message - arg to a CamelMimeMessage instead of a CamelMedium. Even the NNTP - provider returns CamelMimeMessages, and we're never going to - support anything more exotic than that. Also do a few more - g_return_if_fails here instead of in the providers. - (camel_transport_can_send): No longer needed. - (camel_transport_send): Remove this too. It wasn't being used any - more, and it doesn't behave exactly the same in sendmail and smtp. - - * providers/smtp/camel-smtp-transport.c (smtp_send, - smtp_can_send): Gone. - (smtp_send_to): Update for arg change. - (smtp_data): Make this take a CamelMimeMessage too. - - * providers/sendmail/camel-sendmail-transport.c (sendmail_send, - sendmail_can_send): Gone. - (sendmail_send_to): Update for arg change, and merge in the part - that used to be shared with sendmail_send. - -2002-03-27 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_folder): - Construct the source_url the right way. The previous way was - generating urls like pop://fejj@ximian.com;keep_on_server/inbox - which is wrong. - -2002-03-26 Not Zed <NotZed@Ximian.com> - - * camel-text-index.c (text_index_normalise): Changed to use just - g_utf8_strdown instead of utf8_normalise, to match the indexing - code. utf8_normalise is just far too expensive (saves approx 25% - total processing). - -2002-03-25 Not Zed <NotZed@Ximian.com> - - * camel-text-index.c (text_index_add_name): When we add a new - name, up all of the cache limits, because we're probably going to - be adding more. - (text_index_sync): Drop the cache limits back down again, we dont - need them when looking words up. - - ** MERGE camel_index branch. - - * camel-text-index.[ch]: Added files i forgot to add (eep nearly - lost all this work!) - - * camel-block-file.c (sync_nolock): Fix an infinite loop in syncing. - -2002-03-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-summary.c (camel_message_info_new_from_header): Use - the date in the received header for the received_date. - -2002-03-22 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-folder.c - (camel_local_folder_construct): Use the right option to remove the - index file and reset the index file on creation. - (camel_local_folder_construct): Remove any existing '.ibex' files - - these are the old format index files. - - * camel-block-file.c (camel_block_file_rename): Lock io lock while - renaming. - (camel_key_file_rename): Lock around rename. - (block_file_validate_root): Implement sync flag checking. - (camel_block_file_touch_block): Turn off the sync flag if we're - touching any non-root block and write it to disk. Shoudl this - fsync()? - (sync_nolock): sync the root block only if we need to. - - * providers/local/camel-local-store.c (rename_folder): Re-enable - index rename code. Not sure how race-free it is though. - (delete_folder): Delete the index file properly. - - * camel-partition-table.c (camel_key_table_lookup): Initialise - output values to 0 before doing anything. - (camel_key_table_add): Do some range-checking on values. - - * camel-text-index.c (text_index_compress): Changed to call sync here. - (text_index_compress_nolock): and not here - stops a recursive - sync call when sync performs a compress also. - (text_index_compress_nolock): Change to _nosync, since the locking - is irrelevent (recursive lock). Fixed callers. - (text_index_add_name_to_word): If we get a failure with key table - ops, fail immediately. - (text_index_compress_nosync): Likewise. - (text_index_write_name): If the nameid is 0, do nothing. - (text_index_add_name): If we can't get a keyid, dont add it to the - partition table. - (camel_text_index_remove): Function to delete an index file. - (text_index_compress_nosync): Clean up temp files when done. - - * camel-folder-search.c (match_messages_index): New function, - split from body_contains, matches a regex against all words in an - index. - (match_message_index): Similar to above but matches against an - individual message. - (search_body_contains): Changed to use above functions for - matching - substring matches should now work on indexed data. - -2002-03-21 Not Zed <NotZed@Ximian.com> - - * camel-index.c (camel_index_words/names): New virtual - methods/stubs to get a cursor of all words and names. - - * camel-text-index.c (text_index_compress_nolock): Split from - text_index_compress, so we can call the compressor while locked - also, removed lock calls. - (text_index_compress): Changed to stub which calls - text_index_compress_nolock. - (camel_text_index_key_cursor_new): New object to iterate through - a key table. - (text_index_words, text_index_names): Implement virtual functions - for iterating through all words or names. - - * camel-block-file.c: Turn off some debug. - -2002-03-20 Not Zed <NotZed@Ximian.com> - - ** New body index implementation. - - * camel-index*: Code for camel index, a new class to replace ibex. - - * camel-block-file.[ch]: block-based and link based - filesystem-in-a-file classes. - - * camel-partition-table.[ch]: An implementation of a partition - table (automatically extending on-disk hash-table using ideal - hash), and a key-table, a key<>name mapping table. Used by - camelindex. - - * providers/local/*, camel-folder-summary.[ch]: Changed to use - camel-index interface rather than ibex. - -2002-03-05 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-maildir-summary.c (maildir_summary_check): - Do progress reporting of operations. - (maildir_summary_sync): Same here. - -2002-03-04 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spoold-store.c (scan_dir): Kill a warning - with a cast. - - * providers/local/camel-*.c: Changed for ibex->camelindex. - - * camel-folder-search.c (camel_folder_search_set_summary): Init - summary_hash to point to 'static' uid strings. - (search_body_contains): Use the static uid memory to return - results rather than the values from the index library. - - * camel-folder-search.[ch]: Changed to use camelindex object. - - * camel-folder-summary.c (summary_build_content_info_message): - Use a stream to index content, also filter html mail first. - (camel_folder_summary_info_new_from_message): Use a stream - filtered to index content. - (main): Removed the test main code. Added headers for open call - (ibex must've had them before). - - * camel-folder-summary.[ch]: Changed from ibex to CamelIndex. - - * camel-mime-filter-index.c (camel_mime_filter_index_finalize): - Unref index. - - * camel-mime-filter-index.[ch]: Changed from ibex to CamelIndex. - -2002-03-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_encode_param): Fix this to work - right. We need to convert the input buffer to the charset we claim - in the encoded param (duh). - -2002-03-18 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c - (connect_to_server_wrapper): Updated to use the same logic as the - POP code. - - * providers/pop3/camel-pop3-store.c (connect_to_server): No longer - takes a stls_supported argument since we no longer need it with - the new logic. - (connect_to_server_wrapper): New logic: First try connecting to - the SSL port (995 by default), if that fails with - SERVICE_UNAVAILABLE, then we attempt to connect (to port 110 by - default) and try to use STARTTLS. - -2002-03-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder.h: - - * camel-private.h: Don't allow any empty structs. If - !ENABLE_THREADS, provide a gpointer dummy member. Fixes bug #6382. - -2002-03-13 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_auth): Added a - work-around for SMTP servers that can't read the RFCs and thus - implement SASL incorrectly. Oh well, that's life in the world of - mail clients I guess. - -2002-03-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel-digest-store.c (camel_digest_store_new): Now takes a url - argument. - - * camel-digest-folder.c (digest_add_multipart): Fixed some memory - corruption and also modified to use CAMEL_IS_MIME_MESSAGE() rather - than comparing content-type strings. - (digest_get_message): Fixed a logic blooper. - - * camel-folder-summary.c (camel_message_info_new_from_header): Set - the date fields of the CamelMessageInfo as well. This may even fix - some filter-related bugs where the user was trying to compare - dates. - -2002-03-11 Jeffrey Stedfast <fejj@ximian.com> - - * camel-digest-store.c: A pretty empty store implementation to be - the parent store of a CamelDigestFolder. - - * camel-digest-folder.c: Updated to reference it's parent store. - -2002-03-11 Jeffrey Stedfast <fejj@ximian.com> - - * camel-digest-folder.c (camel_digest_folder_new): Allow any leaf - part to be a message/rfc822 part. - (digest_get_uids): Recurse the mime structure and add all - message/rfc822 parts and use a uid scheme similar to IMAP's mime - part naming convention. - (digest_get_message): Decode the uid to get the correct mime part. - -2002-03-11 Ettore Perazzoli <ettore@ximian.com> - - * camel-mime-utils.c: Change the order of the mailing list magic - patterns so that the more mailing-list specific ones are on the - top. - -2002-03-11 Jeffrey Stedfast <fejj@ximian.com> - - These fixes should fix bug #21737. - - * providers/smtp/camel-smtp-transport.c - (connect_to_server_wrapper): Same as with the POP code. - - * providers/pop3/camel-pop3-store.c (connect_to_server_wrapper): - Slight restructuring of the if-statements for the USE_SSL_ALWAYS - case so that we can't possibly return TRUE unless we really did - connect successfully. - -2002-03-10 Dan Winship <danw@ximian.com> - - Rename the OpenSSL implementation of things to match the NSS - implementation so that callers don't need to care which one is - being used. - - * camel-tcp-stream-openssl.c: Implement CamelTcpStreamSSL, not - CamelTcpStreamOpenSSL. Rename methods as well. Replace the - camel-tcp-stream-openssl.h include with camel-tcp-stream-ssl.h. - - * camel-tcp-stream-openssl.h: Gone. - - * camel-tcp-stream-ssl.c: Add a note explaining that this - implementation is only used for NSS, and that OpenSSL's - implementation is in another file. (Should probably do some CVS - renaming magic at some point.) - - * camel-http-stream.c (http_connect): Remove OpenSSL refs; the - previously-NSS-specific code works for both now. - - * camel-remote-store.c: Likewise. - - * providers/smtp/camel-smtp-transport.c: Likewise. - - * providers/pop3/camel-pop3-store.c: Likewise. - - * Makefile.am (libcamelinclude_HEADERS): Remove - camel-tcp-stream-openssl.h - -2002-03-10 Dan Winship <danw@ximian.com> - - * camel-tcp-stream.c (camel_tcp_stream_get_socket): Remove this: - it couldn't be generically used, because different subclasses - returned entirely different types of data. - (camel_tcp_stream_get_local_address, - camel_tcp_stream_get_remote_address): Add these to replace what - get_socket was being used for. - (camel_tcp_address_new, camel_tcp_address_free): Utility functions - for get_{local,remote}_address. - - * providers/smtp/camel-smtp-transport.c: Change localaddr to a - CamelTcpAddress *. - (connect_to_server): Call camel_tcp_stream_get_local_address to - get the local IP address. - (smtp_disconnect): free localaddr. - (smtp_helo): Update for localaddr change. - - * camel-tcp-stream-raw.c (stream_get_socket): Remove - (stream_get_local_address, stream_get_remote_address): Implement. - - * camel-tcp-stream-ssl.c (stream_get_socket): Remove - (stream_get_local_address, stream_get_remote_address): Implement. - - * camel-tcp-stream-openssl.c (stream_get_socket): Remove - (stream_get_local_address, stream_get_remote_address): Implement. - -2002-03-08 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-provider.c - (camel_provider_module_init): Don't call - camel_remote_store_get_authtypes since we no longer subclass - camel-remote-store. - - * providers/pop3/camel-pop3-engine.c: Added STARTTLS to the - capabilities to look for. - (camel_pop3_engine_reget_capabilities): New function to re-get - capabilities. - - * providers/pop3/camel-pop3-store.c: Updated to not subclass - CamelRemoteStore. - (connect_to_server): Rewritten to not depend on CamelRemoteStore's - connect implementation. Also added support for STLS (aka - STARTTLS). - -2002-03-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-mime.c (camel_pgp_mime_part_sign): Add support for - hash type RIPEMD160. - - * camel-cipher-context.h: Add RIPEMD160 hash type. - - * camel-pgp-context.c (pgp_sign): Updated to consider hash - function for pgp5 and pgp6. - (pgp_clearsign): Same. - - * camel-tcp-stream-openssl.c (stream_read): Add a timeout on the - select. - (stream_write): Same. - -2002-03-06 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (connect_to_server): Fix - to work with OpenSSL. - - * camel-tcp-stream-openssl.c: compile fixes. - (camel_tcp_stream_openssl_enable_ssl): Check to make sure that the - sockfd != -1, it's not enough to check that it is non-zero. Also - set the sockfd to -1 on fail (open_ssl_connection will close the - sockfd on fail). - -2002-03-06 Dan Winship <danw@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_construct): Make - this compile. - -2002-03-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (save_ssl_cert): Removed. Glory glory - hallelujah! - (ssl_bad_cert): No longer calls ssl_save_cert or - ssl_cert_is_saved. - -2002-03-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-openssl.c (camel_tcp_stream_openssl_new_raw): - Start the ssl stream off in non-ssl mode (useful for STARTTLS). - (camel_tcp_stream_openssl_enable_ssl): New function to toggle an - ssl stream into ssl mode. - (open_ssl_connection): Close the sockfd on fail so our caller - doesn't have to - this also allows us to save the original errno. - (stream_connect): If we want ssl mode, do our ssl stuff. - (camel_tcp_stream_openssl_class_init): Init some SSL stuff here - instead of in open_ssl_connection since these only ever need to be - called once. - (stream_read): Only use SSL_read if we are in ssl mode. - (stream_write): Only use SSL_write if we are in ssl mode. - - * providers/smtp/camel-smtp-transport.c (smtp_helo): Check for the - STARTTLS extension. - (connect_to_server): Try to use STARTTLS whenever possible rather - than the old way of doing things. - (connect_to_server_wrapper): Wrapper around connect_to_server() to - first try STARTTLS and then attempt normal SSL mode if we can't - connect via STARTTLS. - - * camel-tcp-stream-ssl.c (camel_tcp_stream_ssl_enable_ssl): New - function to toggle an ssl stream into ssl mode. - (camel_tcp_stream_ssl_new_raw): Start the ssl stream off in - non-ssl mode (useful for STARTTLS). - (stream_connect): Only connect in SSL mode if required. - -2002-03-01 Jeffrey Stedfast <fejj@ximian.com> - - * camel-vtrash-folder.h: - * camel-vee-store.h: - * camel-vee-folder.h: - * camel-stream-null.h: - * camel-stream-filter.h: - * camel-store-summary.h: - * camel-news-address.h: - * camel-mime-utils.h: - * camel-mime-parser.h: - * camel-mime-filter-save.h: - * camel-mime-filter-linewrap.h: - * camel-mime-filter-index.h: - * camel-mime-filter-html.h: - * camel-mime-filter.h: - * camel-mime-filter-from.h: - * camel-mime-filter-crlf.h: - * camel-mime-filter-chomp.h: - * camel-mime-filter-charset.h: - * camel-mime-filter-bestenc.h: - * camel-mime-filter-basic.h: - * camel-internet-address.h: - * camel-folder-thread.h: - * camel-folder-summary.h: - * camel-folder-search.h: - * camel-filter-driver.h: - * camel-charset-map.h: - * camel-address.h: Add c++ armoring. - - * camel-object.h: s/class/klass - -2002-03-01 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Reverted my - pgp/mime fixes here too. - - * camel-mime-part.c (write_to_stream): Removed my pgp/mime raw - stream hack, this is causing problems such as some messages to not - displaying, view->source not working at all, etc. - -2002-02-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-parser.c: Changed offset variables from int's to - off_t's since the system may support large files. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Rearrange the - save filter stuff so that we save raw streams for all mime - parts. If the mime part turns out to be a multupart, then don't - bother saving the raw stream, we only need to save the raw stream - for leaf parts. - -2002-02-27 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-summary.h: Don't #include camel-mime-filter-save.h, - we don't use it. - - * camel-file-utils.c: Fixed a few 'might be used uninitialized' - warnings which were real problems. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Save the raw mime - stream for any/all signed parts. - - * camel-mime-part.c (camel_mime_part_init): Initialize our raw - stream to NULL. - (camel_mime_part_finalize): Unref our raw stream, if we have one. - (write_to_stream): If we have a raw stream, write that out instead - of re-encoding. - - * camel-mime-filter-save.[c,h]: Rewritten to save to a stream - rather than a file. - -2002-02-28 Not Zed <NotZed@Ximian.com> - - * camel-mime-utils.c (header_fold): Use the FOLD_SIZE as a - recommended folding size, but add a new FOLD_MAX_SIZE (=998, the - smtp max line size) as the hard limit for any output. - -2002-02-27 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-chomp.c (camel_mime_filter_chomp_new): New - stream filter that chomps excess trailing whitespace from the end - of the stream. This is needed to update the PGP/MIME code to - comply with rfc3156. - - * camel-pgp-mime.c (camel_pgp_mime_part_verify): Don't attach a - from filter, if it ain't from-filtered already, then we'll just be - breaking stuff. To become rfc3156 compliant, add a chomp filter - here. - (camel_pgp_mime_part_sign): Add a chomp filter here too. - -2002-02-27 Not Zed <NotZed@Ximian.com> - - * camel-mime-part.c (init_header_name_table): Changed header - formatted table to contain a pointer to an output function, and - added in-reply-to and references headers. - (write_references): New function to write out references header, - folded properly. It only approximates based on the last >, but it - should be adequate and will also handle invalid headers. - (write_fold): Function to write out headers folded. Since this is - the default it isn't required. - (write_raw): Write out an already formatted header, e.g. most of - the rest. - (write_to_stream): Lookup header output function, if we have one, - use that, otherwise fold header using basic (dumb) function. - - This is all for #14779. A better fix is probably do have the - headers always stored formatted, but that can wait. - -2002-02-25 Jeffrey Stedfast <fejj@ximian.com> - - * camel-digest-folder.c (camel_digest_folder_new): Allow all - multiparts that contain message/rfc822 attachments. - (digest_get_uids): Only assign uids to message parts. - -2002-02-22 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part.c (camel_mime_part_set_filename): Set the 'name' - parameter on the Content-Type too. Fixes bug #20779. - -2002-02-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (pgp_sign): Pass --always-trust to gpg - (requested by users). - (pgp_clearsign): Same. - (pgp_encrypt): Here too. - -2002-02-12 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_helo): Since the - AUTH token sometimes uses '=' instead of whitespace, don't use - smtp_token_next here. - -2002-02-09 Not Zed <NotZed@Ximian.com> - - * providers/pop3/camel-pop3-engine.c (get_capabilities): Duh, when - we grab the apop stamp it needs to include the <> as well, I even - read the rfc, silly me. - - * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): Doh, - when iterating the authtype list, it helps to goto the next node. - Found with help from miles. - -2002-02-08 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-summary.c - (camel_spool_summary_build_from): The day number has to be 2 chars - wide, space filled to work properly with pine, etc. - - * providers/local/camel-spoold-store.[ch]: new type of provider - 'spool directory', which lets you view external mbox dirs without - adding any extra cruft. Perhaps it should use . files to store - summaries? Still a bit experimental, there's a warning when you - select it in the account editor. Finished off most of #1185. - Can't rename or move folders. - - * camel-mime-utils.c (header_decode_date): If the date is - 100->1900 then we actually want to use it as the year in the tm - struct, not year+100. e.g. year 102 -> 2002, not 2102. - -2002-02-07 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-store.c (get_folder): Pass path into - spool_folder_new. - - * providers/local/camel-spool-folder.c (camel_spool_folder_new): - (camel_spool_folder_construct): Take the full path to the folder - and use that as the file path, independent of the full_name we - use. - -2002-02-07 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-provider.c: Added new type, spoold - provider, spoold: for local directories. - - * providers/imap/camel-imap-store.c (get_one_folder_offline): - Create offline uri's in a compatible manner to online ones. - -2002-02-07 Dan Winship <danw@ximian.com> - - * camel-sasl-ntlm.c: Implementation of NTLM (aka "Secure Password - Authentication") auth, taken from soup. - - * Makefile.am (libcamel_la_SOURCES, libcamel_la_HEADERS): Add - camel-sasl-ntlm. - - * camel-sasl.c: Add refs to camel-sasl-ntlm. - - * providers/imap/camel-imap-store.c (try_auth): Use - imap_next_word() to skip over the "+ " of the continuation rather - than just "resp + 2" since Exchange (incorrectly) returns "+" - instead of "+ " for an empty continuation response. - -2002-02-06 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-summary.h: Remove the CAMEL_MESSAGE_NEEDS_REPLY - flag, we no longer will be using this. - -2002-02-04 Jeffrey Stedfast <fejj@ximian.com> - - * camel-http-stream.c (stream_read): Use camel_mime_parser_read to - read internal parser data. - (camel_http_stream_get_content_type): Implemented. - (http_method_invoke): Use HTTP/1.0 instead of 1.1 - - * camel-mime-utils.c (header_decode_int): Made public. - - * camel-http-stream.[c,h]: Added. New stream for HTTP requests - (currently supported are GET and HEAD). - - * camel-tcp-stream-ssl.c (stream_connect): Call set_errno - appropriately. - -2002-01-31 Not Zed <NotZed@Ximian.com> - - * camel-mime-utils.c (header_decode_domain): Oops, this was - converting foo@[blah] to foo@[ blah ], fixed. - -2002-01-30 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-provider.c: Use "pop" instead of - "pop3" so current configurations continue to work. - -2002-01-30 Not Zed <NotZed@Ximian.com> - - * camel-sasl-login.c: Changed name from "NT Login" to simply - "Login". - - * providers/pop3/*: Entirely new pop implmentation, supporting - pipelining. - -2002-01-29 Not Zed <NotZed@Ximian.com> - - * camel-data-cache.c (free_busy): We dont want to unref the - stream, instead, stop listening to the finalised events, and free - the path only. - -2002-01-25 Not Zed <NotZed@Ximian.com> - - * camel-data-cache.c (stream_finalised): Remove the object from - the busy_stream hashtable, not the busy_path hashtable. - -2002-01-29 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_update_summary): Added - more kludge to an existing Exchange IMAP 5.5 kludge to work around - it returning multiple messages with the same UIDs. - -2002-01-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-message.c (process_header): Handle Resent headers - too. - - * camel-mime-message.h: Added Resent-* #defines. - - * camel-filter-driver.c (camel_filter_driver_remove_rule_by_name): - Use while (node->next) instead of while (node) - - * providers/smtp/camel-smtp-transport.c (smtp_decode_status_code): - New function to decode an enhanced status code. - (smtp_set_exception): Sets an exception based on the - Enhanced-Status-Code. - (esmtp_get_authtypes): Don't diplicate the key in the hash since - the key and value are the same. - (smtp_rcpt): Include the failed recipient in the error message to - be more helpful to the user. - - * camel-mime-utils.c (hex_decode): Make sure to allocate enough - for the NUL byte. - -2002-01-28 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_construct): - (connect_to_server): Use flags rather than a bunch of gboolean - variables. - (smtp_connect): Same. - (smtp_mail): Here too. Use the enhanced status codes if available. - (smtp_data): And again here. - (smtp_helo): Finally here. Also detect the ENHANCEDSTATUSCODES - extension. - (smtp_rcpt): Use the enhanced status codes if available. - (smtp_rset): Here too. - (smtp_quit): And finally here. - - * camel-transport.h: Removed gboolean supports_8bit since this is - pretty local to only SMTP for now. - -2002-01-24 Ettore Perazzoli <ettore@ximian.com> - - * Makefile.am: Remove some old cruft. - -2002-01-24 Ettore Perazzoli <ettore@ximian.com> - - * tests/folder/Makefile.am: s/MAILER_LIBS/EVOLUTION_MAIL_LIBS/. - * tests/message/Makefile.am: Likewise. - * tests/mime-filter/Makefile.am: Likewise. - * tests/misc/Makefile.am: Likewise. - * tests/smime/Makefile.am: Likewise. - * tests/stream/Makefile.am: Likewise. - -2002-01-24 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (do_beep): Call the beep callback - function. - (camel_filter_driver_set_system_beep_func): New function to set - the beep callback. - -2002-01-22 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_remove_rule_by_name): - New function to remove a filter rule by name. - -2002-01-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (do_beep): As a temporary solution, just - printf ("\a"); to make a beep :-) - - * providers/imap/camel-imap-command.c - (imap_command_strdup_vprintf): Encode the mailbox to UTF-7 here. - - * providers/imap/camel-imap-utils.c (imap_parse_list_response): - Decode the mailbox name as we parse the list response. - (imap_mailbox_decode): It's only an illegal mailbox name if it - didn't switch back to US-ASCII mode. - -2002-01-18 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-utils.c (imap_mailbox_decode): New - function to decode an IMAP mailbox name from modified UTF-7 - encoding to UTF-8. - (imap_mailbox_encode): New function to convert a mailbox name from - UTF-8 to IMAP's modified UTF-7 encoding. - -2002-01-17 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-basic.c (filter): Stop uudecoding once the - CAMEL_UUDECODE_STATE_END state bit gets set. Set the - CAMEL_UUDECODE_STATE_BEGIN state bit once we find the begin line. - (reset): No longer have uu_begin or uulen state variables, these - are now stuffed into a single state variable. - - * camel-mime-utils.c (uudecode_step): No longer needs a uulen - argument and also keeps track of whether or not the end of the - encoded data has been found in 'state'. - (uuencode_step): Now stuffs uulen into state so that the uulen - argument is no longer needed. - (uuencode_close): Same. - -2002-01-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-basic.c (filter): If we don't want to corrupt - the uuencoded data by overwriting it with base64 decoded data - afterward, we need to add a break statement! - - * camel-folder-summary.c (summary_build_content_info): Add code to - add a uu filter. - (camel_folder_summary_finalize): Unref the uuencode filter. - -2002-01-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-basic.c (filter): Fixed slight logic error to - find the uuencode begin line. Fixes bug #18754. - -2002-01-15 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_send_to): Updated to - match the new send_to API. - (smtp_send): Get the from address and pass that along to - smtp_send_to(). - - * providers/sendmail/camel-sendmail-transport.c - (sendmail_send_to): Updated to match the new send_to API. - - * camel-transport.c (camel_transport_send_to): Now takes a from - argument too. - - * providers/imap/camel-imap-folder.c (imap_update_summary): Sort - the needheaders UID array and fixed to respect the - UID_SET_LIMIT. This should now finish the fixification of bug - #2529. There's still the possible issue that a command-line (The - only command-line I can think of that can still be too long is a - SEARCH command, but this can't possibly be fixed until we rewrite - the imap code to use Zucchi's ImapEngine idea). - -2002-01-14 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_expunge_uids_online): - Move the command-lock outside the loop. - -2002-01-14 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_expunge_uids_online): - Updated to use the new imap_uid_array_to_set() interface. - (imap_expunge_uids_resyncing): Same. - (do_copy): Here too. - (imap_update_summary): Added a FIXME comment to rewrite allowing - for a uid-set limitation. - (get_matching): Copy some of the logic over from - imap_uid_adday_to_set() to limit the length of the uid-set string. - (imap_sync_online): Added a comment to explain what is going on - with get_matching() since the behavior has changed slightly. - - * providers/imap/camel-imap-utils.c (imap_uid_array_to_set): - Modify the interface so that we can limit the size of the uid set - string returned. - -2002-01-14 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-search.c (imap_body_contains): - Rewritten to use a cache for body searches when online. Will need - some heavy testing but so far seems to be beneficial. - - * providers/imap/camel-imap-folder.c (imap_search_by_expression, - search_by_uids): dont initialise search object here. - (camel_imap_folder_new): Setup search object here with pointer to - cache dir. - -2001-12-01 Not Zed <NotZed@Ximian.com> - - * camel-store-summary.[ch]: New class to store a store's folder - list in. Not yet completed. - -2002-01-11 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_update_summary): Kludge - around a bug in Exchange 5.5 that reports 2 messages with the same - UID. Fixes bug #17694. Replaces the fix from yesterday. - -2002-01-10 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-local-folder.c: If PATH_MAX doesn't exist, - use _POSIX_PATH_MAX. - - * providers/imap/camel-imap-folder.c (imap_update_summary): If mi - is NULL, don't bother updating it. Should fix bug #17694. - -2002-01-10 Jeffrey Stedfast <fejj@ximian.com> - - * camel.h: #include camel-mime-filter-tohtml.h - - * providers/imap/camel-imap-folder.c (imap_update_summary): Kludge - around Microsoft Exchange 5.5 (bug #5348) by forgetting our - currently selected folder and re-SELECTing it so that the Exchange - server has a chance to realise it has new messages. - -2002-01-09 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-local-folder.c - (camel_local_folder_construct): If the mbox file is a symlink, - follow the symlink and get the One True Path so that we can - rewrite the mbox later without worrying about clobbering the - symlink. - -2002-01-08 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-search.c (TODO): There are a few sexp callbacks - that could be modified to use fms->info rather than using a - message object (like date and possibly mlist stuff) but *only* if - the date exists on the CamelMessageInfo object (since it may be - blank except for message flags). - (camel_filter_search_get_message): New internal convenience - function to make sure that the FilterMessageSearch has loaded the - message (and to load the message if this isn't the case). - (check_header): Call camel_filter_search_get_message(). - (header_exists): Same. - (header_regex): Here too. - (header_full_regex): And here. - (body_contains): Again here. - (body_regex): Here too. - (get_sent_date): Here also. - (get_received_date): Same. - (get_source): Here if we need to. - (camel_filter_search_match): Now takes a callback function/data - pair for on-demand message loading so that we don't necessarily - have to load the message if the defined filter rules don't require - it. - - * camel-filter-driver.c (camel_filter_driver_filter_folder): Don't - bother fetching the message here, let - camel_filter_driver_filter_message() worry about this. - (get_message_cb): New utility callback to fetch a message. - (camel_filter_driver_filter_message): Only fetch the message if we - absolutely need it to get a CamelMessageInfo. Instead of passing a - message object to camel_filter_search_match(), pass get_message_cb - and some user_data so that the matching code can fetch the message - on demand. - -2002-01-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder.c (filter_filter): Flush the only-once actions. - - * camel-filter-driver.c (camel_filter_driver_filter_message): - Don't increment a filtered_count here any longer. - (camel_filter_driver_reset_filtered_count): Removed. - (camel_filter_driver_get_filtered_count): Removed. - (do_beep): New action. - (play_sound): New action to play a sound - (do_only_once): Another new action. - (camel_filter_driver_finalise): Free the only_once hash if the - driver has not been "flushed". - (camel_filter_driver_flush): Flush all of the only-once actions. - - * camel-charset-map.c: Moved windows-1251 to the end of the list - since it contains the euro and we'd prefer to use iso-8859-15 when - the euro is requested than a windows charset if possible. - - * camel-charset-map-private.h: Regenerated. - -2001-12-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-summary.c (content_info_load): Don't try setting a - content-type parameter if either the name or value is NULL. - - * camel-mime-utils.c (header_set_param): NULL-protection. - -2002-01-02 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (ssl_bad_cert): Do more like what mutt - does so hopefully this'll fix bug #16363 and #16300. - -2001-12-21 Jeffrey Stedfast <fejj@ximian.com> - - * broken-date-parser.c (parse_broken_date): Completely - rewritten. It is now a load faster and a heck of a lot more - accurate, also now returns a time_t and sets the saveoffset - variable rather than returning a new char* buffer for the normal - camel date parser to re-parse. This saves a fair number of cpu - cycles :-) - - * camel-mime-utils.c (header_decode_date): Cleanup the broken date - parsing code. - -2001-12-20 Jeffrey Stedfast <fejj@ximian.com> - - * camel-address.h: Change the prototype for camel_address_get_type - to return a CamelType (since internally this is what it returns - and also in case we decide to write a replacement for the current - CamelObject it'd be easier to drop in). - - * camel-internet-address.h: Same but for - camel_internet_address_get_type() - - * providers/smtp/camel-smtp-transport.c (smtp_send_to): Updated to - use a CamelAddress of recipients. - (smtp_send): Since smtp_send_to now takes a CamelAddress - recipients argument, our lives have been simplified and we can now - just concat To/Cc/Bcc into a recipients addr and send away. - - * providers/sendmail/camel-sendmail-transport.c - (sendmail_send_to): Updated to use a CamelAddress of recipients. - - * camel-transport.c (camel_transport_send_to): Now takes a - CamelAddress argument for the recipient list rather than a GList. - -2001-12-19 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/Makefile.am: Remove the providerdir variable. - - * providers/sendmail/Makefile.am: Same. - -2001-12-17 Jeffrey Stedfast <fejj@ximian.com> - - * camel-charset-map.c (camel_charset_iso_to_windows): New function - to map ISO charsets to the Windows charsets. - - * camel-mime-part-utils.c (broken_windows_charset): Detect Windows - charsets. - (simple_data_wrapper_construct_from_parser): Simplify a tad and - also check for iso-8859-* charsets that are really Windows - charsets. Fixes bug #12631. - -2001-12-17 Dan Winship <danw@ximian.com> - - * Makefile.am (INCLUDES): define CAMEL_PROVIDERDIR to be the - configure.in-defined camel_providerdir. - - * providers/Makefile.am: Remove some outdated comments - - * providers/imap/Makefile.am (camel_provider_LTLIBRARIES, - camel_provider_DATA): renamed from provider_LTLIBRARIES, - provider_DATA. - - * providers/local/Makefile.am: Likewise - - * providers/nntp/Makefile.am: Likewise - - * providers/pop3/Makefile.am: Likewise - - * providers/sendmail/Makefile.am: Likewise - - * providers/smtp/Makefile.am: Likewise - -2001-12-16 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (get_content): Reverted my - previous changes here since it doesn't actually work afterall. - - * providers/imap/camel-imap-wrapper.c (imap_wrapper_hydrate): - Update to do uudecoding when appropriate. - -2001-12-16 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (get_content): Try to use the - original boundary so luis will stop bugging me about "data - corruption". Also preserve other params in the multipart - content-type by dumping it to a string and setting it on the mime - part. - -2001-12-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c - (camel_filter_driver_reset_filtered_count): Reset the - filtered_count to zero. - (camel_filter_driver_get_filtered_count): Return the private - filtered_count value. - (camel_filter_driver_filter_message): Increment the - filtered_count. - (camel_filter_driver_set_shell_exec_func): New function to set the - shell-exec func. - (shell_exec): New ESExp filter action callback. - -2001-12-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-mime.c (camel_pgp_mime_part_verify): Removed - x-inline-pgp-hack kludge because it doesn't work. - (camel_pgp_mime_part_decrypt): Same. - -2001-12-13 Chris Toshok <toshok@ximian.com> - - * camel-data-cache.c: include stdlib.h (for alloca on freebsd) and - only include alloca.h if HAVE_ALLOCA_H is defined. - -2001-12-11 Zbigniew Chyla <cyba@gnome.pl> - - Fixes #17085 - - * camel-charset-map.c: Added #include <errno.h>. - - * camel-charset-map-private.h: - Recreated (following instructions from camel-charset-map.c) - -2001-12-11 Jeffrey Stedfast <fejj@ximian.com> - - * camel-object.c (camel_type_register): Keep a name-to-type hash - so that we can make sure that the type has not yet been registered - (prevents a race condition such as the one in bug #16559). - - * camel-service.c (camel_service_connect): Make sure that the - connect_op is non-NULL before unregistering/unreffing it. - -2001-12-04 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_content_type_simple): Protect against - either of the types being NULL. - -2001-12-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-basic.c (filter): If complete() allocates - len+2 bytes for the out buffer, so should this. See bug #16371 for - an example case. - -2001-12-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-digest-md5.c: iconv() returns a size_t, not an int. - - * camel-pgp-context.c: The return value of iconv() is a size_t, - not an int. - - * camel-mime-part-utils.c (convert_buffer): Always use size_t args - for iconv(). - - * camel-mime-filter-charset.c (complete): Always use size_t args - for iconv(). - (filter): Same. - - * camel-mime-utils.c (header_address_fold): Make headerlen a - size_t instead of an int. - (header_fold): Same. - (base64_encode_close): We should be returning a size_t and inlen - should also be a size_t. - (base64_encode_step): Same here. - (base64_decode_step): Here too. - (base64_encode_simple): And here... - (base64_decode_simple): Same. - (uuencode_close): We should also use size_t's here... - (uuencode_step): And here too. - (uudecode_step): And also here. - (quoted_encode_close): Same idea here. - (quoted_encode_step): Again here. - (quoted_decode_step): Here too. - (quoted_encode): Input length should be a size_t. - (rfc2047_decode_word): Same. - (g_string_append_len): Here too. - (append_8bit): " - (rfc2047_encode_word): " - (quote_word): " - (hex_decode): " - (rfc2184_decode): Use size_t's with iconv(). - (header_decode_param): Same. - -2001-12-09 Jon Trowbridge <trow@ximian.com> - - * camel-folder-summary.c: Add "NeedsReply" to the flag_names array - for CAMEL_MESSAGE_NEEDS_REPLY. - - * camel-folder-summary.h: Added CAMEL_MESSAGE_NEEDS_REPLY flag. - -2001-12-07 Dan Winship <danw@ximian.com> - - * camel-mime-message.c (camel_mime_message_set_date): Fix the - tm_gmtoff case (its sign is the opposite of "timezone"). Fixes - #14678 - -2001-11-29 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-search.c (search_body_contains): Don't use regex - matching. Fixes bug #16227. - - * camel-mime-message.c (best_encoding): Check the content-object's - mime type, not the mime part types. Should fix bug #15843. - -2001-11-27 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (get_content): Return NULL if - construct_from_stream fails. - (get_message): Same. - (get_message_simple): Here too. - (add_message_from_data): And here. - -2001-11-14 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (folder_changed_remove_uid): Use the uid - rather than vuid for unmatched. Also add the uid to unmatched if - it wasn't in the unmatched_uids table at all. - (folder_changed_change): If checking for added, if the new ones - dont match, then try to add them to unmatched. Fixes #6893. - - * camel-folder-summary.c (camel_folder_summary_index): Change lock - order, always summary_lock before ref_lock. - (camel_folder_summary_array): " - (camel_folder_summary_uid): " - (camel_folder_summary_remove_uid): " Fixes a deadlock. - -2001-11-30 Not Zed <NotZed@Ximian.com> - - * providers/nntp/camel-nntp-*.c: Completely new implementation of - NNTP. - - Doesn't support subscriptions yet (lists all folders), but should - be more reliable (faster?), and has an integrated cache. - - * camel-exception.c (camel_exception_new): Use e_memchunks for - exception blocks. - (camel_exception_free): Same. - - * camel-data-cache.[ch]: New object for managing on-disk caches of - anything that can be stored in a camel-stream. - - * camel-file-utils.c (camel_file_util_mkdir): New function, just a - nicer place to put this (than camel-store), should be removed from - camel-store. - (camel_file_util_safe_filename): New function to url-encode a - filename. - - * camel-mime-parser.c (drop_states): New func to drop the parser - state to initial state. - (folder_scan_init_with_fd): - (folder_scan_init_with_stream): Call above func to reset state if - the stream is changed on us so we can change streams to reuse a - parser object. - -2001-11-25 Not Zed <NotZed@Ximian.com> - - * providers/nntp/camel-nntp-folder.c (nntp_folder_get_message): If - the uid doesn't have a ',' in it, fail to crash. - - * providers/nntp/camel-nntp-newsrc.c - (camel_nntp_newsrc_article_is_read): check group != NULL before - scanning. - (camel_nntp_newsrc_get_highest_article_read): " - (camel_nntp_newsrc_get_num_articles_read): " - (camel_nntp_newsrc_mark_range_read): " - - * providers/nntp/camel-nntp-store.c - (camel_nntp_store_get_overview_fmt): IF we dont have - nntp_list_follows, dont try and get a list response. - (nntp_store_get_folder_info): Set path part of folderinfo. - -2001-11-20 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (get_smtp_error_string): - Check to see that errno is non-zero before returning - g_strerror. If it's 0, then we have an unknown error. - -2001-11-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-basic.c: For the uudecoding mode, garble up - the "begin <mode> <filename>" line before decoding. - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): Add a uudecoder if - the transfer encoding is x-uuencode. - - * camel-mime-part.c (write_to_stream): Handle x-uuencoded content - too. - -2001-11-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (stream_read): Added a check to see if - the operation has been cancelled. - (stream_write): Same. - -2001-11-19 Jeffrey Stedfast <fejj@ximian.com> - - Updates for compliance with rfc2231 - - * camel-mime-utils.c (header_encode_param): - camel_mime_special_table[c] & IS_ESAFE should have been - !(camel_mime_special_table[c] & IS_ESAFE). Also added a few - comments for how to improve the code at some future date. - (header_decode_param): Now takes an argument rfc2184_part so our - caller can get this information as well. - (header_decode_param_list): Pass an rfc2184_part argument to - header_decode_param and also added a few comments on where to - improve on rfc2184/rfc2231 compliance. - (rfc2047_decode_word): Updated to respect the updated ABNF syntax - of rfc2047 encoded words, yay. - -2001-11-16 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-utils.c (imap_parse_body): Abort if - body == NULL. - - * camel-mime-filter-tohtml.c (camel_mime_filter_tohtml_new): New - mime filter to convert plain text to html. - -2001-11-16 Jeffrey Stedfast <fejj@ximian.com> - - Since some mail clients like Outlook are broken, we need to set a - name parameter on pgp signed and encrypted parts. - - * camel-pgp-mime.c (camel_pgp_mime_part_encrypt): Set a name - parameter. - (camel_pgp_mime_part_sign): Same. - -2001-11-14 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-command.c - (camel_imap_command_response): If we get a BYE response, call - camel_service_disconnect() and set an exception. Also do the check - for "* BYE" first instead of passing it off imap_read_untagged() - since we'll just waste time in there mallocing left and right only - to arrive at the single response line "* BYE" again :-) - -2001-11-13 Not Zed <NotZed@Ximian.com> - - * camel-filter-search.c (get_source): If we have no source string, - then use undefined, which should always evaluate to FALSE. Fix - for #15267. - -2001-11-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store.c (camel_store_get_folder): Added a - g_return_val_if_fail for folder_name != NULL. - -2001-11-08 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (crypto_exec_with_passwd): If any of the - pipe()'s fail, clean up any pipes that may have succeeded. Also - close the password fds. - -2001-11-09 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c (imap_auth_loop): If we get a - user cancel and that causes us to fail to authenticate, abort - rather than loop forever. Fix for #14951. - -2001-11-06 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-command.c - (camel_imap_command_continuation): Now takes a command-length - argument so we can 1) avoid duping the command string yet again, - yay. 2) we now don't have to worry about embedded nul-chars - screwing us over (we still need to avoid allowing them into the - string but at least now it won't mess us up). - - * providers/imap/camel-imap-folder.c (do_append): Instead of - appending a nul char to the end of the byte array and then passing - that off as if it were a string to - camel_imap_command_continuation, instead pass the byte-array - length since that function now takes a length argument. Yay. Also - encode any 8bit parts to avoid the possibility of sending embedded - nul chars to the imap server. - - * providers/imap/camel-imap-store.c (try_auth): Updated to pass a - command-length argument to camel_imap_command_continuation(). - -2001-11-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (save_ssl_cert): Oops, pass a mode - argument to the open() call. - - * camel-tcp-stream-openssl.c (save_ssl_cert): Oops, pass a mode - argument to the open() call. - -2001-11-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-mime.c (camel_pgp_mime_part_decrypt): Add code to - kludge around any x-inline-pgp-hacks by prepending some content - headers to the decrypted data. - -2001-11-02 Jeffrey Stedfast <fejj@ximian.com> - - * camel-data-wrapper.c (camel_data_wrapper_init): Initialize our - private mutex. - (camel_data_wrapper_finalize): Destroy our private mutex. - (write_to_stream): Lock around camel_stream_write_to_stream() so - that we don't get 2 threads trying to read from our stream at the - same time. - -2001-11-01 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (folder_changed_change): Move all searching - operations outside of any locks except subfolder lock, same as - build_folder. Fix for #14294. - -2001-10-31 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-folder.c (spool_get_message): Same - as below. - - * providers/local/camel-maildir-folder.c (maildir_get_message): - Same as below. - - * providers/local/camel-mbox-folder.c (mbox_get_message): Set - USER_CANCEL if failed due to EINTR. - - * camel-filter-driver.c (camel_filter_driver_filter_mbox): If - construct from parser fails due to user cancel, set USER_CANCEL on - exception. - - * camel-mime-part.c (construct_from_parser): Return error if the - parser had an io error. - - * camel-mime-message.c (construct_from_parser): Check error on - parser/return error. - - * camel-mime-parser.c (folder_scan_init): Init error number. - (camel_mime_parser_errno): New function, return errno of any io - failures. - (folder_read): Set errno if a failure occured. - (folder_seek): Same. - (folder_scan_init_with_fd): Setup errno depeding on ok/failure. - (folder_scan_init_with_stream): Same. - -2001-10-30 Not Zed <NotZed@Ximian.com> - - * camel-operation.c (camel_operation_new): Dont setup cancel_fd. - (camel_operation_cancel_fd): If cancel_fd not created, set it up. - (camel_operation_cancel): Set cancel flag before sending message. - (cancel_thread): Same. - - * camel-filter-driver.c (camel_filter_driver_filter_mbox): Make - sure we unref the mimeparse when we're done (successfully). This - was leaking an fd every get-mail! :( - - * camel-lock-client.c (camel_lock_helper_init): Close all fd's - above 2. - - * providers/local/camel-mbox-folder.c (mbox_get_message): Remove - the X-Evolution header before anyone else gets to see this private - thing. Shoudl fix 11676 since we were inheriting flags from - X-Evolution headers we didn't want to. - - * camel-folder-search.c (match_message): If we can't retrieve the - message, ignore it, it can't match. - - * providers/imap/camel-imap-search.c - (camel_imap_search_class_init): Setup parent class pointer. - (imap_body_contains): If offline, just use the parent - body_contains method which will get the messages and search them - manually. - - * providers/imap/camel-imap-folder.c (imap_search_by_expression, - imap_search_by_uids): Remove offline check. - -2001-10-30 Dan Winship <danw@ximian.com> - - * camel-mime-part.c (free_headers): Fix this to match get_headers. - -2001-10-30 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-store.c (rename_folder): Dont try to - move ibex if we have none. - - * camel-tcp-stream-openssl.c (stream_write): Fixed compilation - errors. - -2001-10-29 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (camel_mime_utils_init): Removed unused - variable. - -2001-10-30 Not Zed <NotZed@Ximian.com> - - * camel-mime-utils.c (header_decode_mailbox): w(x) out some warnings. - - * providers/local/camel-local-summary.c - (camel_local_summary_load): Remove the warning about not loading - summary file - its a valid case for new folders. - -2001-10-29 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-openssl.c (my_SSL_write): Removed. - (stream_write): Keep looping (non-blocking case) if errno is - EAGAIN, EINTR or EWOULDBLOCK. For NONBLOCKing I/O, sync up with - CamelTcpStreamRaw. As with CamelTcpStreamRaw/SSL - make sure to - write out everything before returning. - (my_SSL_read): Removed. - (stream_read): Just call ssl_error_to_errno() and check the errno - values that we care about so we can keep the general look of all - this stream code the same. Also when checking the return value of - SSL_read, check for <0 instead of ==-1 since the man page for - SSL_read doesn't say it will return -1 on fail, it just says <0. - (stream_flush): Don't fsync() since syncing on a socket is a Bad - Thing (tm). - - * camel-tcp-stream-ssl.c (stream_write): Make sure we write out - everything just like in camel-tcp-stream-raw.c. - - * camel-stream-buffer.c (camel_stream_buffer_gets): If - camel_stream_read() returns -1, don't necessarily return -1 to our - caller since it's possible that we did actually "read" some data - (ie, we copied some pre-buffered data into the out buffer). - - * camel-stream-buffer.h: Removed CAMEL_STREAM_BUFFER_NEWLINE since - it never got used anywhere and it isn't supported anyway. - -2001-10-30 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c - (parse_list_response_as_folder_info): If we get an empty name, - then mark that as NoSelect. Workaround fix for #13239. - -2001-10-29 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c (get_message_simple, - imap_get_message): Set an X-Evolution-Source header on the - returned message so replies come from the right identity. - -2001-10-29 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (folder_changed_change): If we're not going - to search on a changed uid, make sure we change out copy still. - Fixes #13916. - -2001-10-29 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (subscribe_folder): Don't emit - a folder_subscribed signal if we are in the process of renaming - folders. - (unsubscribe_folder): Same here but for the unsubscribe signal. - (rename_folder): Unsubscribe from the folder being renamed and any - subfolders it may have before actually renaming. Once the folder - has been renamed, re-subscribe to it and it's subfolders with the - new name. - - * camel-store.c (camel_folder_info_build): Sort the folder info's - before constructing the tree. - - * camel-mime-utils.c (header_decode_param): Minor fix - should - have been using a strNcmp when checking if it was an rfc2047 - encoded word. - - * camel-pgp-context.c (pgp_sign): Notify the user that PGP 2.6.x - is no longer supported and use camel_exception_set() instead of - setv() where appropriate. - (pgp_clearsign): Same. - (pgp_verify): And again here. - (pgp_encrypt): Here too. - (pgp_decrypt): And finally here. - -2001-10-29 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-store.c (unsubscribe_folder): Don't - free the hash table key if the folder wasn't found in the hash - table. I'm not sure where the bug is/was that made it possible to - add a folder to the tree after creating it failed, but now if that - happens, it won't crash if you try to delete it again. (#11492) - - * camel-disco-store.c (camel_disco_store_status): if the service - is being connected and thinks it's online, but the session is - offline, then mark the service offline as well. Fixes 13683. - -2001-10-29 Not Zed <NotZed@Ximian.com> - - * camel-mime-utils.c: Turn off w() -> warnings. - - * providers/imap/camel-imap-store.c (rename_folder): Also rename - the message cache. - (rename_folder): Fix subscribed folders table with rename(s). - - * providers/imap/camel-imap-folder.c (imap_rename): Implement, - rename the cache dir pointer. - - * providers/imap/camel-imap-message-cache.c - (camel_imap_message_cache_set_path): New method to set the path - used by a message cache. - - * camel-vee-store.c (build_info): Fix the 'is this a matching - subfolder or subfolder' logic to match camel-store - get_subfolders'. - - * camel-store.c (get_subfolders): Fix the 'is this a matching - folder or subfolder' logic. - -2001-10-28 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-store.c (rename_folder): Changed to - call ibex_move to rename it internally. - - * camel-store.c (camel_store_rename_folder): Use the right - variable, not info. - -2001-10-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-stream-buffer.c (camel_stream_buffer_read_line): Make sure - we've actually read data before checking if p[-] is '\r' or not. - - * camel-tcp-stream-raw.c (stream_write): Same. - - * camel-stream-fs.c (stream_write): If errno isn't EAGAIN, just - exit with -1 and instead of using continue (which doesn't go to - the top of the do-while thus making our logic suck), just set w to - 0. Still seems to be a bug in select() if it's telling us the - socket is ready for data when it really isn't but oh well. - -2001-10-28 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-folder.c - (camel_local_folder_construct): Use path not protocol as the path - part of the uri of the folder_created event. - - * providers/local/camel-maildir-store.c (scan_dir): If FAST is - set, dont try and scan for unread counts. - - * providers/local/camel-local-store.c (create_folder): Implement, - just return the folderinfo of the folder matched, not all of it. - - * camel-store.c (camel_store_rename_folder): Rename the - camelfolders before emitting the folderchanged event (otherwise - vstore fails to pick up change. - -2001-10-27 Not Zed <NotZed@Ximian.com> - - * camel-store.c (camel_store_init): Always use a default dir_sep - of '/'. - - * camel-store.h (struct _CamelStore): Added a dir_sep to the base - store so rename and whatnot can work, temporary fix for mixed dir - separator in folder name api's. - - * providers/imap/camel-imap-store.c (rename_folder): Finished - implementation. - (imap_connect_online): Also set the store's dir_sep here. - (imap_connect_offline): " - - * providers/local/camel-local-folder.c (local_rename): Implement - local rename of folder objects. - -2001-10-26 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (camel_vee_folder_class_init): Hook into - rename function. - (vee_rename): Implement the veefolder rename function. - (camel_vee_folder_class_init): - (folder_changed_change): Kill a warning with a cast. - - * camel-vee-store.c (vee_rename_folder): Emit a folder_renamed - event properly, also call parent to do some rename stuff. - - * camel-store.h: Added a CamelRenameInfo for the rename event. - - * camel-folder.c (camel_folder_rename): New function to rename a - folder object. - (camel_folder_class_init): Added a renamed event. - (folder_rename): Default impl, set full_name, and set name - assuming the dir separator is '/'. - - * camel-store.c (camel_store_class_init): Added folder_renamed - event. - (camel_store_rename_folder): Rename an active folder object if we - have one, and update the folder table. - (rename_folder): Make a default implementation that handles - updating the folder tree. - -2001-10-26 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (delete_folder): Don't bother - checking ex since we can rely on the response being NULL on error. - (rename_folder): Implemented. - -2001-10-26 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_get_message): Check to - make sure that the dataset is non-NULL before using and/or - freeing. - - * camel-tcp-stream-raw.c (stream_write): Check for EWOULDBLOCK - too? - (stream_read): Same. - (stream_flush): Return 0 always, fsync() and tcp sockets don't - play nice :-) - - * providers/imap/camel-imap-message-cache.c - (camel_imap_message_cache_get): Lets try putting a - camel_stream_reset() here. Logic being that the stream may have - been read from since it was cached and thus our caller may try - reading from it and get no data from it since it is already at the - EOS. This may fix bug #12943. - -2001-10-25 Not Zed <NotZed@Ximian.com> - - * camel-search-private.c (utf8_get): Remove the stupid warning - that should never have been there in the first place. - - * camel-sasl-digest-md5.c (digest_response): s/iconv/e_iconv/ - - * camel-pgp-context.c (pgp_verify): " - - * camel-mime-utils.c (rfc2047_decode_word, rfc2047_decode_word, - append_8bit, rfc2047_encode_word, rfc2184_decode, - header_decode_param): " - - * camel-mime-part-utils.c (convert_buffer, convert_buffer): " - - * camel-mime-filter-charset.c (reset, complete, filter): " - -2001-10-24 Not Zed <NotZed@Ximian.com> - - * camel-mime-filter-basic.c (complete): For qp decoding, if the - data isn't really qp encoded, we could possible grow the buffer by - upto 2 bytes above the input size, fix allocations/assertions - appropraitely. - - * camel-vee-folder.c (folder_changed_change): If we're not - autoupdate, only search for new matches against changed uid's that - we dont already have. - -2001-10-24 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-store.c (unsubscribe_folder): Don't - let fi->name be NULL. - -2001-10-24 Jeffrey Stedfast <fejj@ximian.com> - - * camel-stream-fs.c (stream_read): Same as in the TcpStreamRaw code. - (stream_write): And again here... - - * camel-tcp-stream-raw.c (stream_read): Handle the EAGAIN error - case as well. - (stream_write): Same here, this might fix the SMTP truncation - thing? I hope? - -2001-10-23 Dan Winship <danw@ximian.com> - - * camel-mime-utils.c (mail_list_magic): Remove an extra * in one - of the regexps that glibc apparently doesn't mind but bsd does. - -2001-10-23 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-mbox-summary.c: made d(x) x recompile again. - -2001-10-22 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-summary.c (summary_rebuild): No, use - Storing, as the other code does :p - (spool_summary_check): Check for consistency. - -2001-10-22 Jon Trowbridge <trow@ximian.com> - - * providers/local/camel-spool-summary.c (summary_rebuild): - s/summarising/summarizing/. - (spool_summary_check): s/summarise/summarize/. - -2001-10-22 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-mime.c (camel_pgp_mime_part_verify): If we are - kludging around a inline-pgp signed part, do some charset - conversion to protect any 8bit text. - -2001-10-22 Not Zed <NotZed@Ximian.com> - - * camel-filter-search.c, camel-folder-search.c (check_header): Use - search_type_mlist for mailing list searches. - - * camel.c (camel_init): call camel-mime-utils-init func. - - * camel-mime-utils.c: Changed mail mail_list_magic to include a - domain part, also pre-compile all the patterns. They are all - backward compatible except List-Id: which now uses the - mail-address-like <list-name.host.name> part rather than the - plain-text part (which might've been blank anyway). - (camel_mime_utils_init): Initialisation function to setup any - static data required by camel-mime-utils at run-time. We now - setup the base64/charset class tables here, so it doesn't need to - be done statically. - (camel_mime_special_table, camel_mime_base64_rank): No longer - statically initialise these. - (main): Removed + the tests at the end of the file. - (header_raw_check_mailing_list): Dont compile regex's here, - already compiled in utils_init. Use the regex patterns to remove - leading <'s from addresses. Also, if there is a domain part - matched, add that after a '@' is added. - - * camel-search-private.c (camel_search_header_match): Match check - against all addresses in a multiple address match. Should fix - #13051. - (camel_search_header_match): Oops, missing i=0. - (camel_search_header_match): Added SEARCH_TYPE_MLIST for mlist - search types. It ignores the domain part if either (but not both) - of the values dont have it. - -2001-10-22 Dan Winship <danw@ximian.com> - - * camel-pgp-mime.c (camel_pgp_mime_part_verify): Add a hack: if - the multipart/signed part has a "x-inline-pgp-hack" parameter in - its Content-Type, don't pass the MIME headers as part of the data - to be verified. - -2001-10-22 Rodrigo Moya <rodrigo@ximian.com> - - * Makefile.am: added $GNOME_INCLUDEDIR to INCLUDES, needed for latest - libgnome, which install headers in $(prefix)/gnome-1.0 - -2001-10-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): Only do the rawtext - checks if the part is a text part, otherwise don't bother wasting - cpu cycles. - - * camel-store.c (camel_folder_info_build): Updated comments to - make the code a bit more clear. - -2001-10-21 Not Zed <NotZed@Ximian.com> - - * camel-store.c (CS_CLASS): Dont do the macro stuff - basically so - you can actually debug calls. - (camel_store_uri_cmp): New function to compare store objects. - - * camel-vee-folder.c (vee_folder_add_info): oops, dont free the - vuid, since its alloca'd now. - (folder_changed_change): Kill a compile warning. - -2001-10-20 Not Zed <NotZed@Ximian.com> - - * camel-folder.c (move_messages_to): If no exception supplied, use - a local one. - (move_message_to): Set the seen flag also when we delete it. - -2001-10-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-vtrash-folder.c (vtrash_move_messages_to): If the - destination folder is the vfolder source folder, then - set_message_flags on it. - -2001-10-19 Not Zed <NotZed@Ximian.com> - - * camel-session.c (register_provider): When registering provider, - translate all strings. - - * camel-vee-folder.c (camel_vee_folder_remove_folder): Lock the - right lock for unmatched subfolder list stuff. If the sub folder - is deleted & part of unmatched, or the last ref to the sub folder - is gone from unmatched, blow it away completely from unmatched, - but only do it once. - (vee_folder_remove_folder): Added arg to kill unmatched - unconditionally. Also handle deleted folders, always remove - stuff. - (folder_changed_change): Lock subfolder lock for entirety of - operation, and also check to see if the subfolder is still there - before doing any fancy work (incase it got removed while we were - waiting to execute). - (folder_changed_change_uid): Use alloca for vuid, and not - sprintf(".lengths") - (vee_search_by_expression): Dont use sprintf for vuid. - (vee_search_by_uids): " - (vee_folder_add_info): " - (folder_changed_remove_uid): " - (folder_changed_change): " - (folder_changed_change_uid): Also check folder_unmatched for - changed uid's so we properly update/propagate unmatched changes. - (folder_changed_change): Ok, so dont hold the subfolder lock for - the whole duration of the changed event, although we probably - should, requires a recursive mutex. - (folder_changed_change): Change logic, we always add changed stuff - if it now matches, but dont remove it unless its auto-remove, only - propagate changes for it. - (vee_set_message_flags): Call parent method after doing our work. - (vee_set_message_user_flag): Same here. - -2001-10-18 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): If a charset isn't - specified or claims to be utf-8, check the validity of the text - and if it's invalid, set the rawtext bit to TRUE. If the charset - is x-unknown or some other x- charset, always set the rawtext bit - to TRUE. - -2001-10-18 Not Zed <NotZed@Ximian.com> - - * camel-store.c (camel_store_unsubscribe_folder): If we are - unsubscribing from a folder we have loaded, set the folder - deleted, as with the delete_folder case. - - * providers/(imap|local|pop3|sendmail|smtp)/Makefile.am: Added - CAMEL_CFLAGS so we get the right iconv stuff, patch from Yanko - Kaneti <yaneti@declera.com> - -2001-10-18 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (crypto_exec_with_passwd): Make sure the - cancel_fd isn't -1. - -2001-10-18 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-message-cache.c (insert_finish): Flush - the stream here, not sure it really matters but it might - (hopefully) fix bug #12943. - - * camel-pgp-context.c (crypto_exec_with_passwd): Make - user-cancellable. - - * providers/local/camel-local-provider.c: String cleanup for bug - #6640. - - * providers/imap/camel-imap-folder.c (imap_sync_online): Fix my - Cyrus imapd workaround...instead of checking to see if info->flags - == FLAGGED, just check to see if it contains any IMAP flags. - -2001-10-17 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-maildir-folder.c - (camel_maildir_folder_new): Use '.' as the inbox name for filter - new messages test. - - * camel-store.c (camel_folder_info_clone): New function to clone a - folderinfo tree. - -2001-10-17 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-mh-folder.c (mh_append_message): Same as - maildir and mbox append-message. - - * providers/local/camel-maildir-folder.c (maildir_append_message): - Same as mbox append. - - * camel-exception.c (camel_exception_set): Make sure the new - description isn't the same as the old description pointer before - freeing the old one. - (camel_exception_setv): Don't free the old description until we - set the new one this way we can reuse the old description in the - new description. - - * providers/local/camel-mbox-folder.c (mbox_append_message): If - errno == EINTR, then we got a user-cancel so set the exception - appropriately so that we don't make the user shit his pants. - - * camel-filter-driver.c (do_copy): Add an optimization for when - destination folder is the same as the source folder. - -2001-10-17 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c (get_folder_info_online): - (parse_list_response_as_folder_info): Patch from Danw, Use unread - count of -1 to mark unflagged messages. Make sure any folder we - dont lookup explicitly is marked as -1. Should fix #9947 and - friends. - - * providers/local/camel-mbox-summary.c (mbox_summary_sync): Only - touch the summary if the timestamp or size changed. - -2001-10-17 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_message): Set - the DELETED flag on directly on the info if the source folder - doesn't have summary capability. - -2001-10-17 Not Zed <NotZed@Ximian.com> - - * camel-tcp-stream-raw.c (stream_write): As below. - - * camel-stream-fs.c (stream_write): If not checking cancellation, - make sure we write out everything asked of us. - -2001-10-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (pgp_verify): Rearange the order of the gpg - options slightly otherwise it might try to use "--no-tty" as the - filename to verify :-) - - * camel-object.[c,h]: If CAMEL_DEBUG is defined, print some useful - ref/unref info. - - * providers/imap/camel-imap-store.c (delete_folder): Fixed an - assignment warning. - - * camel-uid-cache.c (camel_uid_cache_new): Make sure that the - parent directory exists before trying to open the filename, if it - doesn't, create it. - -2001-10-16 Not Zed <NotZed@Ximian.com> - - * camel-mime-utils.c (header_address_decode): If no content, dont - try and decode further and spit meaningless warnings. - -2001-10-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (do_flag): Only perform the operation on - the folder if the folder has summary capability, else just poke - the info directly. Fixes the "Filters don't work" bug. - (do_score): Same. - (do_colour): And here too. - -2001-10-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-stream-fs.c (stream_read): Save the errno before calling - fcntl so fcntl doesn't overwrite errno in case of a previous - error. - (stream_write): Same. - -2001-10-13 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_data): Replace the - Bcc headers in a single location and don't flush the data unless - the write was successful. - -2001-10-12 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: Remove the stripheader filter from the build. - - * camel-mime-filter-stripheader.[c,h]: Removed. - - * providers/smtp/camel-smtp-transport.c (smtp_data): Check the - return value of camel_stream_flush to make sure it flushed the - data successfully before continuing. Don't use the stripheader - filter, it was completely broken - instead remove the header and - set it again after we send. - -2001-10-12 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (camel_vee_folder_remove_folder): Unhook from - all events before removing folder. - (camel_vee_folder_add_folder): Hook onto delete event. - (camel_vee_folder_finalise): Unhook from deleted event for suibfolder. - (subfolder_deleted): When the folder is deleted, remove it from - the vfolder automagically. - -2001-10-11 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (vee_search_by_uids): convert the uids list - to a subset appropriate for each subfolder before trying to search - on it. - - * camel-charset-map.[ch]: Removed charset/locale charset lookup - and iconv_open/close functions, moved to gal. Fixed all callers. - -2001-10-11 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (ssl_cert_is_saved): Same. - - * camel-tcp-stream-openssl.c (ssl_cert_is_saved): Instead of - opening the file, stat it and make sure that it belongs to us. - -2001-10-10 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-openssl.c (ssl_verify): Same hack as below. - - * camel-tcp-stream-ssl.c (ssl_bad_cert): Hack around the fact that - adding a cert to nss's certdb seems to not work. - -2001-10-10 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (vee_sync): Only re-build the folder if we're - expunging. Also only clear out the changed folders list if we're - expungung and everything worked. - -2001-10-10 Jeffrey Stedfast <fejj@ximian.com> - - * camel-charset-map.c (camel_charset_map_init): Added a hack for - Solaris systems. - -2001-10-10 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-maildir-store.c (scan_dir): oops, we want - get_unread_message_count, not get_message_count! - -2001-10-09 Not Zed <NotZed@Ximian.com> - - * camel-service.c (camel_service_disconnect): Duplicate connect - code that unregisters a cancel op if we created one. - - * camel-operation.c (camel_operation_progress): Another go at - getting the logic right again. Make transients only update after - 5 seconds (CAMEL_OPERATION_TRANSIENT_DELAY) - (camel_operation_end): Likewise. - - * providers/local/camel-spool-folder.c (spool_search_by_uids): - Implement. - - * providers/imap/camel-imap-search.c (imap_body_contains): If - searching a sub-set of the total message count, then use a UID - range to search only specific messages. - - * camel-vee-folder.c (vee_folder_change_match): Removed. - (folder_changed_add_uid): Helper func for changed code. - (folder_changed_remove_uid): " - (folder_changed_change_uid): " - (folder_changed): Rewritten. Supports proper auto-updating of - changes, but not removals till a sync occurs. - (vee_search_by_uids): Implement. - (folder_changed): Changed to call an async threaded function to do - the actual folder updating. - - * camel-folder-summary.c (camel_flag_list_copy): New func to copy - a whole list of flags. - (camel_tag_list_copy): New func to copy a whole list of flags. - - * providers/imap/camel-imap-folder.c (imap_search_by_uids): - Implement. - - * providers/local/camel-local-folder.c (local_search_by_uids): - Implement. - - * camel-folder.c (camel_folder_search_by_uids): New function, - search a subset of uid's. - (search_by_uids): Default impl, return error. - -2001-10-08 Dan Winship <danw@ximian.com> - - * camel-folder.h (struct _CamelFolder): replace the ever-growing - list of gbooleans with a single guint32 for flags. - - * camel-folder.c: Update folder flag setting/checking. - - * providers/pop3/camel-pop3-folder.c (camel_pop3_folder_init): - * providers/nntp/camel-nntp-folder.c (camel_nntp_folder_new): - * providers/local/camel-spool-folder.c (spool_init, - camel_spool_folder_new): - * providers/local/camel-maildir-folder.c (camel_maildir_folder_new): - * providers/local/camel-local-folder.c (local_init): - * providers/imap/camel-imap-folder.c (camel_imap_folder_init, - camel_imap_folder_new): - * camel-vtrash-folder.c (camel_vtrash_folder_init): - * camel-vee-folder.c (camel_vee_folder_init): - * camel-digest-folder.c (camel_digest_folder_init): update folder - flag setting. - -2001-10-07 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-store.c (get_folder_online): Unlock - the store before returning error. (noted by NotZed) - -2001-10-06 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_decode_text): Fix a slight error in - logic. Just because the last word was an encoded word doesn't mean - we ignore the lwsp padding, we only ignore it if the last word and - *this* word are encoded. - -2001-10-06 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-basic.c (filter): Implemented uuencoding and - decoding. - (complete): Implemented uuencoding and decoding. - - * camel-mime-utils.c (uuencode_close): New function to flush the - uu encoder. - (uuencode_step): New function to uuencode a block of data. - -2001-10-05 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c (subscribe_folder): Use a - folder_subscribed event rather than a folder_created one. - (unsubscribe_folder): Similarly for unsubscribed/deleted. - (create_folder): Emit a folder_created event on the folders we - added. Not sure hsould probably check which ones are new and - which ones are just existing ones? - (delete_folder): Emit a folder_deletd event when we've deleted the - folder. Part of fix for #11831. - - * camel-store.c (camel_store_class_init): Added - folder_subscribed/unsubscribed events. - -2001-10-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel-service.c (camel_service_finalize): Turn off warnings. - (get_name): Same. - - * camel-sasl.c (sasl_challenge): Turn off warnings. - - * camel-tcp-stream.c (tcp_connect): Turn off warnings. - (tcp_getsockopt): Same. - (tcp_setsockopt): Here too. - (tcp_get_socket): And here. - - * camel-folder.c (folder_sync): Turn off warnings. - (expunge): Same. - (append_message): Here too. - (get_message): And here. - (search_by_expression): And again here. - (folder_changed): Here too. - - * camel-store.c (get_folder): Set an exception and turn off - debugging g_warnings. - (create_folder): Same. - (delete_folder): Here too. - (rename_folder): And here. - (get_trash): And here. - (get_folder_info): Same. - (free_folder_info): And again here. - (camel_folder_info_build): Here too. - (folder_subscribed): Same. - (subscribe_folder): Here too. - (unsubscribe_folder): And here. - -2001-10-05 Not Zed <NotZed@Ximian.com> - - * camel-mime-utils.c (header_decode_mailbox): Try harder to get - broken names out of addresses. Unencoded ,'s in names will still - break it, but well what can you do eh? - (header_decode_mailbox): Always add .'s into address we've scanned - past a '.', even if we can't decode the next part. Fix for some - annoying bug #. - -2001-10-04 Not Zed <NotZed@Ximian.com> - - * camel-store.c (camel_store_delete_folder): Change the order of - execution slightly. We delete the folder first, then call the - classes delete folder, then cleanup the hashtable afterwards. - This is so deletes of vfolders work, since vee-store uses the - folder hashtable to store all of is vfolders :-/ - -2001-10-04 Jeffrey Stedfast <fejj@ximian.com> - - * camel-service.c (camel_service_connect): Unregister the - operation before unreffing it. - -2001-10-03 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - Remove now unused 'recents' array/freeing func. - - * camel-object.c (camel_object_trigger_event): Oops, always run - the prep function, even if we have no hooks listening. Causes - incoming imap recents to get ignored bythe camel-folder filter - inbox code. - - * providers/local/camel-local-folder.c (local_sync): Dont - explicitly save metadata, its saved in summary_sync. - - * providers/local/camel-mh-summary.c: Call superclass. - (mh_summary_check): Dont save ibex. - - * providers/local/camel-maildir-summary.c: Call superclass method. - (maildir_summary_check): Dont save ibex explictly. - - * providers/local/camel-mbox-summary.c: Call super-class sync when - done, saves summary/ibex, etc. - (mbox_summary_check): Dont save ibex. - (mbox_summary_sync): Call summary_check rather than trying to - update from our known position. - - * providers/local/camel-local-summary.c - (camel_local_summary_check): Dont save the summary or index here. - (local_summary_sync): Save the summary/index here. - - * camel-search-private.c (camel_search_build_match_regex): Added - MATCH_NEWLINE flag, -> REG_NEWLINE. - - * camel-lock-helper.c: Include <string.h> to kill some warnings. - - * camel-filter-search.c (get_full_header): Put \n's between each - line we generate. - (header_full_regex): Dont drop the first argument to the command - -> empty matches! - (header_full_regex): Set match_newline for building regex. - (body_regex): And here too. These all fix #9877. - -2001-10-03 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store.c (camel_store_delete_folder): Call - camel_folder_delete() on the folder if it's "alive". - - * camel-folder.c (camel_folder_delete): Mark the folder as - deleted, perform any folder specific cleanup and emit the deleted - event. - (camel_folder_sync): Only sync the folder if it hasn't been - deleted. - (camel_folder_expunge): Same. - -2001-10-03 Dan Winship <danw@ximian.com> - - * providers/local/camel-local-provider.c (local_url_equal): - Strange are the ways of alloca. Fixes 11543. - -2001-10-02 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (ssl_bad_cert): Import the certificate if - the user accepts it. - -2001-10-02 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-provider.c (local_url_hash, - local_url_equal): for hashing/comparing local url's, we ignore - trailing /'s in paths (maybe shuld handle multiple /'s too). - (camel_provider_module_init): Use local_url_hash/equal for all - functions. - - * camel-sasl-digest-md5.c (digest_response): Change to - camel_charset_iconv_open/close. - - * camel-pgp-context.c (pgp_verify): Change to - camel_charset_iconv_open/close. - - * camel-mime-part-utils.c (convert_buffer): Change to - camel_charset_iconv_open(). - - * camel-mime-filter-charset.c - (camel_mime_filter_charset_new_convert, finalise): Change to - camel_charset_iconv_open, etc. - - * camel-mime-utils.c: Use the camel_charset_iconv_open/close() - functions to open/close it. - - * camel-charset-map.c (camel_charset_iconv_open): New function, - wrap iconv_open, so we can cache ic's. - (camel_charset_iconv_close): Likewise for close. - (camel_charset_map_init,shutdown): Init/free iconv cache. - -2001-10-02 Jeffrey Stedfast <fejj@ximian.com> - - * camel-charset-map.c (camel_charset_to_iconv): Revert my - x-unknown special-case hack - this may mask other problems. - - * camel-mime-utils.c (rfc2047_decode_word): If the iconv - conversion fails, for whatever reason, retry using the user's - locale charset. - -2001-10-02 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-maildir-store.c (get_folder_info): Go back - to using the store url's path, not the toplevel_dir thing. - - * camel-operation.c (camel_operation_progress): Fix the progress - logic, so we dont update too often. - - * camel-object.c (camel_object_get_hooks): Change the lock to a - recursive e-mutex. - (camel_object_hook_event): Maintain list length of hook list. - (camel_object_unhook_event): " - (camel_object_unhook_event): If we are in an event, just mark the - pair as removed, without removing it. - (camel_object_trigger_event): Before running events, copy the - list, and also ignore 'removed' events. After running events, if - we're all out of events, then free up any pending-removed events. - (camel_object_free_hooks): Add some new assertions on the state of - the hook structure. - Removed the #error if threads not defined. It _should_ actually - work without threads. - (camel_object_free_hooks): Free mutex when done. - -2001-10-01 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (delete_folder): Remove any - cached messages that belonged to the deleted folder. - (subscribe_folder): Don't ever let the info->name be NULL and - don't use the stupid concat kludge to generate the URL, just use a - CamelURL to do it. This way we don't risk breaking stuff by having - a url like imap://fejj@imap//folder - - * camel-charset-map.c (camel_charset_to_iconv): If the charset is - x-unknown, return the locale_charset. - -2001-10-01 Dan Winship <danw@ximian.com> - - * camel-provider.h: Fix up the provider flags to specify things - more completely so we don't have to hardcode provider names in the - mailer. - - * providers/local/camel-local-provider.c: MH, mbox, and Maildir - are LOCAL. MH and mbox are no longer STORAGE by the new - definition. - - * camel-session.c (vee_provider): The vfolder store is a STORAGE. - -2001-10-01 Dan Winship <danw@ximian.com> - - * providers/local/camel-local-store.c (construct): Don't munge the - URL; CamelSession's caching relies on it not changing. Instead, - add a toplevel_dir field to CamelLocalStore, and set that to the - path, but always ending with /. - (camel_local_store_finalize): Free toplevel_dir - (camel_local_store_get_toplevel_dir): Return toplevel_dir rather - than url->path. - - * providers/local/*: Lots of s/url->path/toplevel_dir/ - - * providers/local/camel-spool-store.c (construct): Likewise, don't - try to strip a trailing / from url->path here, but I didn't make - the corresponding toplevel_dir change, because there's no good - reason someone should expect "/var/spool/mail/danw/" to work since - that's not a directory. - - * providers/pop3/camel-pop3-folder.c (pop3_refresh_info): if STAT - returns 0, don't bother sending UIDL. Speeds things up slightly - and also works around a bug in a particular random POP server. - (ximian bug 11369). - -2001-09-29 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (pgp_sign): Add --no-secmem-warning and - --no-greeting to the gpg command-line options. - (pgp_clearsign): Same. - (pgp_verify): Here too. - (pgp_encrypt): And here. - (pgp_decrypt): And finally here. - -2001-09-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-search.c (get_source): Same here. - - * camel-mime-message.c (camel_mime_message_set_source): Don't use - the e_url_shroud hack, use CamelURL functions instead. - -2001-09-28 Jeffrey Stedfast <fejj@ximian.com> - - * providers/nntp/camel-nntp-provider.c - (camel_provider_module_init): Init the nntp url hash and url_equal - functions. - - * providers/sendmail/camel-sendmail-provider.c - (camel_provider_module_init): Init the sendmail url hash and - url_equal functions. - - * providers/smtp/camel-smtp-provider.c - (camel_provider_module_init): Init the smtp url hash and url_equal - functions. - - * providers/pop3/camel-pop3-provider.c - (camel_provider_module_init): Init the pop3 url hash and url_equal - functions. - - * providers/imap/camel-imap-provider.c - (camel_provider_module_init): Init the imap url hash and url_equal - functions. - - * providers/local/camel-local-provider.c - (camel_provider_module_init): Init the local url hash and - url_equal functions. - - * camel-session.c (camel_session_class_init): Init the vfolder url - hash and url_equal functions. - - * camel-provider.h: Added url_hash and url_equal function pointers - to the structure. - - * camel-vtrash-folder.c (vtrash_move_messages_to): Oops, a - CamelFolder is not a CamelFolderClass. - -2001-09-28 Dan Winship <danw@ximian.com> - - * camel-tcp-stream-openssl.c (ssl_error_to_errno): Make this take - an SSL * instead of a CamelTcpStreamSSL *, since it can get called - from open_ssl_connection, when the CamelTcpStreamSSL isn't set up - right yet. Fixes a crash on connection failure. - -2001-09-27 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c - (camel_imap_folder_fetch_data): Grab the store's command_lock - before grabbing the folder's cache_lock to prevent deadlock if - another thread is processing an EXPUNGE response. - - * providers/imap/camel-imap-folder.c - (imap_expunge_uids_resyncing): Fix a compiler warning that might - point out a real bug... - - * providers/imap/camel-imap-folder.c (get_content): and one that - doesn't - -2001-09-27 Not Zed <NotZed@Ximian.com> - - * camel-service.c (camel_service_connect): Dont re-register the - connect_op if we got it by calling 'operation_registered', which - returns an already-registered one. - (camel_service_disconnect): Likewise here. This removes all the - re-registered warnings. - - * camel-object.c (camel_object_unref): Fill the finalised data - with nonsense, rather than 0's - more easily detect bad data. - (camel_object_new): Clear instance data when we retrieve it off - the list. - - * camel-object.h (_CamelObject): Added an event lock pointer for - uh, locking event stuff. Also change the hooklist hashtable into - a list. Changed all the code to handle it. Result: thread-safe - events, event-hooks, and save memory too, and SHOULD FINALLY FIX - THAT UNREAD COUNT PROBLEM. - -2001-09-27 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-mime.c (camel_pgp_mime_part_decrypt): CRLF decode the - stream before parsing it into a MIME part. This fixes bug #10521. - - * camel-store.c: Remove the old folder from the vTrash folder. - -2001-09-27 Dan Winship <danw@ximian.com> - - * camel-service.c: Change "gboolean connected" to - "CamelServiceConnectionStatus status", which can be disconnected, - connecting, connected, or disconnecting. - (camel_service_init, camel_service_finalize): create/destroy the - connect_op_lock. Refer to service->status rather than - service->connected. - (camel_service_connect): When connecting, note the current - operation (and create a new one if there's none registered) and - mark the connection "connecting" until we succeed or fail. - (camel_service_disconnect): Likewise in reverse. - (camel_service_cancel_connect): New function to cancel a - connection attempt. - (cancel_connect): Default implementation: Call - camel_operation_cancel on the connect_op. - - * camel-disco-store.c (disco_connect): Only call - CamelRemoteStore's connect func if we're online. - (disco_cancel_connect): Fall back to offline if a connection gets - cancelled. - (disco_get_folder_info): Kludge: call connect explicitly before - deciding whether to do the online or offline version, so if the - connect fails, we fall back correctly. - - * camel-session.c (camel_session_get_service_connected): - s/svc->connected/svc->status/ - - * camel-remote-store.c (camel_remote_store_finalise): - Change service->connected check to service->status check. - (remote_connect): Don't set service->connected here: - camel_service_connect() itself does that. - - * camel-operation.c (camel_operation_registered): Deal with the - possibility that there's no registered op. - -2001-09-26 Not Zed <NotZed@Ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_message): If - we get a search error, just abort, dont try and fall back and copy - to inbox. - (camel_filter_driver_filter_message): Make sure we ALWAYS use - exceptions for important things - like moving messages to inbox! - (camel_filter_driver_filter_message): If we have the source - folder, use camel_folder_set_message_flags rather then poking the - info directly, which skips changed events. This means filtering - immediate doesn't lose changed events. - (do_flag): Same here. - (do_colour): Same thing but using set_tag. - (do_score): Same again. - (camel_filter_driver_filter_folder): Use ~0 as the 'set' arg to - set_flags, just saves typing. - (open_folder): We cache folders that we couldn't open as well as - those ones we could. Use magic token FOLDER_INVALID = - (void *)~0 as the marker. - (close_folder): Handle FOLDER_INVALID case properly. - -2001-09-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-message.c - (camel_mime_message_get_part_by_content_id): New function to - convenience Larry ;-) - (check_content_id): Oops, return !found instead of found. This - callback has to return whether or not to keep searching, not - whether or not it found what it's looking for. Do'h! - - * camel-pgp-mime.c (camel_pgp_mime_is_rfc2015_signed): block out - some code if ENABLE_PEDANTIC_PGPMIME is not defined. - -2001-09-26 Not Zed <NotZed@Ximian.com> - - * camel-vee-store.c: Emptied VeeStorePrivate, member wasn't used. - - * camel-vee-folder.c (camel_vee_folder_set_expression): Lock - changed list separately. - (camel_vee_folder_remove_folder): " - (camel_vee_folder_set_folders): Use changed_lock for changed list. - (vee_refresh_info): Use changed_lock, also just grab the list, - reset it in the lock, and do the work unlocked. - (vee_sync): Use changed lock for changed list. - (folder_changed): ". All this kills a deadlock with sync/expunge. - - * camel-private.h (CamelVeeFolderPrivate): Added a new lock for - the folders-changed list. - (CamelVeeStorePrivate): Removed, defined in camel-vee-store.c, - thanks to a pedantic. - -2001-09-26 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: Fix Ettore's fix. - -2001-09-25 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (camel_pgp_context_new): No longer takes a - remember argument. - (pgp_sign): Only uncache the passphrase on failure. - (pgp_clearsign): Same. - (pgp_encrypt): Here too. - (pgp_decrypt): And here. - (pass_free): New function to zero the passphrase before freeing - it. - -2001-09-25 Ettore Perazzoli <ettore@ximian.com> - - [Patch for Automake 1.5 compatibility pointed out by Richard - Boulton <richard@tartarus.org>, as per #9258.] - - * providers/nntp/Makefile.am: Remove some commented parts that - make Automake 1.5 choke. - - * Makefile.am (camel-lock-helper): Add $(EXEEXT) for Automake 1.5 - compatibility. - -2001-09-25 Not Zed <NotZed@Ximian.com> - - * camel-folder.c (get_unread_message_count): Only unref info if we - got it. - - * camel-operation.c (camel_operation_unref): Fix for !threads - enabled not ccompiling. - (camel_operation_ref): Assert refcount > 0. - (struct _CamelOperation): Removed the lock. On further - investigation, I dont think this will always work, the - registration operations assume that a lookup in the - operation_active table will return a ref, that will remain valid - until we ref it, which needn't be the case. So now i'm using a - single global lock, since we'd need to do that for unref anyway, - and every operation is fast & memory-bound. Changed all the code - to handle this. - (camel_operation_progress_count): Since the code is identical, - just call progress() for now. - (camel_operation_register): No longer refcount, use unref to - check/clear the active table. - (camel_operation_unregister): Same here. - (camel_operation_unref): Check if operation is in active table, if - so, warn, remove. - -2001-09-25 Dan Winship <danw@ximian.com> - - * camel-tcp-stream-openssl.c (my_SSL_read, my_SSL_write): call - SSL_read/write, looping on SSL_ERROR_WANT_READ/WRITE. I'm sure - there's a perfectly good reason that the API works this way. No, - really. - (stream_read, stream_write): use my_SSL_read and my_SSL_write. - Fixes at least ximian 8593, and probably 6024 and maybe 10366, - at least for OpenSSL. There may be a parallel NSS bug? - -2001-09-25 Not Zed <NotZed@Ximian.com> - - * camel-stream-buffer.c (stream_write_all): A "safe write" - function that always writes out all data asked of it, till - finished. - (stream_write): Rewritten. What was i on when i wrote that - originally, how did it ever work with tcp streams ... - -2001-09-24 Not Zed <NotZed@Ximian.com> - - * camel-folder.c (append_message): Set the exception to - FOLDER_INVALID rather than making out it worked. A fix for #7025. - (search_by_expression): Here too. - - * providers/imap/camel-imap-folder.c (imap_update_summary): In the - 'lose' case, free messages, not fetch_data twice! - - * camel-filter-search.c (check_header): If the type is encoded, - get the fallback charset from the message content-type. - - * camel-mime-part-utils.c (check_html_charset): Dont check for - charset==null before calling charset_to_iconv. - (simple_data_wrapper_construct_from_parser): " - - * camel-mime-message.c (process_header): Try use content-type - charset param as the fallback charset. - - * camel-charset-map.c (camel_charset_to_iconv): Handle name == - NULL, return NULL. - - * camel-folder-summary.c (camel_folder_summary_format_address): - (camel_folder_summary_format_string): Made private again, removed - #warning about it. Renamed to s/camel_folder//. - (summary_format_string): Take default charset param. - (camel_message_info_new_from_header, message_info_new): Decode - content-type field to get the charset parameter to use as the - default charset for decoding strings. - - * camel-search-private.c (camel_search_header_match): Pass NULL as - the charset, the locale charset is always tried. - (camel_search_header_match): Supply a default_charset parameter to - be used with TYPE_ENCODED params. - - * camel-mime-utils.c - (header_param): get rid of the g_strcasecmp crap. - (header_set_param): Same here. - (header_decode_param_list): And here. - (header_decode_text): Totally rewritten. 30% of its size. If the - word is not rfc2047 encoded, always try default_charset if - supplied, if that fails, try locale charset if it exists, if that - fails then assume latin1/7 bit ascii. - (append_8bit): Changed to return FALSE if we can't convert for - whatever reason, and dont append anything. - - * camel-mime-part.h (struct _CamelMimePart): Move content_type and - headers out of the 'private' section. - - * camel-mime-part.c (get_headers): Dont do any conversion on the - header. - (process_header): Get the content-type charset as the fallback - charset for decode_string. - (construct_from_parser): IF we have a content-type header, process - it before doing anything else, so we have access to a fallback - charset for invalid headers. - -2001-09-23 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-openssl.c (ssl_verify): Don't even try to alert - the user if the session isn't interactive. - (errlib_error_to_errno): Make the default errno EINTR so that we - act just like CamelTcpStreamSSL. - - * camel-pgp-context.c (pgp_sign): When the password is not - provided, set the exception to USER_CANCEL. - (pgp_clearsign): Same. - (pgp_encrypt): And here. - (pgp_decrypt): Here too. - -2001-09-21 Not Zed <NotZed@Ximian.com> - - * camel-store.c (create_folder): Set the exception if - create_folder isn't implemented. - -2001-09-21 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (create_folder): Go back to - not using camel_folder_info_build() here because this seems to - break folder creation (returning nodes from the root path when it - shouldn't be?). - -2001-09-21 Not Zed <NotZed@Ximian.com> - - * camel-vee-store.c (vee_get_folder_info): Force a refresh of - vfolders before storing their count. This essentially makes - 'get_folderinfo' refresh all vfolders, so that get-mail works as - expected. - - * camel-vee-folder.c (camel_vee_folder_finalise): Clear lists. - (folder_changed): If we're not autoupdating the folder, then - add this folder to the list of 'changed' folders for this vfolder. - (camel_vee_folder_set_expression): Reset the folders_changed list. - (camel_vee_folder_remove_folder): Remove the folder from the - folders_changed list. - (camel_vee_folder_set_folders): If we have a folder already, but - its changed, use this opportunity to update it. - (vee_sync): Remove any synced folders from the folders_changed - list. - (vee_refresh_info): Refresh folder, re-run queries on any changed - folders. - -2001-09-20 Not Zed <NotZed@Ximian.com> - - * camel-folder-summary.c (camel_folder_summary_header_load): New - function to just load the summary. Not much use yet, until unread - counts are stored in the summary (which now looks like too much - work!). - - * camel-mime-utils.c (header_decode_mailbox): Crappy fix for - stupid mailers. If we get 'name b. name <foo>' then treat it as - '"name b. name" <foo>'. See 8147. - (header_decode_mailbox): Another fix for really broken mailers - that have things that look like addresses followed by <address> - bits. - (rfc2047_encode_word): Escape ??= to avoid some bizarre warning - about trigraphs. - - * providers/local/camel-local-folder.c - (camel_local_folder_construct): Setup unread count properly, and - also setup the url properly. - - * providers/local/camel-maildir-store.c (camel_folder_info_new): - Build the path on the folderinfo. - (scan_dir): Dont include empty host part in url for folder. - (scan_dir): Lookup folder counts for any folders we currenty have - open. - (scan_dir): If we dont have the folder open, then scan the 'new' - and 'cur' folders for new and unread messages to count instead. - - * providers/local/camel-spool-store.c (get_folder_info): If we - have this folder open, then set unread from the folder itself. - (get_folder_info): Change the INBOX path to not include the - leading /. - - * providers/local/camel-spool-folder.c - (camel_spool_folder_construct): Fix path. - (camel_spool_folder_construct): Properly setup the url field when - we say we've got a new folder created. - - * providers/imap/camel-imap-store.c (unsubscribe_folder): Build - path on folderinfo. - - * camel-store.c (camel_folder_info_build_path): Prepend / to path. - - * camel-vee-folder.c (camel_vee_folder_construct): Use macro for - unmatched folder name. - (camel_vee_folder_new): " - - * camel-vee-store.c (vee_get_folder_info): Use macro for unmatched - folder name. - (vee_delete_folder): " - (vee_rename_folder): " - (vee_get_folder): Prepend / onto path. - (vee_delete_folder): Setup path in folderinfo. - (vee_get_folder_info): Fix path in folderinfo. - - * camel-vee-folder.h (CAMEL_UNMATCHED_NAME): New define for - unmatched (internal) name. - -2001-09-20 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-spool-folder.c - (camel_spool_folder_construct): And finally here. - - * providers/local/camel-local-folder.c - (camel_local_folder_construct): And here. - - * camel-vee-store.c (vee_get_folder): ANd here too. - (vee_get_folder_info): And here. - - * providers/imap/camel-imap-store.c (create_folder): Use - camel_folder_info_build() and do better error checking. - (subscribe_folder): Set the path on the folder info. - - * camel-store.c (camel_folder_info_build): Set the folder-info - path if it hasn't already been set by the caller. - (camel_folder_info_free): Free the path. - - * camel-store.h: Added a path member to the FolderInfo type. - -2001-09-20 Dan Winship <danw@ximian.com> - - * camel-charset-map.c (camel_charset_to_iconv): Nuke debug warning. - -2001-09-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c: Updated exception strings to be more clear. - - * camel-pgp-mime.c (pgp_mime_part_sign_restore_part): Stupid - mistake, fixes bug #9975. - - * camel-tcp-stream-ssl.c (ssl_bad_cert): Oops, don't fail if - `data' isn't a CamelService...cuz it's not supposed to be! It's a - CamelTcpStreamSSL object...doh! - -2001-09-19 Not Zed <NotZed@Ximian.com> - - * General cleanup of camel debug printfs. - - * camel-lock.c (camel_lock_fcntl): Changed to return 'success' if - the error indicates file locking isn't supported on this - filesystem. Still return a warning just incase (if its the first - time). Might fix a lot of reported bugs. - - * providers/local/camel-spool-store.c (get_folder_info): Dont - include the empty // host part in the uri. This 'breaks' the - service lookup. - -2001-09-18 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c: Match mailing-list header List-Owner. - -2001-09-18 Not Zed <NotZed@Ximian.com> - - * camel-vee-store.c (vee_get_folder): Fix the uri genereated for - the folderinfo for the folder_created event. - - * camel-store.h: Added 'total' to CamelFolderInfo. - -2000-09-18 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-maildir-folder.c - (camel_maildir_folder_new): If filter inbox is set on the store, - and we're opening inbox '', then enable filtering on new messages. - - * providers/local/camel-local-folder.c - (camel_local_folder_construct): After loading the summary, check - it, and only abort if that fails. Also maintain the changes - count. - - * providers/local/camel-local-summary.c - (camel_local_summary_load): Remove summary_check code from here. - (camel_local_summary_check): Sync index/summary here, if we were - successful. - - * providers/local/camel-spool-folder.c - (camel_spool_folder_new): If we have filter-new-messages-on-inbox - set and we just opened inbox, turn on filtering on this folder. - (camel_spool_folder_construct): Keep track of changes for the - folder, so that filter-new-messages works right (?) - - * providers/local/camel-spool-store.c (get_folder): Pass 'INBOX' - as the folder name, not the path. - - * camel-folder-search.c (search_not): Modified patch from - <peterw@ximian.com> since the summary is messageinfo's, not - strings. - - ** Ok so the problem with the stuff below is that maildir/spool - 'summary_load' throws away all events, including recents, joy eh? - - * providers/local/camel-maildir-summary.c (maildir_summary_check): - Add new messages to the recent changeinfo. - - * providers/local/camel-spool-summary.c: Mark 'new' message as - recent, for later processing if required (i.e. 'filter new - messages'). - - * camel-store.c (construct): new function, cascade up construct - method and check for 'filter' param, and set accordingly for any - one that might want it. - - * providers/imap/camel-imap-store.c (construct): map the - param_filter_inbox flag to the store->flags as - CAMEL_STORE_FILTER_INBOX. - - * camel-store.h (CAMEL_STORE_FILTER_INBOX): new flag to tell it to - filter inbox. - - * providers/imap/camel-imap-folder.h: Removed do_filtering flag - from CamelImapFolder. - - * providers/imap/camel-imap-folder.c (imap_update_summary): Remove - the 'recents' parameter, use the 'changes' parameter instead to - convey this info. - (camel_imap_folder_changed): Changed for update_summary api - change. Now always just emit the changed event if we have any - changes to report, filtering code removed, handled upstream. - (filter_proc): - (filter_free): Removed old filtering code. - (camel_imap_folder_new): Set the filter_recent flag on the folder - if we're the inbox and filtering of inbox is enabled. - - * camel-folder.c (folder_changed): If we have 'recent' messages, - and are set to filter recents, then freeze the folder and launch a - thread to do the processing (or similar if threading not enabled). - (thaw): Make sure we emit the changed signal outside of owning the - lock and if things have changed. Also, no longer bother - downgrading folder_changed events to message_changed events. - - * camel-folder.h (struct _CamelFolder): Added filter_recent flag - -> signifies all recent messages in folder should be filtered. - - * camel-session.c: (camel_session_thread_msg_new, - camel_session_thread_msg_free, camel_session_thread_queue, - camel_session_thread_wait): code to handle async operations as - part of camel processing. - (camel_session_finalise): free thread_lock, destroy thread, active - hash, etc. - (camel_session_init): init thread, active hash, etc. - (camel_session_class_init): Init virtual functions. - (session_thread_msg_new, session_thread_msg_free, - session_thread_destroy, session_thread_received, - session_thread_queue, session_thread_wait): default implementation - of session threads stuff. - -2001-09-17 Not Zed <NotZed@Ximian.com> - - * camel-folder.c (camel_folder_change_info_recent_uid): New - function to add a 'recent' uid to the change info. - (camel_folder_change_info_clear): Clear recent list. - (camel_folder_change_info_free): Free recent list. - (camel_folder_change_info_new): Setup recent list. - - * camel-folder.h: Added a uid_recent item to the folder_changed - event data. - - * providers/local/camel-maildir-store.c (scan_dir): Free new in - the right block. - - * providers/local/camel-local-provider.c: Add local config entries - to filter on new messages in spool and maildir provider. - - * camel-vee-folder.c (vee_folder_construct): Remove the assertion - which stops ? in names from being allowed. - -2001-09-18 Dan Winship <danw@ximian.com> - - * camel-data-wrapper.c (camel_data_wrapper_is_offline): Virtualize - this. - - * camel-medium.c (is_offline): A medium is offline if its content - object is offline. - - * camel-multipart.c (is_offline): A multipart is offline if any of - its subparts are offline. - -2001-09-18 Jeffrey Stedfast <fejj@ximian.com> - - * camel-charset-map.c: Added korean charset conversion. - -2001-09-17 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (delete_folder): Don't process - the ImapResponse data, we don't want to block forever on data we - don't care about... - (create_folder): Use get_folders_online() instead of - get_folder_info_online(). - - * camel-folder.c: Reverted previous changes. - -2001-09-17 JP Rosevear <jpr@ximian.com> - - * Makefile.am: Helpful install-exec-hook debugging output - -2001-09-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder.c (camel_folder_get_uri): New function to get the - URI of a folder. - (get_uri): Default implementation. - -2001-09-14 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (camel_vee_folder_set_folders): New function, - set the complete list of folders on a vfolder, all at once. - (camel_vee_folder_set_expression): If we set the query to be the - same thing, dont do anything. - - * camel-vee-store.c (camel_vee_store_init): Turn off vtrash for - this store. - - * camel-store.c (camel_store_init): Enable vtrash by default via - flags. - (camel_store_get_trash): REturn NULL if the store doesn't support - vtrash. - (init_trash): Dont init if store doesn't support vtrash. - - * camel-store.h: Add a new flags CAMEL_STORE_VTRASH -> store - supports vtrash. - -2001-09-13 Not Zed <NotZed@Ximian.com> - - * camel-vee-store.c (vee_get_folder_info): Implement. - (build_info): Used to build a folder record from the folders - hashtable. - (vee_delete_folder): Implemented, remove folder from hashtable. - (vee_rename_folder): Implemented, remove old folder from - hashtable, add new one and rename its guts too. - - * camel-store.c (camel_store_rename_folder): Do nothing if we're - not asked to actually change names. Also dont do the renamed - cache check till after we've called the subclass. - (camel_store_delete_folder): Call the subclass delete firs,t then - make sure the cache is right. - - * camel-vee-folder.c (vee_folder_construct): Remove support for - name?query syntax to setup vfolder. Abort if such syntax is used. - (camel_vee_folder_new): Removed code that handles ? syntax, etc. - (vee_folder_build_folder): Handle unset expression, treat it as an - empty search. - (camel_vee_folder_set_expression): Oops, actually set the - expression. - - * camel-vtrash-folder.c (camel_vtrash_folder_new): Dont use - name?query syntax to setup vfolder, but set the expression - directly. Also fixes a small memleak. - -2001-09-12 Not Zed <NotZed@Ximian.com> - - * camel-store.c (camel_store_delete_folder): Fixed warnings with a - cast. - (camel_store_rename_folder): " - -2001-09-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-url.c (camel_url_set_param): Use g_datalist_set_data_full - so that the data will be free'd when we clear the list. - -2001-09-14 Dan Winship <danw@ximian.com> - - * camel-file-utils.c (camel_file_util_encode_string, - camel_file_util_decode_string): Don't claim failure when - reading/writing the empty string. - -2001-09-14 JP Rosevear <jpr@ximian.com> - - * Makefile.am: use install hook instead of install rule to - guarantee we run after installation - -2001-09-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_folder): Don't - reuse the exception if it has already been set. - (camel_filter_driver_filter_message): Same here. Also use the new - return value from camel_filter_search_match(). - - * camel-filter-search.c (camel_filter_search_match): Return an - integer (matched, no-match, or error). - - * providers/local/camel-mbox-folder.c (mbox_append_message): Do - error-checking based on function return values rather than - exceptions as it's possible for them to be NULL. - (mbox_get_message): Same. - - * providers/imap/camel-imap-folder.c (imap_append_offline): Pass - an exception to the cache. - (imap_append_online): Same. - (imap_append_resyncing): Here too. - (imap_copy_offline): And here. - (handle_copyuid): Pass NULL as the exception here... - (parse_fetch_response): And finally here. - - * providers/imap/camel-imap-message-cache.c - (camel_imap_message_cache_insert): - (insert_setup): - (camel_imap_message_cache_insert_stream): - (camel_imap_message_cache_insert_wrapper): - (camel_imap_message_cache_copy): Take an exception argument and - set it on error. - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): Convert the charset - to the iconv-friendly name. - - * camel-charset-map.c (camel_charset_to_iconv): Add code to - convert windows-[cp]#### charsets to their iconv-friendly format - of cp####. - - * camel-pgp-context.c (crypto_exec_with_passwd): Return -1 on - failure. - -2001-09-12 Larry Ewing <lewing@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_mbox): free - the source url in the nonfailure case. - -2001-09-12 Not Zed <NotZed@Ximian.com> - - * camel-folder-search.h: Change the 'not' virtual method from an - immediate e-sexp function to a non-immediate one, which is what it - should be. - - * camel-folder-search.c (search_not): Implement a 'not' function - ourselves. If 'not' on a vector value, then not over all items - in the summary. - (builtings[]): Change the 'not' builtin to be a non-immediate - function. - -2001-09-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_mbox): Unref - the message info. - -2001-09-10 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-maildir-store.c (get_folder_info): Pass in - a hashtalbe used for finding visited nodes. - (inode_hash): - (inode_equal): - (inode_free): Helper functions for visited node checks, hashes on - inode + device number. - (scan_dir): Dont re-visited directories we've already visited, use - inodes + device number. - Also, if the folder doesn't contain cur/tmp/new, mark it as - noselect, but continue to recurse folders, if asked. - - * camel-folder.c (move_messages_to): Progress reporting while - moving messages. - - * camel-store.c (camel_store_delete_folder): Make sure we remove - the folder from our vtrash, if we have it in our opened set, and - also remove it from our hashtable. - (camel_store_rename_folder): Remove the old folder name from the - folder cahce, if it is there. - -2001-09-10 Jeffrey Stedfast <fejj@ximian.com> - - * camel-charset-map.c (camel_charset_to_iconv): Get rid of the - g_warning, we no longer really need that. - -2001-09-10 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-store.c (camel_imap_msg_new): Forgot - to return the newly allocated msg. - -2001-09-08 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-summary.c (spool_summary_sync_full): - Likewise. - - * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): - Fix the wording. - - * camel-tcp-stream-raw.c (stream_read): Save errno around fcntl - call in cancellable read case. Also, loop while we get EINTR. - This might fix some weird reconnect behaviour with pop. - (stream_write): " - -2001-09-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (ssl_bad_cert): #if 0 out the code that - was hopefully going to fix bug #5325 because the functions I used - seem to have been deprecated. *sigh*. - - * camel-remote-store.c (camel_remote_store_finalise): Disconnect - from the service here otherwise the locks will be destroyed and by - the time CamelService finalizes we'll crash or hang. - - * providers/smtp/camel-smtp-transport.c (smtp_data): Make sure to - unref the mime filters when we finish with them. - -2001-09-07 Ettore Perazzoli <ettore@ximian.com> - - * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): - s/Synchronising/Synchronizing/. - (mbox_summary_sync_quick): Likewise. - (summary_rebuild): s/Summarising/Summarizing/. - -2001-09-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-multipart.c (camel_multipart_set_boundary): Take a const - char * instead of a char *. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Reuse the - original boundary instead of generating our own. - -2001-09-06 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-folder.c (filter_proc): Thread - function to perform filtering. - (filter_free): Free the filter object. - (camel_imap_folder_changed): If we have threads enabled, then - queue up a request to perform filtering. For bug #4422. - - * providers/imap/camel-imap-store.c (camel_imap_msg_new): Create a - new 'imap msg'. - (camel_imap_msg_queue): Queue an 'imap msg'. - (async_received): Handle receiving of imap msg in async thread. - (async_destroy): Handle destroying of imap msg. - (camel_imap_store_finalize): Destroy thread when done. - (camel_imap_store_init): Setup thread. - - * providers/imap/camel-imap-store.h: Added an ethread to the - store, for async processing. - -2001-09-06 Jeffrey Stedfast <fejj@ximian.com> - - * camel-remote-store.c (remote_recv_line): Use - camel_stream_buffer_read_line() instead of duplicationing the - functionality. Also, the previous way was broken anyway. What if a - line was the same length as our buffer? Then we'd go and read a - second line and a third and so on until they weren't the same - length, leaving \r's in the middle of the buffer. - -2001-09-06 Dan Winship <danw@ximian.com> - - * providers/pop3/camel-pop3-store.c (pop3_get_response): Fix this - to always set an exception if it returns POP3_FAIL, as documented. - - * providers/pop3/camel-pop3-folder.c (pop3_get_message_stream): - Revert. - -2001-09-06 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-folder.c (pop3_get_message_stream): - Set an exception on POP3_FAIL as well. - -2001-09-06 Dan Winship <danw@ximian.com> - - * providers/pop3/camel-pop3-provider.c: #ifdef out the "delete - after N days" option in pop3_conf_entries, since it won't be done - for 1.0. - -2001-09-04 Jeffrey Stedfast <fejj@ximian.com> - - * camel-remote-store.c (remote_disconnect): Too late to sync the - folders here... if this is gonna happen at all it should be done - in the provider. - - * camel-service.c (camel_service_finalize): Do a clean disconnect. - -2001-08-30 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-spool-store.c (get_inbox): Return the - default folder (ie. INBOX) rather than saying we don't support an - inbox. - - * camel-tcp-stream-ssl.c: #include pk11func.h. - (ssl_bad_cert): Use CERT_GetDefaultCertDB. - -2001-08-29 Jeffrey Stedfast <fejj@ximian.com> - - * camel-smime-context.c (smime_sign_prepare): Do the same here as - what we did in the pgp code a moment ago. - (smime_sign_restore): And again here. - (smime_sign): And update thise code to pass in the address of the - encodings list when restoring parts. - - * camel-pgp-mime.c (pgp_mime_part_sign_prepare_part): Special-case - message/rfc822 mime parts - don't set an encoding on these, - instead traverse into their subparts and set the encodings for - those. - (pgp_mime_part_sign_restore_part): Reverse any operations done to - message/rfc822 parts in the above prepare_part() function and also - take a pointer to a GSList of encodings instead of just a GSList - so we can properly keep track of which encoding we are on. - (camel_pgp_mime_part_sign): Pass in the address to the encodings - list when restoring parts. - -2001-08-29 Not Zed <NotZed@Ximian.com> - - * providers/pop3/camel-pop3-folder.c (pop3_sync): Add progress - reporting to deleting messages. Dont change the calculation to a - bloody float. Bug #6189. - -2001-08-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (crypto_exec_with_passwd): Initialize buf - and diag_buf to NULL, hopefully this fixes the crash if the - select() times out. - (pgp_encrypt): Argh. What was I thinking? Don't use "-r recipient" - as an argument, instead use "-r" and "recipient" as 2 separate - arguments to pgp. This might fix the "gpg only encrypts to my - private key" bug? - -2001-08-28 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-store.c (create_folder): Whoops. - Double-free and FMR = bad. - - * camel-remote-store.c (remote_send_string): Don't reveal the - user's IMAP password if their server supports LITERALPLUS. Also - add some more dashes to make it line up nicely :-) - -2001-08-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (ssl_bad_cert): If the user accepts the - certificate, add it to the database as a trusted CA. - -2001-08-28 Peter Williams <peterw@ximian.com> - - * camel-object.c (camel_object_unref): Make the locking more - fine-grained on destruction; specifically, don't hold the - type lock while calling the finalize functions. - -2001-08-27 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-local-provider.c: Changed the - description/names of some of the local providers to try and - clarify the meanings. - - * providers/pop3/camel-pop3-provider.c: Simplify the POP - description - we want short but sweet. - - * providers/imap/camel-imap-provider.c: s/IMAPv4/IMAP - -2001-08-27 Not Zed <NotZed@Ximian.com> - - * camel-mime-part-utils.c (convert_buffer): re-read the iconv man - page, and treat the return value properly. It returns the number - of non-reversible conversions performed, not the number of output - characters, sigh. - (check_html_charset): Changed to just take a buffer of data, and - not the mime parser. - (simple_data_wrapper_construct_from_parser): Since we dont need - the charset till we have all the data, search for the charset - after we've read the data, if we have html data with no charset in - the header. - (simple_data_wrapper_construct_from_parser): Remove the - seekable_source stuff. - - * Re-apply patches from before. - -2001-08-25 Not Zed <NotZed@Ximian.com> - - ["Summarising" and "Synchronising" are spelt with a "s" in - ENGLISH] - - * providers/local/camel-mbox-summary.c (mbox_summary_sync_quick): - s/Synchronizing/Synchronising/. - - * providers/local/camel-mbox-summary.c (summary_rebuild): - s/Summarizing/Summarising/ - -2001-08-24 Jeffrey Stedfast <fejj@ximian.com> - - * camel-disco-diary.c (camel_disco_diary_replay): Use fseek - instead of fseeko since we want to be portable and use ftell - rather than ftello for the same reason. - (camel_disco_diary_empty): Same here. - -2001-08-24 Peter Williams <peterw@ximian.com> - - * Revert Not Zed's previous commits as they apparently can cause - serious data loss for POP3 users. - -2001-08-24 Ettore Perazzoli <ettore@ximian.com> - - ["Summarizing" and "Synchronizing" are spelt with a "z" in the - default locale, that happens to be "en_US".] - - * providers/local/camel-mbox-summary.c (mbox_summary_sync_quick): - s/Synchronising/Synchronizing/. - - * providers/local/camel-mbox-summary.c (summary_rebuild): - s/Summarising/Summarizing/ - -2001-08-24 Not Zed <NotZed@Ximian.com> - - * camel-mime-part-utils.c (convert_buffer): Limit the maximum - output buffer size. iconv bugs? returns E2BIG forever on some - (valid) data? - - * providers/local/camel-spool-summary.c (summary_rebuild): - Likewise. - - * providers/local/camel-mbox-summary.c (summary_rebuild): - Summarising is spelt with an s. - -2001-08-23 Not Zed <NotZed@Ximian.com> - - * camel-mime-part.c (write_to_stream): If we have rawtext, then - dont do any charset conversion, only encoding/crlf conversion. - - * camel-data-wrapper.h (struct _CamelDataWrapper): Added 'rawtext' - member, says the character encoding is raw, not utf8. - - * providers/local/camel-spool-summary.c - (spool_summary_sync_quick): Synchronising is spelt with an s, not - a z. - (spool_summary_sync_full): " - - * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): - No, synchronising is spelt with an s. - (mbox_summary_sync_quick): " - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Remove the - warnings which aren't going anywhere fast. - (convert_buffer): Function to convert a bytearray of textual - content from one charset to another. If the charset doesn't exist - or fails, then do no conversion. - (simple_data_wrapper_construct_from_parser): First, read in data, - then try and convert it using the specified charset if supplied. - If that fails, then dont do any conversion, and leave as raw. - Also, if we have any x-* charsets, then dont do any processing. - -2001-08-23 Peter Williams <peterw@ximian.com> - - * providers/local/camel-mbox-summary.c (summary_rebuild): Add a - missing \n to the end of a printf. - - * providers/local/camel-spool-summary.c (summary_rebuild): Same. - -2001-08-22 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-folder.c (pop3_generate_uids): - Oops. Fixed a mis-use of GPtrArray. If we set_size, then using - g_ptr_array_add will assume `size' elements have already been - initialized and will start appending on to the end. - -2001-08-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (pgp_verify): Turn on --batch and reenable - gpg keyserver lookups. - (pgp_decrypt): Disable keyserver lookups if we are disconnected. - -2001-08-21 Dan Winship <danw@ximian.com> - - * camel-folder-thread.c - (camel_folder_thread_messages_new_summary): Fix the duplicate - message check so it doesn't mess up threading when a reply appears - in the folder before the message it's a reply to. Fixes bug #3357. - (camel_folder_thread_messages_new): Likewise, although I don't - think this function is used any more. - -2001-08-20 JP Rosevear <jpr@ximian.com> - - * Makefile.am: build a static camel for the addressbook conduit - -2001-08-20 Ettore Perazzoli <ettore@ximian.com> - - * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): - s/Synchronising/Synchronizing/. - (mbox_summary_sync_quick): Likewise. * - providers/local/camel-spool-summary.c (spool_summary_sync_full): - Likewise. - (spool_summary_sync_quick): Likewise. - -2001-08-20 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (create_folder): Get the - entire directory structure for the folder we just created, meaning - if we created a folder named "test.mailbox" where test didn't - previously exist, get the listing for "test" and "test.mailbox". - - * providers/imap/camel-imap-utils.c (imap_parse_folder_name): New - function. - -2001-08-19 Chris Toshok <toshok@ximian.com> - - * camel-store.h: #include <sys/types.h> for mode_t on freebsd. - -2001-08-19 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-folder.c (pop3_generate_uids): Make - sure the generated UID is non-NULL before appending it to the - array of UIDs. How would this even happen? I have no clue... - -2001-08-17 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_update_summary): Start - scanning new messages at maxuid + 1 rather than uidval + 1? Maybe - I'm missing the logic, but anyways...this might fix bug #5348. - -2001-08-16 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (imap_keepalive): If we are - online and message flags have changed in the current folder, sync - the flags else do a NOOP. This fixes bug #4666. Also lock around - the NOOP command. - - * providers/imap/camel-imap-folder.c (imap_sync_online): Don't - ever send "STORE FLAGS.SILENT ()" since Cyrus imapd doesn't like - this (and maybe others too?) so what we'll do instead is to send - "STORE -FLAGS.SILENT (\Seen \Answered \Deleted \Marked)" to clear - all the flags (since this is in essence what we want to do - anyway). - -2001-08-16 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-store.c (imap_connect_online): Fix - this again. Sigh. Problem of namespace = "" may not yet be - completely solved. - -2001-08-15 Peter Williams <peterw@ximian.com> - - * camel-tcp-stream-openssl.c (ssl_error_to_errno): New - function. Try to approximate the SSL error into errno. - (errlib_error_to_errno): New function, try to approximate - OpenSSl's error library's error (ERR_*) into errno. - (stream_read): Try to set errno using ssl_error_to_errno. - (stream_write): Same. - (open_ssl_connection): Same. - - * providers/imap/camel-imap-store.c (imap_connect_online): Oh - crap, huge killer typo. - -2001-08-14 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-store.c (imap_connect_online): - Canonicalize store->namespace to end in store->dir_sep, once both - values are known. The %F-related code makes this - assumption. Probably fixes a bug reported on the mailing list. - -2001-08-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store.c (camel_store_get_folder): After talking to NotZed, - it turns out I was wrong after all. - (store_sync): Create a copy of the folder-cache that owns a ref on - each of the folders so that if one of the folders get's finalized - inside store_sync(), we don't run into any locking issues. This is - mostly meant to solve a problem in IMAP (#6089). - -2001-08-13 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-store.c (delete_folder): Fix a leak. - - * providers/imap/camel-imap-utils.c (imap_namespace_concat): Bleah, - handle when namespace = NULL (can happen upon initial open of mailbox.) - - * providers/imap/camel-imap-command.c (imap_command_strdup_vprintf): - Don't crash when %F'ing with an empty folder name and NULL namespace. - -2001-08-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store.c (camel_store_get_folder): We need to be ref'ing - the folder if/when we add it to the hash. This may fix bug #6089? - (camel_store_get_folder): Nevermind, reverted the fix. - (camel_store_get_folder): No, I wasn't on crack before after - all...if we don't ref here, then we're open to a race condition - later. - -2001-08-11 Ettore Perazzoli <ettore@ximian.com> - - * providers/local/camel-spool-summary.c (summary_rebuild): - s/summarising/summarizing/. - (summary_rebuild): Likewise. - - * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): - s/summarise/summarize/. - (mbox_summary_sync_quick): Likewise. - (summary_rebuild): Likewise. - (mbox_summary_check): Likewise. - -2001-08-10 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-utils.c (imap_quote_string): Added an - assert - at this point a backtrace would be more useful than a - transaction log for debugging. - - * providers/imap/camel-imap-command.c (imap_command_start): Return - FALSE here, not NULL. - - * providers/imap/camel-imap-folder.c (imap_rescan): Don't - g_strdup() the uid into the trigger_event call. - - * providers/pop3/camel-pop3-folder.c (pop3_get_message_stream): - Set the total bytes expected to 0 if the response is empty too. - (pop3_refresh_info): Return of there was an error generating pop3 - uids. - - * camel-mime-utils.c (header_raw_check_mailing_list): regfree the - pattern before continue'ing. This was showing up quite a bit under - purify. - -2001-08-09 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-utils.c (imap_parse_string_generic): A - quoted string cannot contain \n's so check for those as well. - (imap_atom_specials): Update this to fix bug #6553. - -2001-08-08 Jon Trowbridge <trow@ximian.com> - - * camel-filter-search.c (get_source): Remove trailing stuff from - URLs before returning. (Done in an evil way, not in the good way - suggested by fejj. :)) (Bug #4876) - -2001-08-08 jacob berkman <jacob@ximian.com> - - * camel-search-private.c (camel_search_header_match): check for - NULL name and addr (fixes a bug i was about to report) - -2001-08-08 Not Zed <NotZed@Ximian.com> - - * camel-filter-search.c (check_header): Properly determine match - type to pass to header_match. - (address_matches_exactly): Removed, effectively added to - camel_search_header_match. - - * camel-folder-search.c (check_header): Properly determine the - match type to pass to header_match. - - * camel-search-private.c (camel_search_header_match): Add a new - parameter 'type' which is the type of header we're matching - against. ASIS means utf8 format, ADDRESS means an internet - address ('formatted'), ADDRESS_ENCODED means a raw address header, - ENCODED means rfc 2047 encoded text. - (header_match): Move original logic here, have search_header_match - call it as appropriate for the 'type' of match. - -2001-08-07 Not Zed <NotZed@Ximian.com> - - * camel-session.c (camel_session_class_init): Only init the vee - provider struct once (if we're subclassed this will get called - multiple times). - - * camel-object.c (obj_finalize): Removed a bit of a debug that - crept in with jacob's poolv patch (?). - -2001-08-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-search.c (address_matches_exactly): New function to - do danw's address "is" comparison (as specified in bug #5886. - (check_header): Special-case address-type headers when we are - doing an exact match to use the address_matches_exactly function. - -2001-08-06 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-folder.c (pop3_get_message_stream): - Modify to take a headers_only argument which will then only fetch - message headers. - (pop3_generate_uids): Pass in TRUE for headers_only. - (pop3_get_message): Pass in FALSE for headers_only and move the - camel_operation() stuff out of get_message_stream and in to here - instead. - (pop3_generate_uids): We also need to be using i+ 1 as the id - since we are starting at 0. - -2001-08-06 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-folder.c (pop3_get_message_stream): - New internal function to get a message stream by message sequence - id (so that we can share code between pop3_get_message and - pop3_generate_uids). - (pop3_get_message): Use pop3_get_message_stream. - (pop3_generate_uids): New function to generate UIDs based on the - message - this fixes bug #1256. - (pop3_refresh_info): If the server doesn't support UIDL, call - pop3_generate_uids to get our list of UIDs. - - * providers/imap/camel-imap-store.c (get_folder_info_online): - Don't strstr for noselect=yes, that's just plain broken. - -2001-08-06 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_rescan): Fix off-by-one - error in cleaning up deleted messages at the end of the folder. - Fixes bug #5585 and maybe others. - - * providers/imap/camel-imap-store.c (get_folder_info_online): Do a - refresh_info on the selected folder before looking at its unread - count. Should fix bug #4944. - -2001-08-06 Peter Williams <peterw@ximian.com> - - Completely hide the namespace from everything external to the IMAP - code, which Dan W says is the way it should be. - - * providers/imap/camel-imap-command.c - (imap_command_strdup_vprintf): Add a new %F argument, which is like - %S but will add the namespace (for folder names). - (camel_imap_command): Use %F here. - - * providers/imap/camel-imap-utils.c (imap_parse_list_response): - Changed to strip out the namespec when returning *folder. In order - to do this we need to be passed the CamelImapStore. - (imap_concat): Move to here from camel-imap-store.c, un-static - (imap_namespace_concat): New function, adds the namespace to the - folder name, unless it's INBOX. - - * providers/imap/camel-imap-utils.h: Prototypes. - - * providers/imap/camel-imap-store.c (imap_connect_online): Extra - arg to imap_parse_list_response. - (imap_connect_offline): Here too. - (get_folder_status): Use %F. - (get_folder_online): Here too. - (delete_folder): Here too. - (create_folder): Here too, and arg to imap_parse_list_response. - (parse_list_response_as_folder_info): Arg to i_p_l_r. - (get_subscribed_folders_by_hand): Use %F. - (get_folders_online): Here too. - (get_folder_info_online): Instead of checking for NULL @name, check - for name = NULL or "", and set to "" instead of namespace. Pass "" - instead of namespace to camel_folder_info_build. - (subscribe_folder): Use %F. - (unsubscribe_folder): Here too. - - * providers/imap/camel-imap-folder.c (imap_get_full_name): This - now just returns folder->full_name. - (do_append): Use %F - (do_copy): Here too. - -2001-08-06 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (pgp_verify): Always do --no-auto-key-retrieve. - -2001-08-03 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (pgp_verify): Minor changes to the iconv - code so that it does the check in the return value of iconv() just - like the code in camel-mime-utils.c in case this fixes Bo Rosen's - gpg bugs (but I doubt this will change anything?). - -2001-08-03 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_connect): First - check to make sure that service->url->authmech is non-NULL before - passing it into strcmp to avoid a segfault. - - * camel-pgp-context.c (pgp_decrypt): Sigh, if gpg returns '1' it - means that the key is bad but it did succeede in decrypting the - block so to make users happy (even though I find this a - questionable action) we are going to ignore the error and show it - to the user anyway. This fixes bug #6136. - -2001-08-03 Not Zed <NotZed@Ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_connect): special - case popb4smtp auth before we try and connect, and do the magic - here first. - -2001-08-02 Not Zed <NotZed@Ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_connect): Check for - POPB4SMTP separate to the esmtp auth list. - (smtp_auth): If creating the sasl object means it is - already authenticated, then exit early. Sort of 'clean hack' to - help popb4smtp work. - (smtp_auth): Unref the sasl object, clean up a memleak i think. - - * providers/smtp/camel-smtp-provider.c - (camel_provider_module_init): Added POPB4SMTP auth type. - - * camel-sasl.c (camel_sasl_authtype): Added POPB4SMTP type. - - * camel-sasl-popb4smtp.c: New file for pop before smtp - 'authentication'. - - * Makefile.am (libcamel_la_SOURCES, HEADERS): Add - camel-sasl-popb4smtp.[ch]. - -2001-08-01 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-mbox-folder.c (mbox_lock): If we fail to - get the lock, make sure we close our locking fd, and reset it. - Fixes the crash part of 5095. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - Slightly re-arranged filter/change notification logic. If we;re - filtering, freeze the folder till we're finished to smooth the ui - for new mail. - -2001-07-31 Not Zed <NotZed@Ximian.com> - - * camel-folder.c (camel_folder_init): Changed mutexes to - e_mutexes, folder lock recursive. This fixes the imap filtering - bug, or at least some cases of it. - (camel_folder_finalize): Free mutexes. - - * camel-private.h (CamelFolderPrivate): Changed mutexes to - e_mutexes. - -2001-07-25 Not Zed <NotZed@Ximian.com> - - * camel-folder.c (camel_folder_change_info_*): Change the - return if fail's into asserts. - (camel_folder_change_info_free): Don't let it accept a NULL - argument. This isn't g_lib so we dont have to. - -2001-07-27 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_decode_param): Fix the fix that fixes - broken mailer behavior. We want to make sure that the user's - locale charset is non-NULL before we pass it off to - iconv_open(). If it *is* NULL, we want to use iso-8859-1. - -2001-07-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-url.c (camel_url_free): Allow the url to be NULL just like - the libc free convention. - -2001-07-26 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-command.c (camel_imap_command_start): - Send an IMAP command, but don't wait for responses. - (camel_imap_command_response): Read a single line of response from - the server. - (camel_imap_command, etc): Reimplement in terms of the new code. - - * providers/imap/camel-imap-folder.c (imap_rescan): Use - camel_imap_command_start and camel_imap_command_response, and - call camel_operation_progress after each line read from the - server. - (imap_update_summary): Likewise, although with more fudging on the - precentages... Also, fix this so that if none of the new messages - are cached, it only does a single FETCH, and if some of them are - cached, it does two FETCHes (one to get the UIDs, FLAGS, and - SIZEs, and another to get the bodies of all of the messages that - aren't cached now that it knows the relevant UIDs). This should - speed up startup a bunch (especially if you have high bandwidth - but also high latency to the IMAP server). - -2001-07-25 Dan Winship <danw@ximian.com> - - * camel-mime-utils.c (mail_mlist_magic): Add another Sender - pattern. - -2001-07-24 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - Change the break into a continue, we should process as many as we - can find. - - * camel-folder.c (camel_folder_move_messages_to): If we have no - uid's to copy, exit here before going any further. Some code - internally [imap] assumes there are uids to copy otherwise it can - segfault. - (camel_folder_copy_messages_to): Same. - -2001-07-24 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_decode_param): Handle broken mailers - that send unencoded 8bit header params. And there was much - rejoicing. Rah. - - * camel-url.h (CAMEL_URL_HIDE_ALL): New #define, and there was - much rejoicing. Rah. - -2001-07-24 Not Zed <NotZed@Ximian.com> - - * camel-operation.c (camel_operation_register, unregister): Added - some warnings for bad cases. - -2001-07-23 Not Zed <NotZed@Ximian.com> - - * camel-operation.c (camel_operation_register): Only insert a hash - entry if we haven't already. - (camel_operation_unregister): Only remove the has entry if the id - is a real thread. - -2001-07-23 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (do_move): Slight fix for when source == - destination (we don't want to do this action because on-demand - filtering would then delete the messages it supposedly "moved"). - -2001-07-23 Not Zed <NotZed@Ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_auth, smtp_helo, - send_to): Added some operation progress reporting. Actual data - transfer is 'tricky' because of the layers used. - (smtp_auth): Instead of checking exception_is_set, use - challenge==NULL to test if sasl_challenge_base64 failed. - - * providers/local/camel-mbox-summary.c (mbox_summary_sync): Remove - peters changes below and put in a better fix. These functions - already return -1 on error, just use that, and not worry about - building our own exception redundantly. - - * camel-service.c (camel_get_host_byname): Turn the progress into - a transient event. - -2001-07-20 Peter Williams <peterw@ximian.com> - - * providers/local/camel-mbox-summary.c (mbox_summary_sync): More - usage fixes for CamelException. Check our own exception for - summary_update and xfer it out if an error occurred. - -2001-07-20 JP Rosevear <jpr@ximian.com> - - * Pull up test fixes to get them building again - -2001-07-20 Not Zed <NotZed@Ximian.com> - - * camel-charset-map.c (camel_charset_get_iconv_friendly_name): - renamed to camel_charset_to_iconv() to make it just a little more - consistent and not so long & fixed callers. - -2001-07-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-filter-charset.c - (camel_mime_filter_charset_new_convert): Convert to the - iconv-friendly charset names. - - * providers/imap/camel-imap-store.c (create_folder): Fixed a - compiler warning about returning without a value in a non-void - function. Blah. - - * camel-mime-part.c (process_header): Pass the locale charset as - the default_charset to header_decode_string(). - - * camel-folder-summary.c (camel_folder_summary_format_string): - Pass the locale charset as the default_charset to - header_decode_string(). - (content_info_new): Same. - - * camel-mime-message.c (process_header): Pass the locale charset - as the default_charset to header_decode_string(). - - * camel-mime-utils.c (append_8bit): New helper function who's - purpose is similar to append_latin1() but for 8bit text that we - are assuming is not latin1. - (header_decode_text): Now takes a default_charset parameter and - calls append_8bit when appropriate. - (header_decode_string): Also takes a default_charset parameter - now. - (header_decode_mailbox): Pass NULL as the default_charset to - header_decode_string(). - -2001-07-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (pgp_verify): Modified to treat the return - value from camel_charset_locale_name() as a const char*. - - * camel-sasl-digest-md5.c (digest_response): Modified to treat the - return value from camel_charset_locale_name() as a const char*. - - * camel-charset-map.c (camel_charset_locale_name): Modify to - return const char* by returning the static locale_charset which is - created inside of camel_charset_map_init(). - (camel_charset_map_init): Find the locale charset here and set the - static variable. - -2001-07-19 Peter Williams <peterw@ximian.com> - - Policy change: NULL url's are no longer allowed in - CamelFolderInfos. They used to signify that the folder was, in - IMAP jargon, NoSelect; now the same effect is achieved by adding a - "noselect=yes" parameter to the end of the URL. As far as I know, - IMAP is the only affected provider. - - * providers/imap/camel-imap-store.c (delete_folder): New - function. Implement folder deletion. - (camel_imap_store_class_init): Set the delete_folder class - function here. - (get_folder_status): New function. Utility wrapper around the - STATUS command. - (create_folder): If the parent folder is NoSelect but is empty, - delete it and recreate it as a a subfolder-containing folder. If - it is NoSelect but contains messages, set an exception. - (parse_list_response_as_folder_info): Always set the FolderInfo's - URL, but add a NoSelect parameter if it isn't selectable. - (get_folder_info_online): Change logic of removing the namespace - to reflect URL change. Same for logic of checking unread counts. - (get_folder_info_online): Use get_folder_status to simplify this. - - * camel-store.c (camel_folder_info_build): When creating dummy - parents, copy the child's URL and set the NoSelect parameter. - -2001-07-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): No need for - `acharset' anymore. - (check_html_charset): Return a const char* and also use - camel_charset_get_iconv_friendly_name() internally. - - * camel-mime-utils.c (rfc2047_decode_word): Remove my iso8859-1 -> - iso-8859-1 hack and use camel_charset_get_iconv_friendly_name() - instead. - (rfc2184_decode): Use camel_charset_get_iconv_friendly_name() - - * camel.c (camel_init): Call camel_charset_map_init(). - - * camel-charset-map.c (camel_charset_map_init): New function to - initialize the charset-equivalent lookup table. To be called by - camel_init(). - (camel_charset_get_iconv_friendly_name): New function to try and - convert a charset into something that iconv is more likely to - accept. - -2001-07-19 Peter Williams <peterw@ximian.com> - - * Revert 7/11/2001 patch for IMAP INBOX filtering at NotZed's - request. - -2001-07-17 Peter Williams <peterw@ximian.com> - - Clean up some exception misusage. - - * providers/imap/camel-imap-command.c (camel_imap_command): Use - our own internal exception for sending the string and transfer it - to @ex if anything goes wrong. - (imap_read_response): Use our own internal exception for reading - the untagged responses and blah blah blah. - - * camel-session.c (get_service): Use our own internal exception - when constructing the service and transfer it to @ex if anything - goes wrong. - - * camel-remote-store.c (remote_recv_line): Instead of having - gboolean exception, use our own internal exception and copy - it to @ex if anything goes wrong. - - * camel-store.c (store_sync): Create an internal exception - because sync_folder() checks it for validity. Transfer it to - @ex when done. - - * camel-exception.c (camel_exception_get_description): If @ex is - NULL, complain - passing NULL exceptions to Camel is okay, but - there should be no circumstances under which they're then - examined. - (camel_exception_get_id): Same here, - (camel_exception_xfer): NULL-protect and warn if transferring from - a NULL exception. - -2001-07-17 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store.c (init_trash): Use CAMEL_VTRASH_NAME. - - * camel-vtrash-folder.h: #define CAMEL_VTRASH_NAME - -2001-07-16 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-command.c (camel_imap_response_free): - Given: - * 4 EXISTS - * 1 EXPUNGE - We have to pass 3, not 4 to camel_imap_folder_changed for the - exists count. Fixes ximian bug #2112 (finally!). - -2001-07-14 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - If the message info for an expunged message is NULL, then just - break out - maybe a message was expunged that we were never - notified even existed? - -2001-07-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (rfc2047_decode_word): Added a hack to - convert charsets in the format iso8859-1 to iso-8859-1 because it - seems to be more iconv friendly. It has been reported that on some - systems, iconv doesn't know about iso8859-1 while it *does* know - about iso-8859-1. See bug #4530. - -2001-07-13 Peter Williams <peterw@ximian.com> - - * Makefile.am (install-exec-local): Let people install as - non-root, but give them a bigass warning so they're not allowed to - complain when it doesn't work right. - - * camel-remote-store.c (sync_remote_folder): New function: hash - table callback. - (remote_disconnect): If cleanly disconnecting, sync our - folders. Fixes deadlocks on exit (folders syncing after store - disconnects) and also makes sense. - -2001-07-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-uid-cache.c (camel_uid_cache_new): We now use a structure - as the bucket data rather than just a cache level so set the save - state to TRUE. - (maybe_write_uid): We only save the uid if the cache levels are - the same *and* if the save state is TRUE. - (free_uid): Free the state value. - (camel_uid_cache_get_new_uids): New uids that get added to the - cache start with a save state of FALSE. - (camel_uid_cache_save_uid): Set the save state of the uid to - TRUE. What should we do if the uid isn't already in the cache? - Currently I make it add the uid, but maybe it shouldn't? - - * providers/imap/camel-imap-folder.c (imap_filter_timeout): Update - to reflect CamelFilterDriver API changes. - - * camel-filter-driver.c (camel_filter_driver_filter_folder): Take - a cache argument so we can tell the cache whether or not the uid - should be saved (meaning we have successfully filtered it). - -2001-07-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_message): - Okay, I've decided that that user is just on crack. We don't want - to allow filtering of deleted messages or we could get some - unexpected behavior. - (do_move): Oops. My last fix needs to be after the if-statement, - not inside it. - (do_copy): And here too. - -2001-07-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (do_move): Only set p->copied and - p->deleted if the messages are copied without an exception. - (do_copy): Same - but obviously we don't set the p->deleted here - at all. - (camel_filter_driver_filter_message): Since users complained that - they couldn't filter deleted messages for "safe keeping" (WTF? - safe keeping? why were they deleted in the first place then??), I - have taken out the code that optimized filtering by not allowing - deleted messages to be filtered. This fixes bug #4473. - - Note: Users have a warped sense of logic. - -2001-07-12 Not Zed <NotZed@Ximian.com> - - * camel-mime-part-utils.c (extract_metatag_charset): Removed. - (check_html_charset): Replaced with this. - (simple_data_wrapper_construct_from_parser): Call - check_html_charset if we dont have a charset on the content-type, - and we have text/html data. - (check_html_charset): We also need to do qp/base64 decoding - ourselves, sigh. - - * camel-mime-utils.c (html_meta_param_list_decode): Removed. This - was very wrong, the rules for mail headers vastly different from - rules for decoding html elements. - (rfc2184_decode): Move the malloc inside the iconv_open worked, - otherwise we have a memleak. - - * camel-mime-filter-html.c (camel_mime_filter_html_finalize, init, - run, reset): Changed to use camelhtmlparser, and fixed a tiny - memleak. - - * camel-html-parser.c: Made the html indexer tokeniser re-usable. - ONLY TO BE USED INTERNAL TO CAMEL HOWEVER. - (tokenise_step): Slight fix to non-quoted values. - - * camel-folder-summary.c - (camel_folder_summary_info_new_from_message): Removed some code i - wasn't supposed to commit. - - * providers/local/camel-local-summary.c (local_summary_add): Only - set info->size if it is not zero. - (local_summary_add): If we dont get a size from the info passed - in, calculate it using a null stream write. Should do #4392. - -2001-07-11 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part-utils.c (extract_metatag_charset): New function - to extract a meta-tag charset value if it exists. - (simple_data_wrapper_construct_from_parser): Along the same lines - as the code I previously ripped out, but this time use the - mime-parser's seek ability to help us along. Currently I read up - to a 2k buffer size - this is probably overkill, 1k is probably - plenty. - - * camel-mime-utils.c (html_meta_param_list_decode): When we get to - an `=', we must skip past it before trying to grab the param - value. duh. - -2001-07-11 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): Ripped out my code - since it was never being used since the mime parser is not using a - seekable stream (ever?) which pretty much means my code needs to - be done someplace else. - -2001-07-11 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - Run the filter in its own thread to prevent locking issues. - (imap_filter_timeout): New function that does the filtering called - as a CamelSession timeout. - -2001-07-11 Not Zed <NotZed@Ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_mbox): Create - the messageinfo itself, so we can properly set the size. - - * camel-movemail.c (camel_movemail_solaris): Write out the from - line between each message. - -2001-07-10 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-summary.c (local_summary_add): Copy - the size across from the source message info if supplied. - - * camel-stream-null.c: Added a 'written' member which keeps track - of how much has been written to the stream. - - * camel-movemail.c (camel_movemail): If we have BROKEN_SPOOL - defined, then use the solaris movemail to quote from lines that - sendmail didn't. - (camel_movemail_solaris): Compile this in if BROKEN_SPOOL defined. - -2001-07-10 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (html_meta_param_list_decode): New function - to parse an HTML meta-tag. - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): If the Content-Type - did not contain a charset parameter and it's also a text/html - part, we have 1 last place to look - in the META html tags. *sigh* - - * camel-mime-message.c (camel_mime_message_get_source): - s/gint/unsigned since that's what it should be. - -2001-07-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (pgp_sign): Forget the passphrase if the - user has set that option. - (pgp_clearsign): Same. - (pgp_encrypt): And here... - (pgp_decrypt): And finally here. - (camel_pgp_context_new): Take a `remember' argument. - -2001-07-09 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-maildir-summary.c (maildir_summary_sync): - Oops, e_poolv_set free's it for us, so dont double-free here. - -2001-07-06 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (camel_vee_folder_finalise): Changed so we - dont have the list changing under us, just going to the next node - before we call a function that might change the list is - potentially dangerous (slight mod of peters fix). Hmm, i think it - would've double-unref'd it too(?) - -2001-07-08 Chris Toshok <toshok@ximian.com> - - * camel-tcp-stream-openssl.c (camel_tcp_stream_openssl_finalize): - openssl_table is gone. we now store/get the stream from the - SSL_CTX's app_data. - (stream_read): rework the non-blocking case to account for SSL - possibly buffering data (in which case select will block even - though data is ready to be read), and to account for FreeBSD's - strange behavior of returning -1/EAGAIN even though select said - the fd was ready to be read. - (ssl_verify): openssl_table is gone. - (open_ssl_connection): set the SSL_CTX's app_data to be the - stream, remove the openssl_table code. - -2001-07-06 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_encode_param): Don't allow in to be - NULL, so instead of doing if (in == NULL) return;, make it a - g_return_val_if_fail and later we can make it an assert or - something. - - * providers/local/camel-maildir-store.c (get_inbox): Fixes bug - #1138. - - * providers/local/camel-mbox-summary.c - (camel_mbox_summary_build_from): Make the `day-of-month' digit - take up 2 chars by using "%2d". Fixes bug #3989 for lame mailers - like Pine. - - * camel-pgp-context.c (crypto_exec_with_passwd): Set the pipe fd's - to nonblocking. - -2001-07-06 Peter Williams <peterw@ximian.com> - - * camel-object.c (camel_object_unref): Make sure that after the - finalization event has happened and the finalization functions - have been called that the object still has a zero refcount. - -2001-07-06 Joe Shaw <joe@ximian.com> - - * providers/nntp/camel-nntp-grouplist.c: Add locking to - camel_nntp_get_grouplist_from_server(). - - * providers/nntp/camel-nntp-resp-codes.h: Added - NNTP_EXTENSIONS_SUPPORTED (202). - - * providers/nntp/camel-nntp-store.c (camel_nntp_store_get_extensions): - Check for both NNTP_LIST_FOLLOWS and NNTP_EXTENSIONS_SUPPORTED from - a LIST EXTENSIONS request. (Dunno if NNTP_LIST_FOLLOWS ever comes - out of this, but that's what was already there...) Also, put some - locking around it. - (finalize): e_mutex_destroy() the command lock - (camel_nntp_store_init): e_mutex_new() the command lock. - - * providers/nntp/camel-nntp-store.h: Add locking macros. - -2001-07-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-summary.c (camel_message_info_string): Added an - assert to make sure that `mi' isn't NULL. - (camel_message_info_set_string): Same. - - * providers/imap/camel-imap-command.c (camel_imap_response_free): - Create and use a temporary CamelException for use with - camel_imap_folder_changed. - -2001-07-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (pgp_verify): Send the - --no-auto-key-retrieve argument to gpg if we are in offline mode - so that we don't have to worry about gpg hanging if it can't - connect to the key servers, because now it shouldn't even attempt - to. - -2001-07-05 Chris Toshok <toshok@ximian.com> - - * camel-tcp-stream-openssl.c (ssl_verify): use - X509_STORE_CTX_get_ex_data to get at the SSL* - don't use the - X509_STORE_CTX to look up our stream, since it's not what we used - to insert our stream into the hashtable. - (open_ssl_connection): insert the stream into the hashtable before - calling SSL_connect, as this can cause ssl_verify to be called, - and we need to look up the stream there. remove the stream from - the hashtable if there's an error connecting. - (stream_connect): pass the CamelTcpStreamOpenSSL* to - open_ssl_connection since it handles the hashtable stuff. remove - hashtable stuff from here. - -2001-07-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder.c (camel_folder_copy_messages_to): if source == - dest, just no-op. - -2001-07-05 Peter Williams <peterw@ximian.com> - - * camel-vee-folder.c (camel_vee_folder_finalise): Move this before the - camel_vee_folder_remove_folder because that function modifies p->folders - messing up our iteration. - (camel_vee_folder_finalise): Don't unref our summary; camel-folder now - does this. - - * camel-object.h (CamelObject): Add a 'destroying' flag to CamelObject. - - * camel-object.c (obj_init): Clear 'destroying'. - (camel_object_unref): If 'destroying' then do not send the finalize - event and do not call finalize functions. Otherwise, set destroying - so just in case we get refed (eg event code) we don't get doubly - finalized. - -2001-07-05 Not Zed <NotZed@Ximian.com> - - * camel-mime-filter-basic.c (filter): Fix the assertion slightly, - if we have a little bit of input the output size could be larger, - since we store upto 3 chars in the state. - - * camel-folder-summary.c - (camel_folder_summary_info_new_from_message): When indexing a new - record, create a pseudo word 'ibexindexed' so we can always tell - that a message has already been idnexed, even if it contains no - words of its own. Things like maildir use this check to see if - its already been processed, and it matters if it is incorrect in - this case (not just wasted cycles). - (camel_message_info_dup_to): Assign the to->strings from the - e_poolv_cpy() call, since it may allocaote a new poolv if the - lengths do not match. - - (camel_folder_summary_info_new_from_parser): And same here. - - * providers/local/camel-maildir-summary.c (maildir_summary_sync): - Changed the logicfor epoolv code to be different, we dont need to - update hash references or any tricky stuff. - (maildir_summary_check): Samehere. - - * camel-folder-summary.h: Removed include of e-memory.h. - -2001-07-03 Joe Shaw <joe@ximian.com> - - * providers/nntp/camel-nntp-resp-codes.h: Added NNTP_NO_PERMISSION - (502) to the list of response codes. - - * providers/nntp/camel-nntp-store.c (nntp_store_connect): If we - receive a NNTP_NO_PERMISSION, don't get into an infinite loop trying - to reconnect, get extensions, etc. Just give up and return FALSE. - -2001-07-03 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-message-cache.c - (camel_imap_message_cache_clear): Doh. Don't remove things from - the hash table while foreach'ing it. (And can't use foreach_remove - either because we have to remove them in a weird order). Fixes - #3618. - - * providers/imap/camel-imap-folder.c (imap_get_message): If the - server returns OK from the FETCH BODY, but there's no parseable - BODY response, it's probably because there's an UN-parseable BODY - response, implying the message is badly formatted, MIMEwise. In - that case, fall back to fetching the message as a single part. - -2001-07-02 Sam Creasey <sammy@oh.verio.com> - - * providers/nntp/camel-nntp-folder.c: Implemented - nntp_folder_search_by_expression and - nntp_folder_search_free. Basic search functionality e.g. unread - marking now works for NNTP folders. - - * camel_filter_search.c (get_size): Added get-size sexp directive - to get the size of a message for filters. - - * providers/nntp/camel-nntp-folder.c (camel_nntp_folder_new): - Always check with the NNTP server after summary load -- this - function now always expires old summary entries and syncs with - the news server. - - * providers/nntp/camel-nntp-utils.c (camel_nntp_get_headers): - Only fetch headers for articles not already logged in - the summary file. - - * providers/nntp/camel-nntp-grouplist.c - (camel_nntp_get_grouplist_from_*): change from g_list_append() - to g_list_prepend() + g_list_reverse. Traversing 40,000 - element linked lists sucks. - - * providers/nntp/camel-nntp-store.c (camel_nntp_command): - Should the NNTP connection die with - CAMEL_EXCEPTION_SERVICE_NOT_CONNECTED, make a single retry - attempt. Timing out the NNTP link is less painful this way. - -2001-07-02 Peter Williams <peterw@ximian.com> - - * README (Introduction): Add comment noting that Camel actually - exists now :-) - -2001-07-02 Dan Winship <danw@ximian.com> - - * camel-session.c (camel_session_get_filter_driver): new method to - get an application-initialized filter driver. - - * camel-filter-driver.c (camel_filter_driver_new): Remove the - get_folder function and data args from here... - (camel_filter_driver_set_folder_func): ...and add this function to - set/change them. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): If - this folder is INBOX and we're filtering INBOX, set a flag on the - folder for later. - (imap_update_summary): Add another argument (GPtrArray *recents), - and if it's non-NULL, add the uids of any \Recent new messages to - it. - (camel_imap_folder_changed): If doing filtering in this folder, - create a recents array and pass it to imap_update_summary. Then - get a filter driver and use it to filter the recent messages. - - * providers/imap/camel-imap-summary.h: - * providers/imap/camel-imap-utils.c (imap_parse_flag_list): Add - support for the \Recent flag. - - * providers/imap/camel-imap-provider.c (imap_conf_entries): enable - the "filter" option. - - * camel-types.h: add CamelFilterDriver typedef here - -2001-07-02 Not Zed <NotZed@Ximian.com> - - * camel-lock-client.c (camel_lock_helper_init): properly return - error if we can't create pipes. - - * camel-folder-summary.c (summary_build_content_info): re-enable - html indexing. - - * camel-mime-filter-html.c: Completely re-implemented using a - custom parser. - -2001-07-02 Dan Winship <danw@ximian.com> - - * tests/misc/url.c (main): Change a camel_exception_clear to - camel_exception_init to fix a sometimes-crash - -2001-06-29 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c: Added Originator: header as a header to look - for when looking for the mailing list. - - * tests/mime-filter/Makefile.am: Build the test-crlf test program. - - * tests/mime-filter/test-crlf.c: New test suite for the crlf - filter. - - * camel-mime-filter-crlf.c (filter): Fixed to correctly encode and - decode dots. - -2001-06-28 Peter Williams <peterw@ximian.com> - - * camel-mime-filter-stripheader.c: New file. Filter that strips a - header from mime output. - - * camel-mime-filter-stripheader.h: New file. Header for the above. - - * providers/smtp/camel-smtp-transport.c (smtp_data): Use the - stripheader filter to remove the "Bcc" header. - - * Makefile.am: Add the stripheader files. - - * tests/lib/Makefile.am (INCLUDES): Get this to compile again. - - * tests/mime-filter/test-stripheader.c: New file. Test suite for - the CamelMimeFilterStripHeader. - - * tests/mime-filter/Makefile.am: New test section: mime filters. - -2001-06-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_decode_param_list): Fix a memory - leak. Also if the decoded value is NULL, that means it wasn't - encoded so we don't want to toss the old value. - (header_param_list_format_append): Correctly wrap long parameter - values according to rfc2184. - -2001-06-28 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_refresh_info): If the - folder is frozen, don't refresh, just record that we need to do it - later. - (imap_append_online): If the APPEND doesn't trigger an immediate - EXISTS response (because the folder isn't the selected folder, or - because the server doesn't do that until the next command), call - imap_refresh_info on the folder. - (imap_copy_online): Likewise. (Replacing the unconditional NOOP - that was there before, which absolutely killed filter performance - by forcing the IMAP provider to switch back and forth between - folders after every copy or move.) - (imap_thaw): If the folder needs a refresh, do it. - - * camel-folder.c (camel_folder_is_frozen): New method - -2001-06-27 Jeffrey Stedfast <fejj@ximian.com> - - * camel-transport.c (camel_transport_init): Initialize the private - send_lock. - (camel_transport_finalize): Free the private send_lock. - (camel_transport_get_type): Set the init and finalize functions. - (camel_transport_send): Lock the transport. - (camel_transport_send_to): Same. - - * camel-private.h: Add CAMEL_TRANSPORT_(UN)LOCK macros. - -2001-06-27 Jeffrey Stedfast <fejj@ximian.com> - - * tests/folder/test9.c (main): Updated to match the current API. - - * tests/folder/test3.c: #include <gtk/gtk.h> since we use - gtk_init(). - - * camel-internet-address.c - (camel_internet_address_encode_address): Use the new - header_address_fold. - - * camel-mime-utils.c: Removed some old #if 0'd code of mine. - (rfc2047_encode_word): If enclen is 0, don't write an encoded word - token (=?iso-8859-7?Q??= would be an invalid token). - (header_address_fold): New function to wrap address headers - - header_fold() was force-wrapping rfc2047 encoded words which was - making the test suite fail. The *real* solution, however, is to - not create rfc2047 encoded words longer than 72 chars. - -2001-06-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (open_folder): Since we want an error - opening a folder to result in the message being copied to Inbox - (assuming no other filters get a chance to `move` it), don't - record any exceptions that may occur in this function. - -2001-06-26 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_selected, - imap_append_offline, imap_append_online, - camel_imap_folder_changed): lock the cache around accesses - - * providers/imap/camel-imap-store.c (get_folder_online): ref the - newly-created folder (as current_folder) before calling - camel_imap_folder_selected, in case that needs to do something - that causes another folder to become current... - - * camel-service.c (camel_service_get_url): D'oh. - s/FALSE/CAMEL_URL_HIDE_PASSWORD/ - -2001-06-25 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-search.c (get_source): g_strdup() the message - source here or we will have problems later when we go to free the - result ;-) - -2001-06-25 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-store.c (try_auth): Fix this: IMAP - doesn't allow an extra argument to AUTHENTICATE to avoid a useless - round trip like some other SASL bindings do. - - * providers/imap/camel-imap-command.c (imap_read_response): Deal - with IMAP servers that (incorrectly) return "+\r\n" rather than - "+ \r\n" for an empty continuation response. - (camel_imap_response_extract_continuation): Likewise. - -2001-06-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (word_types_compatable): New function that - decides if 2 word types are mergeable. An atom and a qstring are - mergeable; 2 qstrings are mergeable; and 2 encoded words are - mergeable. - (header_encode_phrase_merge_words): If 2 words are merged, the new - word type is the MAX of the combined types. This means that if we - merge a qstring and an atom, the resulting word type is a - qstring. - - * camel-internet-address.c (internet_format): - s/g_string_sprintfa/g_string_append since this makes more sense in - this particular case. - (internet_encode): Same here. - -2001-06-21 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_send): Use - camel_address_length() rather than casting and accessing data - members. - -2001-06-20 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_raw_check_mailing_list): If the first - char of the mailing-list name is '<', chop it off to make Ettore - happy. Fixes bug #2153. - -2001-06-19 Not Zed <NotZed@Ximian.com> - - * camel-lock-helper.c (unlock_id): Fixed a bug when not running - setuid it wouldn't unlock. - - * camel-movemail.c (camel_movemail): use new - locking daemon, also return an error code. - -2001-06-18 Jeffrey Stedfast <fejj@ximian.com> - - Note: Except for the info_free(), the NULL checks are - g_return's. I felt that since g_free() handles NULL that our - _free() functions should also. - - * camel-folder.c (camel_folder_change_info_free): Check to make - sure that the info pointer isn't NULL. - (camel_folder_change_info_change_uid): Same. - (camel_folder_change_info_changed): Same. - (camel_folder_change_info_remove_uid): Same. - (camel_folder_change_info_add_uid): Same. - (camel_folder_change_info_build_diff): Same. - (camel_folder_change_info_cat): Same. - (camel_folder_change_info_add_source): Same. - (camel_folder_change_info_add_source_list): Same. - (camel_folder_change_info_add_update): Same. - (camel_folder_change_info_add_update_list): Same. - -2001-06-18 Dan Winship <danw@ximian.com> - - * tests/stream/Makefile.am (LDADD): - * tests/smime/Makefile.am (LDADD): - * tests/misc/Makefile.am (LDADD): - * tests/message/Makefile.am (LDADD): - * tests/folder/Makefile.am (LDADD): Remove DB3_LDADD - - * Makefile.am (install-exec-local): Set camel-lock-help setgid or - setuid as needed - -2001-06-18 Not Zed <NotZed@Ximian.com> - - * camel-folder-summary.c - (camel_folder_summary_info_new_from_parser): Only create a missing - uid if we have indexing turned on. - - * camel-lock-helper.c (setup_process): Function to setup - process/sanity/security checks. Change to the real uid as soon as - we can. - (lock_path): First try to lock as the real uid, if that fails, try - the root uid. - (unlock_id): Unlock as the uid we created the lock as. - - * Makefile.am (INCLUDES): Added -DCAMEL_SBINDIR for lock helper - location. - - * providers/local/camel-spool-folder.c (spool_lock): Implemented, - using lock helper locking. Need to work out if the locking - requires a root created lock? - (spool_unlock): Likewise. - -2001-06-15 Not Zed <NotZed@Ximian.com> - - * camel-lock-helper.c: Setuid Lock helper process. Creates and manages - .locks, keeping them active, removing them, etc. What real perms it - needs is a little system dependent. - -2001-06-14 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-maildir-store.c (get_folder_info): Implement. - (scan_dir): Does the work of scanning for maildir directories. - -2001-06-13 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-store.c (get_folder_info): - Implemented, just returns a hardcoded INBOX folder. - (free_folder_info): implemented, free's the 1 possible level of - folder info. - - * providers/local/camel-spool-folder.c - (camel_spool_folder_construct): Set the real unread message - count on the folder_created thing. - -2001-06-15 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-message-cache.c - (camel_imap_message_cache_max_uid): Return the largest real UID in - the cache (as an integer). Eventually to be used for an - optimization in the new-message fetch code. - (cache_put): Keep track of max_uid. - -2001-06-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c: Added Mailing-List header regex so that we - can do mlist magic on that header. - -2001-05-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_decode_param): Properly handle - correct and incorrect (for the common case, ie Outlook and - Netscape/Mozilla) rfc2184 values. - (header_decode_rfc2184_param): Get the param name and see if we - should expect a rfc2184 parameter value. - (rfc2184_decode): Decode a rfc2184 value. - (hex_decode): hex decode a string. - (header_decode_param_list): Handle rfc2184 encoded parameters (ie - parameters that have been split and perhaps encoded). - (header_param_list_format_append): Encode the value before seeing - if it will fit on the line. If the value does get encoded, be sure - to put a '*' before the equal-sign. - (header_encode_param): New function to rfc2184 encode a parameter - value (maybe it should be renamed?) - -2001-06-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part.c (init_header_name_table): Don't try to format - the Reply-To header - we don't want to wrap the reply-to address. - -2001-06-12 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-spool-*.[ch]: A new provider, for spool - mailboxes. Mostly a cut and paste of the mbox code, but not a - subclass CamelLocal*. Not tested a lot, doesn't lock yet, use - with extreme caution. - - * tests/lib/folders.c (test_folder_message_ops): Added spool arg, - spool folders can't be deleted, renamed, etc. - (test_folder_basic): Same. - - * tests/folder/test2.c (main): Added checks for spool type. - - * tests/[message|stream|folder|misc|smime]/Makefile.am (LDADD): - Added db3 flags, so make check compiles, doesn't run though. - -2001-05-24 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-local-provider.c - (camel_provider_module_init): Added spool provider. - -2001-06-07 Jon Trowbridge <trow@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_folder): Add a - separator between the service url and the folder name, if needed. - - * camel-filter-driver.c (camel_filter_driver_filter_mbox): Added - an argument, so that the original source URI of the mbox can be - passed in. This is needed because this function is called - post-movemail, so we are never reading from the original mbox - anymore. Without the original mbox URI, the X-Evolution-Source - tag gets set incorrectly and filter-on-source will fail to work. - (camel_filter_driver_filter_message): Also take an extra arg - for the original source URI. It is the original URI, not the - source URI, that is used for filtering and for setting the - X-Evolution-Source tag. - -2001-06-05 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_rescan): Don't fetch - the UID and FLAGS of messages we don't know about yet, since - they'll just get discarded. - -2001-06-01 Jeffrey Stedfast <fejj@ximian.com> - - * tests/smime/pgp.c: Fix to not get into a recursive loop in - get_type(). - - * tests/smime/pgp-mime.c: Same. - -2001-05-31 Jeffrey Stedfast <fejj@ximian.com> - - * camel-smime-context.c: Numerous fixes to get it to compile. - - * camel.h: Added camel-cipher-context.h, camel-cms-context.h, - camel-smime-context.h, and camel-smime-utils.h - - * camel-cms-context.[c,h]: New virtual class for manipulating - cryptographic message syntax messages (like S/MIME). - - * camel-smime-context.[c,h]: Modified to inherit from the - CamelCMSContext class rather than the CamelCipherContext class. - - * camel-smime.[c,h]: Removed - just use camel-smime-context - directly. - - * camel-smime-utils.[c,h]: New source files. Moved the 2 useful - functions from camel-smime.[c,h] into here. - -2001-05-30 Dan Winship <danw@ximian.com> - - * camel-charset-map.c: Redo the BUILD_MAP code to not depend on - libunicode. Now it only generates a map of "popular" 8bit - encodings. (It's not worthwhile to support obscure encodings, - because any mailer that supports them will support UTF8 too. And - Chinese and Japanese use mostly the same UTF8 characters so you - need to decide between those encodings based on the locale or - the charset of the message you're replying to or the input - method you used. So this is sufficient for camel_charset_best's - use.) - - * camel-charset-map-private.h: Regenerated. - - * camel.c (camel_shutdown): Move #ifdefs around to prevent a - warning. - -2001-05-29 Dan Winship <danw@ximian.com> - - * camel-disco-diary.c: Code for logging and replaying offline - operations. - - * camel-disco-store.c (disco_construct): Set disco->status here - (where we can base it on the session's offline status) rather than - at init time. - (disco_connect): If we connect online and have a non-empty diary, - switch to RESYNCING mode and replay the diary to the server. - (disco_get_folder, disco_get_folder_info): Add _resyncing - variants. - - * camel-disco-folder.c (disco_sync, disco_expunge_uids, - disco_append_message, disco_copy_messages_to, - disco_move_messages_to): Add _resyncing variants to switches. - (disco_expunge_uids, disco_append_message, disco_copy_messages_to, - disco_move_messages_to): Remove #ifdef'ed out diary code: let the - provider do it. - (disco_append_message): Redo the append methods to no longer - return the UID, since we're no longer doing the logging from here. - - * providers/imap/camel-imap-store.c (imap_connect_online, - imap_connect_offline): Create a CamelDiscoDiary. - (imap_disconnect_offline): And free it. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): - If RESYNCING, don't do any sort of checking that the remote folder - matches the summary, beyond making sure that the UIDVALIDITY is - correct. - (imap_rescan): Add a missing camel_folder_summary_info_free when - removing a UID from the summary. - (imap_expunge_uids_offline): Implement. Fairly simple. - (imap_expunge_uids_resyncing): Implement. If the store supports - UIDPLUS, we can just use imap_expunge_uids_online. If not, we need - to temporarily undelete any messages marked deleted on the server - that aren't supposed to get expunged. - (imap_append_offline): Implement, using cache and summary - operations, and triggering the folder_changed event by hand. - (imap_append_resyncing): Implement. Redo imap_append_online a bit - in the process to make them able to share more code. - (imap_copy_offline): Implement. - (imap_copy_online): Move parts of this out into a helper. - (imap_copy_resyncing): Implement. In most cases this is just like - imap_copy_online, but if you are copying a message that was itself - copied or appended into the folder, and the server doesn't do - UIDPLUS, it will be necessary to replace at least part of the copy - operation with one or more appends. - - * providers/imap/camel-imap-command.c (imap_read_response): Don't - record the current folder in the response when in RESYNCING mode. - (This means that EXISTS and EXPUNGE responses won't be processed, - which is needed because the summary may not match the folder at - this point.) - (imap_read_response): On error, call - camel_imap_response_free_without_processing, not - camel_imap_response_free. - - * providers/imap/camel-imap-utils.c (imap_uid_array_to_set): Make - this work better when operating on UIDs that aren't in the summary. - - * providers/imap/camel-imap-summary.c - (camel_imap_summary_add_offline): New routine used by - imap_append_offline and imap_copy_offline to create new summary - entries. - -2001-05-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_set_param): Use g_strcasecmp() - because some systems don't have strcasecmp(). Also, when removing - a param, make sure to free the param->name too. - -2001-05-27 Dan Winship <danw@ximian.com> - - * tests/lib/messages.c (test_message_read_file): Fix an fd leak - - * tests/lib/session.c, tests/lib/session.h: a CamelSession - subclass for the test programs. - - * tests/lib/Makefile.am: include session.[ch] - - * tests/folder/test*.c: Use a CamelTestSession from libcameltest - instead of cut+pasting everywhere. - - * tests/misc/url.c (main): Update for a camel_url_new change at - some point. - - * tests/*/.cvsignore: Add stuff. - - * camel-mime-utils.c (rfc2047_encode_word): Fix a silly ==/!= - mixup. - -2001-05-26 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c: Add a "need_rescan" flag - saying if we want to rescan the entire folder for flag changes - next time it's selected. - (camel_imap_folder_init): Set need_rescan TRUE. - (camel_imap_folder_selected): If need_rescan is TRUE, call - imap_rescan. - (imap_refresh_info): Only do a full rescan if need_rescan is TRUE. - Otherwise just do a NOOP, making this a MUCH more lightweight - operation. Also, don't call imap_rescan directly if the folder - isn't selected, since that could end up causing the folder to be - scanned *twice* (imap_rescan -> camel_imap_command -> - camel_imap_folder_selected -> imap_rescan). - (imap_rescan): Set need_rescan FALSE. - (imap_sync_online): Don't NOOP if no changes were pushed: the - caller will call refresh_info if it wants to poll for changes. - Fixes evolution-mail doing lots of unnecessary extra work at - quit time. - - * providers/imap/camel-imap-store.c (refresh_folder_info): Set - need_rescan on each folder before calling refresh_info. - -2001-05-25 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_auth): Oops. Use a - strNcmp to make sure the response begins with a 334 code, not a - strcmp. Duh. - - * providers/local/camel-maildir-folder.c (maildir_append_message): - remove the summary info so we are not out-of-sync with the maildir - folder. - - * providers/local/camel-mh-folder.c (mh_append_message): remove - the summary info so we are not out-of-sync with the mh folder. - - * providers/local/camel-mbox-folder.c (mbox_append_message): - remove the summary info so we are not out-of-sync with the mbox. - -2001-05-24 Jeffrey Stedfast <fejj@ximian.com> - - * camel-smime-context.c (camel_smime_context_new): Oops, I spelled - the get-default-db function name wrong. - -2001-05-23 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-local-folder.c - (camel_local_folder_construct): s/folder_deleted/folder_created - - result of a bad copy/paste. - - * providers/imap/camel-imap-search.c (imap_body_contains): - Optimize the match "" case. - -2001-05-21 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (get_folder_info_online): - Store the CamelFolderInfo tree that was returned from - camel_folder_info_build() in a new variable, 'tree', rather than - 'fi' since we later use 'fi' when syncing folders. Not only does - this fix a memory leak, but it also fixes the bug where the user - would only see the last folder in the folder list and/or it's - subfolders. - -2001-05-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-session.c (camel_session_forget_password): The service can - be NULL here too, thanks to Wayne Davis for pointing this out. - - * camel-smime-context.c (camel_smime_context_new): We don't need - to be passed the certdb path anymore. - -2001-05-16 Dan Winship <danw@ximian.com> - - * camel-medium.c (camel_medium_get_headers): New function to - return an array of all headers. - (camel_medium_free_headers): And free them. - - * camel-mime-part.c (get_headers, free_headers): Implement this - for CamelMimePart. (Works for CamelMimeMessage too.) - -2001-05-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-smime-context.c (camel_smime_context_finalise): Don't - close or free (it wasn't allocated) the certdb. - (camel_smime_context_new): If we get a NULL certdb handle, then - don't bother trying to create a new certdb handle since NSS_Init* - should have done that. - -2001-05-15 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: Don't use EXTRA_GNOME_*, use the new CAMEL_* - variables so we don't link in tons of extra cruft that we don't - need. - - * tests/smime/pkcs7.c: Added to the test suite - tests the S/MIME - pkcs7 functions. - -2001-05-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-smime-context.c: Lots of fixes to get this to compile. - - * camel-smime.c (camel_smime_part_verify): Updated to pass in a - hash argument to camel_smime_verify(). - - * camel-pgp-mime.c (camel_pgp_mime_part_verify): Update according - to the changes in the context API. - - * camel-pgp-context.c (pgp_verify): Updated to take a - CamelCipherHash argument. - - * camel-cipher-context.c (camel_cipher_verify): Now takes a hash - argument since the S/MIME code needs this. - - * Makefile.am: Add camel-smime-context.[c,h] and camel-smime.[c,h] - to the build. - - * camel-smime.[c,h]: New source files for manipulating S/MIME - message parts. - -2001-05-14 Jon Trowbridge <trow@ximian.com> - - * camel-search-private.c (utf8_get): Replicate the semantics of - the libunicode utf8 functions by returning NULL in the arg - on invalid utf8. - - * camel-pgp-context.c (pgp_verify): Check for valid utf8, - terminate loop if something looks wrong. - - * camel-mime-utils.c (header_encode_phrase_get_words): Properly - check for invalid utf8. - (header_encode_string): Properly check for invalid utf8. - - * camel-charset-map.c (camel_charset_step): Properly check for - invalid utf8. - -2001-05-14 Jeffrey Stedfast <fejj@ximian.com> - - * tests/folder/test9.c: - * tests/folder/test8.c: - * tests/folder/test7.c: - * tests/folder/test6.c: - * tests/folder/test5.c: - * tests/folder/test4.c: - * tests/folder/test3.c: - * tests/folder/test2.c: - * tests/folder/test1.c: - * tests/smime/pgp-mime.c: - * tests/smime/pgp.c: Subclass CamelSession since we can no longer - specify the passwd callback any other way and update code - accordingly. - -2001-05-11 Dan Winship <danw@ximian.com> - - * camel-mime-utils.c (header_location_decode): Decode - Content-Location, either correctly or Netscape-generated-brokenly. - - * camel-mime-part.c (camel_mime_part_set_content_location, - camel_mime_part_get_content_location, etc): Deal with - Content-Location header. - -2001-05-11 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_auth): Don't check - the initial auth response until we get into the while-loop - otherwise we have problems if the SASL mechanism supported a - client initiated challenge (like PLAIN and LOGIN do). - -2001-05-11 Dan Winship <danw@ximian.com> - - * camel-stream-null.c (camel_stream_null_new): Make this return - CamelStream * (like the other stream new functions) instead of - CamelStreamNull * - -2001-05-10 Chris Toshok <toshok@ximian.com> - - * camel-tcp-stream-ssl.c (stream_connect): call SSL_Enable after - the SSL_ImportFD and before PR_Connect. Otherwise, NSS aborts - during the connect. - -2001-05-10 Jeffrey Stedfast <fejj@ximian.com> - - * camel-session.c (camel_session_get_password): Don't abort if the - Service is NULL, this is perfectly valid for cipher contexts. - -2001-05-09 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_move_messages_to): Pass - appropriate parameters to CF_CLASS and add comment explaining why - my initial attempt at a solution didn't work. - -2001-05-09 Dan Winship <danw@ximian.com> - - * camel-disco-store.c (camel_disco_set_status): Set the - disconnected status. - (camel_disco_store_can_work_offline): Return whether or not a - given CamelDiscoStore can work offline or not. - - * camel-disco-folder.c (camel_disco_folder_cache_message): - Explicitly tell a folder to cache a message. (Better than using - get_message, because for IMAP that doesn't guarantee you'll get - all the message parts.) - (camel_disco_folder_prepare_for_offline): Prepare a folder for - offline use by caching all messages meeting given search criteria - (and doing anything else the particular folder implementation - needs). - - * camel-session.c (camel_session_set_online, - camel_session_is_online): A session-wide online/offline toggle. - (camel_session_init): Set online to TRUE. - - * providers/imap/camel-imap-store.c (can_work_offline): - Implementation of CamelDiscoStore::can_work_offline. (Checks that - the store has been used online at least once.) - (imap_get_folder_online, imap_get_folder_offline): Deal with - request for "inbox" properly. ("Don't you mean... 'INBOX'?"). - - * providers/imap/camel-imap-folder.c (imap_cache_message): - Implementation of CamelDiscoFolder::cache_message. - - * camel.h: Add camel-disco-store.h and camel-disco-folder.h - -2001-05-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-part.c (camel_mime_part_set_content_id): Wrap the - content-id with <>'s. - -2001-05-04 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (connect_to_server): Add - support for using OpenSSL. - - * camel-remote-store.c (remote_connect): Add support for using the - OpenSSL implementation. - - * camel-tcp-stream-ssl.c (ssl_bad_cert): Hmmmm, don't pass in a - NULL as the last argument to alert_user - prototype doesn't take - that argument anymore? - - * camel-tcp-stream-openssl.c (camel_tcp_stream_openssl_finalize): - (ssl_verify): Use a global hash table to try and lookup the - CamelTcpStreamOpenSSL object given the ssl context since OpenSSL - doesn't think one needs to pass data around, we should all be - living in a world of global variables, duh! - -2001-05-06 Dan Winship <danw@ximian.com> - - * Makefile.am (libcamelinclude_HEADERS): Fix another build - problem. (Um, anyone else could have done this...) - -2001-05-04 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-store.c (get_folder_online): Fix up - refcounting on current_folder. - - * camel-disco-folder.c, camel-disco-store.h: Remove - CamelDiscoDiary refs that weren't supposed to escape yet. - -2001-05-03 Dan Winship <danw@ximian.com> - - * camel-disco-store.c: new abstract class for disconnectable - remote stores - - * camel-disco-folder.c: new abstract class for folders on - disconnectable stores. - - * Makefile.am: Add camel-disco-folder.[ch] and - camel-disco-store.[ch]. - - * providers/imap/camel-imap-store.c: Make this a subclass of - CamelDiscoStore, and fix up the offline interfaces for the changes - since they were first written (particularly the fact that some - IMAP stores don't just use subscribed folders). - - * providers/imap/camel-imap-folder.c: Make this a subclass of - CamelDiscoFolder, although most ops still fail in disconnected - mode. - - * camel-store.c (camel_store_get_folder_info): Change gboolean, - gboolean, gboolean to guint32 in the prototype for this function. - - * providers/local/camel-local-store.c (get_folder_info): Update - for prototype change. - -2001-05-02 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-store.h: Clean this up a bit. Add a - "tag_prefix" member. Move "useful_lsub" into capabilities. - - * providers/imap/camel-imap-store.c (camel_imap_store_init): - Initialize the tag_prefix, based on a static variable. - - * providers/imap/camel-imap-command.c (camel_imap_command): Use - the store's tag_prefix character rather than "A" at the start of - the tag. Makes the verbose debug output easier to parse when - connected to multiple IMAP servers. (Well, unless you're connected - to more than 26 servers...) - - * providers/imap/camel-imap-utils.c (imap_uid_array_to_set): Fix - this up... it was losing count in some cases and giving a more - verbose answer than it needed to. - - * providers/pop3/camel-pop3-store.c: Rescue the KPOP code from bit - rot. - -2001-05-01 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-command.c (camel_imap_command): Redo - command locking. Since command_lock is recursive, we can just get - a lock here, and release it either on error, or when the caller - frees the response data. (This simplifies a lot of stuff, and - fixes some problems with camel_imap_folder_changed being called - without the command_lock locked because of the 2001-03-22 change.) - - (camel_imap_response_free): - (camel_imap_response_free_without_processing): - (camel_imap_response_extract): - (camel_imap_response_extract_continuation): These all take a - CamelImapStore now as well, to deal with locking. - - * providers/imap/camel-imap-private.h: Add - CAMEL_IMAP_STORE_ASSERT_LOCKED, which defaults to a noop, but can - be made to call e_mutex_assert_locked. - - * providers/imap/camel-imap-folder.c, camel-imap-search.c, - camel-imap-store.c: Simplify using new locking stuff. Add a few - CAMEL_IMAP_STORE_ASSERT_LOCKED checks. - -2001-05-01 Dan Winship <danw@ximian.com> - - Support the IMAP UIDPLUS extension (RFC 2359), which lets you - resync after disconnected operation more efficiently, but also - makes it possible to do appends and moves/copies more efficiently - now. - - * providers/imap/camel-imap-folder.c (imap_append_message): If the - server supports UIDPLUS, grab the APPENDUID response and cache the - message into the folder's message cache. - (imap_copy_messages_to): Likewise, for COPYUID, copy any message - parts we have cached between the source and destination folder - caches. - (imap_get_message): If the entire message is already in the cache, - just return that rather than building it from parts. - (imap_update_summary): Fetch just the "UID FLAGS RFC822.SIZE" of - the new messages first, then only fetch the headers for messages - where we don't already have the headers cached. - - * providers/imap/camel-imap-message-cache.c: Add gtk-doc comments. - (cache_put): Fix refcounting stuff here. - (camel_imap_message_cache_insert_stream, - camel_imap_message_cache_insert_wrapper): New. - (camel_imap_message_cache_get): Fix a bug here so the memory - caching actually works. - (camel_imap_message_cache_copy): New routine, used by - imap_copy_messages_to. - - * providers/imap/camel-imap-utils.c (imap_uid_set_to_array): - Inverse operation of imap_uid_array_to_set. Used to parse COPYUID - response. - -2001-04-30 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-utils.c (imap_uid_array_to_set): - New-and-improved version of get_uid_set() from - camel-imap-folder.c. Looks at the summary as it goes so that if - you ask for messages 5, 6, 8, and 9, and there is no message 7, - then you get "5:9" instead of "5:6,8:9" - - * providers/imap/camel-imap-folder.c (imap_copy_messages_to): Use - imap_uid_array_to_set() rather than get_uid_set(). - (get_uid_set): Gone - -2001-04-27 Dan Winship <danw@ximian.com> - - * camel-session.c: Redo this a lot so that instead of having a - class full of callbacks, we have a subclassable class. Also, - replace the increasingly horrifying - camel_session_query_authenticator with three new routines, - camel_session_get_password, camel_session_forget_password, and - camel_session_alert_user. - - * camel-pgp-context.c: - * camel-pkcs7-context.c: - * camel-smime-context.c: - * providers/imap/camel-imap-store.c: - * providers/pop3/camel-pop3-store.c: - * providers/smtp/camel-smtp-transport.c: - Use camel_session_get_password / camel_session_forget_password. - - * camel-tcp-stream-ssl.c (ssl_bad_cert): Use - camel_session_alert_user. - -2001-04-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel.c (camel_init): Automagically call camel_shutdown() - atexit() ;-) - (camel_init): Also initialize NSS databases as read/write for - S/MIME and if NSS fails to init, try initializing with volatile - databases. - - * camel-file-utils.h: #include <sys/types.h> for off_t. - -2001-04-26 Dan Winship <danw@ximian.com> - - * camel-file-utils.c: New file, with the int, string, time_t, and - off_t encode/decode routines from camel-folder-summary.c moved - here and renamed, for the enjoyment of non-CamelFolderSummary - subclasses. - - * Makefile.am (libcamel_la_SOURCES): Add camel-file-utils.c - (libcamelinclude_HEADERS): and camel-file-utils.h - - * camel-folder-summary.c: Remove functions that were moved to - camel-file-utils.c, update uses of them for the new names. - (camel_folder_summary_{en,de}code_token are still here.) - - * providers/local/camel-mbox-summary.c: Use camel_file_util_* - names - - * providers/imap/camel-imap-summary.c: Use camel_file_util_* names - - * providers/imap/camel-imap-store.c (imap_store_setup_online, - imap_store_setup_offline): Use camel_file_util_* names, which - makes much more sense since this isn't folder summary stuff. - -2001-04-26 Dan Winship <danw@ximian.com> - - * Makefile.am (INCLUDES): Remove UNICODE_CFLAGS (and some other - stuff that's redundant with EXTRA_GNOME_CFLAGS) - (libcamel_la_LIBADD): Replace UNICODE_LIBS with GAL_LIBS. - - * camel-search-private.c: - * camel-pgp-context.c: - * camel-mime-utils.c: Use gunicode interfaces rather than - libunicode. - - * camel-charset-map.c: Use gunicode rather than libunicode. (The - charmap-regen code still depends on libunicode though.) - - * camel-mime-filter-charset.h: - * tests/message/test2.c (convert): Use iconv rather than - unicode_iconv. - - * providers/smtp/Makefile.am (libcamelsmtp_la_LIBADD): - * providers/pop3/Makefile.am (libcamelpop3_la_LIBADD): - * providers/local/Makefile.am (libcamellocal_la_LIBADD): Remove - UNICODE_LIBS. - - * camel.c (camel_init): Remove call to unicode_init. - - * camel-mime-parser.c: Remove unused unicode.h include. - -2001-04-26 Dan Winship <danw@ximian.com> - - * camel-service.c (get_host): Use e_gethostbyname_r. - (camel_service_gethost): Remove unused var. - -2001-04-26 Not Zed <NotZed@Ximian.com> - - * Applied jacob's patches for e-poolv stuff. - -2001-04-23 Jeffrey Stedfast <fejj@ximian.com> - - * camel.h: Add camel-vee-folder.h and camel-digest-folder.h - - * camel-digest-folder.[c,h]: New class that can be used to browse - a multipart/digest message as if it were a CamelFolder. - -2001-04-22 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (pgp_verify): Oops, don't use the return - value of iconv() as a string length, it only tells us the number - of non-reversable character conversions. This fixes it so we - actually see the gpg output in the message viewer. - -2001-04-23 Mikael Hallendal <micke@codefactory.se> - - * providers/nntp/Makefile.am (INCLUDES): - Changed GTK_INCLUDEDIR to EXTRA_GNOME_CFLAGS. - -2001-04-20 Jeffrey Stedfast <fejj@ximian.com> - - * camel-smime-context.c (smime_sign): Implemented using the - secmime.h convenience functions. - (smime_clearsign): We just error our here, there is no clearsign - for smime. - (smime_verify): Copied code over from the pkcs7 verify - same - state, ugly and unknown :-) - (smime_encrypt): Implemented using the secmime.h convenience - functions. - (smime_decrypt): Same as the code in pkcs7-context. - -2001-04-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pkcs7-context.c (pkcs7_sign): Implemented. - (pkcs7_clearsign): Implemented. - (get_zero_len_passwd): Convenience function to try a 0-length key - on the certificate db - if this works then there is no need to - prompt the user. - (get_password): Callback to get the password. - (camel_cipher_hash_to_nss): Convenience function to convert a - CamelCipherHash to an NSS HASH_HashType. - (nss_hash_to_sec_oid): Converts a HASH_HashType to a SecOidTag. - (pkcs7_digest): Digest function for use with pkcs7_sign(). - (sign_encode_cb): Callback to write the signed data to the output - stream. - (pkcs7_verify): Hacked on a bit more but am still a bit on the - confused side. This might work but I wouldn't hold my breath. The - sign/clearsign should be close if not correct, but this one...god - only knows. - (pkcs7_decrypt): Implemented. - (pkcs7_encrypt): Implemented (mostly, still need to handle when - 'sign' is TRUE). - -2001-04-18 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-store.c (camel_imap_store_finalize): - Free base_url and storage_path. - - * providers/pop3/camel-pop3-store.c (finalize): Free the - implementation string. - (camel_pop3_command): Clarify documentation to mention that - @ex isn't set (and *@ret is) on CAMEL_POP3_ERR. - (connect_to_server): Set @ex properly on CAMEL_POP3_ERR. - - * providers/pop3/camel-pop3-folder.c (pop3_refresh_info, - pop3_get_message): Set @ex properly on CAMEL_POP3_ERR. - -2001-04-17 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pkcs7-context.[c,h]: New source files to handle Pkcs7 - encryption, decryption, signing, and verifying. Not yet - complete. I'm sensing this is going to take a while seeing as how - NSS is just so well documented. - -2001-04-17 Dan Winship <danw@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_message): Fix - a memory leak in the error case. - -2001-04-16 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-mbox-summary.c (summary_rebuild): Don't we - want to tell where we are by using the start of the message? I - think this should be using camel_mime_parser_tell_start_from() - instead. Also divide by the size *before* multiplying by 100 so - that we don't overflow the int which was giving us negative values - for our progress status (oops). - -2001-04-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-operation.c: Added a prototype for stamp(). - - * camel-charset-map.c (camel_charset_locale_name): #include - string.h so we don't get a warning about strchr being undefined - and also init charset to NULL. - - * camel-pgp-context.c (pgp_verify): Go back to doing the utf8 - conversion by hand so that we don't depend on gal. - - * Makefile.am: Remove the EXTRA_GNOME_CFLAGS include. - - * camel-store.c (camel_mkdir_hier): Convenience function that it - seems a number of camel-store implementations used gal for. - - * providers/nntp/camel-nntp-store.c (ensure_news_dir_exists): Lets - not depend on gal for just e_mkdir_hier() - use camel_mkdir_hier() - instead. - - * providers/nntp/camel-imap-store.c: Lets not depend on gal for - just e_mkdir_hier() - use camel_mkdir_hier() instead. - - * camel-session.c (camel_session_get_storage_path): Don't depend - on e_mkdir_heir() anymore, use the CamelStore version. - - * camel-folder-search.h: Removed gal dependency, why was this even - there in the first place? - - * providers/imap/camel-imap-folder.c: Don't need gal/util/e-util.h - here, so remove it. - - * string-utils.c (strstrcase): New function, well more like old - function brought back to life so we don't have to depend on gal. - - * providers/imap/camel-imap-store.c (imap_store_setup_online): Use - strstrcase rather than e_strstrcase so we don't depend on gal. - (get_unread_online): Same here. - - * providers/smtp/camel-smtp-transport.c (smtp_helo): Use - strstrcase. - -2001-04-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_raw_check_mailing_list): regex - doesn't set errno and regcomp returns 0 on success and any other - value for an error (so don't *just* check for -1). - -2001-04-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-cipher-context.c: Check to make sure the context is a - valid context in all the user functions. - -2001-04-13 Jon Trowbridge <trow@ximian.com> - - * providers/imap/camel-imap-store.c (imap_disconnect): - s/imap_store/store/, fixing a typo that was causing the build to - fail. - - * camel-filter-search.c (get_source): Make the (previously unused) - get-source command actually do the right thing, properly shrouding - any passed-in source and falling back to use the source attached - to the mime message. - -2001-04-13 Dan Winship <danw@ximian.com> - - * camel-object.c (camel_object_hook_event): - * camel-uid-cache.c (camel_uid_cache_get_new_uids): - * camel-url.c (camel_url_new_with_base): Plug leaks. - - * camel-remote-store.c (camel_remote_store_init): Don't - re-initialize the folders hash table. - - * providers/imap/camel-imap-store.c (imap_disconnect): Free - authtypes since they'll be re-read on re-connect. - (get_folder_info): Free folderinfos that we're discarding from the - list. - -2001-04-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (camel_pgp_context_get_type): Oops, lets not - get into a recursive call here ;-) - - * tests/smime/pgp.c: Updated to reflect changes to the PGP code. - - * tests/smime/pgp-mime.c: Same. - -2001-04-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-mime.c: Updated to reflect the few changes made to the - CamelPgpContext class. - - * camel-pgp-context.c: Updated to subclass of CamelCipherContext. - - * camel-cipher-context.[c,h]: New base class for - CamelPgpContext. Also contains the replacement for - CamelPgpValidity, CamelCipherValidity. - -2001-04-12 Dan Winship <danw@ximian.com> - - * camel-mime-filter-crlf.c (filter): Fix a pair of array bounds - reads noted by purify - -2001-04-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel.h: #include the pgp stuff. - -2001-04-12 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-message-cache.c - (camel_imap_message_cache_remove): - * camel-url.c (camel_url_to_string): Plug memory leaks. - -2001-04-11 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-utils.c (imap_parse_string_generic): - Simplify peterw's imap_is_atom_char fix. - -2001-04-11 Jeffrey Stedfast <fejj@ximian.com> - - * tests/smime/Makefile.am: Added pgp-mime.c to the tests. - - * tests/smime/pgp-mime.c: Test suite for camel-pgp-mime.c functions. - - * Makefile.am: Add camel-pgp-mime.[c,h] to the build. - - * camel-pgp-mime.c: Made a number of fixes to get it to compile - and also fixed a few logic errors (mostly forgetting to reset - streams) so that it worked (thanks to the pgp-mime test program). - -2001-04-11 JP Rosevear <jpr@ximian.com> - - * providers/imap/Makefile.am: user GNOME_INCLUDEDIR since gnome - files are included in the top level camel headers and the gtk - include dir is now versioned and such - - * providers/local/Makefile.am: ditto - - * providers/pop3/Makefile.am: ditto - - * providers/smtp/Makefile.am: ditto - - * providers/sendmail/Makefile.am: ditto - - * camel-service.c: use five arg version of gethostbyname_r if - appropriate - (camel_get_host_byname): check if msg->herr is non-zero instead of - checking if msg->hp is null since we may not always have msg->hp - -2001-04-11 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-digest-md5.c (digest_response): Use - camel_charset_locale_name() to get the locale charset rather than - checking the CHARSET environment variable. This is a much less - ugly hack. Also: If we fail to be able to convert to UTF8, then - disavow all knowledge of the charset parameter. - - * camel-charset-map.c (camel_charset_locale_name): New function to - return the locale charset (or NULL if US-ASCII). - -2001-04-11 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (camel_pgp_verify): Use - e_utf8_from_locale_string() rather than trying to do it manually - since Lauris's version works much better. - -2001-04-06 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: Added camel-pgp-context.[c,h] to the build. Also - added tests/smime/pgp.c and Makefile.am - - * tests/smime/pgp.c: New test suite for PGP functions. - - * camel-pgp-context.c: Various fixes to get it to build. - -2001-04-07 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-utils.c (imap_parse_string_generic): It - would be a good idea to recognize '\0'. Before, this code was running - off the ends of strings and intermittently coredumping (if it didn't - hit an imap_atom_char first) -- whoops! - -2001-04-05 Not Zed <NotZed@Ximian.com> - - * merge from evolution-0-10-branch to evolution-0-10-merge-0 - -2001-04-03 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: Added tests/ back in - - * camel-mime-utils.c (header_decode_text): Ignore whitespace - between encoded words (there were a few cases where it didn't - before). - (header_encode_string): Preserve whitespace between words that are - to be encoded by encoding them too. - (header_encode_phrase): Same here but with phrases. - -2001-04-03 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_sync): If we don't - change any flags or expunge, send a NOOP to give the server a - chance to send EXISTS, etc, messages. - (imap_get_message): If the server_level < IMAP4rev1, always fetch - messages all-at-once, since they don't support the [#.MIME] - syntax. - (imap_update_summary): When reading message flags, set the - server_flags field as well, and don't overwrite any flags set by - camel_folder_summary_info_new_from_message. Might help with some - of the flag problems... - -2001-04-02 Dan Winship <danw@ximian.com> - - * camel-service.h: Remove the "quick_login" member, which is - unnecessary. - - * providers/smtp/camel-smtp-transport.c (smtp_auth): Remove the - references to quick_login and fix this to use the CamelSasl - interfaces correctly to do the same thing. - (connect_to_server): Split this out of smtp_connect - (smtp_connect): Use connect_to_server. When re-EHLO'ing after - auth, ignore errors. - (query_auth_types): Use connect_to_server rather than - smtp_connect, so it doesn't try to authenticate. Add LOGIN - authtype to the list of authtypes to check for. - - * providers/smtp/camel-smtp-provider.c - (camel_provider_module_init): Add LOGIN authtype to the authtypes - list explicitly. - - * camel-sasl.c (camel_sasl_authtype_list): Don't list LOGIN here: - it's not a real SASL authtype and is only used for SMTP. - - * camel-sasl-plain.c: - * camel-sasl-login.c: - * camel-sasl-kerberos4.c: - * camel-sasl-cram-md5.c: - * camel-sasl-anonymous.c: - * providers/pop3/camel-pop3-provider.c: Remove "quick_login" - argument from authtypes. - -2001-04-02 Gediminas Paulauskas <menesis@delfi.lt> - - * camel-filter-driver.c: marked missing report status' for translation. - -2001-04-02 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.c (camel_pgp_sign): mutex lock & unlock the - context. - (camel_pgp_clearsign): Same. - (camel_pgp_verify): Same. - (camel_pgp_encrypt): Same. - (camel_pgp_decrypt): And finally here... - - * camel-pgp-context.h: Update the function prototypes to match - those found in camel-pgp-context.c. - - * camel-pgp-context.c: Updated. - - * camel-pgp-mime.c (camel_pgp_mime_part_sign): Implemented. - (camel_pgp_mime_part_verify): Implemented. - (camel_pgp_mime_part_encrypt): Implemented. - (camel_pgp_mime_part_decrypt): Implemented. - -2001-04-01 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-login.[c,h]: New files to handle the LOGIN SASL - mechanism. - - * camel-sasl-plain.c: Removed the definition of - camel_sasl_login_authtype. - - * camel-sasl.c (camel_sasl_new): Oops. I thought LOGIN was an - alias to PLAIN. I was wrong. These two SASL objects have to be - separate. - - * providers/smtp/camel-smtp-transport.c (smtp_auth): Updated to - check for and use authmech->quick_login when available. - -2001-04-01 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-provider.c: Updated the authtypes here - too. - - * camel-sasl-plain.c: - * camel-sasl-anonymous.c: - * camel-sasl-digest-md5.c: - * camel-sasl-cram-md5.c: - * camel-sasl-kerberos4.c: Updated the authtype values. - - * camel-service.h: Added another field to CamelServiceAuthType - that specifies whether or not the mechanism supports "quick auth" - which means that the client can send the initial challenge in the - AUTH request. - - * camel-sasl.c (camel_sasl_new): Add support for LOGIN. - (camel_sasl_authtype_list): Here too. - (camel_sasl_authtype): And finally here. - - * camel-sasl-plain.c: Define camel_sasl_login_authtype. - - * providers/smtp/camel-smtp-transport.c (smtp_auth): Only unref - the SASL object if it exists. - -2001-03-30 Dan Winship <danw@ximian.com> - - * providers/pop3/camel-pop3-store.c (connect_to_server, - query_auth_types, pop3_connect): Move things around here to make - this all work right again (so you don't get prompted for a - password when checking the supported authtypes.) - -2001-03-30 Jon Trowbridge <trow@ximian.com> - - * camel-mime-message.c (camel_mime_message_set_source): Shrould - our source URL before putting it into X-Evolution-Source. - -2001-03-29 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (get_folder_info): Don't - blindly append "/INBOX", construct a CamelURL and set the path - that way. - (parse_list_response_as_folder_info): Don't blindly append - "/<foldername>", construct a CamelURL and set the path that way - instead. - (get_folders_offline): And again here. - -2001-03-30 Not Zed <NotZed@Ximian.com> - - * camel-service.c (camel_get_host_byname): Dont overwrite an - exception if we got one already. Added camel_operation status to - it, and comment out some debug. - -2001-03-29 Not Zed <NotZed@Ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_connect): Free host - name info when done ... blah blah. - - * camel-sasl-kerberos4.c (krb4_challenge): Free host name info - after we're done with it. - - * camel-sasl-digest-md5.c (digest_md5_challenge): Free host name - info after we're done with it. - - * camel-remote-store.c (remote_connect): Free the host name info - from get_host after we're finished with it. - - * camel-service.c (camel_get_host_byname): New function to - lookup a name, and still be cancellable. - (camel_free_host): And a function to free the structure - returned. - (camel_service_gethost): Call get_host_byname for this. - -2001-03-29 Jon Trowbridge <trow@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_message): Save - the source URL using camel_mime_message_set_source. - - * camel-mime-message.c (camel_mime_message_set_source): Renamed - camel_mime_message_set_identity to this. Sets the X-Evolution-Source - header. - (camel_mime_message_get_source): Returns the X-Evolution-Source - header. - -2001-03-29 Kjartan Maraas <kmaraas@gnome.org> - - * broken-date-parser.c: #include <stdio.h>, <stdlib.h> and <string.h> - * broken-date-parser.h: Remove all includes but <glib.h> - * camel-address.h: Added #include <glib.h> - * camel-data-wrapper.c: Move system includes to the top. - * camel-data-wrapper.h: #include <glib.h> - * camel-exception.c: #ifdef HAVE_CONFIG_H - * camel-exception.h: Remove #include <glib.h> - * camel-filter-driver.c: #ifdef HAVE_CONFIG_H and move system - headers to top. Mark strings in camel_exception_set*() for i18n. - * camel-filter-driver.h: #include <glib.h> - * camel-filter-search.c: #ifdef HAVE_CONFIG_H - * camel-folder-search.c: #include <config.h> - * camel-folder-search.h: Header shuffling - * camel-folder-summary.h: Same here - * camel-folder-thread.c: #ifdef HAVE_CONFIG_H - * camel-folder.c: Here too. - * camel-folder.h: #include <glib.h> - * camel-internet-address.c: Move system headers up - * camel-lock.c: #ifdef HAVE_CONFIG_H - * camel-medium.c: Same here - * camel-mime-filter-bestenc.c: Move system headers up - * camel-mime-filter-from.c: Same here - * camel-mime-filter-linewrap.c: And here - * camel-mime-filter.c: #include <string.h> to fix warnings from new gcc - * camel-mime-filter.h: System headers moved up - * camel-mime-message.c: Here too. #ifdef HAVE_CONFIG_H added - * camel-mime-part-utils.c: #ifdef HAVE_CONFIG_H added - * camel-mime-part.c: Here too, and shuffle headers - * camel-mime-utils.c: #ifdef HAVE_CONFIG_H. Remove const from two - variables to remove warning. - * camel-mime-utils.h: Shuffle headers - * camel-movemail.c: #ifdef HAVE_CONFIG_H. Mark string in camel_exception_set - * camel-multipart.c: #ifdef HAVE_CONFIG_H. Added includes to remove - warnings from new gcc - * camel-object.c: #ifdef HAVE_CONFIG_H - * camel-object.h: Shuffle headers - * camel-operation.c: #ifdef HAVE_CONFIG_H - * camel-provider.c: #ifdef HAVE_CONFIG_H. Shuffle headers. Mark a string - * camel-remote-store.c: #ifdef HAVE_CONFIG_H - * camel-sasl-anonymous.c: #ifdef HAVE_CONFIG_H. #include <string.h> - * camel-sasl-cram-md5.c: #ifdef HAVE_CONFIG_H. #include <string.h> and - <stdio.h> to remove warnings. - * camel-sasl-digest-md5.c: #ifdef HAVE_CONFIG_H. shuffle headers - * camel-sasl-digest-md5.h: Shuffle headers. - * camel-sasl-kerberos4.c: #ifdef HAVE_CONFIG_H. Shuffle headers. - * camel-sasl-kerberos4.h: Shuffle headers. - * camel-sasl-plain.c: #ifdef HAVE_CONFIG_H. Shuffle - * camel-sasl.c: #ifdef HAVE_CONFIG_H. #include <string.h> - * camel-search-private.c: #include <config.h> - * camel-seekable-stream.c: #ifdef HAVE_CONFIG_H - * camel-seekable-stream.h: Shuffle - * camel-seekable-substream.c: #ifdef HAVE_CONFIG_H - * camel-service.c: Same - * camel-service.h: Shuffle - * camel-session.c: #ifdef HAVE_CONFIG_H - * camel-store.c: Same - * camel-stream-buffer.c: Here too - * camel-stream-buffer.h: Shuffle - * camel-stream-filter.c: #include <string.h> - * camel-stream-fs.c: #ifdef HAVE_CONFIG_H - * camel-stream-fs.h: Shuffle headers - * camel-stream-mem.c: Same as above - * camel-stream-mem.h: Here too - * camel-stream-null.c: #ifdef HAVE_CONFIG_H - * camel-stream.c: Here too - * camel-stream.h: Shuffle - * camel-tcp-stream-openssl.c: #ifdef HAVE_CONFIG_H - * camel-tcp-stream-raw.c: Same here. and move local includes down - * camel-tcp-stream-ssl.c: Same as above - * camel-tcp-stream.c: #ifdef HAVE_CONFIG_H - * camel-tcp-stream.h: move local include down - * camel-transport.c: #ifdef HAVE_CONFIG_H - * camel-transport.h: #include <glib.h> - * camel-uid-cache.c: #ifdef HAVE_CONFIG_H. Shuffle headers - * camel-uid-cache.h: Shuffle - * camel-url.c: #ifdef HAVE_CONFIG_H - * camel-vee-folder.c: #ifdef HAVE_CONFIG_H. Shuffle headers - * camel-vee-folder.h: #include <glib.h> - * camel-vee-store.h: Same here - * camel.c: #ifdef HAVE_CONFIG_H - * gstring-util.c: Here too - * hash-table-utils.c: Remove #include <glib.h> - * hash-table-utils.h: #include it here instead. - * string-utils.c: #ifdef HAVE_CONFIG_H - * providers/cache/camel-cache-map.c: #ifdef HAVE_CONFIG_H, shuffle - headers and mark strings in camel_exception_set*() - * providers/cache/camel-cache-provider.c: #ifdef HAVE_CONFIG_H - * providers/cache/camel-cache-store.c: Same here, and mark a string. - * providers/imap/camel-imap-command.c: #ifdef HAVE_CONFIG_H - * providers/imap/camel-imap-command.h: Shuffle header - * providers/imap/camel-imap-folder.c: #ifdef HAVE_CONFIG_H - * providers/imap/camel-imap-message-cache.c: #ifdef HAVE_CONFIG_H - * providers/imap/camel-imap-provider.c: #ifdef HAVE_CONFIG_H and - #include <string.h> - * providers/imap/camel-imap-search.c: #ifdef HAVE_CONFIG_H - * providers/imap/camel-imap-store.c: #ifdef HAVE_CONFIG_H and mark - a string. - * providers/imap/camel-imap-summary.c: Shuffle headers - * providers/imap/camel-imap-wrapper.c: #ifdef HAVE_CONFIG_H. Shuffle - * providers/local/camel-local-folder.c: #ifdef HAVE_CONFIG_H - * providers/local/camel-local-provider.c: #ifdef HAVE_CONFIG_H - * providers/local/camel-local-store.c: Same here - * providers/local/camel-local-summary.c: Here too, shuffle, mark a string - * providers/local/camel-maildir-folder.c: #ifdef HAVE_CONFIG_H - * providers/local/camel-maildir-store.c: Same - * providers/local/camel-maildir-summary.c: Here too - * providers/local/camel-mbox-summary.c: And here - * providers/local/camel-mbox-store.c: And here - * providers/local/camel-mbox-summary.c: #include <config.h> - * providers/local/camel-mh-folder.c: #ifdef HAVE_CONFIG_H - * providers/local/camel-mh-store.c: same - * providers/local/camel-mh-summary.c: #ifdef HAVE_CONFIG_H, shuffle headers - and mark a string for translation. - * providers/nntp/camel-nntp-auth.c: #include <config.h> - * providers/nntp/camel-nntp-store.c: Remove superfluous arg to - CAMEL_SERVICE_CLASS to make it compile - * providers/pop3/camel-pop3-provider.c: #ifdef HAVE_CONFIG_H - * providers/pop3/camel-pop3-store.c: Same here - * providers/sendmail/camel-sendmail-provider.c: Here too - * providers/sendmail/camel-sendmail-transport.c: Here too - * providers/smtp/camel-smtp-provider.c: Same - * providers/smtp/camel-smtp-transport.c: #ifdef HAVE_CONFIG_H, mark - strings for translations. - -2001-03-29 Dan Winship <danw@ximian.com> - - * camel-url.c (camel_url_to_string): change "gboolean show_passwd" - to "guint32 flags". - - * tests/misc/url.c (main): Update calls to camel_url_to_string - - * providers/imap/camel-imap-store.c (construct): Call - camel_url_to_string with flags to hide password, authtype, and - params to create the base_url. - (etc): Update for the fact that the base_url no longer has the "/" - at the end. - - * camel-service.c (construct): Update calls to camel_url_to_string - (pass CAMEL_URL_HIDE_PASSWORD) - -2001-04-03 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_decode_text): Ignore whitespace - between encoded words (there were a few cases where it didn't - before). - (header_encode_string): Preserve whitespace between words that are - to be encoded by encoding them too. - (header_encode_phrase): Same here but with phrases. - -2001-04-04 Kjartan Maraas <kmaraas@gnome.org> - - * camel-filter-driver.c: Added #include <config.h>. Marked - a bunch of strings for translation. - * camel-folder-search.c: Added #include <config.h>. - * camel-folder-summary.c: Same here. - * camel-movemail.c: Marked strings for translation. - * camel-provider.c: Same here. - * camel-search-private.c: #include <config.h> - * camel-vee-folder.c: Mark string for translation. - * providers/local/camel-mbox-summary.c: #include <config.h> - -2001-04-03 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_sync): If we don't - change any flags or expunge, send a NOOP to give the server a - chance to send EXISTS, etc, messages. - (imap_get_message): If the server_level < IMAP4rev1, always fetch - messages all-at-once, since they don't support the [#.MIME] - syntax. - -2001-04-01 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (get_folder_info): Don't - blindly append "/INBOX", construct a CamelURL and set the path - that way. - (parse_list_response_as_folder_info): Don't blindly append - "/<foldername>", construct a CamelURL and set the path that way - instead. - (get_folders_offline): And again here. - -2001-03-31 Not Zed <NotZed@Ximian.com> - - * camel-operation.c (struct _status_stack): change stamp to - unsigned to avoid overflow. - (camel_operation_end): - (camel_operation_progress_count): - (camel_operation_progress): Double the delay before transient - events start showing their own progress. - -2001-03-30 Not Zed <NotZed@Ximian.com> - - * providers/pop3/camel-pop3-folder.c (pop3_get_message): Change - the pop download into a transient event. - - * camel-operation.c (stamp): Get a timestamp that changes 4x a - second (or rather, arbitrarily more often than 1/second). - (camel_operation_progress): Use stamp() for time updates. - (camel_operation_progress_count): " - (camel_operation_start): Store the status as a struct status_stack - item. - (camel_operation_start_transient): New function to start a - transient event, which is only reported if it runs for too - long/and is reset afterwards. - (camel_operation_progress): - (camel_operation_progress_count): Fix for status_stack changes, - and account for transient updates. - - * camel-filter-driver.c (camel_filter_driver_filter_folder): When - we remove things (set deleted), always set seen too, to mirror - interface behaviour when you delete. - (camel_filter_driver_filter_message): And same here too. - -2001-03-30 Dan Winship <danw@ximian.com> - - * providers/pop3/camel-pop3-store.c (connect_to_server, - query_auth_types, pop3_connect): Move things around here to make - this all work right again (so you don't get prompted for a - password when checking the supported authtypes.) - -2001-03-29 Dan Winship <danw@ximian.com> - - * camel-url.c (camel_url_to_string): change "gboolean show_passwd" - to "guint32 flags". - - * tests/misc/url.c (main): Update calls to camel_url_to_string - - * providers/imap/camel-imap-store.c (construct): Call - camel_url_to_string with flags to hide password, authtype, and - params to create the base_url. - (etc): Update for the fact that the base_url no longer has the "/" - at the end. - - * camel-service.c (construct): Update calls to camel_url_to_string - (pass CAMEL_URL_HIDE_PASSWORD) - -2001-03-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-pgp-context.[c,h]: New class for PGP encrypting, - decrypting, signing and verifying. Next I'll be moving the - contents of mail/mail-crypto into Camel. These files will - basically replace mail/openpgp-utils.[c,h]. - -2001-03-29 Not Zed <NotZed@Ximian.com> - - * camel-folder-search.c (search_body_contains): Optimise the match - "" case, just match everything in the folder (if we have it). - - * camel-vtrash-folder.c (vtrash_move_messages_to): Access the - folder directly from the message info. - (vtrash_move_messages_to): I think we also need to call the real - move_messages_to, and not try and bypass the lock, since we dont - have the lock for that folder. - - * camel-vee-folder.h: Move CamelVeeMessageInfo to public, so - subclasses can get to it. - - * camel-vee-folder.c (camel_vee_folder_add_folder): Dont let you - add a vfolder to itself. - (folder_changed): - (vee_folder_remove_folder): - (vee_folder_build_folder): Copy changes before triggering changed - events, so we can do them outside of locks. - (camel_vee_folder_get_message_folder): Removed function. - (camel_vee_folder_hash_folder): Made public (renamed from - hash_folder), simply for subclasses (probably not needed). - (vee_expunge): Oops, call the class sync, not superclass sync. - (vee_sync): Remove some accidental debug. - -2001-03-27 Jeffrey Stedfast <fejj@ximian.com> - - * camel-service.c (get_path): Add the port (if user defined) to - the path to fix bug #1996. - - Danw: I'm iffy on the "fix" so I'd like you to comment. - -2001-03-27 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-folder.c (pop3_sync): If we aren't - going to even check the resp/free buffer that gets returned from - camel_pop3_command, don't even bother using it. Send in NULL - instead. - (pop3_get_message): Check to make sure that the `result' string is - non-NULL. It's possible that some POP servers may return with - "+OK\r\n<message>..." rather than the expected - "+OK ### octets\r\n<message>..." - -2001-03-27 Not Zed <NotZed@Ximian.com> - - * camel-folder-summary.c (camel_folder_summary_finalize): Unref - the html filter when done. - (summary_build_content_info): Disable using the html parser to - help index html mails until it gets sorted out. - - * camel-vee-folder.c (folder_changed): Fix a cut n paste bug, we - want uid_removed not uid_changed deref, fixes bug #1999. - -2001-03-27 Dan Winship <danw@ximian.com> - - * camel-sasl.c (camel_sasl_authtype_list): add an argument to say - whether or not you want "PLAIN" in the list (so you don't end up - with "Password" twice in the config dialog). - - * providers/imap/camel-imap-provider.c (camel_provider_module_init): - * providers/imap/camel-imap-store.c (query_auth_types): We don't - want PLAIN. - - * providers/smtp/camel-smtp-provider.c (camel_provider_module_init): - * providers/smtp/camel-smtp-transport.c (query_auth_types): But we - do. - -2001-03-27 Dan Winship <danw@ximian.com> - - * camel-provider.h: Add an "extra_conf" field to CamelProvider - with structures and defines and stuff, for providers to specify - additional configuration options that they want. Also add a - "supports ssl" flag to the provider flags. - - * camel-url.c (camel_url_new_with_base): Fix parsing of params. - (output_param): And unparsing... - - * camel-remote-store.c: add a "default_ssl_port" field. - (remote_construct): If the URL has the "use_ssl" parameter, set - the store's use_ssl flag. - (remote_connect): If using SSL and no port specified, use the - default_ssl_port rather than the default_port. - - * providers/smtp/camel-smtp-provider.c (smtp_provider): add - CAMEL_PROVIDER_SUPPORTS_SSL and CAMEL_URL_ALLOW_USER. (The config - gui code knows that the ALLOW_USER and ALLOW_AUTH go together.) - (ssmtp_provider): gone - - * providers/smtp/camel-smtp-transport.c (smtp_construct): Set a - flag if "use_ssl" param is set. - (smtp_connect): Check the CamelSmtpTransport use_ssl flag rather - than checking if this is smtp or ssmtp. - - * providers/imap/camel-imap-provider.c (imap_conf_entries): Add a - bunch of IMAP-specific configuration options, like "check for new - mail in all folders" (default TRUE), "show only subscribed - folders" (default TRUE), "ignore server-supplied namespace", and - "apply filters to INBOX" (not yet implemented). - (imap_provider): We support SSL and we no longer allow a path in - the URL. (namespace is handled via extra_conf) - (simap_provider): Gone - - * providers/imap/camel-imap-store.c (camel_imap_store_init): Set - default_ssl_port, don't set CAMEL_STORE_SUBSCRIPTIONS here - (construct): remove simap stuff, deal with "use_lsub", - "namespace", "check_all", and "filter" parameters. Set base_url - to not include params. - (imap_store_setup_online): Don't ask for the namespace if it was - set explicitly. Don't get subscribed folders if !use_lsub. - (imap_concat): Fix a bug. - (get_folder_info): Support for not checking all folders. - - * providers/imap/camel-imap-folder.c (imap_get_full_name): Rewrite - to use imap_store->namespace, not service->url->path - - * providers/pop3/camel-pop3-provider.c (pop3_conf_entries): "keep - on server" (currently still implemented by the mailer code, not - here), "delete after N days" (not yet implemented). - (pop3_provider): we support SSL - (spop_provider): gone - - * providers/pop3/camel-pop3-store.c (camel_pop3_store_init): Set - default_ssl_port - (pop3_connect): Remove spop code - -2001-03-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-vee-folder.c (vee_folder_construct): Move all of the - camel_vee_folder_construct() internals here. - (camel_vee_folder_construct): This function basically becomes a - wrapper for vee_folder_construct and also checks to make sure that - the UNMATCHED vfodler is constructed otherwise constructs it. - (camel_vee_folder_new): Call vee_folder_construct() instead so - that we don't get into a dead-lock. - -2001-03-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store.c (init_trash): Use camel_vtrash_folder_new() to - create the vtrash folder now. - - * camel-vtrash-folder.[c,h]: New subclass of CamelVeeFolder for - our vTrash folders. - - * camel-folder.c (camel_folder_copy_messages_to): Don't watch for - vtrash folders anymore. - (camel_folder_move_messages_to): Same. - - * camel-vee-folder.c (camel_vee_folder_class_init): Update. - (vee_move_messages_to): Rewrite to use the new move API. - - * camel-filter-driver.c (do_copy): Updated to reflect - copy_message_to changes. Create a temporary uid array and use - that. - (do_move): Same. - (camel_filter_driver_filter_message): And again, here... - - * providers/imap/camel-imap-folder.c (imap_copy_messages_to): - Update to the new API. - (imap_move_messages_to): Same. - (get_uid_set): New function to create a `set' string based on an - array of UIDs for use with imap_copy_messages_to. - - * camel-folder.c (camel_folder_copy_messages_to): Replaces - camel_folder_copy_message_to - (camel_folder_move_message_to): Replaces - camel_folder_move_message_to. - -2001-03-27 Not Zed <NotZed@Ximian.com> - - * camel-vee-store.c (vee_get_folder): Added folder_created event - here. - - * camel-vee-folder.c (unmatched_finalise): Removed, moved into - main finalise code. - (message_changed): Just create a new change entry and promote it - to a folder_changed thing. - (vee_sync): Always rebuild folder on sync, even when not expunge. - (folder_changed): If not autoupdating, make sure we remove any - removed entries. - (vee_folder_build_folder): - (vee_folder_remove_folder): NOP if we're called on - folder_unmatched. - (vee_search_by_expression): Only search each folder once. Should - we also order the result in summary order? - -2001-03-20 Not Zed <NotZed@Ximian.com> - - * camel-store.c (init_trash): Fix calling for vee_folder_new(). - - * camel-folder-summary.c (camel_folder_summary_remove_index): - Optimise slightly, use ptr_array_remove_index rather than have to - search for the index by using summary_remove. - - * camel-vee-folder.h: Removed local member from VeeFolder, since - it was never used. - - * camel-vee-store.c (camel_vee_store_finalise): Setup finalise - function. - - * camel-vee-folder.c (camel_vee_folder_set_expression): New - function to set the query of an existing vfolder. - (camel_vee_folder_construct): New function for - convenience/subclasses. - (camel_vee_folder_new): Removed exception parameter, no longer - needed (since we dont search yet). - (camel_vee_folder_new): Changed to use folder_construct, and no - longer raise the folder created signal. - (vee_folder_build_folder): Make it return error on exception, so - we can work without exceptions. - (vee_folder_remove_folder): Use remove index rather than - remove_uid, this is ok since we have the summary locked for our - own access. - (camel_vee_folder_add_folder): Only add the folder to the - unmatched private if it is not a private folder. - (camel_vee_folder_remove_folder): Only remove the folder from - unmatched if it is not private. - (vee_expunge): Just call sync with expunge set. - (vee_sync): If expunging, also refresh the search. - (vee_folder_build_folder): We do our own locking now, removed from - callers, also trigger changed events here too (within locks), - fixed callers appropriately. - (vee_folder_remove_folder): Do our own locking, and trigger - changed events. - (vee_folder_add_info): Renamed of vee_folder_add, we now take a - hash of the folder name, rather than use the folders address. - (hash_folder): Convert a folder name into an 8 character hash. - (vee_get_message, vee_search_by_expression, vee_set_message_flags, - vee_set_message_user_flag, vee_move_message_to): Changed the uid - to be an 8 byte hash + original uid, with no ':' anymore. - -2001-03-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_decode_text): When writing the last - token (if not rfc2047 encoded), don't use g_string_append_len, use - append_latin1. - - * camel-mime-message.c (write_to_stream): Don't spew a warning if - the message-id wasn't set by the application, not a big deal since - we create one right here. - -2001-03-26 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-command.c (camel_imap_command): keep a - reference on the store's current_folder. - - * providers/imap/camel-imap-store.c (camel_imap_store_finalize): - (imap_disconnect): unref the current_folder before clearing it. - - * camel-url.c (camel_url_get_param): Add missing accessor. - - * camel-session.c (camel_session_get_provider): New. Return - the provider for a URL. - -2001-03-25 Dan Winship <danw@ximian.com> - - * camel-url.c (camel_url_new_with_base): New URL parser with full - RFC1808 relative URL support. Yum. - (camel_url_new): Wrapper around camel_url_new_with_base now. - - * tests/Makefile.am: add misc subdir - - * tests/misc/url.c: relative URL test cases from RFC 1808 - -2001-03-25 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (do_copy): Don't use copy_to if the source - folder doesn't support summary info's. - (do_move): Same. - (camel_filter_driver_filter_message): And again here. I think - this will fix the problem of "colour" tags not staying with the - message when it's copied to a folder during the filter process. - -2001-03-24 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-digest-md5.c (digest_response): Do charset conversion - on the username param here if needed. - (parse_server_challenge): Protect against possibly empty-string - charset values. - -2001-03-23 Jon Trowbridge <trow@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_message): - Don't call camel_mime_message_set_identity. (The call is - commented out, left over from some earlier experimentation that I - want to be able to remember later...) - - * camel-mime-message.c (camel_mime_message_set_identity): Added. - A function to set the X-Evolution-Identity header. - -2001-03-22 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-command.c (imap_read_response): Don't - look at untagged responses other than "* BYE"... - (camel_imap_response_free): ...do it here instead... - (camel_imap_response_free_without_processing): ...but not here. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): - Remove the "EXISTS" line from the response so - camel_imap_response_free won't try to process it. - (camel_imap_folder_selected): If we get an EXISTS response mixed - in with the FETCH responses, record the new EXISTS value. - Use camel_imap_response_free_without_processing so that an EXISTS - response won't cause a loop. - (imap_rescan): Use camel_imap_response_free_without_processing. - (imap_update_summary): Use - camel_imap_response_free_without_processing. If an EXISTS response - shows up, call imap_update_summary again to get the new messages. - (imap_protocol_get_summary_specifier): Use BODY.PEEK[0], not - RFC822.HEADER for prev IMAP4rev1, since the FETCH parser won't - deal with RFC822.HEADER responses. - - * providers/imap/camel-imap-store.c (get_folder_info): Fix an - uninitialized variable - -2001-03-21 Dan Winship <danw@ximian.com> - - * camel-provider.h: (CamelProvider) add a "GList *authtypes", so - you can get the list of authtypes used by a provider without - needing to have an actual CamelService object handy. (Will be - needed by the new config druid.) - (CAMEL_PROVIDER_ALLOWS, CAMEL_PROVIDER_NEEDS): New macros to test - the URL part stuff, since the way it works is too complicated and - everyone always does it wrong. - - * camel-service.c (camel_service_query_auth_types): Remove the - @connected arg again: if you don't want to connect, you can just - get the list of authtypes off the provider. - (camel_service_free_auth_types): Remove this. All existing - implementations do authtypes the same way, so just say the caller - should "g_list_free" the list. (Oh, look, removing this function - doesn't actually cause the mailer to not build. How 'bout that.) - (construct, get_path): Use the new URL part macros. - - * camel-remote-store.c (remote_query_auth_types): Update - (remote_free_auth_types): Nuke - (camel_remote_store_authtype_list): New function for use by - subclasses. - - * providers/imap/camel-imap-provider.c: - * providers/pop3/camel-pop3-provider.c: - * providers/smtp/camel-smtp-provider.c: Update CamelProvider - structures. - (camel_provider_module_init): Put all the SSL parts together so - there's only 1 #ifdef. Set up the provider authtypes field using - the SASL, CamelRemoteStore, and standard authtypes, as - appropriate. Copy that from the normal provider to the SSL - provider. - - * providers/local/camel-local-provider.c: - * providers/sendmail/camel-sendmail-provider.c: - * camel-session.c: Update CamelProvider structures. - - * providers/imap/camel-imap-store.c (query_auth_types): - * providers/pop3/camel-pop3-store.c (query_auth_types): Update - - * providers/smtp/camel-smtp-store.c (query_auth_types): Update. - Remove the no_authtype, because that's what "ALLOW_AUTH" rather - than "NEED_AUTH" means. - (free_auth_types): Nuke. - -2001-03-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_message): - Return -1 on fail. - (camel_filter_driver_filter_folder): Same. - (camel_filter_driver_filter_mbox): Same. - (camel_filter_driver_filter_folder): Return -1 if an exception was - set as well. - -2001-03-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-openssl.c (camel_tcp_stream_openssl_finalize): - Free the expected host. - (camel_tcp_stream_openssl_new): Now takes a Service and an - expected_host. Set them. - -2001-03-20 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-store.c - (camel_imap_store_check_online): Function to check if the store is - online and set an exception if not. Currently controlled by an - environment variable, but eventually there will be both a global - (session-level) setting and a per-store setting. - (construct): Set up storage_path and base_url here rather than at - connect-time. - (imap_auth_loop): Split out from imap_connect. - (imap_setup_online): Split out from imap_connect. Do the - post-authentication connection setup, and cache the results to - disk. - (imap_setup_offline): Set up a CamelImapStore with information - saved from a previous imap_setup_online. - (imap_connect): If online, do connect_to_server(), - imap_auth_loop(), and imap_setup_online(). Otherwise, do - imap_setup_offline(). - (get_folder, get_folder_info): Add offline support. - (create_folder, subscribe_folder, unsubscribe_folder): Disable - these when offline (for now). - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): - Remove the sync'ing-with-server stuff... it's done by - camel_imap_folder_selected now, which only gets called if the - store is online. - (camel_imap_folder_selected): add the code removed from - camel_imap_folder_new. Besides simplifying the folder_new and - summary_new code, this also means now that we'll DTRT if a - folder's UIDVALIDITY changes while we're connected. Also, when - that happens, clear the message cache explicitly. - (imap_refresh_info, imap_sync): These are no-ops when offline. - (imap_expunge, imap_append_message, imap_copy_message_to, - imap_search_by_expression): These don't yet work offline. - (imap_get_message, camel_imap_folder_fetch_data): Return an error - when trying to fetch a non-cached body part when we're offline. - - * providers/imap/camel-imap-summary.c (camel_imap_summary_new): - Rewrite to not check the validity here. (We'll do it from - camel_imap_folder_selected instead.) - - * providers/imap/camel-imap-command.c (camel_imap_command): Call - camel_imap_folder_selected even when the selection is all we're - doing, to match the changes in camel-imap-folder.c. - - * providers/imap/camel-imap-message-cache.c - (camel_imap_message_cache_clear): New function to clear out a - message cache. - -2001-03-19 Christopher James Lahey <clahey@ximian.com> - - * Makefile.am (INCLUDES): Added $(EXTRA_GNOME_CFLAGS) - -2001-03-19 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-store.c (pop3_connect): Set the errbuf - to NULL after freeing it? I don't think this should fix bug #1801 - but I guess it can't hurt. - -2001-03-18 Jeffrey Stedfast <fejj@ximian.com> - - * camel-remote-store.c (remote_recv_line): Protect against a - possibly NULL exception. - - * camel-filter-driver.c (camel_filter_driver_filter_message): - Document and modify to return a boolean value denoting whether or - not errors occured during processing. - (camel_filter_driver_filter_mbox): Same as above and also modified - to check return codes of filter_message rather than relying only - on whether or not the exception was set (as it's possible to pass - in NULL for the exception). - (camel_filter_driver_filter_folder): Same as above. - - * camel-mime-utils.c (header_param_list_format_append): Quote the - param value if it contains whitespace as well. - -2001-03-17 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: Don't include system include dir. - - * camel.c: Use quotes around the nss.h include so it doesn't try - to use the systen nss.h file. - - * camel-tcp-stream-ssl.c: Same here. - -2001-03-17 Not Zed <NotZed@Ximian.com> - - * providers/local/camel-maildir-summary.c (maildir_summary_sync): - Modified patch from Dan Berger <dberger@ix.netcom.com> to re-check - the maildir directory for new/updated messages at sync time. - - * camel-folder.c (camel_folder_ref_message_info): Implemented. - (ref_message_info): And default implementation. - - * camel-folder.h: Added ref_message_info virtual method. - -2001-03-16 Not Zed <NotZed@Ximian.com> - - * camel-folder-thread.c - (camel_folder_thread_messages_new_summary): New function to create - a thread tree from a supplied summary array. - (camel_folder_thread_messages_destroy): Handle thread trees - generated by the above function properly. - -2001-03-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-private.h: Same. - - * camel-remote-store.h: Fixed #include to use <>'s instead of ""'s - -2001-03-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (ssl_bad_cert): Print info about the - issuer of the certificate. - - * providers/smtp/camel-smtp-transport.c (smtp_connect): Use - camel_tcp_stream_get_socket(). - - * camel-tcp-stream-openssl.c (stream_get_socket): Implemented. - - * camel-tcp-stream-ssl.c (stream_get_socket): Implemented. - - * camel-tcp-stream-raw.c (stream_get_socket): Implemented. - - * camel-tcp-stream.c (camel_tcp_stream_get_socket): New function. - -2001-03-16 Kjartan Maraas <kmaraas@gnome.org> - - * providers/pop3/camel-pop3-folder.c: Added #include <config.h> - -2001-03-16 Dan Winship <danw@ximian.com> - - * camel-mime-utils.c (header_msgid_generate): Don't use - getdomainname: it's NIS crap, not DNS. - -2001-03-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel.c (camel_init): Don't use the hardcoded cert db directory, - use the one passed in. - - * camel-tcp-stream-ssl.c (ssl_get_client_auth): Wrote the default - implementation. Not that we'll use this though, since this is the - default implementation provided by NSS anyway. This more or less - serves as a reference in case we want to change anything. - (ssl_auth_cert): Same. - (ssl_bad_cert): Changed the prompt string and free it when we're - done. - -2001-03-15 Dan Winship <danw@ximian.com> - - First batch of disconnected IMAP-related stuff. This adds local - caching of message parts, but NOT any actual disconnected support. - (But it should speed up IMAP use.) - - * providers/imap/camel-imap-message-cache.c: New class for caching - message data to disk, and removing it when it's no longer - relevant. Will eventually also support merging message parts - together to save on files. Or maybe using a db instead of files? - - * providers/imap/camel-imap-private.h: Add a cache_lock to - CamelImapFolderPrivate. This lock must be recursive, so make both - locks EMutexes rather than GMutex. - - * providers/imap/camel-imap-folder.c (parse_fetch_response): "The - only FETCH response parser you need!" Replaces the various - almost-correct bits of code formerly scattered throughout this - file with a single fully-correct function that can handle any - FETCH response at any time, so we don't get confused by seeing a - flags update when we were only expecting a message body, etc. - (camel_imap_folder_fetch_data): FETCH a message body part either - from the cache or the server - (camel_imap_folder_changed): Remove expunged messages from the - message cache. - (camel_imap_folder_new): Change to take a directory instead of a - summary file name. Create a CamelImapMessageCache for the folder. - (imap_finalize): Unref the message cache. - (camel_imap_folder_selected, imap_rescan, get_content, - get_message, imap_get_message, imap_update_summary): Redone a - bunch to use parse_fetch_data, CamelImapMessageCache, etc. - - * providers/imap/camel-imap-store.c (get_folder): Pass directory - name to camel_imap_folder_new, not summary filename. Use - e_path_to_physical to generate a path with /subfolders/ inserted - between directory components. - - * providers/imap/camel-imap-wrapper.c (camel_imap_wrapper_new): - Call camel_imap_folder_fetch_data (with cache_only TRUE) and if - the data is cached, return an online datawrapper rather than an - offline one. - (write_to_stream): Use camel_imap_folder_fetch_data (with - cache_only FALSE) here too - - * providers/imap/camel-imap-utils.c (imap_skip_list): Renamed from - skip_list and made non-static. - -2001-03-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.h: Uninclude prnetdb.h since it's not - needed here. - - * providers/smtp/camel-smtp-transport.c: #include prnetdb.h here - instead of making camel-tcp-stream-ssl.h include it. Prevents some - header bloat. - - * providers/smtp/Makefile.am: Include the NSPR_CFLAGS and - NSS_CFLAGS. - -2001-03-14 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_connect): Update for - using CamelTcpStreams and also for using SSL. - - * providers/smtp/libcamelsmtp.urls: defined "ssmtp" - - * providers/smtp/camel-smtp-provider.c: Defined the Secure SMTP - provider. - (camel_provider_module_init): Register the Secure SMTP provider. - -2001-03-14 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (imap_connect): Check for - "simap" instead of "imaps". - - * providers/pop3/camel-pop3-store.c (pop3_connect): Change the - port to be 995 for spop. - - * providers/pop3/libcamelpop3.urls: Change to "spop". - - * providers/imap/libcamelimap.urls: Change "imaps" to "simap" to - correspond to /etc/services. - -2001-03-14 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-store.c (pop3_connect): Check to see - if we are using "pops" and then set the appropriate SSL settings. - - * providers/pop3/libcamelpop3.urls: Add "pops" - - * providers/pop3/camel-pop3-provider.c: Defined the pops provider. - (camel_provider_module_init): Register the pops provider. - -2001-03-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (camel_tcp_stream_ssl_new): Ya know what? - Lets not ref the service because otherwise we'll start having the - same problems we had back with vtrash. Besides, since the store - owns the stream, it's not like the store is going anywhere without - the stream anyway. - (camel_tcp_stream_ssl_finalize): No need to unref the service. - -2001-03-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-remote-store.c (remote_connect): Pass the service into the - SSL stream, not the session. - - * camel-tcp-stream-ssl.c (camel_tcp_stream_ssl_init): Set the - service to NULL. - (camel_tcp_stream_ssl_finalize): Unref the service. - (camel_tcp_stream_ssl_new): Takes a CamelService arg now rather - than a CamelSession arg. - -2001-03-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel.c (camel_init): So it turns out that NSS_Init *isn't* - idempotent, so we have to protect against initializing it more - than once(contrary to what their design specs suggest). - - * camel-session.c (camel_session_get_service): Use - camel_exception_is_set() - Makes no difference but it's more - consistant with how we normally do it. - - * camel-provider.h (CAMEL_URL_ALLOW_SSL): We don't need this. - - * providers/imap/camel-imap-provider.c: Define the imaps provider. - (camel_provider_module_init): Register the imaps provider. - - * camel-provider.c (camel_provider_init): Only add the protocol to - the hash table if it's non empty. Also, g_strdup() the filename - into the hash table. - - * providers/imap/camel-imap-store.c (camel_imap_store_init): Eek! - So the service's URL isn't set until after this is - initialized. This means we can't check for SSL here. - (imap_connect): Set the SSL options here instead. - -2001-03-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c: Numerous fixes to get it to build - correctly with NSS enabled. - - * camel-remote-store.c (remote_connect): Pass in the session and - expected host args, oops. - - * camel-provider.h (CAMEL_URL_ALLOW_SSL): Defined. - - * providers/imap/camel-imap-store.c (camel_imap_store_init): Check - to see if we are supposed to use SSL and set the options - accordingly. - (imap_connect): Return FALSE here instead of NULL. - - * providers/imap/camel-imap-provider.c: Add CAMEL_URL_ALLOW_SSL. - - * providers/imap/libcamelimap.urls: Add "imaps" which is the - protocol for Secure IMAP. - -2001-03-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-openssl.[c,h]: Added - - * Makefile.am: Added camel-tcp-stream-openssl.[c,h] to the build. - - * camel-types.h: Added CamelTcpStreamSSL and CamelTcpStreamOpenSSL - -2001-03-14 Not Zed <NotZed@Ximian.com> - - * camel-mime-filter-charset.c (filter, complete): re-constify - inbuf, to remove a warning. - - * camel-mime-parser.c (folder_scan_step): When we're out of data, - run the filter_complete. For some reason the logic that was there - was never being run, always try it now, i think it was to work - around a buggy filter, rather than fix it the right way. - - * camel-folder-summary.c (summary_build_content_info): If indexing - html parts, use the html filter to convert it to some indexable - format. - (summary_build_content_info): Reset the filters before adding them - back to the stream, if they get re-used in a given instance - (likely). - - * Makefile.am (libcamelinclude_HEADERS): Added - camel-mime-filter-html.[ch]. - (INCLUDES): Added xml clags - -2001-03-05 Not Zed <NotZed@Ximian.com> - - * camel-folder-search.c (camel_folder_search_class_init): Setup a - new function, "uid" which matches uids. - (search_uid): Implement the "match uid" command. - -2001-03-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c: Check for a new type of mailing list header. - -2001-03-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-raw.c (stream_read): Made cancellable. - (stream_write): Same. - (stream_connect): Removed checks for DIVINE_INTERVENTION as the - code worked fine. - - * camel-tcp-stream-ssl.c (stream_write): get rid of 'w' as it - wasn't really needed. - (set_errno): New function to set errno based on the NSPR error - code. - (stream_read): If an error occured, call set_errno(). - (stream_write): Same. - -2001-03-13 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: Added camel-tcp-stream-ssl to the build. - - * camel-remote-store.h: Add a use_ssl member to the - CamelRemoteStore object. - -2001-03-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (camel_tcp_stream_ssl_get_type): - Oops. Make this a subclass of CamelTcpStream, not CamelStream. - - * camel-types.h: Add the defs for CamelTcpStream and - CamelTcpStreamRaw - - * Makefile.am: Add camel-tcp-stream and camel-tcp-stream-raw to - the build. - - * camel-remote-store.c (remote_connect): Update to use - CamelTcpStreams. - - * camel-tcp-stream-raw.c (stream_connect): Made cancellable by - copying the currently used code in camel-remote-store.c. - (stream_setsockopt): Oops, flags = fcntl (..., GET_FL); - (camel_tcp_stream_raw_get_type): Oops. Make this a subclass of - CamelTcpStream, not CamelStream. - -2001-03-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel.c (camel_init): Since all of the Mozilla libs (including - NSPR and NSS) correctly handle reinitializations, we might as well - init both NSPR and NSS in camel_init so we can be sure of that - these libs have been initialized. - (camel_shutdown): New function to call the NSS cleanup stuff. - -2001-03-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder.c (camel_folder_copy_message_to): Don't allow the - user to copy a message to or from the vtrash folder. Set an - exception if they try. - (camel_folder_move_message_to): This one is a bit more - complicated: 1) If the user tried to move a message from the - vtrash into the original folder, just undelete the message. 2) If - the user tries to move the message to the vtrash folder, then just - mark the message as deleted. 3) If the user tries to move the - message from the vTrash to a folder other than the original, use - the original folder as the source. As another optimization, I've - made it so that if the user tries to move a message to the same - folder, just no-op. - (move_message_to): Unset the deleted flag before moving (assuming - it's there). - (copy_message_to): Same. - - * camel-vee-folder.c (camel_vee_folder_get_message_folder): New - convenience function to get the folder from which the message uid - is derived from. - -2001-03-13 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-store.c (imap_connect): When trying - again after a failed password attempt, check if the connection got - dropped (which Courier will do) and deal accordingly. - - * providers/sendmail/camel-sendmail-transport.c (sendmail_send_to, - sendmail_send): More fixing for exim: It can't deal with "-tif", - you need to say "-t -i -f". - -2001-03-12 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store.c (init_trash): Rename the folder to "Trash" and - i18nify it. - -2001-03-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.h: Comment out everything unless HAVE_NSS - is defined. - - * camel-tcp-stream-ssl.c (stream_read): Don't use errno, use - nspr's error code stuff. - (stream_write): Same. - -2001-03-09 Jeffrey Stedfast <fejj@ximian.com> - - * camel-session.c (camel_session_query_authenticator): Created a - new mode (CAMEL_AUTHENTICATOR_ACCEPT) which is a Yes/No prompt to - the user. This will be needed by the SSL/TLS code to come. Also - changed the return value to a gpointer rather than a char* to - allow the returning of TRUE/FALSE values. - - * camel.c: Wrap stuff with HAVE_NSS - -2001-03-09 Dan Winship <danw@ximian.com> - - * providers/sendmail/camel-sendmail-transport.c (sendmail_send, - sendmail_send_to): Remove the "-U" for now, because it breaks - exim's "sendmail" wrapper. (And it doesn't actually do all that - much to sendmail's behavior, and it was working fine before - anyway.) - - * camel-mime-utils.c (header_fold): Fix a bug that could make this - walk off the end of a string. (The bug has been there since - December... maybe this will fix some unreproduceable crashes?) - -2001-03-08 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store.c (camel_store_get_folder): Changes so that the - folder gets added to the vtrash reguardless of whether or not the - store is holding it's own folder lookup hash. - (init_trash): Oops, lets try locking the cache before we go and - add all the cached folders to the vtrash. - -2001-03-08 Jeffrey Stedfast <fejj@ximian.com> - These fixes make it so that the CamelStore does not actually hold - a ref on it's vTrash folder. The vTrash folder is now created ONLY - when it is requested. This solves the problem of not being able to - unref a Store and have it disconnect/finalize like we expect it to. - - * camel-store.c (init_trash): When we create the vtrash, add all - previously opened folders to it and hook on to the finalize event - so that we can then set the store->vtrash to NULL. - (get_trash): If a vtrash folder for the store doesn't exist, - init_trash() and then try. - (construct): No longer need this. - (camel_store_class_init): Don't override the construct method. - (camel_store_finalize): We no longer hold a ref on the vtrash so - don't unref it. - -2001-03-07 Jeffrey Stedfast <fejj@ximian.com> - - * providers/pop3/camel-pop3-store.c (init_trash): Implement. - (get_trash): Implement. - (camel_pop3_store_class_init): Override the default init_trash and - get_trash virtual functions. Hopefully this should fix the problem - of pop3 sotre's not disconnecting after the send&recv code - finishes downloading mail. - - Wonder if I should override the default implementation for the - mbox, mh, and maildir too? - -2001-03-07 Dan Winship <danw@ximian.com> - - * camel-remote-store.c (camel_remote_store_connected): Return the - return value of camel_service_connect rather than returning - !camel_exception_is_set(), since that will be wrong if ex==NULL... - Fixes a crash in the IMAP keepalive code, but this same problem - probably exists in other places too... - (remote_recv_line): Fix another problem... - - * providers/local/camel-mbox-provider.c: - * providers/vee/.cvsignore: - * providers/vee/libcamelvee.urls: Remove some unused stuff - -2001-03-06 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-digest-md5.c (compute_response): Redone so as to save - on memory allocations and speed. - -2001-03-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-plain.c (plain_challenge): Don't return NULL if the - token is non-NULL. This is why: - - sending : AUTH PLAIN - received: 334 ok. go on. <-- this is why - sending : ZGZPaQpAZ214Lm5ldBBnb29jYXI= - received: 235 {mp005-rz3} go ahead - - * camel-sasl.c (camel_sasl_authtype): Add the PLAIN type here. - (camel_sasl_authtype_list): And here too. - - * camel-sasl-plain.c: Initialize the camel_sasl_plain_authtype. - - * camel-sasl-plain.h: extern the camel_sasl_plain_authtype. - -2001-03-05 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (imap_connect): i18n'd some - strings in here. - - * providers/smtp/camel-smtp-transport.c (smtp_connect): Keep - trying to authenticate until either we succeed or until the user - cancels. - -2001-03-04 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c: Wrote a new version of header_fold() that - takes a 'force' option and uses another new function called - header_fold_next_space() in place of strchr(inptr, ' ') to get the - next whitespace char. The idea of header_fold_next_space() is to - not treat spaces between a set of quotes as a space - this way it - will be possible to fold (for example) the Content-Type MIME - header without worrying about breaking up a boundary string. - Note: This code is #if 0'd out until Zucchi approves of the patch. - Another Note: We will probably still want to use the "don't fold - this header" hash lookup for headers like the Message-Id and - possibly a few others. - -2001-03-04 Jeffrey Stedfast <fejj@ximian.com> - - * camel-internet-address.c - (camel_internet_address_encode_address): Make sure there is a - space between the name and the address tokens. - - * camel-mime-utils.c (rfc2047_decode_word): encoded string - segments need to be at least 8 chars (7 doesn't leave room for an - ecoding value. To be more realistic, even 8 chars isn't enough as - this assumes there is no charset nor any encoded text. If the - encoding value is not 'Q' or 'B', then return NULL. This fixes bug - #1689. - -2001-03-03 Not Zed <NotZed@Ximian.com> - - * camel-vee-folder.c (vee_folder_remove_folder): New function to - remove a folder from a vfolder. - (camel_vee_folder_remove_folder): New public function to remove a - folder from a vfolder. - -2001-03-02 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-provider.c: Doh! Set the - CAMEL_URL_ALLOW_AUTH flag. - - * providers/smtp/camel-smtp-transport.c (get_smtp_error_string): - Updated with the extended AUTH return codes. - -2001-03-02 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-store.c (try_auth): Don't forget to - unref the SASL object. - - * providers/smtp/camel-smtp-transport.c (query_auth_types): - Implemented. - (smtp_auth): Implemented. - (smtp_helo): Don't bother parsing the authtypes if we already have - them. - (smtp_connect): call smtp_auth() here if we found any authtypes. - (smtp_disconnect): Updated as I now use a hash table for the - supported authtypes rather than a linked list. - (esmtp_get_authtypes): modify to use a hash table instead of a - linked list and also use isspace() rather than == ' '. - -2001-03-02 Dan Winship <danw@ximian.com> - - * providers/sendmail/camel-sendmail-transport.c (sendmail_send_to, - sendmail_send): Use "-f" to set the envelope from address so - bounces go to the right place. Also, pass "-U" since the man page - says we're supposed to... - -2001-03-01 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl.c: #include "camel-sasl-digest-md5.h" - (camel_sasl_authtype_list): add DIGEST-MD5 stuff here. - (camel_sasl_authtype): And here too. - (camel_sasl_new): And here... - - * camel-sasl-digest-md5.[c,h]: new SASL class for DIGEST-MD5 (has - been tested and proven to work). - -2001-03-01 Dan Winship <danw@ximian.com> - - * camel-sasl.c (camel_sasl_challenge): Take a GByteArray as input - as well. Comment that you can pass %NULL for @token to get the - initial auth data for mechanisms that are client-initiated. - (camel_sasl_challenge_base64): Convenience function for protocols - that use base64-encoded SASL. - (camel_sasl_authenticated): Implement this... (it was prototyped - already) - (camel_sasl_new): Function to take a service name, a mechanism - name, and a CamelService, and return a CamelSasl for it. - (camel_sasl_authtype, camel_sasl_authtype_list): Functions to - return CamelServiceAuthType information about SASL mechanisms, to - allow providers to deal with them generically. - - * camel-sasl-anonymous.c, camel-sasl-plain.c: Update/simplify for - CamelSasl changes. Both of these are single-round - (client-initiated) mechanisms, so they don't need to keep state. - (camel_sasl_plain_new): Removed; use camel_sasl_new instead. - (Can't get rid of camel_sasl_anonymous_new though...) - - * camel-sasl-cram-md5.c: Update/simplify for CamelSasl changes. - (camel_sasl_cram_md5_new): Removed; use camel_sasl_new instead. - (cram_md5_challenge): Use md5_get_digest where possible, and - various other minor simplifications. CRAM-MD5 only has a single - round, so there's no need to keep track of state. This code is now - tested (against Cyrus IMAPd) and known to work. - - * camel-sasl-kerberos4.h: Update/simplify for CamelSasl changes. - Make only a single #ifdef HAVE_KRB4. Remove stuff from priv that - isn't needed between rounds. - (camel_sasl_kerberos4_new): Removed; use camel_sasl_new instead - (krb4_challenge): Fix up the logic I broke in my previous "at - least make it compile" fixes, update to match other changes, and - remove IMAP-isms that shouldn't be in the generic code. This still - isn't tested, because we're stuck behind a NAT right now... - - * providers/imap/camel-imap-store.c: Add an "authtypes" hash table - to CamelImapStore recording the supported authtypes. - (connect_to_server): Record supported authtypes in the authtypes - hash rather than the capabilities bitmask, since now the IMAP code - is no longer responsible for keeping track of which authtypes we - support. - (query_auth_types): Use camel_sasl_authtype_list to get the - SASL-supported authtypes. - (try_auth): New function to try a SASL auth mechanism. Sort of - formerly imap_try_kerberos_v4_auth. - (imap_connect): Get rid of the krb4-specific bits and genericize - them for any SASL authtype. - - * providers/imap/Makefile.am: Remove camel-imap-auth.[ch] (moved - into camel-imap-store.c since it's now constant size) and the - KRB4_CFLAGS and KRB4_LDFLAGS references. - -2001-03-01 Jeffrey Stedfast <fejj@ximian.com> - - * camel-sasl-anonymous.c (anon_challenge): Don't base64 encode the - data, leave that up to the provider to do if it needs to. Also - save on some memory allocations and stuff. - - * camel-sasl-cram-md5.c (cram_md5_challenge): Same here. Also get - rid of the need for the temp buf as we can just write it to the - GByteArray. - -2001-03-02 Not Zed <NotZed@Ximian.com> - - * camel-mime-utils.c (rfc2047_encode_word, rfc2047_decode_word): - Reconstify variables to match iconv. - - * camel-search-private.c (camel_ustrstrcase): Change some - assertions back into valid returns. - -2001-03-01 Dan Winship <danw@ximian.com> - - * Makefile.am (libcamel_la_LIBADD, INCLUDES): camel depends on - krb4 now (where available), for camel-sasl-kerberos4.c - - * camel-sasl-kerberos4.[ch]: Make this at least compile. Dunno if - it works yet. - -2001-03-01 Peter Williams <peterw@ximian.com> - - * camel-url.c (camel_url_new): Assert url_string != NULL. - -2001-02-28 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: Added camel-sasl-anonymous.[c,h] to the build. - - * camel-sasl-anonymous.[c,h]: new SASL class for ANONYMOUS - - * camel-sasl-plain.c (plain_challenge): Oops, have a state for - setting sasl->authenticated = TRUE; - - * camel-sasl-cram-md5.c (cram_md5_challenge): Same here. - -2001-02-28 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_decode_date): A fix for broken - mailers that send 2-digit years (ie "Wed, 28 Feb 01 - 04:59:41"). Fixes bug #1633. - - * camel-filter-driver.c (camel_filter_driver_filter_folder): Check - to make sure message isn't NULL. - -2001-02-28 Dan Winship <danw@ximian.com> - - * camel-remote-store.c (remote_recv_line): If we get back 0 bytes - from camel_stream_buffer_gets, that means the socket got - disconnected, so set an exception. (Noticed because of a message - that crashes our IMAP server when you try to look at it. :) - -2001-02-28 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: Added camel-sasl*.[c,h] to the build. - - * camel-sasl.[c,h]: new "abstract" SASL class - - * camel-sasl-kerberos4.[c,h]: new SASL class for KERBEROS_V4 - - * camel-sasl-cram-md5.[c,h]: new SASL class for CRAM-MD5 - - * camel-sasl-plain.[c,h]: new SASL class for PLAIN - - * providers/imap/camel-imap-auth.c: Removed the base64 functions. - - * camel-mime-utils.c (base64_encode_simple): Moved here from - camel-imap-auth.c - (base64_decode_simple): Same. - -2001-02-26 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c (imap_sync): Group messages - into sets with the same flags and use the IMAP message set - notation rather than doing a separate STORE FLAGS for each one. - This cuts the network traffic down to just a handful of commands - per sync rather than one per changed message. Removed the progress - notification stuff since it's no longer meaningful and should - hopefully be unnecessary. - (imap_copy_message_to): move the former sync_message function - into here, since it's no longer shared with imap_sync. - -2001-02-26 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c: Made thread-safe and moved to above the test - code. - - * camel-mime-message.c (camel_mime_message_init): Set the - message_id to NULL. - (camel_mime_message_finalize): Free the message_id. - (camel_mime_message_set_message_id): New function to set the - Message-Id. - (camel_mime_message_get_message_id): New function to get the - Message-Id. - (process_header): Decode the message-id. - -2001-02-24 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store.c (construct): init the vTrash folder here instead - of in store_init. - (camel_store_class_init): init service_class->construct. - (camel_store_finalize): We only need to unref the vtrash folder. - (init_trash): don't create a vstore since we don't need it. - -2001-02-23 Jeffrey Stedfast <fejj@ximian.com> - - * camel-store.c (camel_store_class_init): init get_trash and - init_trash. - (camel_store_init): call the virtual init_trash function. - (camel_store_finalize): unref the vtrash folder/store if present. - (camel_store_get_folder): Add the new folder to the vtrash - vfolder. - (init_trash): default implementation of init_trash. - (get_trash): default implementation of get_trash. - - * camel-vee-store.c (vee_init_trash): No-op. - (vee_get_trash): return NULL - -2001-02-23 Not Zed <NotZed@Ximian.com> - - * camel-folder-summary.c (camel_message_info_new_from_header): - Doh, cut and paste problem, use mlist not cc. - - * camel-folder.c (move_message_to): - (copy_message_to): If the source folder doesn't support a - summary, dont try and get the message info from it. - - * camel-filter-search.c (check_header): Implement a pseudo-header - "x-camel-mlist" which just looks up in the message info for a - match. - - * camel-folder-search.c (check_header): Add pseudo-header - "x-camel-mlist" which can be used to match on mailing list. - - * providers/imap/camel-imap-folder.c (imap_sync): Add some - internal progress reporting. - (imap_rescan): Do some progress reporting. - - * camel-mime-part.c (init_header_name_table): Add the message-id - to the formatted table, so we dont try and wrap it, and break it. - -2001-02-22 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder.h: Remove the 'FIXME: remove because this isn't - required...' comment for copy_message_to since we now need and - cherish its existance in the filter-driver code ;-) - - * camel-filter-driver.c (camel_filter_driver_filter_message): Now - takes a UID and CamelFolder arguments (which can be NULL) to allow - for possible optimizations when copying messages between folders - on the same store. - (camel_filter_driver_filter_mbox): Updated (passes NULL for both - since this case can't be optimized anyway). - (camel_filter_driver_filter_folder): Updated to pass in the uid - and folder of the message. - -2001-02-22 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-summary.h (CAMEL_IMAP_SERVER_FLAGS): - #define this as the set of all IMAP system flags - - * providers/imap/camel-imap-folder.c (sync_message): after syncing - flags, set server_flags to (flags & CAMEL_IMAP_SERVER_FLAGS) - rather than just "flags", since any other flags won't have been - synced. Prevents the CAMEL_MESSAGE_ATTACHMENTS flag from getting - lost. - -2001-02-22 Not Zed <NotZed@Ximian.com> - - * providers/vee/*: Removed all files. - - * camel-private.h: Move camel-vee-private.h stuff into here. - - * camel-session.c: Move the vee_provider here, and initialise it - always as part of a session. The vfolder provider is always - available. - - * providers/Makefile.am: Remove "vee" from the build list, now - built as part of the main library. - - * Makefile.am (libcamelinclude_HEADERS): - (libcamel_la_SOURCES): Added camel-vee-store.[ch], - camel-vee-folder.[ch]. - - * providers/vee/camel-vee-folder.c (vee_folder_build): Removed, - not used. - (camel_vee_folder_new): Removed call to build_folder. - (vee_get_message): Dont try and free the mi if we didn't get it. - - * camel-folder.c (camel_folder_change_info_new): Added a hash - table of what we have in the lists, plus moved private things into - private pointer. - (camel_folder_change_info_add_source): Fixed up private accesses. - (camel_folder_change_info_add_uid): Changed to use a hashtable to - see if we already have the uid, etc. - (camel_folder_change_info_remove_uid): Similar. - (change_info_remove): Likewise. - (camel_folder_change_info_clear): Fixes for privatisations. - (camel_folder_change_info_free): " - -2001-02-21 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c (fetch_medium): Fixes for - IMAP4-pre-rev1 from Torsten Schulz. - -2001-02-20 Not Zed <NotZed@Ximian.com> - - * camel-mime-utils.c (mail_list_magic): Take the ^Header: part out - of the expression, since we look that up ourselves. - (header_raw_check_mailing_list): When getting the match, get match - 1, not match 0, we dont want the full string match. - - * camel-folder-summary.c (CAMEL_FOLDER_SUMMARY_VERSION): Bumped - for summary change. - (message_info_new): Extract the mlist info from the headers. - (message_info_load): Load mlist from summary. - (message_info_save): Save mlist to summary. - (message_info_free): Save the mlist entry. - (camel_message_info_new_from_header): Extract mailing list header. - (camel_message_info_dup_to): Copy the mlist entry. - (camel_message_info_free): Free mlist. - (message_info_dump): Dump the mlist. - - * camel-folder-summary.h: Add an mlist (mailing list) string to - the summary. - -2001-02-19 Not Zed <NotZed@Ximian.com> - - * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Added - flags argument. - (message_changed): Add support for the auto-update flag, in which - case we auto-match the content as it changes. - (camel_vee_folder_init): Remoive "DYNAMIC" optionality - (camel_vee_folder_finalise): " - (vee_expunge): As we expunge folders, re-sync their content by - rerunning the query. - - * providers/vee/camel-vee-store.c (vee_get_folder): Pass flags to - folder new. - -2001-02-18 Not Zed <NotZed@Ximian.com> - - * providers/vee/Makefile.am (noinst_HEADERS): Added - camel-vee-private.h. - - * providers/vee/camel-vee-private.h: New file to add locking stuff - for vee folders. - - * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Add - locking around unmatched setup. - (camel_vee_folder_init): Setup lock. - (camel_vee_folder_finalise): Free locks. - (folder_changed): Add locking. - (unmatched_finalise): " - (message_changed): " - (vee_folder_build): " - -2001-02-17 Not Zed <NotZed@Ximian.com> - - * providers/vee/camel-vee-folder.c (vee_folder_add): Check uid - doesn't exist before adding it. - -2001-02-16 Not Zed <NotZed@Ximian.com> - - * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Create - a new virtual virtual folder UNMATCHED, to store all messages that - dont match other vfolders. - (unmatched_folder_changed): When a vfolder issues a changed event, - use its info to update the unmatched folder info. - (unmatched_finalise): When a vfolder is finalised, remove any uids - it has as if we had a removed event for it. - -2001-02-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_finalise): Thaw the - defaultfolder. - (camel_filter_driver_set_default_folder): Thaw the defaultfolder - we're about to replace, and freeze the new defaultfolder. - -2001-02-15 Jeffrey Stedfast <fejj@ximian.com> - - * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Emit - the folder_created signal here. - - * providers/local/camel-local-folder.c - (camel_local_folder_construct): Emit the folder_created signal. - - * providers/local/camel-local-store.c (delete_folder): On error, - free the 'name' string so we don't leak. Also emit the - folder_deleted signal. - - * providers/imap/camel-imap-store.c (subscribe_folder): Emit the - folder_created signal. - (unsubscribe_folder): Emit the folder_deleted signal. - - * camel-store.c (camel_store_class_init): Added folder_created and - folder_deleted signal defs. - -2001-02-15 Dan Winship <danw@ximian.com> - - * camel-folder-thread.c (container_parent_child): Deal with - out-of-order References headers so they don't cause messages to - disappear in threaded view. - - * providers/imap/camel-imap-folder.c (fetch_medium): IMAP4 - (pre-rev1) doesn't allow BODY.PEEK[], so use RFC822.PEEK instead - in that case. - -2001-02-14 Christopher James Lahey <clahey@ximian.com> - - * camel-mime-filter-charset.c (complete, filter), - camel-mime-utils.c (rfc2047_decode_word, rfc2047_encode_word): - Changed this code to match the glibc iconv signature. - -2001-02-14 Dan Winship <danw@ximian.com> - - * camel-store.c (camel_store_create_folder): New method to create - a folder when you don't know its full name. - - * providers/imap/camel-imap-store.c (create_folder): Implement. - (create_folder): Oops, and fix bug involving namespaces - -2001-02-12 Not Zed <NotZed@Ximian.com> - - * camel-mime-part.c (init_header_name_table): Add address headers - to list that we dont fold when writing. The are properly - formatted as we build them. - (write_to_stream): DOH, lookup the header name in the formatted - hash table, not the value, that would never have worked. - - * camel-internet-address.c - (camel_internet_address_encode_address): Changed to take a - parameter saying how much we've printed so far. We now fold the - header as we format it. We dont fold addresses, even if they are - too long, we simply put them on another line by themselves: this - should make the result more parsable by mailers that can't handle - split up addresses (which are legal). - (internet_encode): Fix for changes to above. - -2001-02-12 Jeffrey Stedfast <fejj@ximian.com> - - * providers/local/camel-local-provider.c: mbox, mh, and maildir - camel-url's need absolute paths. - - * camel-provider.h (CAMEL_URL_PATH_IS_ABSOLUTE): New flaggy flag. - -2001-02-08 Dan Winship <danw@ximian.com> - - * camel-store.c: Rewrite a bunch. Replace the existing folder - cache stuff with much simpler code that still handles all the - existing cases. Now the folder hash table is always created by the - base class, using hash and compare functions provided by the class - implementation. (If they are set to NULL, CamelStore won't cache - folders.) lookup_folder, cache_folder, and uncache_folder are no - longer class methods, and get_name is gone completely. - - (camel_store_get_inbox): Renamed from - camel_store_get_default_folder, since that wasn't being used, and - this is what we actually need. - (camel_store_get_root_folder): Removed, since it's not needed for - anything given get_folder_info. - - * camel-remote-store.c: - * providers/local/camel-local-store.c: - * providers/local/camel-mbox-store.c: - * providers/local/camel-mh-store.c: - * providers/local/camel-maildir-store.c: - * providers/nntp/camel-nntp-store.c: - * providers/pop3/camel-pop3-store.c: - * providers/vee/camel-vee-store.c: Minor updates for CamelStore - changes - - * providers/imap/camel-imap-store.c (camel_imap_store_class_init): - Update for CamelStore changes. - (hash_folder_name, compare_folder_name): treat INBOX - case-insensitively, otherwise use g_str_hash and g_str_equal. - - * camel-service.c (camel_service_construct): Remove - camel_service_new and create camel_service_construct (as a class - method) in its place. - - * camel-session.c (camel_session_get_service): Use - camel_object_new and camel_service_construct to replace - camel_service_new. - - * providers/local/camel-local-store.c (construct): Append a '/' to - the URL path if it doesn't end with one - -2001-01-31 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-tcp-stream-ssl.c: Oops, include the camel-tcp-stream-ssl - header instead of the raw one. - -2001-02-07 Not Zed <NotZed@Ximian.com> - - * camel-operation.c (camel_operation_start): Changed to push the - operation into a status stack. - (camel_operation_progress): Changed to only accept % complete. - (camel_operation_reset): Free status stack as well. - - * providers/pop3/camel-pop3-folder.c (pop3_get_message): Get the - octect count from the return line, and pass it to - get_additional_data(). - (pop3_refresh_info): Added status stuff. - - * providers/pop3/camel-pop3-store.c - (camel_pop3_command_get_additional_data): Added a total bytes - expected argument for progress reporting & fixed callers. - (camel_pop3_command_get_additional_data): Added progress - reporting. - - * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): - (mbox_summary_sync_quick): - (summary_rebuild): Added progress reporting stuff. - -2001-02-07 Jeffrey Stedfast <fejj@ximian.com> - - * camel-search-private.c (CAMEL_SEARCH_COMPARE): Macro for making - comparisons easy. - (camel_ustrcasecmp): Use CAMEL_SEARCH_COMPARE and check for - end-of-string before the utf-8 error check. - (camel_ustrncasecmp): Same. - (camel_search_header_match): Strip leading spaces before doing - anything else. Also use vlen and mlen so as to not need to do 500 - strlen()'s. - (camel_ustrcasecmp): Don't get_utf8() for the 2 strings in the - comparison part of the loop because of short-circuit expression - evaluation. (blame JPR if this is the wrong term!) - (camel_ustrncasecmp): Same. - -2001-02-06 Jeffrey Stedfast <fejj@ximian.com> - - * camel-search-private.c (utf8_get): Rewrote using unicode_get_utf8(). - (camel_ustrcasecmp): Use unicode_char_t - (camel_ustrncasecmp): Same. - -2001-02-06 Christopher James Lahey <clahey@ximian.com> - - * camel-mime-filter-charset.c (complete, filter), - camel-mime-utils.c (rfc2047_decode_word, rfc2047_encode_word): - Made these pass char ** as the second parameter to iconv. - -2001-02-06 Not Zed <NotZed@Ximian.com> - - * camel-session.c: Removed all the camel_cancel stuff. - - * camel-stream-fs.c (stream_read): Change to use camel_operation. - (stream_write): " - - * camel-remote-store.c (socket_connect): Change to use - camel_operation rather than camel_cancel stuff. - Removed gal include, WTF is that doing there anyway? - - * Makefile.am (libcamel_la_SOURCES): - (libcamelinclude_HEADERS): Added camel-operation.[ch], stuff to - handle notification and cancellation. - - * camel-search-private.c: Removed unwanted header. It was never - put in for a reason. Stop fixing irrelevant warnings. - - (camel_ustrstrcase): Our own strstrcase impl for utf8 strings. - (camel_ustrcasecmp): Ditto for strcasecmp. - (camel_ustrncasecmp): And strncasecmp. - (utf8_get): Simpler interface to utf8 string processing. - (camel_search_header_match): Use the new things. - -2001-02-05 Not Zed <NotZed@Ximian.com> - - * camel-folder.c (get_summary): Removed some old variables/a small - memleak. - (free_summary): Removed old variables. - - * camel-mime-utils.c (header_raw_check_mailing_list): New utility - function to get the mailing list (if any) that a set of headers - came from. - -2001-02-05 Christopher James Lahey <clahey@helixcode.com> - - * camel-stream-fs.c: Added a missing #include. - - * camel-search-private.c: Added a missing #include. - -2001-02-05 Jeffrey Stedfast <fejj@ximian.com> - - * camel-remote-store.c (remote_query_auth_types): Oops. Change - this too. - - * providers/smtp/camel-smtp-transport.c (query_auth_types): Updated. - - * providers/nntp/camel-nntp-store.c (nntp_store_query_auth_types): - Updated. - - * providers/pop3/camel-pop3-store.c (query_auth_types): Updated. - - * providers/imap/camel-imap-store.c (query_auth_types): Updated. - - * camel-service.c (camel_service_query_auth_types): Now takes a - boolean value to specify whether or not to connect when - constructing a supported authtype list. - -2001-02-05 Not Zed <NotZed@Ximian.com> - - * camel-stream-filter.c (do_write): Revert jeff's earlier change, - the change below is the more-correct fix. All his was doing was - ignoring the return code & looping actually :) - - * camel-stream-fs.c (stream_write): Since we are non-blocking on - the outgoing fd, keep looping if writing out large blocks, so we - can keep checking for cancel, etc. - -2001-02-02 Not Zed <NotZed@Ximian.com> - - * camel-folder-thread.c (camel_folder_thread_messages_new): When - we drop a fake node, dont skip checking the next in the list. - (camel_folder_thread_messages_new): Add an assertion check just to - make sure we dont get any pseudo nodes, and spit a warning if we - do. - -2001-02-04 Jeffrey Stedfast <fejj@ximian.com> - - * camel-stream-filter.c (do_write): Make do_write loop until the - entire buffer is written. - -2001-02-02 Not Zed <NotZed@Ximian.com> - - * camel-stream-fs.c: Add missing header for cancel check stuff. - - * camel-session.c (camel_cancel_cancel): Fix a wrong cast. - - * camel-mime-part.c (init_header_name_table): Setup a new table - header_formatted_table, that lists headers that we dont want to - fold (they've already been folded). - (write_to_stream): Check for already formatted headers, and dont - try and fold them. This is a fix for bug #1097. - -2001-02-01 Not Zed <NotZed@Ximian.com> - - * camel-mime-utils.c (header_fold): If we are folding, drop the - space at the end of the line. - -2001-01-30 Not Zed <NotZed@Ximian.com> - - * camel-remote-store.c (timeout_cb): Remvoe the stream locking - here. I think this was leading to a deadlock when a keepalive is - being sent, in imap. - -2001-01-29 Not Zed <NotZed@Ximian.com> - - * providers/imap/camel-imap-command.c - (imap_command_strdup_vprintf): Include the terminating NUL in the - calculated string length. This hit memcheck. - -2001-01-25 Not Zed <NotZed@Ximian.com> - - * tests/folder/test3.c: Changed the subject search to handle case - sensitive when it is mixed case. - - * Makefile.am (libcamel_la_SOURCES): Added camel-ssearch-private.c - (noinst_HEADERS): Added camel-search-private.h - - * camel-folder-search.c (check_header): New function to do the - work of the various header checks. - (search_header_matches): - (search_header_starts_with): - (search_header_ends_with): - (search_header_contains): Use check_header to do the work. - (build_match_regex): Removed. - - * camel-search-private.c (header_soundex): New - function to match words to phrases using soundex algorithm. - - * camel-filter-search.c (soundexcmp): Removed. - (check_match): Moved to search-private.h - -2001-01-24 Not Zed <NotZed@Ximian.com> - - * camel-search-private.c (camel_search_build_match_regex): Added - extra flags, so the same function can be used for - start/end/whole/partial matches. - (camel_search_header_match): Convenience function to check a - single header against all sorts of different matches. - - * providers/imap/camel-imap-search.c (imap_body_contains): Fix for - e_sexp api changes. - - * camel-folder-search.c: Fix for e_sexp api changes. - (search_header_contains): Free args/quit on unknown header. - (search_header_matches): " - (search_header_starts_with): " - (search_header_ends_with): " - (match_message): Add an exception argument. - (search_body_contains): Free args/quit on fatal error. - (message_body_contains): Removed (moved to - camel-search-private.c), fixed callers. - - * camel-filter-search.c: Fix for e_sexp api changes. - (build_match_regex, message_body_contains): Moved into - camel-filter-private.c Fixed callers. - (check_header): moved guts to camel-search-private, and - changed to use regex's for everything. Just calls that with the - right args. - (check_header): GEts the header, decodes it, and checks for - failure, and whatnot. - (check_match): Removed. - (header_soundex): Changed significantly. Now it soundexes each - word in the header separately, and compares it to the first - argument. - - * tests/folder/test9.c (main): Fix for api changes. - (main): Added tests to see that invalid match and action - rules are properly detected. - - * camel-filter-driver.c (camel_filter_driver_filter_mbox): Remove - the 'finished message' bit. - (camel_filter_driver_filter_message): Remove an accidentally - checked in debug. - (camel_filter_driver_filter_message): Fix for e-sexp api changes. - -2001-01-23 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-wrapper.c: Add a lock around the - delayed loading, so two threads won't try to do it at the same - time. - -2001-01-22 Dan Winship <danw@ximian.com> - - * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Set the - CamelFolder::name to just the base part of the vfolder name (the - non-query part) - -2001-01-23 Not Zed <NotZed@Ximian.com> - - * camel-filter-search.c (camel_filter_search_match): Perform error - checking on parsing/execution. - - * camel-folder-search.c (camel_folder_search_execute_expression): - Perform error handling on search expression. - (CamelFolderSearchPrivate): Add a camelexception for error - returns. - (camel_folder_search_execute_expression): Setup exception pointer. - (search_match_all): Quit on error. - - * providers/imap/camel-imap-summary.c (message_info_load): Removed - some debug 'warnings', as they should now be displayed at the - toplevel loader, and just made the code match similar code - elsewhere. - - * providers/local/camel-mbox-summary.c (message_info_load): Error - handling. - (message_info_save): more error handling. - - * camel-folder-summary.c (message_info_load): Add error handling - and sanity checking. - (camel_folder_summary_load): Add error checks. - (perform_content_info_load): Error + sanity checks. - (content_info_load): error + sanity checks. - - * camel-filter-driver.c (close_folder): avoid /0 by updating after - we've done the sync. - (close_folders): Setup the first progress report to start it off. - (camel_filter_driver_filter_message): Fix a fixme, check errors in - e_sexp parsing, etc. - -2001-01-22 Christopher James Lahey <clahey@helixcode.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): - Initialize the value of the variable exists here. - -2001-01-22 Not Zed <NotZed@Ximian.com> - - * .cvsignore */*/.cvsignore: Added profiling temp - files. - - * camel-folder-thread.c (camel_folder_thread_messages_new): When - removing phantom nodes, check for the end node too. - - * camel-filter-driver.[ch]: Changed status vars to be - CAMEL_FILTER_STATUS_ etc. - -2001-01-21 Jeffrey Stedfast <fejj@ximian.com> - - * camel-mime-utils.c (header_param_list_format_append): Make the - output a little prettier. Okay, so I'm anal... - -2001-01-21 Not Zed <NotZed@Ximian.com> - - * camel-filter-driver.h: Added an exception to - CamelFilterGetFolderFunc. - - * camel-filter-driver.c (camel_filter_driver_filter_message): - Remove source parameter, as it is determined elsewhere now. - (camel_filter_driver_filter_folder): Same here. - (camel_filter_driver_filter_mbox): And here. - (do_move): If we cannot open a folder, quit, rather than ignoring - it. - (do_copy): Here too. - (open_folder): Pass an exception into get_folder callback. - (camel_filter_driver_filter_folder): Report that we're syncing, - when we are. - (camel_filter_driver_filter_mbox): And here too. - (close_folder): And here. - -2001-01-19 Jeffrey Stedfast <fejj@ximian.com> - - * camel-filter-driver.c (camel_filter_driver_filter_message): Set - the deleted bit *before* copying to the default folder, this way - if they are importing mail and have a rule to delete it, it - doesn't get copied to the default folder un-deleted. - -2001-01-19 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-store.c - (get_subscribed_folders_by_hand): If LISTing a subscribed folder - doesn't return a LIST response, just ignore that folder. Yay - RFC2060. - (subscribe_folder): add a missing UNLOCK - -2001-01-19 Kjartan Maraas <kmaraas@gnome.org> - - * providers/smtp/camel-smtp-provider.c: Mark strings for translation. - -2001-01-19 Not Zed <NotZed@Ximian.com> - - * camel-filter-driver.c (report_status): Add a percentage complete - indicator to the status thing. - (camel_filter_driver_filter_mbox): Add percentage complete to - reporting. - (camel_filter_driver_filter_folder): Same. - -2001-01-18 Dan Winship <danw@ximian.com> - - * camel-store.c (camel_folder_info_build): More tweaking... skip - separator characters after the namespace character. (Gets rid of - the shell folder registration warning some people have had with - IMAP) - - * providers/imap/camel-imap-store.c (imap_connect): I'm sure there - was some clever reason I was storing the flags of the folder in - the hash table rather than just "1", but I don't remember what it - was now. Anyway, since we only ever test NULL/non-NULL, store 1, - since flags is sometimes 0. - - * providers/imap/camel-imap-folder.c (imap_update_summary): Oops. - Somewhere in one of the reorgs, the code to add new messages to - the CamelFolderChangeInfo structure got removed. Fix that. - -2001-01-17 Jeffrey Stedfast <fejj@ximian.com> - - * providers/imap/camel-imap-summary.c (message_info_load): Add - some g_warnings() to help debug later if I ever get the segfaults - I was getting earlier. Can't seem to reproduce them after my - previous "fix". - - * camel-folder-summary.c (camel_folder_summary_load): Undid my - change here, NotZed said it was wrong and that if it gets a NULL - mi then it should abort and not continue. - -2001-01-17 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-summary.c (camel_folder_summary_load): Make sure - that the message-info is non-null before we go accessing inner - parts of it and/or adding it to the summary array. I may not have - handled the error correctly, but it does seem to work - correctly. If NotZed could double-check this it'd be great. - - * providers/smtp/camel-smtp-transport.c (get_smtp_error_string): - New smtp error-code to string mapping function. - (smtp_connect): Use the new error->string function for reporting - useful errors. - (smtp_helo): Same. Also use a case-insensitive strstr for 8BITMIME - as it seems Exchange sends back lowercase for that one single SMTP - extension. Everything else is uppercase. I'm seeing a lack of love - for that extension by Microsoft dudes... - (smtp_mail): Use get_smtp_error_string. - (smtp_rcpt): Same. - (smtp_data): Same. - (smtp_quit): Same. - (smtp_rset): Same. - -2001-01-16 Jeffrey Stedfast <fejj@ximian.com> - - * camel-folder-summary.c (camel_folder_summary_array): Add an int - i so this code will compile. Should I be worried about how well - this code will work? ;-) - -2001-01-17 Not Zed <NotZed@Ximian.com> - - * camel-folder.c (free_summary): Call - camel_folder_summary_array_free() to do the work. - (get_summary): Use camel_folder_summary_array() to get the array - atomically. These fixes allow folder/test8 to work again, and fix - a sort of race where the summary size can change while we were - making a copy of it. - - * camel-folder-summary.c (camel_folder_summary_array): Get the - summary array atomically, so it can't contain empty records. - (camel_folder_summary_array_free): And free it. - - * tests/lib/camel-test.c (die): If we are verbose & in threads, - then goto sleep so we can debug. - - * tests/folder/test8.c (worker): Add a missing pull() for - comnparing content. - - * camel-filter-search.c: Fix the symbol table, so match-all is an - immediate function, as it should be. - - * tests/folder/test9.c (main): New test, tests some filtering - things. - - * tests/message/test3.c (main): Dont use a boundary string with - spaces in it. Folding can corrupt it. Maybe the folding isn't - working entirely right, but anyway. - - * camel-session.c: Debug out the debug. - - * camel-filter-driver.c (camel_filter_driver_filter_folder): Plug - a messageinfo leak. - -2001-01-16 Dan Winship <danw@ximian.com> - - Delayed loading of IMAP message parts. - - * camel-types.h: typedef CamelMessageInfo and - CamelMessageContentInfo here - - * camel-folder-summary.h: Add a "size" field to - CamelMessageContentInfo. - - * camel-folder-summary.c (camel_folder_summary_content_info_new, - camel_folder_summary_content_info_free): Renamed and made - non-static for providers that construct their own content info. - (content_info_load, content_info_save): load/save size - - * camel-data-wrapper.c (camel_data_wrapper_is_offline): New - function to return if a data wrapper's contents are "offline". (So - that, for example, we don't make thumbnails of images that haven't - been loaded off the IMAP server yet.) Defaults to FALSE. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): - Fix a bug in re-selecting a folder when messages have been - expunged from it by another client in the meantime. - (imap_get_message): Rewrite. If the message is larger than a - certain size, just create a skeleton message containing - CamelImapWrappers that will read parts as needed. This way, large - attachments only need to be downloaded if the user looks at them, - and multipart/alternative alternatives that aren't used will never - be downloaded at all. - (imap_update_summary): Rewrite this a bunch too to make the - parsing more robust. - - * providers/imap/camel-imap-summary.c - (CAMEL_IMAP_SUMMARY_VERSION): bump. - (camel_imap_summary_new): Set build_content to TRUE. - (content_info_load, content_info_save): Only save/load the content - for messages that have it. (The content info gets created as a - side effect of imap_get_message.) - - * providers/imap/camel-imap-utils.c (imap_parse_body): New routine - (and helpers) to parse an IMAP 'body' FETCH response and fill in a - CamelMessageContentInfo from it. - - * providers/imap/Makefile.am (libcamelimap_la_SOURCES, - libcamelimap_la_HEADERS): add camel-imap-wrapper. - -2001-01-16 Dan Winship <danw@ximian.com> - - * camel-tcp-stream-raw.c (stream_getsockopt, stream_setsockopt): - * camel-stream-fs.c (stream_read, stream_write): - * camel-remote-store.c (socket_connect): fcntl(fd, F_GETFL) - returns the flags as the return value, not via a passed in - pointer. And F_SETFL looks for an int, not a long, and you have to - pass it what it's expecting because it's a va_arg parameter. (Yes, - the man page lies on Linux. But check the UNIX98 spec or the glibc - source.) Also, fix another bug in socket_connect: if we manage to - connect right away, unset O_NONBLOCK so it doesn't mess us up - later. - - Fixes a bunch of problems with non-blocking I/O being done in the - allegedly-blocking case and then returning EWOULDBLOCK. - -2001-01-16 Chris Toshok <toshok@ximian.com> - - * providers/Makefile.am (NNTP_DIR): set to nntp if ENABLE_NNTP - (SUBDIRS): use $(NNTP_DIR) - -2001-01-16 Jeffrey Stedfast <fejj@ximian.com> - - * providers/smtp/camel-smtp-transport.c (smtp_rcpt): Don't check - errno as it's not being set. Fixes bug #1150. - -2001-01-16 Jeffrey Stedfast <fejj@ximian.com> - - Ugh, this design is ugly like my butt. - - * camel-session.c (camel_session_query_cert_authenticator): New - function which will be useful when we integrate SSL. - - * camel-tcp-stream-ssl.c (ssl_auth_cert): Callback to authenticate - a certificate. - (ssl_bad_cert): Callback that gets the reason the certificate is - bad and then calls camel's cert-authenticator callback to notify - the user and to allow the user to override the check. - (stream_connect): Set the URL we expect to connect with and setup - the auth_cert and bad_cert callbacks. - (camel_tcp_stream_ssl_new): Now takes a CamelSession and a - expected_host argument that it will use for certificate - authentication. - (camel_tcp_stream_ssl_finalize): Unref the session and free the - expected_host. - -2001-01-16 Not Zed <NotZed@Ximian.com> - - * camel-filter-search.c (header_exists): Changed to support - multiple args (or'd together). - (header_contains): Cleaned up to match the search code. Why did - fejj change it? I'll never know. - (header_matches): - (header_starts_with): - (header_ends_with): Big cleanup of fejj's "i'm the cut & paste - king" code. Also properly handle or'ing of additional args to - match what the folder-search code should do. - (check_match): New function which does the annoying matching - stuff (for header matches). - (check_header): Similarly, handles or'ing of the matches together. - (header_contains): - (header_matches): - (header_starts_with): - (header_ends_with): Call check_header to do the actual work. - (header_soundex): And here too. - (match_all): Yeah like match-all isn't passed expression results, - its passed expression terms. Fix this so match-all works like it - should, by executing the contained expression. - (message_body_contains): Copied directly from - camel-folder-search.c, a more robust/faster/simpler body search - code. - (mime_part_matches): Removed entirely. - (handle_multipart): Removed entirely. - (build_match_regex): Copied from camel-folder-search. Builds a - set of simple strings into a regex pattern that matches any of - them (for faster & simpler matching). Expanded to accept regex - patterns itself, so it can merge them together. - (body_contains): Use build match/match message to match using a - built regex. - (body_regex): Likewise, this time we tell it we're building a - regex though. - (header_full_regex): Use build_match_regex to take the drudgery - out of it, and expand it to handle multiple regex's at once. - (get_full_header): slightly cleaner (well i dunno, the sprintf - stuff just got to me). - (header_regex): Cleaned up to use build_match_Regex too, and to - properly check types. - (filter_message_search): Just allocate 'fms' on the stack. - - * camel-filter-driver.c (camel_filter_driver_finalise): - (camel_filter_driver_init): - (camel_filter_driver_class_init): - (camel_filter_driver_get_type): Changed from gtk object to camel - object. - (camel_filter_driver_add_rule): New function to add a rule to be - processed in sexp form. - (camel_filter_driver_init): Init the rules list. - (camel_filter_driver_finalise): Clear the rules/rules list. - (camel_filter_driver_filter_message): Scan rules list directly - rather than creating on the fly. - - * Makefile.am (libcamelinclude_HEADERS): Added camel-filter-driver.h - (libcamel_la_SOURCES): Added camel-filter-driver.c, code taken - from filter-driver, which can drive, uh, filters based on sexp's. - (libcamelinclude_HEADERS): - (libcamel_la_SOURCES): Added camel-filter-search.[ch] - - * camel-folder-summary.c (camel_folder_summary_decode_string): - Chganged len back to be unsigned. And do a simple range check on - the string value to try and detect corrupted summary files. - - * providers/imap/camel-imap-command.c (imap_read_untagged): Handle - cancelled stream reads with an appropriate exception. - - * providers/imap/camel-imap-private.h: Fix the include-once - macro. Doh, confliced with camel-private.h. - - * providers/imap/camel-imap-store.c (imap_store_refresh_folders): - A copy of camel_remote_store_refresh_folders. We avoid locking - each folder when we call it though. This should be removed when i - can work out how to remove the folder lock from this function - easily. - - * camel-stream-fs.c (stream_write): Fix n' argument of select. - (stream_read): Likewise. - - * camel-remote-store.c (socket_connect): Bump the connect timeout - upto 4 minutes. - (socket_connect): Oops, fix the 'n' argument of select. - - * camel-session.c (camel_cancel_cancel): If we are given no - cancellation node, then do it for all active ones. - -2001-01-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-stream-fs.c (stream_close): If the close() is successful, - set the fd to -1. - - * camel-tcp-stream-raw.c: Removed the disconnect() method. - (stream_close): If the close() is successful, set the sockfd to - -1. - - * camel-tcp-stream-ssl.c: Removed the disconnect() method. - (stream_close): If the close() is successful, set the sockfd to - NULL. - - * camel-tcp-stream.c (camel_tcp_stream_disconnect): Removed, - easier to just use the close() method as it did the same thing - anyway. - -2001-01-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-raw.c (stream_getsockopt): Updated to be able - to get the CAMEL_SOCKOPT_NONBLOCKING socket opt. - (stream_setsockopt): Updated to be able to set the - CAMEL_SOCKOPT_NONBLOCKING socket opt. - -2001-01-15 Peter Williams <peterw@ximian.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Lock - around the imap_rescan, which needs it. - -2001-01-15 Not Zed <NotZed@Ximian.com> - - * camel-remote-store.c (socket_connect): A cancellable connection - routine. - (remote_send_string): Return cancelled exception if we were. - (remote_send_stream): " - (remote_recv_line): " - - * camel-stream-fs.c (stream_read): First cut at cancellation - stuff. Its looking a bit ugly. - -2001-01-15 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (stream_connect): Uses an SSL socket now - although there's still a few things missing (like certificate - handling and such). - - * camel.c (camel_ssl_init): A replacement function for - camel_init() that also initializes SSL. - -2001-01-14 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream-ssl.c (stream_getsockopt): Implemented. - (stream_setsockopt): Implemented. - - * camel-tcp-stream-raw.c (stream_getsockopt): Implemented. - (stream_setsockopt): Implemented. - - * camel-tcp-stream.c (camel_tcp_stream_getsockopt): New method. - (camel_tcp_stream_setsockopt): Another new method. I think you get - the idea of what these are for so I won't explain them. - -2001-01-14 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-tcp-stream-ssl.[c,h]: New CamelTcpStream class that - implements nspr sockets and eventually will use nss for - SSL/TLS. Currently doesn't do any SSL/TLS but it should still - work. It's functionally equivalent to CamelTcpStreamRaw at the - moment only it uses nspr i/o. - - * camel-tcp-stream-raw.[c,h]: New CamelTcpStream class that - implements native sockets. Should be usable but may have some bugs - yet. - -2001-01-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-tcp-stream.[c,h]: New abstract class for TCP streams. The - next step is to write child classes (CamelTcpStreamBSD and - CamelTcpStreamSSL). The BSD stream will use normal BSD sockets - while SSL will use Mozilla's NSPR and NSS libraries to do Secure - Socket Layers which wille ventually replace CamelStreamSSL which I - just commit'd. Oh well. - -2001-01-13 Jeffrey Stedfast <fejj@ximian.com> - - * camel-stream-ssl.[c,h]: New stream for handling SSL/TLS - connections. - -2001-01-12 Not Zed <NotZed@Ximian.com> - - * camel-folder-thread.c (camel_folder_thread_messages_new): - Perform a final pass, removing any pseudo nodes we added earlier. - Quick patch to test the idea. - (camel_folder_thread_messages_new): Added casts to rmeove some - warnings for the analites out there. - -2001-01-11 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): - Fix a bug in previous commit: don't check for deleted messages if - there are no known messages in the folder (because it would end up - sending "FETCH 0 ..."). - (imap_copy_message_to): Fix this up: sync flags to the server - before copying so that they end up correct in the remote folder. - And poke the destination folder after doing the copy so it notices - the new message right away. - (imap_move_message_to): Call imap_copy_message_to for most of the - work rather than duplicating the code (since it's much more - complicated now). - -2001-01-11 Dan Winship <danw@ximian.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): - New function to check for added/deleted messages when re-selecting - a folder. - (imap_refresh_info, imap_rescan, imap_update_summary): Various - locking tweaks that turn out to be irrelevant since command_lock - is recursive, but whatever. - - * providers/imap/camel-imap-command.c (camel_imap_command): When - selecting a new folder, call camel_imap_folder_selected on it. - - * camel-folder.c (camel_folder_copy_message_to): Fix a locking - problem. (One branch of an if statement was returning with the - lock still locked.) Also remove the deprecation comments, to match - move_message_to. - -2001-01-10 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/local/camel-local-provider.c: Changed the descriptions - for mh, mbox, and maildir to be more "user-friendly". - -2001-01-10 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-types.h: New header to prevent - recursive #include problems - - * providers/imap/*.h: Replace some #includes with #include - "camel-imap-types.h", remove typedefs that were moved to - camel-imap-types.h - - * providers/imap/*.c: Add #includes to make up for #includes - removed from .h files - - * providers/imap/Makefile.am (libcamelimapinclude_HEADERS): Add - camel-imap-types.h - -2001-01-10 Dan Winship <danw@helixcode.com> - - * camel-store.c (camel_store_sync): New class function, parallel - to camel_folder_sync. (The default implementation just calls - camel_folder_sync on each cached folder.) - - * providers/imap/camel-imap-store.c (get_folder_info): Call - camel_store_sync before doing anything else so that the IMAP - server and Camel are working from the same data. Don't ask the - server for the unread message count of the current folder, since - UW will return often-incorrect cached data, and we can calculate - it without talking to the server anyway. - -2001-01-09 Dan Winship <danw@helixcode.com> - - Mostly IMAP changes. Use the NAMESPACE extension (where - available). Deal with servers that don't return LIST flags in - response to LSUB (like UW) to get rid of the "not a selectable - folder" error messages in the UI. Take advantage of the \Marked - and \Unmarked flags to try to speed up the folder scan by not - doing STATUS on unmarked folders. Some further tweaks on the shape - of the resulting folder tree in various situations... - - * camel-store.h: Remove the (read) message_count, since nothing - uses it, and we can speed up IMAP a bit this way. - - * camel-store.c (camel_folder_info_build): Redo this a bit to make - it more useful for IMAP since that's the only thing that uses it. - - * camel-remote-store.c (camel_remote_store_connected): Public - function to check if the store is connected, and try to connect it - if it's not. - (remote_send_string, remote_send_stream, remote_recv_line): Use - that. - - * providers/imap/camel-imap-store.c (camel_imap_store_finalize): - fix up for changes. - (camel_imap_store_init): Initialize subscribed_folders to NULL - rather than an empty hash table. - (imap_connect): Get the list of subscribed folders here. If the - server doesn't claim that any of them are either Marked or - Unmarked, then assume that it doesn't do that for LSUB and - remember that for later. If the server supports the NAMESPACE - extension and the user didn't specify a namespace, use the - server-provided one. - (imap_disconnect): Free the list of subscribed folders, and the - namespace. - (get_folder): check camel_remote_store_connected - (get_folder_info): check camel_remote_store_connected. Add a bunch - of new cleverness. If we learned that the server doesn't do LSUB - usefully, do a bunch of LISTs by hand. Then, if we're getting - unread counts, only do it for folders that weren't listed as - Unmarked. Also, deal with namespaces that end with the separator - character, and update for changes to camel_folder_info_build. - (folder_subscribed): Add a g_return_val_if_fail. - (subscribe_folder, unsubscribe_folder): check - camel_remote_store_connected. - - * providers/nntp/camel-nntp-store.c (build_folder_info, - build_folder_info_from_grouplist, nntp_store_get_folder_info): - Don't fill in message_count since it doesn't exist any more. - -2001-01-09 Dan Winship <danw@helixcode.com> - - Kill off a long-hated Camel kludge: "empty" URLs and - query_auth_types_generic. - - * camel-url.c: Remove "empty" from CamelURL. - (camel_url_new): No longer set it. - (camel_url_to_string): Treat "" as equivalent to NULL for - authmech. (Unrelated change, but it simplifies some stuff with the - new config dialog.) - - * camel-service.c (camel_service_new): Remove url->empty check: if - the URL isn't valid, we don't create the service. - (camel_service_query_auth_types): No longer need to switch between - generic and connected variants. - - * providers/smtp/camel-smtp-transport.c (query_auth_types): - * providers/pop3/camel-pop3-store.c (query_auth_types): - * providers/nntp/camel-nntp-store.c (nntp_store_query_auth_types): - * providers/imap/camel-imap-store.c (query_auth_types): - * camel-remote-store.c (remote_query_auth_types): Remove generic - version, rename connected version. - -2001-01-06 Not Zed <NotZed@HelixCode.com> - - * providers/vee/camel-vee-folder.c (vee_folder_build_folder): Dont - try and unref a messageinfo that wasn't there, and use the right - free function too. Modified patch from Iain. - (vee_move_message_to): New method, call the real folders' - move_message_to method. - -2001-01-04 JP Rosevear <jpr@helixcode.com> - - * tests/lib/Makefile.am: fix includes for compilation - - * tests/message/Makefile.am: Build test3 again - - * tests/message/test2.c: Kill warnings with header includes - - * tests/message/test3.c: ditto - - * tests/lib/streams.c: ditto - - * tests/lib/camel-test.c: ditto - - * tests/lib/messages.c: ditto - - * tests/lib/folders.c: ditto - -2001-01-04 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_rescan): Fix two - problems in figuring out server-expunged messages. - -2001-01-04 Not Zed <NotZed@HelixCode.com> - - * camel-folder.c (thaw): If we have a lot of messages changed, - promote it to a folder changed event. - -2000-01-03 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-folder-search.c (search_header_matches): Implemented. - (search_header_exists): Implemented. - (search_header_starts_with): Implemented. - (search_header_ends_with): Implemented. - -2001-01-03 Christopher James Lahey <clahey@helixcode.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): - Initialize the exists variable so that we don't do random things - if the imap server misbehaves. - -2000-12-29 Not Zed <NotZed@HelixCode.com> - - * camel-folder.c (camel_folder_move_message_to): REmove warning, - this isn't really deprecated, sigh. - - * camel-mime-utils.c (header_fold): Comment out some debug. - -2001-01-02 Christopher James Lahey <clahey@helixcode.com> - - * providers/maildir/, providers/mbox/, providers/mh/: Removed - these directories since they're unused. - -2001-01-02 Dan Winship <danw@helixcode.com> - - IMAP randomness. - - * providers/imap/camel-imap-stream.[ch]: Remove. To be replaced. - - * providers/imap/Makefile.am (libcamelimapinclude_HEADERS): Remove - camel-imap-stream.h - - * providers/imap/camel-imap-utils.c (imap_parse_flag_list): Take a - char ** instead of char *, to return the position at the end of - parsing like the string parsing functions. - (imap_parse_string_generic): New function to parse a string, - nstring, or astring. - (imap_parse_nstring, imap_parse_astring): Now macros - (imap_parse_string): Added - - * providers/imap/camel-imap-folder.h: Remove the "exists" field - from CamelImapFolder. - - * providers/imap/camel-imap-folder.c: Remove unused include of - camel-imap-stream.h. - (camel_imap_folder_init): Remove no-longer-relevant summary - initialization. - (camel_imap_folder_new): Update for imap_parse_flag_list change, - exists removal, and imap_rescan. - (imap_rescan): New function that does most of the work of the old - imap_refresh_info, but taking "exists" as an argument instead of - getting it from the folder. Also calls camel_imap_folder_changed - to do the summary updating and signalling, rather than duplicating - that code. - (imap_refresh_info): Just call imap_rescan (using the size of the - folder summary as "exists"). - (imap_update_summary): Update for imap_parse_flag_list change - (camel_imap_folder_changed): Update for "exists" change. - -2001-01-02 Dan Winship <danw@helixcode.com> - - * camel-mime-utils.c (header_content_type_simple): New function to - return just foo/bar with no parameters. - - * camel-data-wrapper.c (get_mime_type): Use - header_content_type_simple rather than header_content_type_format. - -2000-12-28 Dan Winship <danw@helixcode.com> - - * gmime-content-field.[ch]: Remove this. It was only a thin - wrapper around struct _header_content_type anyway, and didn't - match the naming scheme of anything else. - - * Makefile.am: Remove gmime-content-field.[ch] - - * camel.h: Remove gmime-content-field.h - - * camel-types.h: Add CamelContentType as a typedef for struct - _header_content_type (especially for use outside of camel). - - * camel-multipart.c: - * camel-mime-part.c: - * camel-mime-message.c: - * camel-folder-summary.c: - * camel-folder-search.c: - * camel-data-wrapper.[ch]: Use CamelContentType and - header_content_type_* functions rather than the GMime stuff. - - * camel-mime-part-utils.c: - * camel-medium.c: Remove unused gmime-content-field.h include. - -2000-12-27 Dan Winship <danw@helixcode.com> - - * providers/pop3/camel-pop3-store.c (connect_to_server): Fix the - APOP check to not crash on servers that don't return any - information on the +OK greeting line. - -2000-12-24 Not Zed <NotZed@HelixCode.com> - - * providers/imap/camel-imap-search.c (imap_body_contains): Lock - the command channel while searching. - (imap_body_contains): If performing a whole uid search, then add - references to our own summary items, dont look it up in the - folder. This way they can't vanish unexpectedly. - - * providers/imap/camel-imap-folder.h (CamelImapFolder): Added a - private field. - (CamelImapFolder): Removed summary again from here. - - * providers/imap/camel-imap-private.h: Added lock for imap - searches. - - * Merge from camel-mt-branch. - - * providers/imap/camel-imap-folder.c (imap_update_summary): Merge - fix, use the folder->summary. - (imap_get_message_flags, imap_set_message_flags, - imap_get_message_user_flag, imap_set_message_user_flag): Removed - again. - (camel_imap_folder_init): Setup private data/lock. - (imap_finalize): Free private data/search lock. - (imap_search_free): Lock the search_lock. - (imap_search_by_expression): Lock the search lock when using the - search object. Also copy/ref hte summary, rather than getting it - directly. - (imap_refresh_info): Free any info lookups. Use folder->summary - not imap_folder->summary. And lock around commands. - (camel_imap_folder_changed): Use folder->summary again. - (camel_imap_folder_changed): Make sure we unref the summary lookup. - -2000-12-22 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-store.c (get_folder_info): When - getting the top-level folder list, include INBOX even if it's not - subscribed. Don't show subscribed folders outside of the given - namespace. Do a better job of pruning the namespace from the - returned folder tree. - -2000-12-21 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-search.c: New CamelFolderSearch - subclass that just reimplements body_contains (using the IMAP - SEARCH command). All other kinds of searching are done against the - local summary. - - * providers/imap/camel-imap-folder.c (imap_search_by_expression): - Use a CamelImapSearch to do searching. - - * providers/imap/camel-imap-utils.c (imap_translate_sexp, etc): No - longer needed. - - * camel-folder-search.h: Add missing CAMEL_FOLDER_SEARCH_TYPE - #define - -2000-12-21 Dan Winship <danw@helixcode.com> - - * camel-stream-buffer.c (camel_stream_buffer_gets): Update the - doc comment: since it always NUL-terminates the buffer, it reads - at most @max-1 bytes, not @max. - - * camel-remote-store.c (remote_recv_line): Fix the "did - camel_stream_buffer_gets fill the whole buffer" check. Fixes a bug - when reading lines longer than 1024 characters (eg, IMAP SEARCH - responses in very large folders). - -2000-12-19 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_refresh_info): Oops. - Don't do "FETCH 1:0" when the folder is empty. - (imap_protocol_get_summary_specifier): Request RFC822.SIZE too. - (imap_update_summary): Parse RFC822.SIZE and add it to the - summary. - -2000-12-18 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-summary.c: Add "guint32 server_flags" - to CamelImapMessageInfo to keep track of the last known message - flag state on the server. - (message_info_save, message_info_load): Save/load the - server_flags. - - * providers/imap/camel-imap-folder.c: Make this use - CamelFolderChangeInfo and emit folder_changed notifications as it - gets them rather than only on refresh_info. - (imap_refresh_info): Notice flags that get cleared on the server - as well as flags that get set. - (imap_update_summary): Remove a comment that never actually - applied to the committed code. - -2000-12-15 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-command.c (camel_imap_command): Change - the semantics of fmt: Now %S (capital S) means an IMAP "string", - (which can be sent as either a quoted string or a literal). If - the server supports LITERAL+, these will be sent as extended - literals (which don't require any special escaping). Otherwise - they'll be sent as quoted strings (and it now properly deals with - " or \ in the string). - (imap_command_strdup_vprintf): Utility routine that does the real - work for the functionality mentioned above. - - * providers/imap/camel-imap-utils.c (imap_quote_string): Turns a - string into a proper IMAP "quoted string". - - * providers/imap/camel-imap-store.c: - * providers/imap/camel-imap-folder.c: Use %S instead of "%s" where - appropriate. - -2000-12-22 Not Zed <NotZed@HelixCode.com> - - * camel-folder-summary.c (GLOBAL_INFO_UNLOCK): Doh, cut and paste - victim again, call unlock instead of lock! - (summary_assign_uid): Unlock around trying to get a new uid, if we - have a clash. - -2000-12-21 Not Zed <NotZed@HelixCode.com> - - * tests/folder/Makefile.am (TESTS): reenabled the tests here. - - * providers/nntp/camel-nntp-newsrc.c (CamelNNTPNewsrc): Add a - lock. Made completely mt-safe. Sigh, this is all so i can - support snooping of the set_flags stuff inside camel-nntp-folder, - since i've removed the global folder lock from all of the other - folder summary operations. - (camel_nntp_newsrc_read_for_server): Setup lock. - (camel_nntp_newsrc_get_highest_article_read): Lock internal access. - (camel_nntp_newsrc_get_num_articles_read): - (camel_nntp_newsrc_mark_article_read): - (camel_nntp_newsrc_mark_range_read): - (camel_nntp_newsrc_article_is_read): - (camel_nntp_newsrc_group_is_subscribed): - (camel_nntp_newsrc_unsubscribe_group): - (camel_nntp_newsrc_subscribe_group): - (camel_nntp_newsrc_get_subscribed_group_names): - (camel_nntp_newsrc_get_all_group_names): " - (camel_nntp_newsrc_write_to_file): Lock internal accesses. - (camel_nntp_newsrc_write): Lock around diry stuff. - - * providers/local/camel-maildir-summary.c (maildir_summary_check): - Lock around our internal poking of the summary hashtable/array. - (maildir_summary_sync): And the same here too. - - * camel-folder-summary.c: Moved the summaryprivate data into - camel-private.h. Only needed for the locks really. - (camel_folder_summary_init): Setup locks. - (camel_folder_summary_set_filename): Lock. - (camel_folder_summary_index): lock - (camel_folder_summary_uid): Lock - (camel_folder_summary_next_uid): " - (camel_folder_summary_set_uid): " - (camel_folder_summary_load): Lock around whole load. Hrm, - probably not required. - (camel_folder_summary_save): Lock around whole save, this is - reqwuired, unless we ref/copy the whole list first, and i couldn't - be bothreed. - (camel_folder_summary_add): lock - (summary_assign_uid): Lock around internal accesses. - (camel_folder_summary_info_new_from_parser): Lock around filtr stuff. - (camel_folder_summary_info_ref): Add locking. Could probably use - its own lock? - (camel_folder_summary_touch): Add locking, likewise. - (camel_folder_summary_clear): Lock. If the preiovus two are - changed, then so this will need mroe locking. - (camel_folder_summary_info_free): Lock around refcounting. - (camel_folder_summary_remove): Locking. - (camel_folder_summary_remove_uid): Lock ref, unlock, unref. Also - fixed a bug that would have made this never work, freeing the key, - which isn't allocated. - (camel_folder_summary_remove_index): lock, ref, unlock unref also. - (camel_message_info_ref): Lock using a separate global lock, since - we have no context here. - (camel_message_info_free): Here too. - (content_info_alloc): Use an alocation lock here. avoids races - with setting up content_info_chunks, etc. - (camel_folder_summary_info_new): And here too. - (camel_folder_summary_load): Changed to use a differnet lock for - loading/saving. - (camel_folder_summary_init): Doh, i do need a reflock afterall, - set one up. - (camel_folder_summary_finalize): Free it. - (camel_folder_summary_index): Add a reflock. - (camel_folder_summary_uid): And here too. - (camel_folder_summary_info_free): Use reflock instead of - summary_lock. - (camel_folder_summary_info_ref): Likewise. - (camel_folder_summary_remove_uid): Add reflocking. - (camel_folder_summary_remove_index): And here too. - - * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Setup a - summary object. - (vee_folder_build): Build each item into the real summary object. - (vee_folder_add, vee_folder_add_uid, vee_folder_add_change): New - functions to add a single record to the vfolder summary. - (vee_folder_build_folder): Use a real summary. - (vee_get_uids): Removed, use default impl. - (vee_free_message_info): " - (vee_get_message_info): " - (vee_get_summary): " - (vee_get_unread_message_count): " - (vee_get_message_count): " - (vee_sync): Make vee-folder-sync sync all subordinate folders. - Well i dont think this is right, but enough peopl ehave aksed for - it. - (vee_expunge): Same for expunge. - (vee_set_message_flags): Call parent class, then mirror flags to - subfolder. - (vee_get_message_user_flag): Removed, we just use the default - impl, and our flags should always match. - (vee_set_message_user_flag): Snoop the set and set on subfolder. - (vee_get_message_flags): Removed, jsut use parent impl, assume our - copy matches the real ones. - (get_real_message): Removed. We sort ofneed to keep the - summaryitem refed while we use it, so this doesn't make as much - sense as it did once. - (camel_vee_folder_finalise): Unhook listening events as we unref - folders. - (camel_vee_folder_new): Set the summary messageinfo data size - properly. - (vfolder_remove_match): Fixed for summary change. - (folder_changed): ditto. Also stopped changed items from being - re-searched and possibly removed. Might have to resort to the old - whole-search idea again. - (message_changed): Similarly. Might be easier just not to bother - with a whole search. - - * providers/vee/camel-vee-folder.h: Removes summary - hashtable/array, and use a real summary object. Sigh, more work. - - * providers/nntp/camel-nntp-folder.c (nntp_folder_sync): Move - summary to folder object. - (nntp_folder_get_message_count): Removed, use default impl. - (nntp_folder_set_message_flags): Call parent impl to do the work, - but snoop for newsrc. - (nntp_folder_get_uids): Removed, use default impl. - (nntp_folder_get_summary): " - (nntp_folder_get_message_info): " - (nntp_folder_free_message_info): " - (camel_nntp_folder_new): moved summary to folder class - - * providers/imap/camel-imap-folder.c (camel_imap_folder_init): - Move summary to folder object. - (camel_imap_folder_new): " - (imap_finalize): No longer unref the summary (or infact, do - anything else either). - (imap_refresh_info): move summary to folder object. - (imap_sync): " - (imap_get_message_count): Removed, use default impl. - (imap_get_unread_message_count): " - (imap_get_uids): " - (imap_get_summary): " - (imap_free_summary): " - (imap_get_message_info): " - (imap_free_message_info): " - (imap_get_message_flags): " - (imap_set_message_flags): " - (imap_get_message_user_flag): ", this changes functionality, but - only by providing non-permanent flags. - (imap_set_message_user_flag): " - (imap_update_summary): move summary to folder object, and use - camel_folder_summary_info_new_from_header, instead of calling the - virtual function directly. - - * providers/local/camel-maildir-folder.c (maildir_append_message): - move summary to folder object, again. - (maildir_get_message): " - - * providers/local/camel-mh-folder.c (mh_append_message): move - summary to folder object. - (mh_get_message): " - - * providers/local/camel-mbox-folder.c (mbox_append_message): Move - summary to folder object - (mbox_get_message): " - (mbox_set_message_user_flag): We need our own copy of this, sigh, - so we can track if the xev needs a rewrite (probably, its only a - guide anyway). - (mbox_set_message_user_tag): Same same with this one. - (camel_mbox_folder_class_init): Link in these new virtual functions. - - * providers/local/camel-local-folder.h (CamelLocalFolder): removed - summary. - - * providers/local/camel-local-folder.c (local_get_message_count): - (local_get_unread_message_count): - (local_get_uids): - (local_get_summary): - (local_free_summary): - (local_get_message_info): - (local_free_message_info): - (local_get_message_flags): - (local_set_message_flags): - (local_get_message_user_flag): - (local_set_message_user_flag): - (local_get_message_user_tag): - (local_set_message_user_tag): Removed, all now use default - implementation. - (camel_local_folder_class_init): Removed overrides. - (local_init): Clear folder->summary. - (local_finalize): move summary to folder. - (camel_local_folder_construct): " - (local_sync): " - - * camel-folder.c (free_summary): Provide a real impl. - (get_summary): " - (free_uids): " - (get_uids): " - (free_message_info): " - (get_message_info): " - (set_message_user_tag): " - (get_message_user_tag): " - (set_message_user_flag): " - (get_message_user_flag): " Sigh, the last so far. - (get_message_flags): Sigh, 1 more afterall. - (get_unread_message_count): And and this. - (get_message_count): and this! - (set_message_flags): Sigh, and this. - (camel_folder_finalize): Unref the summary if we have it. - (camel_folder_free_uids): Remove locking. - (camel_folder_get_message_flags): Remove locks, since the summary - is now mt-safe. - (camel_folder_set_message_flags): " - (camel_folder_get_message_user_flag): " - (camel_folder_set_message_user_flag): " - (camel_folder_get_message_user_tag): " - (camel_folder_set_message_user_tag): " - (camel_folder_get_message_info): " - (camel_folder_free_message_info): " - (camel_folder_get_uids): " - (camel_folder_free_summary): " - (camel_folder_get_unread_message_count): " - (get_unread_message_count): Check we got info, no big deal, but - the summary might change while we're counting, and upset the count - slightly. - (camel_folder_get_message_count): Remove locks. - - * camel-folder.h (struct _CamelFolder): Added CamelFolderSummary - to the base folder object. Sigh, this is going to be a lot of - work ... - - * camel-service.c (camel_service_init, finalise): changed - connect_lock to be recursive e_mutex. - - * camel-remote-store.c (camel_remote_store_init, finalise): Changed - stream_lock to recursive e_mutex. - - * camel-private.h (RemoteStorePrivate, ServicePrivate): Use - recursive mutexes for connect_lock & stream_lock. Ick. Because - of the imap code. - - * providers/imap/camel-imap-private.h: Change the command_lock to - be an EMutex. - - * providers/imap/camel-imap-store.c (connect_to_server): Removed - the command_lock stuff. If we are just connected again, it should - be safe to assume we have exclusive access at this point without - it (and yes, removes a deadlock). - (imap_create): Remove a lock that wasn't even supposed to be - there. - (camel_imap_store_finalize, init): g_mutex->e_mutex(E_MUTEX_REC). - Use a recursive mutex since the imap code is multiply recursivly - calling some functions (sigh, it would be nice to fix this). - -2000-12-20 Not Zed <NotZed@HelixCode.com> - - * camel-folder.c (folder_changed): Change the locks to inside the - if. Stops a deadloc,k and we dont need a lock to read a value. - (message_changed): Likewise. - - * camel.c (camel_init): Blah, comment out g_thread_init, leave it - to the caller, since it can only ever be done once. - - * camel-folder-thread.c (camel_folder_thread_messages_new): Ref - and save the folder in the thread return. Also get the summary - once, and access that for the messageinfo's. Added bonus that now - threads should come out in a similar order. We need to do this so - that the messageinfo's dont get unref'd under us, and using the - summary directly simplifies memory management. - (camel_folder_thread_messages_destroy): Free the summary/unref the - folder. - - * camel-folder-thread.h: Add a folder to CamelFolderThread struct. - -2000-12-19 Not Zed <NotZed@HelixCode.com> - - * providers/imap/camel-imap-utils.c (imap_translate_sexp): Unref - using e_sexp_unref, since it is no longer an object. - - * tests/lib/camel-test.c: Added a global lock, and made it - thread-aware. - - * camel-exception.c: Add a global lock. Not sure its really - needed here, but it doesn't really hurt. - (camel_exception_clear): Lock around access. - (camel_exception_set): Same. - (camel_exception_setv): " - (camel_exception_xfer): " - - * providers/local/Makefile.am (noinst_HEADERS): Added, for - camel-local-private.h - - * camel-folder.c (camel_folder_search_by_expression): Removed - locking here, now upto the implementing class to lock. - (camel_folder_search_free): Removed the folder lock here too, for - consistency really, and the locking probably wasn't needed. - - * providers/local/camel-local-folder.c (local_get_summary): - Changed to copy/ref the summary items. - (local_free_summary): Unref the summary items/free the array. - (local_get_unread_message_count): Free info lookups. - (local_search_by_expression): Perform more fine-grained locking, - and dont lock the whole folder while searching, just the search - object. Dum de dum, it *would* be possible to not even have to - lock the search, by using our own copy of the search object each - time. Could be investigated. - (local_init): Init priaate data/lock. - (local_finalize): Free private data/lock. - (local_search_free): Also lock around the search object, because - it accesses global data inside. - - * README.mt: Some info about the mt code development. - - * camel-folder-search.c (match_message): Put in a warning, this - plain deadlocks so far, but i'm going to bed now. - (camel_folder_search_finalize): Use e_sexp_unref() since its no - longer an object. - - * camel-session.c (camel_session_init): Init private data/lock. - (camel_session_finalise): Free private data/lock. - (camel_session_register_provider): Lock hash insert. - (service_cache_remove): Lock. - (camel_session_list_providers): " - (camel_session_get_service): Lock the whole function. - - * camel-session.h (struct _CamelSession): Added private data. - - * providers/imap/camel-imap-store.c (camel_imap_store_init): Setup - private data. - (camel_imap_store_finalize): Free private data. - (connect_to_server): Lock around command calls. I dont think its - needed, but it shouldn't hurt either. - (imap_connect): Lock around command calls. Again, I don think it - is needed, but wont hurt. - (imap_disconnect): ditto for this one. - (imap_create): Lock around command. - (get_folder): " - (get_folder_info): " - (subscribe_folder): " - (unsubscribe_folder): " - (imap_keepalive): " - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Lock - around calling a command. - (imap_refresh_info): Likewise. - (imap_sync): " - (imap_append_message): " - (imap_copy_message_to): " - (imap_move_message_to): " - (imap_get_message): " - (imap_update_summary): " - (imap_search_by_expression): ", also minor logic cleanup. - (imap_get_summary): Copy/ref the summary items. - (imap_free_summary): And free it now too. - - * providers/imap/camel-imap-auth.c (imap_try_kerberos_v4_auth): - Lock the command stream for the command session. - - * providers/imap/camel-imap-private.h: Private (locking info) - stuff for imap provider. - (CAMEL_IMAP_STORE_UNLOCK): Fix to call unlock, rather than lock! - - * camel-service.c (camel_service_query_auth_types): Lock also for - the connection here, incase the service needs to connect. - - * camel-remote-store.c (camel_remote_store_init): Init private - data/lock. - (camel_remote_store_finalise): Readded, free private data/lock. - (remote_send_stream): Changed to return the number of bytes - written, like a good little stream function should. - (camel_remote_store_send_string): Lock for stream access. - (camel_remote_store_send_stream): Same here. - (camel_remote_store_recv_line): And here. - (camel_remote_store_refresh_folders): Lock the store for cache - access. - (timeout_cb): Lock for stream access. - -2000-12-18 Not Zed <NotZed@HelixCode.com> - - * camel-service.c (camel_service_init): Init private data. - (camel_service_finalise): Free private data. - (camel_service_connect): Lock around connection access. - (camel_service_disconnect): " - - * camel-service.h (struct _CamelService): Added private field. - - * camel-store.c (camel_store_init): Init private data/lock. - (camel_store_finalize): Free private data/lock. - (camel_store_get_folder): Lock internal calls. - (camel_store_delete_folder): " - (camel_store_rename_folder): " - (camel_store_get_root_folder): " - (camel_store_get_default_folder): " - (camel_store_get_folder_info): " - (camel_store_folder_subscribed): " - (camel_store_subscribe_folder): " - (camel_store_unsubscribe_folder): " - (lookup_folder): Lock accesses to the folder cache. - (cache_folder): " - (uncache_folder): And here too. - - * camel-store.h (struct _CamelStore): Added a private field. - - * Makefile.am (noinst_HEADERS): Add camel-private.h. There is a - comment in that header as to why it ins't installed. - - * camel-private.h: New header for private data, that subclasses - can get to. - - * tests/lib/camel-test.c (camel_test_init): If we do have threads - enabled already, dont call g_thread_init(). - - * tests/lib/folders.c (test_folder_counts): Add free of info. - (test_folder_message): And here too. - - * providers/local/camel-maildir-summary.c (remove_summary): Free - info. - (maildir_summary_check): Free info lookups. - - * providers/local/camel-mh-summary.c (message_info_new): Removed, - didn't add value. - (remove_summary): free info after being used. - (mh_summary_check): Free info lookups. - (mh_summary_sync): and here too. - - * providers/local/camel-mbox-summary.c (summary_update): Free info - lookups. - (mbox_summary_sync_full): Likewise. - (mbox_summary_sync_quick): And here. - (mbox_summary_sync): ... and here. - - * providers/local/camel-maildir-folder.c (maildir_get_message): - Free messageinfo lookups. - - * providers/local/camel-mh-folder.c (mh_get_message): Free - messageinfo lookups. - - * providers/local/camel-mbox-folder.c (mbox_get_message): Free - messageinfo lookups. - - * providers/local/camel-local-summary.c - (message_info_new_from_message): Removed, since it wasn't doing - anything useful. - (message_info_new_from_parser): Same. And some other dead code. - - * providers/local/camel-local-folder.c (local_get_message_info): - deconstify. - (local_free_message_info):new func to free info. - (local_get_uids): - (local_get_message_flags): - (local_set_message_flags): - (local_get_message_user_flag): - (local_set_message_user_flag): - (local_get_message_user_tag): - (local_set_message_user_tag): Free all info lookups. - (local_expunge): Dont call camel_folder_* functions, to avoid a deadlock. - - * providers/nntp/camel-nntp-folder.c - (nntp_folder_get_message_info): deconstify. - (nntp_folder_free_message_info): Free summary item. - (nntp_folder_get_message_flags): Free summary lookup. - (nntp_folder_set_message_flags): and here. - (nntp_folder_get_uids): And here. - - * providers/imap/camel-imap-auth.c: Make base64_*_simple optional - with the HAVE_KRB4 flag. - - * providers/imap/camel-imap-folder.c (imap_free_message_info): - Added a free of the message info. - (imap_refresh_info): - (imap_sync): - (imap_refresh_info): - (imap_get_unread_message_count): - (imap_get_uids): - (imap_get_message_flags): - (imap_set_message_flags): Free any summary lookups. - (imap_get_message_flags): Get the message info directly from the - summary, not via the folder interface. - (imap_move_message_to): Dont call folder functions directly - (delete_message), as it will deadlock since we already have the - lock. - - * providers/vee/camel-vee-folder.c (vee_free_message_info): Free/unref - the messageinfo. - (vee_get_message_info): First ref the internal copy, then return it. - (folder_changed): Free all got message info's. - (message_changed): And here. - (get_real_message): And here. - (vee_folder_build): and here. - (vee_folder_build_folder): ... and here. - - * camel-folder-summary.c (camel_folder_summary_info_new): - Initialise the messageinfo refcount to 1. - (camel_folder_summary_info_free): Down the refcount till we need - to free. - (camel_folder_summary_info_ref): New function to up the refcount. - (camel_message_info_dup_to): Sewt the refcount of the dest to 1. - (camel_message_info_new): Set refcount to 1. - (camel_message_info_new_from_header): Dont allocate the mi - ourselves. - (camel_message_info_free): Handle refcounting. - (camel_message_info_ref): New function. - (camel_folder_summary_index): Ref the messageinfo before returning - it. - (camel_folder_summary_uid): Likewise. - (camel_folder_summary_save): Access the messageinfo array - directly, rather than through accessors (saves ref/unref). - (camel_folder_summary_clear): Likewise. - (camel_folder_summary_remove_index): Likewise. - (main): Free lookups. - - * camel-folder-summary.h (CamelMessageInfo): Added a refcount - value. - - * camel-folder.c (camel_folder_free_message_info): New function to - 'free' a message info. - (camel_folder_get_message_info): Deconstify return. - (camel_folder_lock): New (internal) function to thread-lock the - folder. - (camel_folder_unlock): Likewise for unlocking. - (freeze): - (thaw): Lock around access to folder->frozen/changed_frozen. - (folder_changed): Likewise. - (message_changed): Likewise. - (camel_folder_init): Init private data, locks and moved frozen - info. - (camel_folder_finalize): Free new private data, locks and moved - frozen info. - (copy_message_to): Free the messageinfo after we've used it. - (move_message_to): And here too. - (camel_folder_sync): Lock around virtual method invocation. Just - locking around any virtual method that is known to need it. This - is the first cut at locking. - (camel_folder_refresh_info): " - (camel_folder_expunge): " - (camel_folder_get_message_count): " - (camel_folder_get_unread_message_count): " - (camel_folder_append_message): " - (camel_folder_set_message_flags): " - (camel_folder_get_message_flags): " - (camel_folder_get_message_user_flag): " - (camel_folder_set_message_user_flag): " - (camel_folder_get_message_user_tag): " - (camel_folder_set_message_user_tag): " - (camel_folder_get_message): " - (camel_folder_get_uids): " - (camel_folder_free_uids): " - (camel_folder_get_summary): " - (camel_folder_search_by_expression): " - (camel_folder_free_summary): " - (camel_folder_search_free): " - (camel_folder_move_message_to): " - (camel_folder_copy_message_to): " - (copy_message_to): Dont call any of our own folder functions - directly, otherwise we will deadlock. - (move_message_to): Likewise. - - * camel-folder.h (CamelFolder): Added free_message_info() function - & deconstify get_message_info()'s return. - (CamelFolder): Add a private field (for locks). - (struct _CamelFolder): Moved changed_changed/frozen into private - data, since it really is private and now needs locked access. - -2000-12-15 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-utils.c (header_fold): When checking to see if we - need to fold the header, when we come accross a \n, make sure to - start at p + 1 the next time through the loop or else we get into - an infinite loop. - -2000-12-13 Dan Winship <danw@helixcode.com> - - * Namespace cleanup: change a bunch of IS_CAMEL_* macros to - CAMEL_IS_* - -2000-12-13 Chris Toshok <toshok@helixcode.com> - - * providers/imap/camel-imap-auth.c: add #include <sys/types.h> for - freebsd. - -2000-12-12 Christopher James Lahey <clahey@helixcode.com> - - * camel-folder-summary.c, camel-folder-summary.h: Added #ifndef - NO_WARNINGS around a #warning. Added (void) to the prototype and - declaration of camel_message_info_new. - - * camel-mime-message.h: Added an include for - camel-mime-filter-bestenc.h. Added a prototype for - camel_mime_message_set_best_encoding. Reformatted prototypes to - line up. - - * camel-mime-parser.c: Added #if d(!)0 around the states string - lookup table since it's only used in debugging output. - - * camel-seekable-substream.c (stream_flush): Added a cast. - - * providers/imap/camel-imap-auth.c: Added #include <netinet/in.h>. - - * providers/imap/camel-imap-folder.c (imap_refresh_info): Made uid - and flags const to fix warnings here. - - * providers/imap/camel-imap-store.c (get_folder_info): Made p - const to fix warnings here. - -2000-12-12 Dan Winship <danw@helixcode.com> - - * tests/lib/Makefile.am: Add missing .h file. (From campd.) - -2000-12-11 Not Zed <NotZed@HelixCode.com> - - * providers/smtp/camel-smtp-transport.c (smtp_data): Remove use of - linewrap filter. Headers are now wrapped. encode_8bit already - enforces a 998 octet line limit. - (smtp_data): Also fixed a memleak, we always have to unref our own - copy of the filters. We also dont need to remove them manually, - so dont bother. The type's an int too ... - - * camel-internet-address.c (internet_unformat): When scanning past - quotes, remove them also. - (camel_internet_address_format_address): If the name contains "'s, - or ','s then strip and quotes and wrap the whole lot in one set of - quotes. - - * Makefile.am (noinst_HEADERS): We dont want to install - camel-charset-map-private.h, ever. There are probably other - similar files ..? - - * camel-mime-part.c (write_to_stream): Fold header lines - appropriately as we're writing them out. - - * camel-mime-utils.c (header_fold): Add a new argument, headerlen, - tells it how long the associated header token is. - (header_fold): Also,k check to see if we need to fold first, using - a better algorithm, and also accept already-folded lines, and - re-process accordingly. - (rfc2047_decode_word): Add a little buffer space to iconv output - for shifting overheads? - (rfc2047_decode_word): finish the iconv with a null call, to flush - shift state, etc. - (rfc2047_encode_word): Attempt to break up long words into - appropriately sized, independent, chunks. See rfc2047, section 2. - (header_decode_mailbox): Dont add in extra spaces into the output - if we are decoding adjacent encoded words. We can only guess this - case, as some broken mailers put encoded words inside quoted - words. - (header_encode_phrase): Dont merge words if they are going to end - up too long. Also change back ot only merge consecutive words of - the same type. e.g. 'foo. blah fum.' -> "foo." blah "fum." or - 'iam an. idiot' -> iam "an." idiot - - * camel-medium.c (camel_medium_set_header): Hrm, we actually want - to call set_header, not add_header here, probably explains some - duplicate X-Evolution headers i was trying to track down. Also - changed the api to handle a NULL value == remove the header. - - * providers/local/camel-maildir-summary.c - (maildir_summary_decode_x_evolution): Always return error, we dont - use x-evolution for maildir. - (maildir_summary_encode_x_evolution): Always return a NULL string, - likewise. - (maildir_summary_add): Hook in here, since the _new function - doesn't have access to any flags from the caller. If we have - flags, then update the filename again. Not ideal, but should - work. - -2000-12-08 JP Rosevear <jpr@helixcode.com> - - * tests/message/Makefile.am: Remove test3 from build until the files - show up - -2000-12-09 Not Zed <NotZed@HelixCode.com> - - * camel-mime-message.c (camel_mime_message_set_date): Change the - sign of the default date offset when none is supplied. - (camel_mime_message_set_date): Also do dst if its dst (forward 1 - hour). Fixes #928 + some. - -2000-12-06 Not Zed <NotZed@HelixCode.com> - - * tests/lib/camel-test.h (check): Change line no format so that - emacs can detect it. - -2000-12-06 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_refresh_info): We want - to bitwise-or the server and cached flags here so that we keep the - flags that we have set locally and set any additional flags that a - parallel connection may have set. - -2000-12-05 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c (smtp_data): If the data - wrapper fails to be written to the stream, unref it and the - filters before returning. - -2000-12-05 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_message): use - BODY.PEEK[] rather than RFC822, so the message doesn't get marked - as \Seen. - (imap_refresh_info): Fix a really really really dumb bug. - -2000-12-05 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_set_message_flags): Fix - the check for "flags aren't actually changing". - - * providers/local/camel-local-folder.c (local_set_message_flags, - local_set_message_user_flag, local_set_message_user_tag): Don't - emit message_changed unless the flags actually changed. - - * providers/nntp/camel-nntp-folder.c - (nntp_folder_set_message_flags): Don't emit message_changed unless - the flags actually changed. Fix the check for marked as seen. - -2000-12-05 Not Zed <NotZed@HelixCode.com> - - * camel-seekable-substream.c (stream_flush): stream_flush does - make sense for a substream afterall (if you have a stream_write). - (stream_write): Implement this. - (stream_seek): Change the STREAM_END behaviour to be more sane. - if bounded go from the end of the bound, if unbounded, go from the - end of the parent stream. - - * camel-stream-mem.c (stream_read): Dont return error if reading - past the end of data, just return 0. - - * camel-stream-fs.c (camel_stream_fs_init): Initialise the stream - to be unbound. - (stream_seek): Fix the logic when seeking from the end of an - unbounded stream. - (camel_stream_fs_new_with_fd): If the fd is invalid (-1), then - return NULL immediately. - (stream_seek): Range check a SEEK_END so it fits within - bound_start. - -2000-12-01 Not Zed <NotZed@HelixCode.com> - - * tests/lib/folders.c (test_folder_basic): New test to perform - basic store operations on folders (taken from folders/test1). - (test_folder_message_ops): Tkane the guts out of folders/test2. - -2000-12-04 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c (smtp_connect): i18n-ize - exception strings. - (get_name): And here. - (_send_to): Here too. - (smtp_helo): And here and there... - (smtp_mail): And around the square... - (smtp_rcpt): Saying catch me if you can... - (smtp_data): And here three. - (smtp_rset): And here. - (smtp_quit): And finally here. - -2000-12-01 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-folder-search.h: Added system_flag to CamelFolderSearchClass - - * camel-folder-summary.c (camel_system_flag_get): Convenience - function to return whether or not a flag is set using a string as - the flag name. - (camel_system_flag): Return the integer value of the flag string. - - * camel-folder-search.c (search_system_flag): New ESExp callback - for allowing vfoldering on CamelMessageInfo flags. - -2000-12-01 Dan Winship <danw@helixcode.com> - - * camel-service.c (camel_service_disconnect): Don't - g_return_if_fail if the service is already disconnected. Just - return. - - * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): - Return FALSE (don't try again) if we get CAMEL_POP3_FAIL. - (pop3_connect): If we don't succeed, disconnect. - -2000-11-30 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c - (parse_list_response_as_folder_info): Fix a possible bug where - 'name' could be uninitialized. - - * camel-folder-summary.c (camel_message_info_new): New convenience - function, doesn't do much but it sure makes code cleaner to read. - (camel_message_info_new_from_header): This one makes my life heaven. - -2000-11-30 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-summary.c (camel_imap_summary_new): - Handle the case where the summary failed to load - clear the - summary and then set the dirty bit so that it is sure to save - later. Is this the right fix? - -2000-11-30 Dan Winship <danw@helixcode.com> - - * camel-exception.c (camel_exception_setv): Remove unused - variable. - -2000-11-30 Not Zed <NotZed@HelixCode.com> - - * providers/local/camel-mbox-folder.c (mbox_get_message): Remove - assertion that content is there, when it no longer can be. - - * camel-folder-summary.h: Removed pos/bodypos/endpos from - camelmeessagecontentinfo. - (CamelMessageFlags): Added an attachments flag. - - * providers/local/camel-local-summary.h: Added load virtual - function. - - * tests/lib/folders.c (test_message_info): Accessors. - (test_folder_message): " - - * camel-folder-thread.c (get_root_subject): Fix accessors. - (dump_tree_rec): " - - * camel-folder-search.c (camel_folder_search_execute_expression): - Accessors for messageinfo. - (search_match_all): " - (search_header_contains): " - (search_header_contains): " - (search_body_contains): " - (camel_folder_search_execute_expression): Use mepool_strdup. - - * providers/local/camel-mbox-summary.c (summary_update): Accessors - for messageinfo. - (mbox_summary_sync_full): " - - * providers/local/camel-mh-summary.c (remove_summary): Accessors - for messageinfo. - (mh_summary_check): " - (mh_summary_sync_message): " - (mh_summary_sync): " - - * providers/local/camel-mh-folder.c (mh_append_message): Use - accessor for uid. - - * providers/local/camel-local-summary.c - (local_summary_decode_x_evolution): Use accessor to uid. - (local_summary_encode_x_evolution): Likewise. - (message_info_new): And here. - (camel_local_summary_load): Call virtual load function. - (local_summary_load): Default load function, load summary. - (camel_local_summary_load): Check file exists before trying to - load. - (camel_local_summary_construct): Turn off building content info! - (CAMEL_LOCAL_SUMMARY_VERSION): Bump, since we dont build content - info anymore. - (camel_local_summary_load): After a successful load/check, do a - save too so we dont have to go through it again randomly. - - * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): Use - accessors for messageinfo. - - * providers/nntp/camel-nntp-folder.c (nntp_folder_get_uids): Use - accessors for uid. - - * providers/imap/camel-imap-folder.c (imap_refresh_info): Use - accessor for uid. - (imap_sync): Likewise. - (imap_get_uids): Likewise. - (imap_update_summary): And here. - - * providers/vee/camel-vee-folder.c (vfolder_remove_match): Use - accessor for uid. - (vfolder_add_match): Handle estrv stuff. - (vfolder_change_match): Accessor for uid. - (get_real_message): " - (vee_get_uids): " - (vee_folder_build): " + estrv. - (vee_folder_build_folder): " - - * providers/local/camel-maildir-folder.c (maildir_append_message): - Use acccessors for uid's. - (maildir_get_message): Here too. - - * providers/local/camel-maildir-summary.c - (camel_maildir_summary_init): Setup the string count for us. - (message_info_new): Access the string array directly. - (message_info_free): No need to free string if using array. - (camel_maildir_summary_info_to_name): Use accessor to get to uid. - (remove_summary): And here. - (maildir_summary_check): Likewise. - (maildir_summary_sync): And here. - (maildir_summary_load): Load up a cache of uid->filename mappings - before loading the actual summary file. This saves us having to - waste the diskspace storing the filenames in the summary itself, - and also helps us sync the summary better on load. - (message_info_load): If we have the load_map setup, and the uid - exists, then set the filename cache from it, and update the flags - from the name, incase our summary mismatches it. - - * camel-folder-summary.c (camel_folder_summary_init): Setup string - count for compressed info record. An optional compile mode which - stores all strings for a given messageinfo into a packed array, - which should save 36-50 bytes/record. - (camel_folder_summary_info_new): Init the string array. - (message_info_new): Set the string array items, as required. - (message_info_load): And here too. - (message_info_save): Use accessors to get to strings. - (message_info_free): Free strings as one. - (camel_message_info_dup_to): Handle packed array case. - (camel_folder_summary_add): Use accessors. And pack the strv - before storing it. - (summary_assign_uid): New function to assign a unique uid to a - message, if it doesn't have one. - (camel_folder_summary_add): Call assign_uid instead of doing it - ourselves. - (camel_folder_summary_info_new_from_parser): " - (camel_folder_summary_info_new_from_message): " - (camel_folder_summary_encode_string): constify. - (camel_folder_summary_encode_token): " - (summary_build_content_info_message): Fix accessors to messageinfo. - (CAMEL_FOLDER_SUMMARY_VERSION): Bumped, for removal of - contentinfo->pos data. - (camel_folder_summary_info_new_from_parser): Calculate the size - based on the parser position, not the removed contentinfo stuff. - (camel_folder_summary_info_new_from_message): Remove size stuff. - (camel_folder_summary_offset_content): Removed, no longer means anything. - (content_info_new): - (content_info_load): - (content_info_save): - (summary_build_content_info): Remove stuff for contentinfo->pos*. - (summary_build_content_info): Take a msginfo argument, set - attachments flag if we find any attachments. - (summary_build_content_info_message): set attachments flag if we - find any attachments. - (camel_folder_summary_info_new_from_parser): Always scan the - content info, even if we dont save it. - (camel_folder_summary_info_new_from_message): And here too. - (summary_build_content_info): Only create the contentinfo stuff if - we have it turned on, otherwise just parse and discard. - (summary_build_content_info_message): Likewise. - -2000-11-29 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-store.c (camel_store_get_folder): Updated the gtk-doc - comment. - -2000-11-29 Dan Winship <danw@helixcode.com> - - * camel-mime-utils.c: - * camel-mime-filter-charset.c: Use iconv instead of unicode_iconv. - - * providers/imap/camel-imap-command.c (imap_read_untagged): Fix - some off-by-one-ness. - - * camel-stream-buffer.c (stream_read): Fix another bug found in - previously-unused code here. - -2000-11-29 Ettore Perazzoli <ettore@helixcode.com> - - * tests/lib/Makefile.am (INCLUDES): `$(top_srcdir)' for builddir - != srcdir compilation. - -2000-11-29 Not Zed <NotZed@HelixCode.com> - - * tests/message/test2.c (main): Add a missed unref. - - * camel-stream-mem.c (camel_stream_mem_set_buffer): We must set - ourselves as the owner of the byte-array. - Weird, someone has modified this file (its been reindented), but i - can't see any changelogs ... - - * tests/lib/messages.c (content_finalise): Fix memleak in tester, - free byte array when our content object is deleted. - - * camel-folder-search.c (camel_folder_search_finalize): Yeah - great, so the sexp is a gtk object, not a camel object. Isn't - that going to be fun to fix? - - * camel-session.c (camel_session_finalise): Free the storage path. - - * providers/local/camel-local-store.c (camel_local_store_init): If - store->folders is setup, free it first, then overwrite. Hmm, - this seems a bit crappy to me. - - * camel-store.c (camel_store_init): Dont setup store->folders if - its already setup. - - * camel-exception.c (camel_exception_setv): Removed a memleak. no - need to strdup after a strdup_printf!!! - - * camel-address.c (camel_address_finalize): Free the address - ptrarray, once finished. - - * providers/local/camel-local-folder.c (local_finalize): Make sure - we dont leave the folder locked on close. - (local_finalize): Free summary/search. - - * providers/local/camel-mh-summary.c (mh_summary_next_uid_string): - Small memleak, always free name after using it. - - * camel-mime-part.c (set_content_object): Free txt after setting - the header. - - * providers/local/camel-maildir-summary.c (maildir_summary_check): - Fix a memleak, close the dir after scanning new. - (message_info_free): Added so we can free the filename cached in - the messageinfo. - (camel_maildir_summary_finalise): Free the hostname. - - * tests/folder/test[12].c (main): Clear out camel-test before - starting. - - * providers/local/camel-mbox-summary.c (mbox_summary_sync_quick): - Because encode_x_evolution folds the line (sigh, because - encode_param does, unlike every other function in - camel-mime-utils), unfold the encoded result before comparing. - (mbox_summary_sync_quick): Another small memleak, free xevnew once - finished with it. - - * camel-mime-utils.c (header_decode_quoted_string): Removed a - redundant check for c=0. - (header_unfold): New function to un-fold headers. - - * providers/local/camel-local-summary.c - (local_summary_encode_x_evolution): some problems with encoding - tags, using the wrong output strings. - (local_summary_encode_x_evolution): We dont need to append a ; - either, param_list_format_append() will do it for us. - -2000-11-28 JP Rosevear <jpr@helixcode.com> - - * camel-lock.c: No longer hard code the enabled lock types - -2000-11-28 Dan Winship <danw@helixcode.com> - - * camel-remote-store.c (remote_recv_line): Don't set exception to - g_strerror (errno) when nread == 0, because it won't have been - set. - - * providers/pop3/camel-pop3-folder.c (pop3_finalize): Don't try to - free things if they haven't been set yet. - -2000-11-28 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c (smtp_connect): Clear the - exception if EHLO fails before trying HELO in the cases where the - SMTP provider doesn't announce its ESMTPness. - -2000-11-28 Not Zed <NotZed@HelixCode.com> - - * providers/local/camel-maildir-summary.c - (camel_maildir_summary_init): Set the info size's properly, oops! - - * tests/lib/folders.[ch]: Folder testing helpers. - - * tests/folder/test2.c: Test basic message ops on folders. - - * tests/folder/test1.c (main): Test basic folder ops on (local) - stores. - - * providers/local/camel-local-provider.c - (camel_provider_module_init): Removed some debug. - - * providers/local/camel-maildir-folder.c - (camel_maildir_folder_class_init): fix parent class. - - * providers/local/camel-mh-folder.c (camel_mh_folder_class_init): - Fix parent class (damn cut & paste). - - * providers/local/camel-maildir-store.c (get_folder): Call parent - impl. - (camel_maildir_store_class_init): Fix parent class setup. - (delete_folder): Check the folder exists before trying to delete - it. - (delete_folder): Try and make the delete operation atomic/rollback - failures. e.g. if one directory isn't empty, then create the - other empty ones back. Also clear the tmp directory fully first. - - * providers/local/camel-mbox-store.c (get_folder): Call parent - impl. - (camel_mbox_store_class_init): parent class is camel_local_store, - not camel_folder, oops. - (delete_folder): Return an error if it doesn't exist, rather than - covering it up. - - * providers/local/camel-mh-store.c (get_folder): Call parent impl. - (camel_mh_store_class_init): fix parent class setup. - (delete_folder): Error if it doesn't exist now. - - * camel-folder.c (camel_folder_move_message_to): - (camel_folder_copy_message_to): Added warnings as these functions - are going to be removed later. - - * camel-store.c (camel_store_get_root_folder): Fix for an early - api change. We want CAMEL_STORE_FOLDER_CREATE, not TRUE, since - its a flag. - (camel_store_get_default_folder): And here too. - - * providers/local/camel-local-store.c (xrename): Handle renaming - folders differently to renaming files. - (get_default_folder_name): local stores dont have a default - folder, so make it so. Or at least, it doesn't seem to make sense - to have one. - (get_root_folder_name): Same for root. - (get_folder): Added parent implementation, that makes sure the - service path exists, if we are creating a new folder (but doesn't - create the folder). - -2000-11-27 Not Zed <NotZed@HelixCode.com> - - * providers/local/camel-local-store.c (xrename): Fixed races. Use - link/unlink, rather than rename, to properly detect overwriting - another file. And allow some files to be missing. - -2000-11-28 Radek Doulik <rodo@helixcode.com> - - * providers/local/camel-local-summary.c - (local_summary_decode_x_evolution): add scan = scan->next; to - avoid infinite loop - -2000-11-27 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-command.c (imap_read_untagged): Make - this gratuitously more complicated. No wait, I mean, fix bugs. Now - fully handles NULs in the data stream (which "can't happen" but - do) and also handles responses containing multiple literals. Also - does less copying than the original code. - - * camel-stream-buffer.c (stream_read): Fix a bug that could make - it lose sync and/or overrun buffers. - -2000-11-27 JP Rosevear <jpr@helixcode.com> - - * providers/local/.cvsignore: shush - -2000-11-27 Not Zed <NotZed@HelixCode.com> - - * providers/Makefile.am: Removed mh, mbox, added local, to the default. - -2000-11-24 Not Zed <NotZed@HelixCode.com> - - * tests/data/getaddr.pl: little util to scan mailboxes for any and - every address they contain. - - * tests/message/test2.c (main): Added a bunch of stuff to test - decoding/reencoding/etc of internationalised addresses. - - * tests/message/lib/address-data.h: Copy of some unicode/other - testing data. **Beware** of editing this file in emacs, it'll - probably try and convert all the characters to something - unusable. - - * tests/lib/camel-test.c (camel_test_break): Add a debugger hook - point. - - * camel-mime-utils.c (quoted_encode): Check for space and convert - to _ separately. - (header_decode_mailbox): Fixed the 'check comments for realname' - code, problem was the domain getting code was skipping all - whitespace/comments before we could get a look-in. This is - approximate but fairly robust. - (header_decode_text): Dont use the c-type isspace func here, we - want a specific whitespace only. - (header_decode_text): If we have decoded words next to each other, - do not insert whitespaces between them, which is what rfc2047 requires. - (header_decode_text): Make c unsigned too. - - * tests/README: Added at least some explanation of all this stuff. - - * tests/lib/camel-test.h (check_msg): Added a non-gcc version of - the fail command, we dont get the expression that failed, but no - matter. Should be (more) portable now. - (check, check_msg): Put the file/lineno in the default message. - - * Makefile.am (SUBDIRS): Add tests. - - * camel-mime-filter-basic.c (filter): Well, I'll add the extra - bytes here too, lathough not strictly needed, might save a - re-malloc when we get to complete(). - - * camel-mime-filter-charset.c (filter): Make sure we have room if - we only convert very short data. - (complete): and here too. - - * tests/Makefile.am: Initial test harness & tests. Requires gcc - for this. - - * camel-internet-address.c (d): Turn off debug. - - * camel-charset-map.c (camel_charset_step): Oops, & masks for set - intersection, not | them. Dunno how this got even close to - working. - -2000-11-23 Not Zed <NotZed@HelixCode.com> - - * camel-mime-filter-basic.c (filter): For base64 encoding, the - output size for 0, 1, or 2 bytes of input can exceed input*2, so - make sure we account for that as well. - (complete): And here. - (complete): Similarly for qp encoding, if we have a trailing - space, we need some extra bytes (not needed for 'filter()', as any - such bytes are stored in state/save). - - * camel-mime-utils.c (quoted_decode_step): Removed fixme not required. - (quoted_encode_close): Dont append a trailing afterall. Otherwise - a pass through the encode/decode will grow the message each time. - -2000-11-22 Radek Doulik <rodo@helixcode.com> - - * camel-mime-utils.c (header_msgid_generate): check for return - values - -2000-11-21 Dan Winship <danw@helixcode.com> - - * camel-lock.c: - * camel-movemail.c: add #ifdef HAVE_ALLOCA_H - -2000-11-21 Not Zed <NotZed@HelixCode.com> - - * providers/local/camel-mh-summary.c (mh_summary_sync_message): - Shite, -1 on error, >=0 on success. So i've just been truncating - all the messages I touched, good one zed. - (mh_summary_sync_message): Sigh, and write to the right damn fd as - well. - (mh_summary_sync_message): Argh, and we need to compare the length - of the old xev -1 to the new xev, to check if we can optimise it. - - * camel-folder.c (camel_folder_change_info_new): Init the pool. - (camel_folder_change_info_add_source): Allocate string in the - pool. - (camel_folder_change_info_add_source_list): - (camel_folder_change_info_add_update): No longer free the key, as - it cannot be yet. - (change_info_add_uid): Add a new arg, copy, telling it whether to - copy the uid argument or not, and copy using mempool_strdup. - (change_info_cat): Tell add_uid to copy the string. - (camel_folder_change_info_add_update): Call add_uid directly. - (change_info_remove): Call add_uid directly, with no copy, and - dont free the key. - (change_info_free_update): No longer required since we dont malloc - the keys. - (camel_folder_change_info_add_uid): Fix for add_uid change. - (camel_folder_change_info_remove_uid): - (camel_folder_change_info_change_uid): - (change_info_clear): No longer needed, just set the size to 0 on - the array directly. - (camel_folder_change_info_clear): Empty the arrays directly, and - flush the mempool too, and also clear uid_source, incase anyone - was silly enough to call us in the wrong order. - (camel_folder_change_info_free): Dont bother clearing the array's - contents, just free the pool and throw away all the indexes. - - * camel-folder.h: Added a mempool to CamelFolderChangeInfo to - store the uid's we get. - - * camel-folder-search.c (search_match_all): If we are only - matching a single info, just use that/do the search. - (camel_folder_search_match_expression): New function. Matches a - single message info against an expression. - (camel_folder_search_init): Init a hash table used to map the - returned gptrarrays' to mempools. - (camel_folder_search_execute_expression): Store all of the string - data in a mempool, slightly faster, less wasted space (usually),. - (camel_folder_search_free_result): Check for the mempool that - stores the data for the list, and free that if we have it, - otherwise assume we need to use g_free() (which should only happen - if the list is empty at the moment). - : commented out the debugging prints. Got sick of 'executing - header search' crap. - - * providers/vee/camel-vee-folder.c (camel_vee_folder_init): Init - changes. - (camel_vee_folder_finalise): Free changes. - (vfolder_add_match): Simple helper to add a new matching info - record. - (camel_vee_folder_add_folder): Only trigger a changed event if we - have changes. - (vfolder_change_match): New function, changes our local vfolder - info to match the source. - (vfolder_add_match): Add a new info to the vfolder list. - (vfolder_remove_match): Remove a no-longer matching info from the - vfolder summary. - (message_changed): check if the message still matches, and - remove/etc as required. - (camel_vee_folder_finalise, init): init/free search object. - (vee_folder_build_folder): Build the changes to the folder into - the changes data, as we go. - (folder_changed): If the folder gave us an explicit list of - changes, then process each one separately (unless there's a lot - added/changed). - - * providers/vee/camel-vee-folder.h: Added a changes field to the - folder. - - * Makefile.am (libcamel_la_SOURCES): Added - camel-folder-thread.[ch]. - - * camel-folder-thread.c: message-threading algorithm, taken from - evolutions' mail component, as it is generally more useful than - just for evolution itself. Changed to use e-memchunks as well to - speed it up a little and use less mem. - -2000-11-20 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-remote-store.c (remote_recv_line): Fixed to return the - correct bytecount in all cases which is the real fix to - imap_parse_nstring. - - * providers/imap/camel-imap-command.c (imap_read_untagged): Again, - don't use strlen for the post-data, use 'n'. - - * providers/imap/camel-imap-utils.c (imap_parse_nstring): Undo my - previous temp-fix. - -2000-11-20 Not Zed <NotZed@HelixCode.com> - - * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): Fixes for - the summary messageid changes. Hash the messageid and store it. - (get_XOVER_headers): Use camel_folder_summary_info_new() to create - the summary item before adding it. - - * camel-folder-summary.h (CamelMessageInfo): Changed the - messgae-id to be an 8 byte md5 hash, and the references list to be - an array of these. - - * providers/local/camel-mh-summary.c (mh_summary_sync_message): - New function, sync out the message info stuff. Only updates the - X-Ev header if it can get away with it, otherwise writes out a - whole new message. - (mh_summary_sync): Added more functionality. All summary info is - now written to the X-Ev header, etc, and new messages re-written - if required during the sync process. - - * providers/local/camel-local-folder.c - (local_set_message_user_flag): Set the XEVCHANGE flag. - (local_set_message_user_tag): And here too. - - * providers/local/camel-local-summary.h: New flag - CAMEL_MESSAGE_FOLDER_XEVCHANGE to indicate the XEV header has - probably changed size and needs to be rewritten in whole. - - * camel-folder-summary.c (next_uid_string): Want this static, not - const. - (message_info_new): Store the references and message-id values as - 64 bit, binary hashes. - (message_info_load): fix for message-id/references changes. - (message_info_save): Likewise. - (camel_message_info_dup_to): And here. - (camel_message_info_free): And here too. No longer free - message_id, and simple free for references array. - (CAMEL_FOLDER_SUMMARY_VERSION): Bumped file revision. - (camel_folder_summary_init): Init memchunk allocators to empty. - (camel_folder_summary_finalize): Free memchunk allocators if - there. - (message_info_new): Use the chunk allocator to allocate message - info's. - (camel_folder_summary_info_new): New helper to allocate the - message info, and setup the memchunk if required. - (content_info_alloc): Likewise for content info's. - (message_info_load): Use summary_info_new_empty. - (content_info_new): Use content_info_alloc. - (content_info_load): " - (content_info_free): Free the content info as a memchunk. - (message_info_free): Free everything directly and the base as a - memchunk, rather than calling camel_message_info_free(), which - assumes a malloc'd array. - - * providers/local/camel-local-summary.c: Include ctype.h, kill a - warning. - (local_summary_decode_x_evolution): If we get a NULL message info, - then dont try and set anything, just check for validity. - (camel_local_summary_write_headers): New function to write a set - of headers to an fd. - (camel_local_summary_check): Added some statistic generation - stuff for memory profiling. - - * providers/local/camel-mbox-summary.c (header_write): Changed to - use stdoi functions to write out the header to a buffered stream, - instead of using writev, which is apparently slow (and writing - each line separately is slow anyway). - (mbox_summary_sync_full): New implementation. Does things - differently, doesn't use or require the content info stuff. - (summary_rebuild): Dont return an error if we start scanning at - the end of file. - (mbox_summary_sync_full): If we are not writing out new headers, - make sure we copy the From line as we go, and update frompos - appropriately. - (mbox_summary_sync_full): Always copy the From line from the - existing one, rather than trying to make one up ourselves. - (mbox_summary_sync): If we can get by with a quick-sync, then try - it, if that fails, then try a full sync anyway. - (mbox_summary_sync_quick): Quick sync. Only update system flags, - etc. - (mbox_summary_sync_full): Use the proper local summary encode_xev - function. - (header_evolution_decode): Removed, no longer needed. - (header_evolution_encode): Same. - (copy_block): No longer needed, removed. - (header_write): Removed, replaced with - camel_local_summary_write_headers. - (mbox_summary_sync_full): Fixed for header_write change. - - * camel-mime-parser.c (folder_scan_step): Implement the new - optional parser state HSCAN_PRE_FROM, that returns the (currently - unfiltered) input data. - (folder_scan_drop_step): Do the right thing for the PRE_FROM - state. - (camel_mime_parser_scan_from): Update the doco. - (camel_mime_parser_scan_pre_from): Ok, make this behaviour - optional, it simplifies a lot of loops that dont otherwise need to - know about it. - (folder_scan_step): Made the PRE_FROM state optional. - (struct _header_scan_state): Made the bool vars 1 bit. - (folder_pull_part): Free the from_line buffer if it is there. - (folder_scan_skip_line): Added a new arg, can save the skpped data - to a byte_array, as we go. - (folder_scan_step): Fixed calls to skip_line approrpiately. Now - we save the from line as we parse it. - (camel_mime_parser_read): New function to read from the mime - parser buffer directly. Useful if you use the parser to read the - first/some headers, then need to scan the rest of the data, - without needing to use a seek(), or allocate your own buffers. - - * camel-mime-parser.h (struct _header_state): Added a new parser state, - pre-from which returns any data found before a from line during - parsing (all other data can be retrieved by the caller except - this). - -2000-11-17 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-utils.c (imap_parse_nstring): When - extracting a literal string, capture up until the end of the last - line - this we we don't lose any data if the byte count is off. - - * providers/imap/camel-imap-command.c (imap_read_untagged): Use - the byte-read count to decrement the number of bytes left to read - rather than using strlen. Not only does this protect against a DoS - (embedded NUL chars in the literal string would make strlen - inaccurate) but it also improves performace a little. - - * camel-remote-store.c (remote_recv_line): *Sigh* Return the - number of bytes read on success rather than 0. Also don't use - camel_stream_buffer_read_line since we can't get an accurate octet - count. - -2000-11-17 Not Zed <NotZed@HelixCode.com> - - * providers/local/camel-local-summary.c (local_summary_add): Clear - the NOXEV/FLAGGED bits, since we do have an xev header. um m, - maybe this is right, this assumes a write is following. Maybe - this should be done in folder::append() instead ... - - * camel-stream-buffer.c (camel_stream_buffer_gets): We should - always terminate the string. No need to check outptr is in range, - its already been checked. - - * providers/local/camel-mbox-summary.c (mbox_summary_sync): When - we update the summary, do it from mbox_summary->folder_size, not - the content info endpos (which isn't any good anymore anyway). - - * providers/local/camel-mbox-folder.c (mbox_append_message): Set - the frompos from the current folder size, since summary_add wont - have initialised it to anything useful. - -2000-11-16 Not Zed <NotZed@HelixCode.com> - - * providers/local/camel-local-summary.c - (local_summary_encode_x_evolution): Check the uid string is all - digits before trying to write a 'standard' x-ev header. - - * providers/local/camel-maildir-summary.c - (camel_maildir_summary_info_to_name): Convert an info into a - maildir name:info filename. - (camel_maildir_summary_name_to_info): Convert a name:info filename - into an info, and tell us if it didn't match it. - (message_info_new): When creating a new filename, gets its info - from the flags field. Likewise if creating from an existing file, - extract the flags. - (maildir_summary_sync): Remove a small memleak. Also, if our - flags and that requires a filename change, perform that here. - (message_info_new): Get the received date from the filename. - Also, dont overwirte the uid if we have one. - (maildir_summary_check): Sort the summary in received order before - completion. - (maildir_summary_next_uid_string): Test the name for collusions - before we give it out. Retry, and if that fails, well, I guess we - collide :( - - * providers/local/camel-mbox-folder.c (mbox_lock): Implement mbox - locking. - (mbox_unlock): And unlocking. - (mbox_append_message): Lock the folder for write before doing - anything. - (mbox_get_message): Lock the folder for read before doing - anything. - - * providers/local/camel-local-folder.c (camel_local_folder_lock): - Implement something here. We handle the recursive ability but - pass the locking to the folder itself. - (camel_local_folder_unlock): Likewise for unlocking. - (local_lock): Default - do nothing, return success. - (local_unlock): Same. - (local_sync): Changed slightly for locking api changes, and also, - only lock around the sync process itself. - - * camel-lock.c: New file - utility functions for locking using - different strategies and/or for locking folders safely. - - * Makefile.am (libcamel_la_SOURCES): Adde camel-lock.[ch] - -2000-11-15 Radek Doulik <rodo@helixcode.com> - - * camel-mime-utils.c: mime_guess_type_from_file_name moved back to - composer as it introduced unwanted VFS dependency - removed #include <libgnomevfs/gnome-vfs.h> - -2000-11-15 Not Zed <NotZed@HelixCode.com> - - * providers/Makefile.am: Removed local again, not quite ready. - -2000-11-14 Not Zed <NotZed@HelixCode.com> - - * camel-folder-summary.c (message_info_new_from_message): Use - message_info_new to create the summary from headers, instead of - getting directly from the message. - (format_recipients): No longer required. - - * providers/Makefile.am (SUBDIRS): Added local. - -2000-11-11 Not Zed <NotZed@HelixCode.com> - - * camel-mime-parser.c (folder_push_part): Make sure 'atleast' is - at least 1, always. This is possibly a temporary fix for a - bad failure mode on bad multipart messages. - (folder_scan_content): Go until inend, not inend+1. Changed the - continuation and retry logic to be simpler and more robust. If we - can't find a marker within - the atleast we need, just set it to 1, and try again, rather than - just going to the next smaller limit (boundary check checks the - length anyway). - (header_append): streamline the empty line case. And strip - trailing \r's if there are any (\n's already stripped). - (folder_scan_header): Reordered and cleaned up a lot. Check for - continuation only once, and compress lwsp then. Assume the header - buffer already has end of line's stripped, and simplify some things: - Only check for end of headers once and easier. - Dont check to remove end of line character - Dont bother testing inptr-start if we get a boundary match - it is - always zero. - (folder_scan_header): Removed the unused part variable, and a few - pointless assignments. - (folder_scan_header): Change the end limit to be 1 higher, to make - sure we get all content. - (folder_scan_content): And here too. - (folder_scan_header): Killed a warning. - (folder_push_part): Removed a bad comment. Actually - boundarylenfinal can be zero for a new message not in a - multipart. So we fix that here. - -2000-11-09 Not Zed <NotZed@HelixCode.com> - - * camel-mime-utils.c (header_decode_param_list): Renamed from - header_param_list_decode. - (header_param_list_decode): New external function to decode a - parameter list. - (header_param_list_format_append): Made public. - (header_param_list_format): Another new public helper function for - formatting just a param list. - - * camel-folder-summary.c (next_uid_string): Default implementation - is the same as before. - (camel_folder_summary_class_init): And set it up. - - * camel-folder-summary.h: Make next_uid_string a virtual function. - - * camel-folder.c (camel_folder_change_info_changed): New function - to return true if the changeset contains any changes. - -2000-11-14 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-stream.c (camel_stream_printf): Don't cast an int to a - ssize_t. - -2000-11-10 Dan Winship <danw@helixcode.com> - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_build_from): put a space before a single-digit - day of the month since it seems some mailers are fantastically - picky about this. (bugs.gnome.org #27232) - -2000-11-10 Radek Doulik <rodo@helixcode.com> - - * camel-mime-utils.c (header_msgid_generate): fix ids ending with '.' - -2000-11-09 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-auth.c (imap_try_kerberos_v4_auth): - Fix error handling. (Only send a "*" to bail out of authentication - if the server hasn't already bailed on us.) - -2000-11-08 Radek Doulik <rodo@helixcode.com> - - * camel-mime-utils.c (mime_guess_type_from_file_name): new - function, moved from composer - -2000-11-08 Not Zed <NotZed@HelixCode.com> - - * camel-mime-message.c (find_best_encoding): Keep track of the - caller bestenc flags that make sense. - - * camel-mime-filter-bestenc.c (filter): Added code to detect when - we have "^From " lines in the sequence of text. - (camel_mime_filter_bestenc_get_best_encoding): Added a new flag - CAMEL_BESTENC_NO_FROM: if set, it will not allow any lines - matching "^From " to appear in the output - currently forcing - base64 encoding to achieve this. - - * camel-mime-parser.c (folder_scan_step): Call - camel_mime-filter_complete() once we're done, rather than - filter_filter(). - (folder_scan_content): Some fixes for state changing; so that when - we do find another boundary it is properly flagged. Since we - strip the last \n off all data, we must take that into account - too. Sigh. Fixes a rather nasty set of bugs where multipart - messages could start including following messages as parts, etc. - (struct _header_scan_stack): Added new parameter, - boundarylenfinal, which holds the length of the final boundary, if - it is different (e.g. for From lines, whihc aren't) - (folder_scan_step): Setup teh boundarylenfinal value when creating - a new boundary. - (folder_scan_content): Hmm, if we hit the end-of-buffer sentinal, - reset the scanner back to leave 'atleast' chars in the buffer - still, dump that content, and retry again. Stops us losing a - check for a boundary on some data we haven't really looked at yet! - (folder_scan_content): Use boundarylenfinal to calculate - 'atleast'. - (folder_scan_header): And here too. - (folder_boundary_check): Use the atleast value directly, dont - truncate it. Use the boundarylen/boundarylenfinal values directly - too. - (struct _header_scan_stack): Add an atleast parameter to cache the - atleast info. - (folder_push_part): Determine/set 'atleast', every time we add a - new part. - (folder_scan_header): Get the cached atleast info from the current - part. - (folder_scan_content): And here too. - (folder_scan_header): Fix a problem where a part starting with - " text" would be interpreted as a followon header wrongly. - - * camel-mime-filter-charset.c (complete): Add some assertions to - find a bug. - -2000-11-07 Ettore Perazzoli <ettore@helixcode.com> - - * camel-service.c (get_name): Strdup the "???" string you return, - so that the expected semantics for `::get_name()' is respected. - -2000-11-07 Dan Winship <danw@helixcode.com> - - * camel-stream-filter.c (d): Kill debugging, as it causes lots of - evolution-mail spewage. - -2000-11-07 Not Zed <NotZed@HelixCode.com> - - * camel-mime-filter-bestenc.c (complete): Implement a complete() - function, now we need one. - (filter): Upgraded to match rfrc2045 properly. Checks also for - length of line and valid CRLF sequences. - (camel_mime_filter_bestenc_get_best_encoding): Do the work of - working out what is the best encoding given what we found about - the stream. - - * camel-mime-part.c (camel_mime_part_encoding_to_string): Use a - lookup table to get the encoding naem, and add the binary type. - (camel_mime_part_encoding_from_string): Likewise for the reverse. - - * camel-mime-part.h: Added the binary encoding type, see rfc2045. - - * camel-mime-utils.c (header_param_list_format_append): Dont put a - space before ;'s in parameter lists, makes them more - readable/consistent. - - * camel-mime-message.c (multipart_has_8bit_parts): Cleaned up the - old stuff, well removed it. - (camel_mime_message_set_best_encoding): Added another argument - that lets you select what you want to set the best of. i.e. for - smtp transport we only need 7 bit, and dont need to optimise the - charset (although of course, we should always). - (find_best_encoding): Implement this feature, if we are not - getting the best charset, use the one we have. - (best_encoding): Set the charset on the part appropriately. Sigh, - the interfaces for this are nonexistant. - (find_best_encoding): Tell the bestenc filter that lf should be - treated as crlf for the purposes of determining encodings. - -2000-11-06 Not Zed <NotZed@HelixCode.com> - - * camel-charset-map.c (camel_charset_init): Init function for an - iterative charset determinator. - (camel_charset_step): Iterate another buffer. - (camel_charset_mask): Removed, since it couldn't have worked. - (camel_charset_best): Use the iterative interface to do the work. - (camel_charset_best_name): Get the best name for a charset so far. - - * camel-mime-filter-bestenc.c: New class, a stream - filter that can be used to memory-efficiently determine the best - encoding and/or charset to use for a given stream of bytes. - - * Makefile.am (libcamelinclude_HEADERS): Added stream-null*. - (libcamel_la_SOURCES): Added bestenc* - - * camel-stream-null.c: New class, a null-stream, that always - succeeds, and never has any contents. - - * camel-stream.c: Minor pointless changes. Was going to do - something else but changed my mind. Added trivial default - implementations for all callbacks. - - * camel-mime-message.h: Cleaned up some old cruft. - - * camel-folder-summary.c (camel_folder_summary_format_address): - address_list_format() no longer encodes, so we dont need to decode - it. - - * camel-address.c (camel_address_unformat): New function, attempts - to reverse the formatting process on display addresses. - (camel_address_length): New function to get the number of - addresses, without having to peek the structure. - - * camel-mime-message.c (camel_mime_message_set_from): Fix a typo. - (camel_mime_message_finalize): Only unref from/reply_to if we have - it. - (camel_mime_message_set_recipients): New function - set the - recipients as a CamelInternetAddress. This function effectively - deprecates the older recipient setting functions. - (camel_mime_message_add_recipient): What the hell, i'll bite the - bullet. Terminate this function. The old api was ambiguious and - inefficient and didn't work right anyway. - (camel_mime_message_remove_recipient_address): And this one. - (camel_mime_message_remove_recipient_name): And this one too. - (camel_mime_message_set_recipients): If we set an empty header, - then remove it from the header list. Allow a null receipient - object to clear a header. - (camel_mime_message_set_from): Likewise, if setting an empty from - address. - (camel_mime_message_encode_8bit_parts): Eeek!! - camel_stream_mem_new_with_byte_array owns the byte_array we give - it, so make sure we dont free any of it! - (camel_mime_message_encode_8bit_parts): Infact, i'll just rewrite - the whole lot, its a bit of a mess. Should really rename it and - make it a little more useful too, lets see ... - (best_encoding): This has a string interface? Oh boy. - (camel_mime_message_foreach_part): New experimental function to - iterate over all message parts. Might not remain. - (camel_mime_message_has_8bit_parts): New implementation using - foreach_part. Fixed a couple of problems. - (find_best_encoding): New function, that finds the best encoding - for a given part (will probably be moved to camel-mime-part), and - also the best charset to use if it is a text part. Since one - affects the other it is a two pass process, but uses streams and - not memory to achieve this. - (camel_mime_message_set_best_encoding): Uses the function above to - configure an entire message for the best encoding possible given - transport constraints. - (camel_mime_message_encode_8bit_parts): Reimplemented to use the - function above to perform the work. - - * camel-internet-address.c - (camel_internet_address_format_address): Dont put <> around a lone - address with no real name. - (camel_internet_address_encode_address): Similarly. - (internet_decode): Actually return the count of decoded addresses. - (internet_unformat): Implement the unformatting routine. - -2000-11-05 Not Zed <NotZed@HelixCode.com> - - * providers/smtp/camel-smtp-transport.c (_send_to): Changed to get - the internetaddress directly, rather than having to parse it - itself. - - * camel-address.c (camel_address_format): Added a new function - which will format address, suitable for display. - (camel_address_cat): Concatentate 1 camel address onto another. - It is upto the caller to ensure the addresses are of compatible - types. - (camel_address_new_clone): New function to create a new address by - copying an existing one of the same type. - (camel_address_copy): New helper function to copy an address. - - * camel-mime-message.h (struct _CamelMimeMessage): Removed cached - copy of date string. - (struct _CamelMimeMessage): Added date_received info. - - * camel-mime-message.c (camel_mime_message_get_date_string): - Removed. Nothing uses it anyway, and it is redundant. - (camel_mime_message_finalize): No more date_str. - (camel_mime_message_init): No more date_str, initialise - date_received* - (write_to_stream): Change the check for a date header. - (process_header): No longer track the date_str. - (camel_mime_message_get_received_date): Removed. totally invalid - anyway. - (camel_mime_message_get_sent_date): Removed. Redundant. The only - 'date' is the sent date, the received date is just made up. - (camel_mime_message_get_date): Args changed to be more consistent - with utility functions. - (camel_mime_message_get_date): Dont set the date when we're asked - for it (if its not set by the time its written, it'll be set - then). - (camel_mime_message_get_date_received): Actually do 'the right - thing' here, if we have a received header, use that to determine - the received date. And return the data in the same format as - get_date. - (camel_mime_message_set_from): Changed the api to better match - what we should be doing. Pass a camelinternetaddress, etc. - (camel_mime_message_set_reply_to): Cahnged similarly to take an - internetaddress. - (camel_mime_message_get_reply_to): Likewise. - (camel_mime_message_finalize): Unref the from/reply_to objects. - (format_address): Removed, no longer needed. - (process_header): Changed to store the from/reply_to as - internetaddress's. - (write_to_stream): Set the from header directly to empty, if we - dont have one. Maybe we should just abort, and/or create one - based on the current user. - - * camel-mime-utils.c (header_address_list_format): Renamed to - header_address_list_encode, which is what it is actually doing. - (header_address_list_format_append): Similarly. - (encoding_map[]): Removed, no longer used. - (header_address_list_encode_append): Take another arg, do we - encode the address (for internet), or not (for display - utf8 - only). - (header_address_list_format): Re-added this function, but now it - generates a display version only. Surprise surprise, that is all - anythign needs to generate anyway. Sigh. - - * camel-internet-address.c (camel_internet_address_get): Return - false if we get an invalid index only. - (camel_internet_address_encode_address): Helper function to encode - a single address for mailing. - (internet_encode): Use the above function to format it. - (camel_internet_address_format_address): Format a single address - for display. - (internet_format): Implement the display version. - (camel_internet_address_class_init): Init the internet_format - virtual function. - (internet_cat): Implement virtual function to concatenate - addresses. - - * camel-folder-summary.c - (camel_folder_summary_info_new_from_header): new function, only - build the summary info, dont add it. - (camel_folder_summary_info_new_from_parser): Likewise, for new - info from parser. - (camel_folder_summary_add_from_parser): Cahnged to call function - above to build info. - (camel_folder_summary_add_from_header): Changed to call function - above, to build info. - (camel_folder_summary_info_free): New function to free the summary - message info. - (camel_folder_summary_clear): Changed to clal above to free info. - (camel_folder_summary_remove): Likewise. - (camel_folder_summary_add): Cleaned up the clashing uid - re-assignment logic a little bit. - (camel_folder_summary_decode_uint32): Fixed a typo, 01 != -1. - (camel_folder_summary_decode_time_t): Return -1 on error. - (camel_folder_summary_encode_off_t): New function to encode an - off_t type. - (camel_folder_summary_decode_off_t): And likewise for the reverse. - (CAMEL_FOLDER_SUMMARY_VERSION): Bumped the summary version, since - we're now encoding time/off_t's right. - (summary_header_save): Use time_t encoder to save the timestamp. - (summary_header_load): Likewise for decoding the timestamp. - (content_info_load): Decode off_t types directly, now we can. - (content_info_save): And likewise for encoding. - (camel_folder_summary_add_from_message): New function, create a - summary item from an existing message and add it. - (camel_folder_summary_info_new_from_message): New function, create - a summary item from an existing message. - (summary_build_content_info_message): New function to do the dirty - work of building the conent info/indexing, from a message source. - (format_recipients): Format an internetaddress suitable for the - summary. - (message_info_new_from_message): Build a new summary item from a - mime message. - (content_info_new_from_message): Build a new conent info from a - mime part. - (camel_folder_summary_class_init): Init the new class functions. - (message_info_new_from_message): Fixed for message api change. - - Added documentation to the functions. - -2000-11-03 Radek Doulik <rodo@helixcode.com> - - * camel-mime-utils.c (header_msgid_generate): new function, - generates simple message/content id - -2000-11-04 Not Zed <NotZed@HelixCode.com> - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Set the - preface/postface from the parser into the multipart object. - - * camel-multipart.c (camel_multipart_set_postface): Function to - set the postface text on a multipart. - (camel_multipart_set_preface): Similarly for preface text. - - * camel-mime-parser.c (folder_scan_content): If we scan until a - boundary, then we do not include the \n that starts the boundary - line in the content. - (struct _header_scan_stack): Added a ByteArray to store the - multipart pre/post-text as we're scanning. - (folder_pull_part): Free pre/posttext if they are allocated. - (folder_scan_step): Build into the pre/posttext arrays as we - encounter data. - (camel_mime_parser_preface): REturn the multipart preface text, if - there is any scanned. - (camel_mime_parser_postface): Likewise for postface text. - (byte_array_to_string): helper function for above. - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): Change - the from line to be "\nFrom ..." always, so no need to - check/append a \n to messages. - (mbox_append_message): Open the output stream with append mode - [assuming this is more efficient than seeking to the end] - And dont prepend \n on the From line if its the first in the - mbox. - (mbox_append_message): Pass the offset of the real start of the - "From " line when we perform the update (which may != 'seek') - - * camel-mime-filter-charset.c (complete): Removed the terminating - NUL 'fix'. - - * camel-stream-filter.c (do_read): Added some debug. - (do_flush): And here. - (do_write): And here too. - (do_write): ARGH!!! ARGH! Ok, so the filter stream was writing a - different number of bytes than the requester was asking it to - write (because of filtering, of course!). So instead of returning - the true number of written bytes, we'll return what they asked us - to write - unless there is an error in which case we return -1. - - * camel-mime-utils.c (base64_encode_close): Sigh, forgot to make - it unsigned. I think this is actually a gcc bug as (48 >> 2) - somehow ended up negative, when it obviously should not, even if - the data load was signed. - -2000-11-03 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-url.c: Undo my incorrect fix - I misunderstood danw - - sorry! - -2000-11-03 Dan Winship <danw@helixcode.com> - - * providers/pop3/camel-pop3-store.c (camel_pop3_store_expunge): - Unbreak this. - -2000-11-03 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-url.c (camel_url_to_string): If show_pass, then base64 the - password before writing it to the output string. - (camel_url_new): Assume password has been base64 encoded and - decode accordingly. - -2000-11-03 Dan Winship <danw@helixcode.com> - - * camel-provider.h: Add an "url_flags" field to CamelProvider. - Move the CAMEL_SERVICE_URL_* defines here and remove the SERVICE_ - part of the name. - - * camel-service.h: Remove CAMEL_SERVICE_URL_* flags and - service->url_flags field. - - * camel-service.c (check_url, get_path): Get URL flags from - service->provider, update for changed flag names. - - * providers/*/camel-*-provider.c: Add URL flags to provider - structures. - - * providers/*/camel-*-{store,transport}.c, camel-remote-store.c: - Remove service->url_flags initialization. - -2000-11-02 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (get_folder_info): Quote - foldernames when sending to the IMAP server because the folder - name might contain spaces. - -2000-11-02 Not Zed <NotZed@HelixCode.com> - - * Merged in camel-incremental-branch. - -2000-11-01 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-store.c (get_folder_info): Remove old - subbed folders from hash table after freeing them. - - * providers/imap/camel-imap-folder.c (imap_get_full_name): Deal - correctly with namespace == "" - -2000-11-01 Gediminas Paulauskas <menesis@delfi.lt> - - * camel-charset-map.c, camel-charset-map-private.h: synced all charsets - with ones found in libunicode. Just include more "iso/*.h" and rebuild - ...private.h with this. - -2000-10-31 Dan Winship <danw@helixcode.com> - - * camel-service.c (service_disconnect): Add a new argument, clean, - that says whether or not to try to disconnect cleanly. - - * camel-remote-store.c (remote_send_string, remote_send_stream, - remote_recv_line): disconnect uncleanly on failure to prevent - infinite loops when providers would normally send commands from - disconnect(). Remove some unneeded CamelException goo. - - * providers/smtp/camel-smtp-transport.c (smtp_disconnect): - * providers/pop3/camel-pop3-store.c (pop3_disconnect): - * providers/nntp/camel-nntp-store.c (nntp_store_disconnect): - * providers/imap/camel-imap-store.c (imap_disconnect): Don't send - QUIT/LOGOUT if !clean. - -2000-10-30 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-auth.c: New file with code for IMAP - authentication mechanisms. (Currently just krb4, and without - integrity/privacy protection). - - * providers/imap/Makefile.am: Add camel-imap-auth.[ch] and krb4 - CFLAGS/LDFLAGS - - * providers/imap/camel-imap-store.c (connect_to_server): Split out - from imap_connect. Just does the basic connect and CAPABILITY - check. Redo the CAPABILITY code more robustly. - (query_auth_types_connected): Do this right rather than punting to - query_auth_types_generic. Check for KERBEROS_V4 if compiled with - krb4 support. - (query_auth_types_generic): Mention KERBEROS_V4 if compiled with - krb4 support. - (imap_connect): Use connect_to_server(). - - * camel-mime-utils.c (base64_encode_step, base64_encode_close): - Take an additional argument, "break_lines", saying whether or not - to add '\n's to the output. - - * camel-multipart.c (set_boundary): - * camel-mime-filter-basic.c (filter, complete): Update for base64 - api change. - -2000-10-30 Peter Williams <peterw@helixcode.com> - - * providers/imap/camel-imap-store.c (unsubscribe_folder): Correct - parameters to g_hash_table_lookup_extended. - -2000-10-29 Dan Winship <danw@helixcode.com> - - Improved IMAP namespace handling: leave the namespace in the - folder names rather than constantly prepending it and stripping it - off. Also some subscription fixes. - - * camel-store.c (camel_folder_info_build): Fix for the case where - @top isn't in @folders. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Add - a "short_name" argument rather than figuring it out ourselves. - (imap_get_full_name): Implementation of CamelFolder::get_full_name - that strips off namespace so the user doesn't have to see it. - (imap_append_message, imap_copy_message_to, imap_move_message_to): - Use folder->full_name rather than calling - camel_imap_store_get_folder_path. - - * providers/imap/camel-imap-utils.c (imap_parse_list_response): - Update this: make @flags a bitmask and @sep a char rather than a - string. Make all of the out arguments optional. Handle literals in - the server response. - - * providers/imap/camel-imap-store.c (imap_connect): Do a better - job of getting the correct dir_sep for the namespace we're using. - Construct a base_url here that will be used by get_folder_info. - (camel_imap_store_folder_path): Removed - (imap_folder_exists): Add an argument to return the short name of - the folder (parsed out of the LIST response). Update for - imap_parse_list_response change. - (get_folder): Update for the various other changes. - (get_folder_info): Update for the various other changes. Be more - consistent about the returned layout: put everything underneath - the "namespace" directory, including INBOX, even if it doesn't - belong there. Don't destroy the list of subscribed folders until - we've actually gotten the new list. - (folder_subscribed, subscribe_folder, unsubscribe_folder): Use - folder_name directly rather than camel_imap_store_folder_Path. - - * providers/imap/camel-imap-command.c (camel_imap_command): Update - for folder name changes. - -2000-10-29 Dan Winship <danw@helixcode.com> - - * camel.h: Remove md5-utils.h include since it's not part of Camel - any more. - - * camel-charset-map.c: Kill some warnings. - - * providers/nntp/camel-nntp-grouplist.c - (camel_nntp_get_grouplist_from_file, camel_nntp_grouplist_save): - Clean up warnings about time_t casts. - - * providers/smtp/camel-smtp-transport.c: Remove unused md5-utils.h - include. - - * providers/pop3/camel-pop3-store.c: Undefine the "_" macro - defined by krb4's des.h when compiling with krb support. - Fix md5-utils.h include. - -2000-10-27 Dan Winship <danw@helixcode.com> - - * camel-mime-utils.c (header_param_list_format_append): Only quote - Content-type parameters when the quoting is mandatory, and deal - with embedded quotes/backslashes when quoting. - -2000-10-27 JPR <jpr@helixcode.com> - - * providers/pop3/Makefile.am: Tidy up build - - * providers/smtp/Makefile.am: ditto - - * Makefile.am: Move md5-utils.[hc] to e-util because the - addressbook is going to use md5 hashes for pilot syncing. - Maybe the calendar conduits as well because this is a good idea - Chris had. - -2000-10-26 Kjartan Maraas <kmaraas@gnome.org> - - * camel-exceptions-list.def: Add newline to kill warnings. - -2000-10-25 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-store.c (get_folder_info): Fix folder - listing code infinite loop. - - * camel-store.h: Add a "parent" field to CamelFolderInfo. - - * camel-store.c (camel_folder_info_build): Deal with "parent" - (camel_store_folder_subscribed, camel_store_subscribe_folder, - camel_store_unsubscribe_folder): Add g_return_if_fails checking - that the folder supports subscriptions. - - * providers/imap/camel-imap-store.c (folder_subscribed, - subscribe_folder, unsubscribe_folder): Remove "+ 1"s since the - mail subscribe UI won't prepend / to the folder names now. - (get_folder_info): Clear the "parent" field of the folderinfos - when removing an empty top level. - - * providers/nntp/camel-nntp-store.c (nntp_store_folder_subscribed, - nntp_store_subscribe_folder, nntp_store_unsubscribe_folder): - Remove "+ 1"s since the mail subscribe UI won't prepend / to the - folder names now. - -2000-10-24 Chris Toshok <toshok@helixcode.com> - - * providers/imap/camel-imap-store.h: add subscribed_folders. - - * providers/imap/camel-imap-store.c (camel_imap_store_class_init): - fill in vtable entries for subscription functions. - (camel_imap_store_finalize): new function, so we can free up our - subscribed_folders hashtable. - (camel_imap_store_init): set CAMEL_STORE_SUBSCRIPTIONS in the - CamelStore flags, and create our subscribed_folders hashtable. - (camel_imap_store_get_type): camel_imap_store_finalize is our - finalize function. - (get_folder_info): if we're looking at subscribed_only, clear out - the subscribed_folders hashtable, use LSUB instead of LIST, and - insert folder paths (prepended by their namespace if there is one) - into subscribed_folders. INBOX subscription support needs work, - since we always show it, regardless of it's subscribed state. - (folder_subscribed): new function. just look up the folder_path - in the hashtable. - (subscribe_folder): new function. use the imap SUBSCRIBE command, - and if successful add it to the hashtable. - (unsubscribe_folder): new function. use the imap UNSUBSCRIBE - command, and if successful remove it from the hashtable. - -2000-10-24 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-store.c (get_folder_info): Fill in the - message_count and unread_message_count flags (if !fast). - -2000-10-23 Dan Winship <danw@helixcode.com> - - * camel-object.h: #include gnome-i18n.h (and gnome-defs.h since - the former depends on it.) - - * *: Add lots of _() and N_(). - -2000-10-23 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/Makefile.am (libcamelnntpinclude_HEADERS): add - camel-nntp-types.h. - -2000-10-23 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-command.c (imap_read_untagged): Fix a - "how could this have been working before" memory overrun bug - found by Vlad. - - * camel-op-queue.[ch], camel-thread-proxy.[ch]: These should have - gone away a long time ago. - -2000-10-20 Chris Toshok <toshok@helixcode.com> - - * providers/Makefile.am (SUBDIRS): re-enable the nntp provider. - -2000-10-20 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-store.c (build_folder_info): add - function to build a tree from the nntp group names (using '.' as a - heirarchy separator.) #ifdefed INFO_AS_TREE only. - (build_folder_info_from_grouplist): if INFO_AS_TREE is selected, - call build_folder_info instead of appending a new CamelFolderInfo - to our list. - (ensure_news_dir_exists): use e_mkdir_hier instead of failing if a - parent directory (~/evolution/news generally) isn't there. - -2000-10-19 Chris Toshok <toshok@helixcode.com> - - * camel-folder-search.c: #include <sys/types.h> before <regex.h> - -2000-10-19 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-utils.c (imap_parse_list_response): - Fix a bug with "INBOX" (or anything else with NIL hierarchy - separator) as the namespace. - - * providers/imap/camel-imap-folder.c (imap_refresh_info): Emit - message_changed and folder_changed as appropriate. - -2000-10-19 Dan Winship <danw@helixcode.com> - - * camel-folder.c (camel_folder_refresh_info): Update comment here - so refresh_info isn't just for reconnects any more. Make the - default implementation a no-op rather than an error. - - * providers/nntp/camel-nntp-folder.c: Move refresh_info impl into - camel_nntp_folder_new, since it would have leaked memory and not - done anything useful if it was called later. - - * providers/mbox/camel-mbox-folder.c: Remove no-longer-necessary - refresh_info impl. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - Update imap_folder->exists, but don't actually load the new - messages. This is a temporary workaround to deal with the IMAP - provider stealing the message list focus at annoying times. - (imap_copy_message_to, imap_move_message_to): Emit a - folder_changed by hand, for now. - -2000-10-19 Ettore Perazzoli <ettore@helixcode.com> - - * providers/imap/Makefile.am (libcamelimapinclude_HEADERS): Add - `camel-imap-stream.h'. - - * Makefile.am (libcamelinclude_HEADERS): Add `camel-charset-map.h' - and `camel-charset-map-private.h'. - -2000-10-18 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-part.c (camel_mime_part_set_description): The correct - fix this time - the description should be encoded here and not in - the camel-medium layer. - -2000-10-30 Not Zed <NotZed@HelixCode.com> - - * camel-folder.c (camel_folder_change_info_add_update): Fixed the - changeset logic, which was completely wrong. - -2000-10-27 Not Zed <NotZed@HelixCode.com> - - * camel-mime-utils.c (quoted_encode_step): Removed is_blank() stuff. - (header_decode_init): When we set the 'space' bit, dont clear all - the others. - (quoted_encode): Put back the safemask. Yes we totally need it, - see rfc 2047 section 5, parts (1) and (3). - (CHARS_PSPECIAL): Remove '=' and '_' from the list of allowed - characters (this is an allowed list, not a not-allowed list, like - the ESPECIAL). - (camel_mime_special_table): Updated for fixes to definitions. - (CHARS_ESPECIAL): Added '_' to list of characters that should be - encoded. - -2000-10-26 Not Zed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_update): - Use the new camel_folder_change_info_* stuff to build the update - diff, rather than doing it ourselves. - - * camel-folder.c (camel_folder_change_info_add_source): Add a - 'source' list, used to create change lists. - (camel_folder_change_info_add_source_list): Add a list of uid's, - convenience function. - (camel_folder_change_info_add_update): Add a uid to the list of - uid's in the new updated list. - (camel_folder_change_info_add_update_list): Add a bunch of uid's - at once for the same purpose. - (camel_folder_change_info_build_diff): Take the source list, the - update list, and find the differences, building on the added or - removed list as appropriate. - -2000-10-20 Not Zed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-summary.c (removed_uids): REnamed from - add_uid. - (camel_mbox_summary_update): Oops, fix the reversed logic for - determining the uid changesets. - - * camel-folder.c (message_changed): Oops, we want to change the - uid, not add it. - -2000-10-19 Not Zed <NotZed@HelixCode.com> - - * providers/mh/camel-mh-summary.c (camel_mh_summary_sync): Added a - change list argument, and add expunged uid's to it. - - * providers/mh/camel-mh-folder.c (mh_init): Setup the change list. - (mh_finalize): And free it. - (mh_sync): Track changes, and send a folder_changed signal as - appropriate. - (mh_expunge): Likewise. - (mh_append_message): Add the new uid to the change list and - trigger a folder_changed event. - - * providers/mbox/camel-mbox-folder.c (camel_mbox_folder_new): - Setup a mbox list of changes structure. - (mbox_finalize): And free it. - (mbox_expunge): Include the change list with the folder_changed - event, and clear it off. - (mbox_sync): And the same for when we are just syncing the folder. - (mbox_append_message): And do the same here, after we've updated - the folder. - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_build_from): Use gmtime_r to get the time - thread-safely. - (camel_mbox_summary_sync): Added a changeinfo argument. Add any - removed or changed messages to the changelists as appropriate. - (camel_mbox_summary_update): Added a changeinfo argument. - Genereate a list of added/removed uid's based on the difference - before and after rebuilding the summary. - - * camel-folder.c (camel_folder_change_info_new): - (camel_folder_change_info_add_uid): - (change_info_add_uid): - (camel_folder_change_info_remove_uid): - (camel_folder_change_info_change_uid): - (change_info_clear): - (camel_folder_change_info_clear): - (camel_folder_change_info_free): - (change_info_cat): - (camel_folder_change_info_cat): Bunch of utility functions for - working with change info lists. - (camel_folder_init): Init the change info list. - (camel_folder_finalize): And free it. - (thaw): Changed to pass through a list of changes, or to get the - changed message uids from the camelfolderchangeinfo struct, and - reset it. - (folder_changed): Add the changed lists to the frozen change list - if we are frozen. - (message_changed): Add the message to the changed list if we are - in the frozen state. - - * camel-folder.h (CamelFolderChangeInfo): New structure to hold - information for the folder_changed event. - -2000-10-18 Ettore Perazzoli <ettore@helixcode.com> - - * camel-mime-filter-charset.c (complete): Put a zero at the start - of the outbuf. - -2000-10-18 Not Zed <NotZed@HelixCode.com> - - * camel-mime-part.c (add_header): No, we must not encode the - headers here. These interfaces ARE raw interfaces as they are - defined in camel_medium. Also removed a bogus/meaningless FIXME. - (set_header): Likewise here, we must not. - (process_header): Removed another bogus comment. - - * camel-object.c (shared_is_of_type): Comment out the spitting of - a big warning when we're trying to determine types from code. - - * providers/mbox/camel-mbox-summary.c - (message_info_new_from_parser): Only call ibex funcitons if we - have an index. - - * providers/mh/camel-mh-summary.c (camel_mh_summary_add): Only - call ibex functions if we have an index. - (remove_summary): Likewise. - (camel_mh_summary_check): Likewise. - - * providers/nntp/camel-nntp-store.c (nntp_store_get_folder): - get_folder -> flags argument. - - * providers/vee/camel-vee-store.c (vee_get_folder): create->flags. - - * providers/pop3/camel-pop3-store.c (get_folder): Changed create - -> flags. - - * providers/imap/camel-imap-store.c (get_folder): Added flags - argument. - - * providers/mh/camel-mh-folder.c (camel_mh_folder_new): Added - flags argument, and fixed code appropriately. - - * providers/mh/camel-mh-store.c (get_folder): Added flags argument. - - * camel-folder-search.c (message_body_contains): Perform a regex - match on the contents of messages. This wont quite work yet as - message contents are encoded when written to a stream. - (build_match_regex): Converts a number of strings into a regex - matching pattern, escaping special chars. - (match_message): match a single message from a folder, by uid. - Slow. - (search_body_contains): Changed to support matching where no index - is supplied. Matches are performed by retrieving message - contents, etc. - () WTF? camel should not be including any widget headers. - - * providers/mbox/camel-mbox-folder.c (camel_mbox_folder_new): - Added flags argument. - (mbox_refresh_info): Changed into a NOP, the refresh info code - moved into the new function. - (camel_mbox_folder_new): If we have an index requested, build one, - otherwise, remove an old one, or just dont do anything. - - * providers/mbox/camel-mbox-store.c (get_folder): Changed create - to flags, changed code to suit. - - * camel-store.c (camel_store_get_folder): Changed create to flags. - (get_folder_internal): And here. - (get_folder): And here too. - - * camel-store.h (camel_store_get_folder): Change the create - argument to be a flags argument. - -2000-10-17 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_refresh_info): Remove - cached info at the end of the summary when the folder shrinks - between sessions. Also remove an untrue comment. - (camel_imap_folder_new): Move the summary creation to after the - folder selection again, since it depends on the uidvalidity - having been set. - - * providers/imap/camel-imap-store.c (get_folder): Fix up - summary_file to not include the namespace twice. - -2000-10-17 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-part.c (set_header): Encode the header value. - (add_header): Same. - -2000-10-17 Not Zed <NotZed@HelixCode.com> - - * camel-mime-filter.c: Added some malloc check debugging stuff. - - * camel-mime-parser.c - (struct _header_scan_state): Removed top_part, top_start, and - pending. I can't even remember why they were there, and they're - not used anymore. - - * camel-mime-filter-basic.c (filter): Forgot to up the space here - too. - -2000-10-14 Not Zed <NotZed@HelixCode.com> - - * camel-mime-filter-basic.c (complete): Ok, so we hit a fixme, 3x - just wasn't enough for some sequences. - -2000-10-16 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-command.c - (imap_read_response): Don't imap_next_word(respbuf + 2), instead - use imap_next_word(respbuf) or else we'll skip over the second - token. - -2000-10-16 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-command.c - (camel_imap_response_extract): Don't free 'resp' as it doesn't - point to the beginning of the allocated data, instead free - response->untagged->pdata[i]. Also, if '*resp' is equal to a space - character, then set resp = imap_next_word (resp) rather than - expecting resp++ to work (there's a list broken IMAP daemons that - like to put extra spaces between tokens). - (imap_read_response): Don't expect 'respbuf+2' to be where the - untagged number response to start (see above fix for an - explanation). - -2000-10-16 Chris Toshok <toshok@helixcode.com> - - * camel-service.c (get_path): when using the construct (flags & - CAMEL_SERVICE_URL_NEED_*) make sure to do ((flags & - CAMEL_SERVICE_URL_NEED_*) == CAMEL_SERVICE_URL_NEED_*) - (check_url): same. - -2000-10-16 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (imap_disconnect): Only send - the LOGOUT command if the store is connected. - (imap_connect): Set the 'connected' state to TRUE when we - successfully connect. - (get_folder_info): if (!topfi), 'topfi' was allocated but then - 'fi' was set. I think Dan meant to set topfi since fi is an - uninitialized value at this point. - - * providers/imap/camel-imap-command.c (imap_read_response): Check - for the untagged BYE response and set the 'connected' state to - FALSE if we receive the BYE response. Return NULL if we get a BYE - response. - -2000-10-16 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-store.c (get_folder_info): Deal with - the possibility of not getting a LIST response back for the top - level. - -2000-10-12 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-summary.c: Simple subclass of - CamelFolderSummary that also keeps a UIDVALIDITY value (and - doesn't, for the moment, build content info). - - * providers/imap/camel-imap-folder.c: - (various): Use a CamelImapSummary to store/fetch summary info. - (camel_imap_folder_new): Take a path to a file to use for the - summary. Set the folder's permanent_flags correctly according to - the server response. Read in the summary (checking the - UIDVALIDITY) and update it if it's out of date. - (imap_refresh_info): Just fetch UIDs and flags. If the UIDs all - match, update the flags as needed and be done with it. Otherwise, - delete messages that have been expunged from the server and fetch - full summary info for any new messages. - (imap_sync): Save the summary to disk. - (imap_update_summary): Renamed from imap_get_summary_internal. Can - now be told to get summary for only a subset of messages. Use - camel-mime-utils functions rather than rolling our own header - parsing. - (imap_get_message_info_internal): Merged into imap_update_summary. - (imap_set_message_flags): Don't marked the message FOLDER_FLAGGED - if we're not actually changing the value of any of the flags. - (camel_imap_folder_changed): Deal with EXISTS rather than RECENT. - - * providers/imap/camel-imap-store.c (imap_connect): Call - camel_session_get_storage_path and save the value. - (get_folder): Create a local directory to store summary - information and pass a summary file name to camel_imap_folder_new. - Don't call camel_folder_refresh_info from here any more since - camel_imap_folder_new does it again. - - * providers/imap/camel-imap-command.c (camel_imap_command): Add a - special case to this to make it possible to get the repsonses from - a SELECT and still have store->current_folder be updated - correctly. - (imap_read_response): parse EXISTS rather than RECENT - - * camel-session.c (camel_session_get_storage_path): Use - e_mkdir_hier. - - * camel-folder-summary.c (camel_folder_summary_remove_index): New - function. - - * camel-mime-utils.c (header_raw_append_parse): fix this. - (camel-mime-parser.c doesn't use this code because of the MEMPOOL - optimization, so nothing was ever actually calling it before.) - -2000-10-11 Not Zed <NotZed@HelixCode.com> - - * camel-mime-part.h (struct _CamelMimePart): Removed - temp_message_buffer, and content_input_stream fields which seem to - have come from nowhere, and are unused. - - * camel-mime-utils.c: Added a note about touching this file. - Nobody is to touch it without asking me first. That goes for you - too Jeff. - (header_decode_text): In what way is this broken? - -2000-10-10 Not Zed <NotZed@HelixCode.com> - - * providers/imap/camel-imap-folder.c (imap_get_summary_internal): - Fix camel_summary_* function rename - (imap_get_message_info_internal): Likewise. - - * camel-mime-parser.c (camel_mime_parser_finalise): Fixed a spelling mistake. - - * camel-folder-summary.c (camel_summary_format_address): Uh, why - do we encode and then decode here ... sigh. This is not the way - to fix this. - (camel_folder_summary_format_address): Renamed to a proper name, - this was only supposed to be a private function. - (camel_folder_summary_format_string): Likewise. Oh i see why it - was made public, code reuse by cut & paste. Joy. - -2000-10-11 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-store.c (nntp_store_unsubscribe_folder): remove the leading '/'. - (nntp_store_subscribe_folder): same. - (nntp_store_folder_subscribed): same. - -2000-10-11 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_move_message_to): Quote - the mailbox name as it may contain spaces. - (imap_copy_message_to): Same. - -2000-10-10 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-store.c - (build_folder_info_from_grouplist): fill in message_count and - unread_message_count properly. - - * providers/nntp/camel-nntp-newsrc.h: reformat. - - * providers/nntp/camel-nntp-grouplist.c - (camel_nntp_get_grouplist_from_file): remove spew. - - * providers/nntp/camel-nntp-newsrc.c - (camel_nntp_newsrc_group_get_num_articles_read): new function. - (camel_nntp_newsrc_group_get_highest_article_read): robustification. - -2000-10-10 Joe Shaw <joe@helixcode.com> - - * providers/imap/camel-imap-store.c - (parse_list_response_as_folder_info): Check before dereferencing the - sep pointer. - -2000-10-10 Jacob "Ulysses" Berkman <jacob@helixcode.com> - - * camel-*.c: teach camel about "its" vs. "it's" - -2000-10-09 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-store.c (finalize): write out the - newsrc. - (nntp_store_get_name): if @brief, just return host. - - * providers/nntp/camel-nntp-newsrc.c: robustification and bug - fixes. - -2000-10-06 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-folder-summary.c (camel_summary_format_address): Decode - the resulting string. - -2000-10-06 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-grouplist.c: new file. - - * providers/nntp/camel-nntp-grouplist.h: new file. - - * providers/nntp/camel-nntp-types.h: new file. - -2000-10-06 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-utils.c (quoted_encode): Fix so that we don't encode - every single char in the word. Also, do we need a safemask? I - don't see why we would. - (header_encode_string): Don't strip off the last char!! - -2000-10-06 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/Makefile.am (libcamelnntpinclude_HEADERS): add - camel-nntp-grouplist.h - (libcamelnntp_la_SOURCES): add camel-nntp-grouplist.c - - * providers/nntp/camel-nntp-provider.c: add our own hash functions - for nntp urls. - - * providers/nntp/camel-nntp-newsrc.c - (camel_nntp_newsrc_group_is_subscribed): new function. - (camel_nntp_newsrc_subscribe_group): new function. - (camel_nntp_newsrc_unsubscribe_group): new function. - - * providers/nntp/camel-nntp-newsrc.h: add prototypes for - _group_is_subscribed, _subscribe_group, and _unsubscribe_group. - - * providers/nntp/camel-nntp-store.c - (build_folder_info_from_grouplist): new function. - (nntp_store_get_folder_info): add subscribed_only_parameter. if - it's FALSE, load the grouplist and call - build_folder_info_from_grouplist. - (nntp_store_folder_subscribed): implement. - (nntp_store_subscribe_folder): implement. - (nntp_store_unsubscribe_folder): implement. - (camel_nntp_store_init): add CAMEL_STORE_SUBSCRIPTIONS to the - store's flags. - - * providers/mh/camel-mh-store.c (get_folder_info): add - subscribed_only parameter. - - * providers/mbox/camel-mbox-store.c (get_folder_info): add - subscribed_only parameter. - - * providers/imap/camel-imap-store.c (get_folder_info): add - subscribed_only parameter. - - * camel-store.c (camel_store_supports_subscriptions): new function. - (camel_store_folder_subscribed): new function. - (camel_store_subscribe_folder): new function. - (camel_store_unsubscribe_folder): new function. - - * camel-store.h: add prototypes and virtual functions for the - subscribe implementation. also, add a subscribed_only argument to - camel_store_get_folder_info. - -2000-10-05 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-utils.c (header_address_list_format_append): Encode - the name part of the address and don't quote the name. - (header_decode_text): Rewrote from scratch, the old code was badly - broken. - -2000-10-05 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-message.c (camel_mime_message_set_reply_to): Use the - camel_address_encode function again. - (camel_mime_message_set_from): Same. - -2000-10-05 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-utils.c (quoted_encode_step): Modified to not encode - space chars in the middle of a line. - (isblank): New macro if we're not on a system with the GNU isblank - extension. - - * camel-mime-message.c (camel_mime_message_set_from): Reversed my - changes, don't header_encode_phrase - it generates broken headers. - (camel_mime_message_set_reply_to): Same. - -2000-10-04 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-utils.c (camel_nntp_get_headers): - revert to old method (only use XOVER if OVER is supported.) - - * providers/nntp/camel-nntp-store.c - (camel_nntp_store_get_overview_fmt): handle the case where the - OVER extension isn't listed but LIST OVERVIEW.FMT works (again, - INN 2.2). enable the OVER extension in this case. - -2000-10-04 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): return a - gboolean so we can tell if this command worked. we can't key off - the OVER extension being present because at least one server (INN - 2.2) doesn't report the OVER extension but implements the XOVER - command. This could of course just be because I'm a loser for - thinking they were related in the first place. - (camel_nntp_get_headers): always try XOVER first, and if it fails - revert to the slow method. - -2000-10-04 Dan Winship <danw@helixcode.com> - - * providers/mbox/camel-mbox-store.c (get_folder): Fix a case where - a variable was free'd and then possibly used in an error message. - -2000-10-04 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-provider.c - (camel_provider_module_init): news: -> nntp:. - -2000-10-04 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-store.c (nntp_store_get_folder_info): - use "nntp:" instead of "news:" since "news:" urls aren't supposed - to have host/user/port info in them. also, if there's a user - defined in the url, put it in the urls for our folders. - -2000-10-04 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-auth.c (camel_nntp_auth_authenticate): - borrow some code from the imap provider to query the user for - their password, and pass the user/passwd to nntp. be extra - paranoid and zero out the password before freeing it. - - * providers/nntp/camel-nntp-store.c (camel_nntp_store_init): add - ALLOW_USER/ALLOW_PASSWORD/ALLOW_AUTH to the url flags. - (nntp_store_query_auth_types_generic): return our list of - auth_types. - (nntp_store_query_auth_types_connected): broken, return same as in - query_auth_types_generic. - -2000-10-04 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-store.c (imap_connect): IMAP4 - (pre-rev1) doesn't support the 'LIST "" ""' idiom, so don't use - it. Just assume the dir_sep is '/'. Shrug. - -2000-10-04 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-message.c (camel_mime_message_set_reply_to): Use - header_encode_phrase instead. - (camel_mime_message_set_from): Same. - -2000-10-04 Not Zed <NotZed@HelixCode.com> - - * camel-mime-utils.c (header_content_type_is): Handle the case - where ct != NULL, but type and subtype are, and also match that - against text/plain. - - * camel-folder-summary.c: Bump summary file version. - (message_info_save): Save the size from the messageinfo. - (message_info_load): Load the size from the summary file. - (message_info_load): Fixed up the time_t saving/loading. There - was a reason the warning was left there ... obviously nobody could - read the comment "/* warnings, leave them here */", why do i even - bother. - (camel_folder_summary_decode_time_t): Decode a time_t value from - the summary file. - (camel_folder_summary_encode_time_t): Encode a time_t value to the - summary file. - -2000-10-03 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-command.c (camel_imap_command): Quote - the mailbox name when sending a SELECT request otherwise mailboxes - with spaces in their names will cause problems. - - * camel-mime-message.c (camel_mime_message_set_reply_to): encode - before setting. - (camel_mime_message_set_from): Same. - -2000-10-03 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-command.c: New file containing - camel_imap_command and friends. Major camel_imap_command rewrite - to remove duplicated code, make the parsing of literals be - more safe/correct, deal with RECENT/EXPUNGE responses more - consistently, and make it possible to implement the AUTHENTICATE - command. - - * providers/imap/camel-imap-utils.c (imap_parse_nstring): New - function, to parse an IMAP "nstring". - - * providers/imap/camel-imap-store.c: Move command stuff to - camel-imap-command.c. Update for camel_imap_command changes. - - * providers/imap/camel-imap-folder.c: Update for - camel_imap_command changes. - (imap_append_message): CRLF filter the message before sending it. - - * providers/imap/Makefile.am: Add camel-imap-command.[ch], remove - camel-imap-stream.[ch] for now. - -2000-10-02 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-message.c (camel_mime_message_has_8bit_parts): New - convenience function to determine if there are any 8bit mime parts - in a mime message. - (camel_mime_message_encode_8bit_parts): New convenience function - to recursively reencode all 8bit mime parts to either - quoted-printable or base64 depending on which would be the best - encoding for that part. - - * providers/smtp/camel-smtp-transport.c (smtp_data): If the mime - message contains 8bit parts and the server doesn't support 8bit - transfers, reencode those parts before proceding with the send. - (smtp_mail): If the mime message contains 8bit parts and the - server supports the 8BITMIME extension to SMTP, notify the server - that we'll be sending it 8bit mime parts. - (_send_to): Find out if the message contains 8bit parts. - -2000-10-02 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c (_send_to): Use the - CamelInternetAddress parser. - (smtp_get_email_addr_from_text): deprecated. - -2000-10-02 Dan Winship <danw@helixcode.com> - - * camel-provider.h: Remove default_ports. - - * camel-remote-store.c (remote_connect): Get default_port from - CamelRemoteStore rather than CamelProvider. - - * providers/{imap,nntp,pop3}/camel-*-store.c: Initialize - CamelRemoteStore::default_port - - * providers/*/camel-*-provider.c: Remove default_ports. - -2000-10-02 Dan Winship <danw@helixcode.com> - - * camel-folder.[ch]: Remove - camel_folder_{get,free}_subfolder_info, as we want to be able to - scan the whole subfolder tree without having to open any folders, - so this needs to be in CamelStore. Remove can_hold_folders and - can_hold_messages flags; things that don't hold messages are no - longer considered CamelFolders. - - * camel-folder-summary.[ch]: Remove CamelFolderInfo stuff. - - * camel-store.[ch]: Add camel_store_{get,free}_folder_info, as - well as camel_store_free_folder_info_full and ..._nop for default - implementations, and camel_folder_info_free and - camel_folder_info_build as convenience functions. Turn - CamelFolderInfo into a tree structure and also add an "url" - member. - - * providers/*/camel-*-folder.c: Remove subfolder_info and can_hold - stuff. - * providers/*/camel-*-store.c: Add folder_info stuff. - - * providers/imap/camel-imap-folder.c (imap_summary_free): Free the - summary elements with camel_message_info_free, not - camel_folder_info_free. Oops. - - * providers/imap/camel-imap-utils.c: const poison - -2000-09-28 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c: Fixed some memory leaks. - (camel_smtp_transport_init): Initialize supports_8bit to FALSE. - (smtp_helo): If server supports 8bit, set supports_8bit to TRUE. - - * camel-transport.h (struct _CamelTransport): Added variable - gboolean supports_8bit (we'll need this eventually? - see bugzilla - bug #53) - - * providers/smtp/camel-smtp-transport.c - (smtp_get_email_addr_from_text): Ugh, no wonder people were - getting illegal seek warnings *sigh*. I guess I can only blame - myself for this one though :-( - -2000-09-28 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c (_send_to): Don't send the - recipient data through smtp_get_email_addr_from_text - this is a - complete waste. In fact, we don't want to have to use that - function ever. - - * camel-internet-address.c, camel-address.c: Added some gtk-doc - comments. - -2000-09-28 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-utils.c (header_encode_string): Make sure to add the - space char after an encoded word when the encoding is iso-8859-1. - -2000-09-28 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_message): When - getting a literal string response, don't include the \r\n after - the closing } (as in: "... {798}\r\n...") - - * providers/imap/camel-imap-stream.c (stream_read): Same. - -2000-09-28 Not Zed <NotZed@HelixCode.com> - - * camel-mime-utils.c (header_fold): New function to fold headers. - -2000-09-27 Not Zed <NotZed@HelixCode.com> - - * camel-mime-parser.c (folder_scan_header): If we had an empty - header, then it must be end of the headers too. - (folder_scan_init): No we dont need to init the outbuf with a nul - terminator. - - * camel-folder-summary.c (camel_folder_summary_set_uid): New - function to reset the uid to a higher value. - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync): - "something failed (yo!)" what sort of crap is this? Fixed all the - indenting again, what wanker keeps running stuff through indent? - (message_info_new): Check the uid we loaded off the disk, if it - existed already, assign a new one. If it didn't then make sure - the nextuid is higher. - - * camel-charset-map.c: New file, used to build a large unicode - decoding mapping table, and use it to determine what is the - lowest charset a given word can be encoded with. Uses tables from - libunicode's source. - - * camel-internet-address.c (internet_encode): Use - header_phrase_encode to properly encode the fullname, as required. - refixed indenting. Who keeps doing that? - (camel_internet_address_find_address): Changed fatal return/warnings - into assertions. - - * camel-mime-utils.c (header_raw_append_parse): Check : explicitly - (removed from is_fieldname() macro). - (camel_mime_special_table): Changed to short, so we can represent - more bit types. - (quoted_encode): Take a mask of the safe chars for this encoding. - (header_address_decode): Removed a #warning that makes no sense - anymore. - (header_decode_date): Fixed the 'broken date' parser code, if it - ever decoded it it just threw away the result. - (header_encode_string): Use better charset matching for encoding - strings as well. - -2000-08-31 Not Zed <NotZed@HelixCode.com> - - * providers/mh/camel-mh-summary.c (camel_mh_summary_sync): Save - the index if we do a sync. - (camel_mh_summary_check): Save the index here too. Probably. - -2000-09-27 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-store.c (camel_imap_command_extended): - Return untagged data in a GPtrArray rather than a string, since it - saves processing time and is much easier to deal with for several - commands. Update for camel_imap_folder_changed change. - (camel_imap_fetch_command): Update for camel_imap_folder_changed - change. - (imap_connect, imap_folder_exists): Update for - camel_imap_command_extended change. - - * providers/imap/camel-imap-folder.c - (imap_get_message_count_internal, - imap_get_subfolder_info_internal, imap_search_by_expression): - Update for camel_imap_command_extended change. - - (imap_get_summary_internal, imap_get_message_info_internal): Use - camel_imap_fetch_command here now to get around the - camel_imap_command_extended change. - - (camel_imap_folder_changed): turn expunged into a GArray of ints - rather than a GPtrArray of strings representing ints. - -2000-09-26 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c - (imap_get_message_count_internal): Quote the folder name as it may - contain spaces. - (imap_get_subfolder_info_internal): Same. - - * providers/imap/camel-imap-utils.c (imap_parse_list_response): Do - proper unquoting for folder names. - (func_get_current_date): Implemented. - - * providers/imap/camel-imap-store.c - (imap_folder_exists): Quote the folder name as it may have spaces. - (imap_create): Same. - (check_current_folder): Same. - -2000-09-22 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-folder.c - (imap_get_subfolder_info_internal): The root folder's name is "", - not the namespace. - (camel_imap_folder_new): constify folder_name. - - * providers/imap/camel-imap-store.c (get_folder): Create the - folder with folder_name, not folder_path. - (camel_imap_command_preliminary): Don't free cmdid here. - -2000-09-21 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-utils.c (imap_create_flag_list): New - function to convert Camel flags to an IMAP flag_list. - (imap_parse_flag_list): Contrariwise. - - * providers/imap/camel-imap-store.c (camel_imap_command_*): Make - the @ret arg actually optional, as (mostly) documented. - (various): Don't pass "&result" to camel_imap_command_* if we're - just going to immediately free it. Don't record status if we're - not going to look at it. - - * providers/imap/camel-imap-folder.c: Likewise. - (imap_summary_free): Use camel_folder_info_free. - (imap_sync): Use imap_create_flag_list. Clear - CAMEL_MESSAGE_FOLDER_FLAGGED after syncing so we don't keep - re-syncing. - (imap_append_message): Use imap_create_flag_list. Don't leak the - memstream if the append fails. - (imap_move_message_to): Use camel_folder_delete_message rather - than doing it by hand. - (imap_get_summary_internal, imap_get_message_info_internal): Use - imap_parse_flag_list and header_raw_clear. - (camel_imap_folder_changed): Use camel_message_info_free. - -2000-09-21 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-store.c (get_folder_name): INBOX is - case-insensitive. - (get_root_folder_name): Make the root folder "" rather than "/". - (get_folder): Update for root folder name change. - (camel_imap_store_get_toplevel_dir): Removed. (Unused, unneeded.) - (camel_imap_store_folder_path): New function to turn a Camel - folder name into the corresponding namespaced IMAP path. - (imap_folder_exists): Make this take a store and a path rather - than a folder. - (imap_create): Likewise - (get_folder): Update for camel_imap_store_folder_path and other - changes. - (check_current_folder): Likewise. - - * providers/imap/camel-imap-folder.c: Change a bunch of CamelStore - variables to CamelImapStore (and add a few more) to prevent excess - gratuitous casting. Use camel_imap_store_folder_path where - appropriate. - (camel_imap_folder_new): Update for root folder name change. - -2000-09-19 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c (smtp_data): Use the - linewrap filter to achieve full RFC0821 compliance. - - * camel-mime-filter-linewrap.[c,h]: New mime-filter to word-wrap. - -2000-09-19 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-internet-address.c (internet_encode): When encoding the - internet address, quote the name as the name may have commas or - any other token which may later confuse our address parser. - -2000-09-19 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-folder.c - (imap_get_subfolder_info_internal): Fix the case where INBOX - isn't returned in the folder listing. - -2000-09-19 Dan Winship <danw@helixcode.com> - - * camel-folder.c: (init): Removed - (camel_folder_init, camel_folder_construct): New object init - function and public object constructor to replace the old init - method in a more Gtk-like fashion. - - (get_parent_folder, camel_folder_get_parent_folder): Removed. No - CamelFolder subclass was ever setting the parent_folder member, no - code has ever needed to look at it, and fixing it would actually - be pretty hard. - - (get_subfolder_info, camel_folder_get_subfolder_info): Renamed - from ..._names. Deals in CamelFolderInfo now. - (free_subfolder_info, camel_folder_free_subfolder_info): Likewise. - - (get_subfolder, camel_folder_get_subfolder): Removed. - CamelFolderInfo contains the subfolder's full name, so this is - unnecessary now, and removing it lets us get rid of the - CamelFolder separator member, which is needed for the default - implementation of this function, but not otherwise needed for most - providers. - - Also, lots of code style fixes. - - * providers/*: Update CamelFolder subclasses for changes, although - none of them fill in the message counts in the CamelFolderInfo - yet. - -2000-09-18 Christopher James Lahey <clahey@helixcode.com> - - * camel-folder-search.c, camel-folder-search.h, - camel-remote-store.c, providers/imap/camel-imap-folder.c, - providers/imap/camel-imap-store.c: Fixed the #include lines to - deal properly with gal. - -2000-09-17 Dan Winship <danw@helixcode.com> - - * camel-folder-summary.h: update CamelFolderInfo - * camel-folder-summary.c (camel_folder_info_free): New function to - free the contents of a CamelFolderInfo - -2000-09-15 Dan Winship <danw@helixcode.com> - - * camel.c (camel_init): Set camel_verbose_debug to TRUE if - CAMEL_VERBOSE_DEBUG is set in the environment. - - * camel-remote-store.c (remote_send_line, remote_recv_line): only - log if camel_verbose_debug is TRUE. - -2000-09-14 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (get_folder): Don't use - dir_sep as top-level directory, use "/". - - * providers/imap/camel-imap-folder.c (imap_expunge): Get rid of - unused variable. - -2000-09-13 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_expunge): Don't look at - the response of the command. camel_imap_command_extended() - processes EXPUNGE responses itself, so if we do it here too we - remove twice as many summary items as we should. - -2000-09-13 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (imap_folder_exists): Rewrote - to take a third argument (gboolean *selectable) so that we can - find out if the folder is selectable or not as we look to see if - it exists. Also, don't use EXAMINE because that will not work on - non-selectable folders, so use LIST instead. - (get_folder): Check to see if the folder exists even vefore - calling imap_create as this will save time. If the folder does - exist, find out if it's selectable. Moved the call to refresh_info - here. - - * providers/imap/camel-imap-folder.c (imap_get_uids): Check for a - NULL summary. - (camel_imap_folder_new): Don't call refresh_info here - call it in - get_folder() because we don't know if this folder even exists on - the server yet! And even if it does, we don't know if it can hold - messages or not yet. - -2000-09-12 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-parser.c (folder_scan_step): Make sure *datalength is - > 0 before calling camel_mime_filter_filter otherwise we will get - a segfault if the filter calls iconv(). - -2000-09-08 Christopher James Lahey <clahey@helixcode.com> - - * providers/nntp/camel-nntp-auth.c, - providers/nntp/camel-nntp-auth.h: Fixed a warning. - -2000-09-07 Dan Winship <danw@helixcode.com> - - * camel-session.c (camel_session_get_storage_path): Make this not - leak. - -2000-09-07 Dan Winship <danw@helixcode.com> - - * camel-session.c (camel_session_new): Make this take a path to a - directory that Camel can use for its own nefarious purposes. - (camel_session_get_storage_path): New function to return a path - that a service can use for its own nefarious sub-purposes. - - * camel-service.c (camel_service_get_path): New method (and - useful default implementation) to get a (relative) pathname - corresponding to the service. - -2000-09-06 Dan Winship <danw@helixcode.com> - - * providers/pop3/camel-pop3-store.c (connect_to_server): Make KPOP - work again. - -2000-09-06 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-message.c (camel_mime_message_get_received_date): - Implemented (someone added these to camel-mime-message.h but never - implemented them!!) - though it may not be right. - (camel_mime_message_get_sent_date): Same. - -2000-09-05 Dan Winship <danw@helixcode.com> - - * camel-mime-part.c (camel_mime_part_get_filename): If a MIME part - has no Content-Disposition, but does have a "name" on the - Content-Type, return that as the filename. - (process_header): strstrip the Content-Description - -2000-09-05 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-utils.c (get_OVER_headers): care about - response code. - (get_HEAD_headers): same. - (camel_nntp_get_headers): same. - - * providers/nntp/camel-nntp-store.h: get rid of - CAMEL_NNTP_OK/ERR/FAIL. - - * providers/nntp/camel-nntp-store.c - (camel_nntp_store_get_extensions): take CamelException arg and - pass along to camel_nntp_command. - (camel_nntp_store_get_overview_fmt): same. - (nntp_store_connect): convert to using constants in - camel-nntp-resp-codes.h - (nntp_store_get_folder): make use of camel_nntp_folder_new. - (camel_nntp_command_send_recv): new function to deal with auth - challenge. - (camel_nntp_command): split out most of this function into - camel_nntp_command_send_recv. also, return the actual response - code instead of CAMEL_NNTP_OK/ERR/FAIL. - - * providers/nntp/camel-nntp-resp-codes.h: new file. - - * providers/nntp/camel-nntp-folder.h: prototype for - camel_nntp_folder_new. - - * providers/nntp/camel-nntp-folder.c (camel_nntp_folder_new): new - convenience function. - (nntp_folder_get_message): care more about the actual response - code. - - * providers/nntp/Makefile.am (libcamelnntp_la_SOURCES): add - camel-nntp-auth.c. - (libcamelnntpinclude_HEADERS): add camel-nntp-auth.h. - - * providers/nntp/camel-nntp-auth.h: new file. - - * providers/nntp/camel-nntp-auth.c: new file. - -2000-09-05 Peter Williams <peterw@helixcode.com> - - * providers/imap/camel-imap-store.c (imap_folder_exists): Don't free the - result on error; the exception will have the relevant info. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Check for - exceptions here. - - * providers/imap/camel-imap-store.c (imap_connect): Check the exception - on the refresh_folders call. - - * providers/imap/camel-imap-store.h: Clean up some now-unused fields. - - * camel.c (camel_init): Call unicode_init again, now that libunicode - will not initialize itself twice. - -2000-09-02 Lauris Kaplinski <lauris@helixcode.com> - - * camel-folder-search (search_header_contains): Use e_utf8_strstrcase - -2000-09-01 Christopher James Lahey <clahey@helixcode.com> - - * providers/imap/camel-imap-utils.c: Removed some unused - functions. - -2000-09-01 Peter Williams <peterw@helixcode.com> - - * providers/nntp/camel-nntp-store.c (camel_nntp_command): Initialize - the statically-allocated CamelException so that it doesn't contain - junk data that camel_exception_set() may try to free. - (camel_nntp_store_get_extensions): Same. - (camel_nntp_store_get_overview_fmt): Same. - - * providers/pop3/camel-pop3-store.c (camel_pop3_command): Typo - fix (if (*ret) -> if (ret)). - - * providers/pop3/camel-pop3-store.c (pop3_connect): Set the - port # back to what was specified ASAP, so that the hash of - the URL doesn't change (which causes a failure in - service_cache_remove that leads to a segfault). - - * providers/imap/camel-imap-store.c (imap_connect): Clear the - exception after a failed LOGIN so that it doesn't pass through - to the upper level and make mail think that the login failed. - - * providers/pop3/camel-pop3-store.c (pop3_connect): As above. - -2000-08-31 Peter Williams <peterw@helixcode.com> - - * providers/pop3/camel-pop3-store.c (camel_pop3_store_get_type): - Implement POP3 with the CamelRemoteStore now. - (connect_to_server): Hack this a bit to get KPOP to work. Obey - the new connection semantics of the remote store (implicitly). - (query_auth_types_connected): Clear exceptions after attempts - to connect; the code at the bottom will catch hard errors. - Use camel_service_connect. - (camel_pop3_command): Take a CamelException; now, when an error - occurs, ret is set to NULL and the exception passes back the - appropriate information. - (pop3_get_response): Same as above. - (pop3_try_authenticate): Give camel_pop3_command its exception - and handle it properly. - (pop3_connect): Call the parent classfuncs. Don't disconnect - on error (done for us). - - * providers/pop3/camel-pop3-folder.c: Obey the camel_pop3_command - semantics. - - * camel-remote-store.c (remote_query_auth_types_connected): Don't - warn; just return NULL. - (remote_query_auth_types_generic): Same. - (remote_send_string): Filter out passwords in debugging output. - - * providers/pop3/camel-pop3-store.c (camel_pop3_store_init): Also - set the ALLOW_AUTH flag. - - * providers/imap/camel-imap-store.c (camel_imap_store_init): Same. - -2000-08-31 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-store.c (camel_nntp_store_class_init): - remove get_folder_name. - (nntp_store_get_folder_name): remove. - -2000-08-31 Lauris Kaplinski <lauris@helixcode.com> - - * camel-mime-part.c (write_to-stream): Use filter only if we have one - -2000-08-31 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-utils.c (get_OVER_headers): use - camel_remote_store_recv_line. - - * providers/nntp/camel-nntp-folder.c (nntp_folder_get_message): - use camel_remote_store_recv_line to build message. also, free our - buffer so we don't leak like mad. - - * providers/nntp/camel-nntp-store.c: - (camel_nntp_store_get_additional_data) remove. - (camel_nntp_store_get_extensions): use - camel_remote_store_recv_line. - (camel_nntp_store_get_overview_fmt): same. also, don't rely on - _get_additional_data anymore since it's easier to parse without. - (camel_nntp_command): use camel_remote_store_send_string and - camel_remote_store_recv_line. - - * providers/nntp/camel-nntp-store.h: CamelRemoteStore is the - parent class now. remove istream/ostream since CamelRemoteStore - takes care of that for us. also remove the prototype for - camel_nntp_store_get_additional_data. - - * providers/nntp/camel-nntp-newsrc.c (camel_nntp_newsrc_write): - make sure to clear dirty bit. - (camel_nntp_newsrc_read_for_server): don't worry about continually - trying to open the file - if it fails we just return an - unpopulated .newsrc file. - -2000-08-31 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-newsrc.c - (camel_nntp_newsrc_read_for_server): make this a bit more robust. - try to create an empty .newsrc file for the server if we can't - open it for reading. also, don't allocate everything until we've - opened the file. - - * providers/nntp/camel-nntp-utils.c (get_OVER_headers): make use - of our overview field indices. - (camel_nntp_get_headers): only call get_OVER_headers if the - extension is present. warn if it's not - since get_HEAD_headers - needs work before it works. - - * providers/nntp/camel-nntp-store.c - (camel_nntp_store_get_extensions): new function - query the server - for it's extensions. - (camel_nntp_store_get_overview_fmt): new function - query the - server for the overview format and build our table of the indices - we care about. support the "full" suffix on fields. - (nntp_store_connect): call camel_nntp_store_get_extensions and - camel_nntp_store_get_overview_fmt. - - * providers/nntp/camel-nntp-store.h: add codes for extensions - found on news.mozilla.org. only one that we care about is OVER. - also, add CamelNNTPOverField and an enum of the overview fields - that we care about. - -2000-08-31 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-utils.c (imap_translate_sexp): - Reimplemented. It should now work correctly for most possible - VFolder rules. - -2000-08-31 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (camel_imap_command_extended): - Don't save any exceptions caused by camel_imap_folder_changed - (camel_imap_fetch_command): Same. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - Using a new way of calculating the first recent message that seems - more accurate. Also added code to make sure we don't accidently - add a duplicate summary. - -2000-08-31 Not Zed <NotZed@HelixCode.com> - - * camel-mime-part.c (write_to_stream): Use the proper type - checking function to check for text types. - (write_to_stream): If we have a charset on a text type that - isn't us-ascii or utf-8, then we need to reencode it, so add a - filter to do that too. - (write_to_stream): Fix some warnings/use the right constructor, - oops. - (write_to_stream): Rearrange the logic so it always does charset - conversion, and not just if we have a qp/base64 block. - - * camel-mime-utils.c (append_latin1): New function - even though - its broken, we'll assume mailers send latin1 headers instead of - us-ascii. We just have to encode high chars into utf-8. - (header_decode_text): Call append_latin1 for appending unencoded - text segments. - (append_latin1): Do an additional mask for account for c's - undefined behaviour for sign extension whilst shifting right. - -2000-08-30 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (camel_imap_fetch_command): - Rewrote to ignore strings that look like server responses until it - is sure that it has finished reading the literal string response. - -2000-08-30 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-remote-store.c (remote_send_string): Don't wrap printed - strings in quotes, makes things messy - - * providers/imap/camel-imap-folder.c (imap_get_message): Updated - to use the camel_imap_fetch_command - - * providers/imap/camel-imap-stream.c (stream_read): Updated to use - camel_imap_fetch_command - - * providers/imap/camel-imap-store.c (camel_imap_command_extended): - No longer handles FETCH requests so no longer needs to be - concerned with checking to make sure that server responses are - valid (they have to be). - (camel_imap_fetch_command): New convenience function that handles - all FETCH requests - -2000-08-30 Peter Williams <peterw@helixcode.com> - - * camel-remote-store.c (remote_connect): Unify with remote_post_connect. - (remote_disconnect): Unify with remote_pre_disconnect. - (camel_remote_store_class_init): Don't use the post_connect and - pre_disconnect classfuncs anymore ; they weren't especially useful. - - * providers/imap/camel-imap-store.c (imap_connect): Use this again - instead of implementing post_connect. - (imap_disconnect): Analogous to above. - - * camel-session.c (camel_session_get_service_connected): New function. - Like camel_session_get_service() but also connects to the service - if needed. camel_session_get_{store,transport} (defined in the header) - used this now, preventing annoying when-to-connect problems. - - * camel-service.c (camel_service_new): Revert to the old behavior - of not connecting until told to do so. Otherwise doing auth - testing correctly is really hard. - (camel_service_connect): Fix behavior here (set the connected - flag). - (camel_service_disconnect): Unset the connected flag. - -2000-08-30 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c: General cleanup / moving - stuff around to make things easier to follow. - -2000-08-30 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-remote-store.c: Prevent exceptions from being overwritten - - * providers/imap/camel-imap-folder.c (imap_expunge): Beautified - (imap_get_subfolder_names_internal): Removed old code as the - replacement code has now been tested and proven to work - -2000-08-29 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-utils.c: Removed old code that will - never be needed again - - * providers/imap/camel-imap-store.c: Removed old code for - try_connect - will never need this code - (slurp_response): Update to make sure we aren't falsely detecting - EXPUNGE flags - -2000-08-29 Peter Williams <peterw@helixcode.com> - - * camel-service.c (camel_service_connect): Uncomment this. - (camel_service_disconnect): Same. - - * camel-remote-store.[ch]: New files. Abstract remote storages - (IMAP, POP3, NNTP) and hides the lower-level networky stuff. - - * camel-service.c (camel_service_new): Take an extra argument, the - provider that created us, cause it's useful. - (camel_service_finalize): Unref our new provider member. - - * camel-session.c (camel_session_get_service): Pass the proper number of - arguments to camel_service_new(). - - * camel-imap-store.c: Massive update: 1) use the CamelRemoteService to - make our life Very Easy (TM). 2) Change the semantics of all - camel_imap_command* functions to take exceptions, centralize tons of - duplicate code, and use the handy RemoteStore utility functions - - * camel-imap-folder.c: Use the new semantics of camel_imap_command* - - * camel-imap-stream.c: Same. - -2000-08-29 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (camel_imap_command_extended): - Updated to check for EXPUNGE notifications - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - Updated to account for messages which have been expunged (now - takes a new arg, a GPtrArray of message id's that have been - expunged) - (imap_expunge): Updated (we may want to just use the code in - folder_changed now instead of doing our own summary - expunging...but that can be fixed later) - (imap_append_message): Updated. - (imap_copy_message_to): Updated. - (imap_move_message_to): Updated. - -2000-08-28 Peter Williams <peterw@helixcode.com> - - * camel-folder.c (camel_folder_refresh_info): New member function, - refresh_info, used for rereading folder state after its state has - somehow become unknown. Tries to preserve last-known status of - messages. - - * providers/mbox/camel-mbox-folder.c (mbox_refresh_info): Implement - ::refresh_info (split up ::init) - - * providers/mbox/camel-mbox-store.c (get_folder): Call ::refresh_info. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Call - ::refresh_info once initialized. - (imap_refresh_info): New member function; reads the summary from - the server (used to be in camel_imap_folder_new; split out). - - * providers/imap/camel-imap-store.c (imap_connect): Set - CamelService::connected a little early so that - camel_imap_command won't try to connect while already - connnecting. - (camel_imap_command*): Try to connect if not connected already. - - * providers/pop3/camel-pop3-folder.c (pop3_refresh_info): Same as above. - - * providers/pop3/camel-pop3-folder.c (camel_pop3_folder_new): Same - as above. - - * providers/pop3/camel-pop3-store.c (pop3_connect): Set - CamelService::connected a little early so that - camel_pop3_command won't try to connect while already - connecting - (connect_to_server): Same. - - * providers/nntp/camel-nntp-folder.c (nntp_folder_refresh_info): Same - as above. - -2000-08-28 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_message): Fixed the - hack around quoted string responses - should now handle them - according to the specifications in the RFC - - * providers/imap/camel-imap-stream.c (stream_read): Updated to - match the code currently used in camel-imap-folder.c - -2000-08-28 Ettore Perazzoli <ettore@helixcode.com> - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync): - Never ever free `tmpname' as it comes from `alloca()'! - -2000-08-26 Ettore Perazzoli <ettore@helixcode.com> - - * camel-mime-utils.c (header_decode_text): Use `g_free()', not - `free()', to free `decword'. - -2000-08-25 Peter Williams <peterw@helixcode.com> - - * camel.c (camel_init): Don't call unicode_init; code in e-util - will do it, and if unicode_init is called twice, you get an - infinite loop when looking up nonexistant encodings (patch - has been submitted to libunicode's maintainer). - - * camel-provider.h: Add a new field, default_ports, which - helps the configuration code guess about how to make CamelURL's - from providers. - - * providers/*/camel-*-provider.c: Specify default ports. - -2000-08-25 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c - (imap_get_subfolder_names_internal): If the url path is "/" and - the folder path is "/", just LIST "" "*" (this should fix some - cyrus imapd problems). Also, INBOX is case insensitive so use - g_strcasecmp - -2000-08-24 Lauris Kaplinski <lauris@helixcode.com> - - * camel-folder-summary.c (summary_build_content_info): - Use UTF-8 as default - * camel-mime-part-utils.c (simple_data_wrapper_construct_from_parser): - Use UTF-8 as default - * camel-mime-utils.c (rfc2047_decode_word): Use UTF-8 - -2000-08-17 Not Zed <NotZed@HelixCode.com> - - * providers/mh/camel-mh-folder.c (mh_finalize): And here too. - - * providers/mbox/camel-mbox-folder.c (mbox_finalize): Close index - on exit. - -2000-08-23 Dan Winship <danw@helixcode.com> - - * camel-mime-utils.c (header_address_list_format_append): put - commas between addresses. - -2000-08-22 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-folder.c - (imap_protocol_get_summary_specifier): use BODY.PEEK, not BODY, so - we don't set the message \Seen. - -2000-08-22 Christopher James Lahey <clahey@helixcode.com> - - * providers/pop3/camel-pop3-store.c: Fixed a small warning. - -2000-08-22 Peter Williams <peterw@helixcode.com> - - * camel-service.c (camel_service_new): Connect automatically if the - URL is not empty. - (finalize): Disconnect automatically if connected. - (camel_service_query_auth_types): Split into two functions; one to - be called if we're connected to an actual server (_connected), one - to be called if we're just gauging the general authtypes supported - (_generic). - (is_connected): Remove. - - * camel-store.c (camel_store_get_folder): Don't connect explicitly to - the service. - - * providers/nntp/camel-nntp-store.c (query_auth_types_generic): Split - the query_auth_types function. Hook it up in _new. - (finalize): Don't try to disconnect here. - - * providers/pop3/camel-pop3-store.c (query_auth_types_generic): Same. - (finalize): Don't try to disconnect here. - - * providers/imap/camel-imap-store.c (query_auth_types_generic): Same. - (finalize): Don't try to disconnect here. - - * providers/smtp/camel-smtp-transport.c (query_auth_types_generic): Split - the query_auth_types (dummy, in this case) function. Hook it up in _new. - (finalize): Don't try to disconnect here. - -2000-08-21 JP Rosevear <jpr@helixcode.com> - - * providers/nntp/camel-nntp-folder.c (nntp_folder_get_subfolder_names): - Make sure newsrc is not null - (nntp_folder_get_subfolder_names): ditto - - * providers/nntp/camel-nntp-newsrc.c - (camel_nntp_newsrc_get_subscribed_group_names): Programming check - for newsrc == NULL - (camel_nntp_newsrc_get_all_group_names): ditto - (camel_nntp_newsrc_write_to_file): ditto - (camel_nntp_newsrc_write): ditto - -2000-08-21 JP Rosevear <jpr@helixcode.com> - - * providers/nntp/camel-nntp-store.c (camel_nntp_command): - Make sure respbuffer is not null before manipulating it. - If it is null, return CAMEL_NNTP_FAIL and a decent error - message. - -2000-08-18 Peter Williams <peterw@helixcode.com> - - * camel-internet-address.c (internet_encode): If the name is "" we - weren't outputting anything; output the address at least. - -2000-08-16 Peter Williams <peterw@helixcode.com> - - * camel-internet-address.c (internet_encode): Fix a leak when - name = "". It's a single-byte leak, but it's the little things - that count. - - * camel-object.c (camel_type_lock_up): Don't leave the type - system locked when a bad unlock happens. - - * providers/mbox/camel-mbox-store.c (get_folder): Fix a leak. - -2000-08-15 Peter Williams <peterw@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_copy_message_to): Typo fix. - -2000-08-14 Peter Williams <peterw@helixcode.com> - - * camel-folder-search.c (search_get_sent_date): New search function; - returns the time_t when the message was sent. - (search_get_receive_date): Same for when it was received. - (search_get_current_date): Gets the current time for use with the - above two. Is this in the right place? - - * camel-folder-search.h: Add the new functions above to the class. - -2000-08-13 Dan Winship <danw@helixcode.com> - - * providers/nntp/Makefile.am (libcamelnntpinclude_HEADERS): Add - camel-nntp-utils.h - - * providers/imap/camel-imap-folder.c - (imap_get_subfolder_names_internal): do a strcasecmp rather than - just a strcmp when checking if a folder is "INBOX", since it is - a case-insensitive name. - -2000-08-12 Dan Winship <danw@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_summary_internal): - Don't assume the FETCH results will come back in the order they - were requested. - (imap_get_subfolder_names_internal): Add "INBOX" to the list as - g_malloc'ed memory, not a static string. - -2000-08-12 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c - (camel_imap_command_continuation): Now takes a char * parameter - rather than a stream - (camel_imap_command_continuation_with_stream): Same function as - above but takes a stream parameter instead - - * providers/imap/camel-imap-folder.c (imap_append_message): Use - camel_imap_command_continuation_with_stream - -2000-08-12 Dan Winship <danw@helixcode.com> - - * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): New - function to do one round of attempted authentication. - (pop3_connect): Move a bunch of code out into - pop3_try_authenticate and fix some bugs in the edge cases. - -2000-08-12 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (query_auth_types): No longer - calls try_connect() to get authtypes - -2000-08-11 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c - (camel_imap_command_continuation): Changed param order a bit and - fixed some logic - - * providers/imap/camel-imap-folder.c (imap_append_message): Use - the new multi-transactional convenience functions - -2000-08-11 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c - (camel_imap_command_preliminary): New convenience function for - multi-transactional commands (opening request) - (camel_imap_command_continuation): New convenience function for - multi-transactional commands (followup data) - -2000-08-11 Christopher James Lahey <clahey@helixcode.com> - - * providers/mh/camel-mh-folder.c: Fixed a warning. - -2000-08-11 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-folder.c - (camel_nntp_folder_class_init): remove get_name and get_full_name - assignments, since the camel-folder.c implementation does what we - need. - -2000-08-11 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-store.c - (camel_nntp_store_get_toplevel_dir): use g_get_home_dir, since - evolution_dir isn't available in the providers. - -2000-08-11 Peter Williams <peterw@helixcode.com> - - * camel-folder.c (thaw): Fix a bug where the message_changed - signal wasn't being emitted. - -2000-08-11 Not Zed <NotZed@HelixCode.com> - - * providers/mh/camel-mh-folder.c (mh_set_message_user_tag): - Implement. - (mh_get_message_user_tag): Implement. - - * providers/mbox/camel-mbox-folder.c (mbox_get_message_user_tag): - (mbox_set_message_user_tag): Implement. - - * camel-folder.c (move_message_to): Yay so lets fix an already - fixed fix, again. - (copy_message_to): and here too ... update for api change to append(). - And removed another warning. - (camel_folder_set_message_user_tag): Routine to set message tags. - (camel_folder_get_message_user_tag): And accessor. - -2000-08-10 Christopher James Lahey <clahey@helixcode.com> - - * camel-folder-search.c, camel-folder-summary.c, camel-medium.c, - camel-mime-filter-charset.c, camel-mime-filter.c, - camel-mime-filter.h, camel-mime-message.c, camel-mime-parser.c, - camel-mime-part-utils.c, camel-mime-part.c, camel-mime-utils.c, - camel-movemail.c, camel-multipart.c, camel-object.c, - camel-stream-mem.c, providers/mbox/camel-mbox-folder.c, - providers/mbox/camel-mbox-summary.c, - providers/mh/camel-mh-folder.c, - providers/smtp/camel-smtp-transport.c: Fixed some warnings. - -2000-08-11 Not Zed <NotZed@HelixCode.com> - - * providers/vee/camel-vee-folder.c (vee_folder_build_folder): Free - the search properly. - (vee_folder_build): And here too. - -2000-08-10 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - If we go over the max number of messages, don't keep requesting - new message summaries, just break. - -2000-08-11 Not Zed <NotZed@HelixCode.com> - - * camel-mime-parser.c (folder_scan_header): A better way to - compress leading whitespace. The code is probably invalid anyway, - I dont think it will work across buffer boundaries. - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): And - write out proper format From lines here too. - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_build_from): New function to build a more - compatible mbox "From " line. - (camel_mbox_summary_sync): Write From lines in the proper format. - -2000-08-10 Not Zed <NotZed@HelixCode.com> - - * providers/mh/camel-mh-store.c (get_folder): Remove warnin g. - - * providers/mbox/camel-mbox-store.c (xrename): Kill some warnings - with constification. - - * providers/imap/camel-imap-folder.c (imap_append_message): Fixed - for append api change. Eek this routine seriously wastes memory. - - * providers/mh/camel-mh-folder.c (mh_search_free): Impelemnt. - (mh_append_message): Fix for api change, and include user flags - and tags in new message. - - * providers/vee/camel-vee-folder.c (vee_search_by_expression): Fix - for search api change. - - * camel-folder.c (camel_folder_search_free): New function for - freeing search results. - (search_free): Changed my mind, implement a default that actually - does something. Free as to the old interface. - (camel_folder_append_message): Changed to accept a - camelmessageinfo rather than flags, which just doesn't have enough - info in it. - (copy_message_to): Change for append_message api change. - (move_message_to): Likewise. - - * providers/mbox/camel-mbox-folder.c (mbox_search_free): - Implement. - (mbox_append_message): Fix for api change, and also copy user - flags/tags across to new summary. - - * camel-folder-search.c (search_user_tag): A search expression - that returns the current use flag by name. - (camel_folder_search_free_result): New function to free the result - of a search. - - * camel-folder-summary.c: Bump summary version. - (message_info_new): - (message_info_load): - (message_info_save): - (camel_message_info_dup_to): - (camel_message_info_free): Added support for arbitrary tag/value - pairs (CamelTag's). - (camel_tag_get): - (camel_tag_set): - (camel_tag_list_size): - (camel_tag_list_free): Operations for working with CamelTags. - -2000-08-09 Peter Williams <peterw@helixcode.com> - - * camel-store.c (camel_store_get_folder): Connect beforehand, if - necessary. - - * providers/imap/camel-imap-store.c (camel_imap_store_init): Default - the dir_sep to "/" so that certain functions can safely assume that - dir_sep is valid (at least, nonnull). - -2000-08-09 Ettore Perazzoli <ettore@helixcode.com> - - * providers/nntp/camel-nntp-folder.c - (nntp_folder_set_message_flags): Get rid of an unused variable. - - * providers/nntp/Makefile.am (INCLUDES): Fix includes so that we - don't use installed headers anymore. [I copied this over from the - IMAP provider, that does not seem to have this problem.] - -2000-08-09 Not Zed <NotZed@HelixCode.com> - - * camel-folder-search.c (camel_folder_search_execute_expression): - Reorder search result in summary order if we searched with a - summary. - -2000-08-08 Dan Winship <danw@helixcode.com> - - * camel-uid-cache.c: New code to keep an on-disk cache of what - UIDs have been seen in a folder. - - * camel-provider.h: Add new flags CAMEL_PROVIDER_IS_SOURCE (mail - can arrive in it by non-Camel means) and CAMEL_PROVIDER_IS_STORAGE - (you can work with mail directly without needing to copy it local). - - * providers/*/camel-*-provider.c: Add flags as needed: imap and - mbox are SOURCE and STORAGE. mh and nntp are just STORAGE, pop3 is - just SOURCE. - - * camel-mime-message.c (process_header): Add another subject - g_strstrip that fejj's earlier commit missed. - -2000-08-08 Peter Williams <peterw@helixcode.com> - - * camel-provider.h: Remove some GTK stuff that I missed. - - * providers/imap/camel-imap-store.c (imap_noop): Turn this - back on with the new timeout interface in CamelSession. - - * camel-session.[ch] (camel_session_register_timeout): New - interface for Camel to register timeouts. Basically the - GTK timeout interface is copied. We do this because Camel isn't - allowed to use GTK anymore. - -2000-08-07 Not Zed <NotZed@HelixCode.com> - - * providers/mh/camel-mh-folder.c (mh_append_message): Only retry - another uid if we had a name clash, otherwise fail. - -2000-08-07 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c - (imap_get_subfolder_names_internal): If we are trying to get a - subfolder listing of the root folder, always make sure INBOX is - there... - - * providers/imap/camel-imap-utils.c (imap_parse_list_response): - Check for NIL as a directory separator. - -2000-08-07 Peter Williams <peterw@helixcode.com> - - * providers/nntp/Makefile.am: Reorder the INCLUDES to pull - in the camel headers from the local source tree before - the ones in $(includedir). This was causing compile problems - because the installed, Gtk-based camel-object.h was included - before the uninstall Camel-based one. - -2000-08-07 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-utils.c (imap_translate_sexp): Strip - all \n's from the expression - - * string-utils.c (strip): New convenience function to strip - occurences of a single char from a string - - * camel-mime-message.c (camel_mime_message_set_subject): Do a - g_strstrip on the subject so we can stop getting those annoying - leading spaces - -2000-08-07 Dan Winship <danw@helixcode.com> - - * camel-folder.c (camel_folder_free_deep): Fix this to not require - NULL-termination of the array. - -2000-08-04 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (imap_connect): If we fail to - get a dir_sep, then supply the default of "/". - (get_folder): Undo changes by Peter - -2000-08-04 Peter Williams <peterw@helixcode.com> - - * providers/imap/camel-imap-store.c (get_folder): Prevent a coredump - when get_folder()ing from a store with dir_sep = NULL. - -2000-08-04 Peter Williams <peterw@helixcode.com> - - * camel-store.h: Include camel-object.h. Ettore said this wasn't - compiling. - -2000-08-04 Not Zed <NotZed@HelixCode.com> - - * camel-url.c (camel_url_set_protocol): - (camel_url_set_host): - (camel_url_set_path): - (camel_url_set_port): Url editing functions. - -2000-08-04 Dan Winship <danw@helixcode.com> - - * providers/pop3/camel-pop3-folder.c (pop3_set_message_flags): - (pop3_sync): Indexes into the flags array are message_number minus - 1, not just message_number. - - * providers/pop3/camel-pop3-store.c: add a debugging macro for - doing protocol tracing. - -2000-08-03 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Only - call imap_get_summary_internal if the folder can hold messages - - * providers/nntp/camel-nntp-provider.c (camel_provider_module_init): - Initialize the service_cache for the news/nntp providers - -2000-08-03 Peter Williams <peterw@helixcode.com> - - * providers/nntp/Makefile.am (INCLUDES): Add -I$(top_srcdir) to - pull in libibex/ibex.h - -2000-08-02 Not Zed <NotZed@HelixCode.com> - - * providers/mh/camel-mh-summary.c (camel_mh_summary_sync): Expunge - from the end, so the index isn't messed up when you remove a - message. - - * providers/mh/camel-mh-folder.c (mh_append_message): Fix a bug - where it would never open an output file/uid. - - * providers/mbox/camel-mbox-store.c (rename_folder): - Implementation for mbox as well. - - * camel-store.c (camel_store_rename_folder): New method to rename folders. - (rename_folder): Default implementation. - - * providers/mh/camel-mh-store.c (delete_folder): Implement this. - (rename_folder): Implement a rename operation. - -2000-08-02 Dan Winship <danw@helixcode.com> - - * providers/MH: Kill this. It doesn't have any code to do anything - the new mh provider doesn't do better. - - * providers/Makefile.am: Remove reference to MH subdir, and - promote nntp to fully-supported status, since it does compile and - all. - - * camel-mime-message.c (camel_mime_message_set_subject): Trim - trailing space from the subject. I've now seen replies from two - different people that tricked the threading code by (a) not having - References/In-Reply-To, and (b) adding an extra space to the end - of the subject line so the subject-based threading fails too. Who - writes these broken mailers anyway? - -2000-08-01 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c (smtp_helo): When forced - to use the IP, place it in square brackets. - - * providers/imap/camel-imap-utils.c (imap_translate_sexp): New and - improved sexp parser. An honest try at using e-sexp is wrapped in - a #ifdef at the bottom of the file but is currently not used - - * providers/imap/camel-imap-folder.c (imap_search_by_expression): - We want to do a UID SEARCH so we get UIDs back instead of sequence - numbers - -2000-08-01 Not Zed <NotZed@HelixCode.com> - - * providers/mh: New mh provider implementation. - - * providers/Makefile.am (SUBDIRS): Added mh provider. - -2000-07-31 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_message_info_internal): - Some IMAP servers don't wrap the UID in ()'s so don't depend on that - (imap_get_summary_internal): Same - - * providers/imap/camel-imap-utils.c (free_sexp_node): Oops, forgot to - free node->function - not good. - -2000-07-31 Peter Williams <peterw@helixcode.com> - - * providers/vee/camel-vee-folder.c (vee_search_by_expression): Add - a NULL to the matches pointer array so that g_strfreev knows where - the end is. - -2000-07-31 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-utils.c (imap_translate_sexp): New - convenience function to translate a Camel sexp into the equivalent - IMAP sexp. - - * providers/imap/camel-imap-store.c: More places now use - imap_next_word - - * providers/imap/camel-imap-folder.c (imap_search_by_expression): - Implemented initial version (this may or may not work quite right) - -2000-07-28 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_expunge): Make sure - the third word/token (whatever) is "EXPUNGE" and not something - else like "EXISTS" or "RECENT". When removing the message from - the summary also make sure to free that data to avoid leakage. - Also make sure to subtract 1 from the 'id' since IMAP starts - at 1 and our summary starts at 0 :-) - -2000-07-28 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (camel_imap_status): Cleaned - up a bit, now uses imap_next_word() - (camel_imap_command_extended): Now uses imap_next_word(). When - checking for RECENT, allow the first digit of the recent-count - be between 0 and 9 inclusive instead of exclusive. - - * providers/imap/camel-imap-folder.c (imap_expunge): Optimized. - No longer will it need to reload the summary as it now instead - removes the appropriate message summaries from the cache. - (camel_imap_folder_changed): If recent == 0 then return. If - recent < 0 then just emit the folder_changed signal, don't reload - summaries. - -2000-07-28 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c - (imap_get_message_count_internal): Get message count when STATUS - is not available. - (imap_init): folder->has_search_capability is required for IMAP so - should always be set to TRUE (is currently being set to FALSE as - I've not yet implemented SEARCH support). - (camel_imap_folder_changed): Seem to have fixed my optimization - hack - -2000-07-28 Jon K Hellan <hellan@acm.org> - - * providers/imap/camel-imap-store.h (CamelImapServerLevel): New - enum. - (CamelImapStore): Added server_level and has_status_capability - members. - - * providers/imap/camel-imap-store.c (imap_connect): Detect - IMAP4REV1, IMAP4 and STATUS in capability response. - - * providers/imap/camel-imap-folder.c - (imap_get_message_count_internal): Use STATUS only if server - supports it. TODO: Get message count when STATUS not supported. - (imap_get_message, imap_get_summary_internal, - imap_get_message_info_internal): Handle IMAP4 as well. - (imap_protocol_get_summary_specifier): New function: Make a data - item specifier for the header lines we need, appropriate to the - server level. - -2000-07-27 Peter Williams <peterw@helixcode.com> - - * camel-mime-utils.c (header_decode_lwsp): More - checks for end of string. - - * providers/imap/camel-imap-store.c: - (imap_command_extended): Free the elements of our - array (huge mem leak) - - * providers/imap/camel-imap-folder.c: - (summary_get_internal): Same as above. - -2000-07-27 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - Fixed my routine to only fetch new headers, my IDs were off by 1 - on the high end, so when it would fetch the last newly arrived - message it would fail and end up fetching all of the summaries - because of the corruption. - -2000-07-27 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-url.c (camel_url_to_string): If the path doesn't begin - with a / and there is a host, prepend a / to the path. - -2000-07-27 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/Makefile.am: Added camel-imap-utils.[c,h] - - * providers/imap/camel-imap-utils.[c,h]: Utilities for parsing - server responses for use in both camel-imap-store.c and - camel-imap-folder.c - - * providers/imap/camel-imap-folder.c (imap_get_summary_internal): - Free all the pointers in the headers array. - (imap_get_subfolder_names_internal): Updated to use - imap_parse_list_response - (imap_parse_subfolder_list): Removed in favor of - imap_parse_list_response - - * providers/imap/camel-imap-store.c (camel_imap_command_extended): - Free all the pointers in the data array. - (imap_connect): Updated to use imap_parse_list_response and fixed - a leak - (folder_is_selectable): Updated. - -2000-07-27 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_message_info): Now - uses a hash table for looking up message info rather than a linear - search :) - -2000-07-27 Peter Williams <peterw@helixcode.com> - - * providers/*/Makefile.am: Don't specify SUBDIRS = - [nothing]. Messes up distcheck. - -2000-07-26 Peter Williams <peterw@helixcode.com> - - * camel-mime-parser.c (folder_scan_init): Initialize - outbuf to be "" -- it's not guaranteed to be zeroed. - - * camel-mime-utils.c (header_references_decode): Return - if the header is NULL -> or "" <-. Don't do our stupid - mailer trick if we point to \0. - (header_decode_quoted_string): Don't rip past end of - string! - -2000-07-26 Dan Winship <danw@helixcode.com> - - * camel-movemail.c (movemail_external): routine to call an - external movemail program. - (camel_movemail): Nuke return value, use movemail_external when - available and useful, and don't delete "dest" on errors, since - it might have started non-empty. - -2000-07-26 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-url.c (camel_url_to_string): Should now always prepend a '/' - before the path if it doesn't already exist. - - * providers/imap/camel-imap-folder.c: Fixed a few compiler warnings - -2000-07-25 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_summary_free): Fixed the - real problem that Peter was running into. - -2000-07-25 Dan Winship <danw@helixcode.com> - - * camel-mime-message.c (write_to_stream): Don't add a Mime-Version - header to a message that already has one. - - * camel-internet-address.c (internet_encode): Don't put <>s around - addresses with no name part. - -2000-07-25 Peter Williams <peterw@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_expunge): Set - imap_folder->summary to NULL after calling imap_summary_free, - so we don't get stuck with a junk summary pointer. Should - we free it at all? - -2000-07-25 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - Optimized to try and get the new message headers without reloading - the entire summary from scratch. - (imap_get_summary_internal): Will now sync() before attempting to - reload the summary so that flags are set in the reloaded summary - as well. - -2000-07-24 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (get_folder): Updated to give - special attention to the root folder. - - * providers/imap/camel-imap-folder.c - (imap_get_subfolder_names_internal): Updated to handle the root - folder - (imap_get_message_count_internal): return 0 if folder can't hold - messages - (camel_imap_folder_new): Change so that root folder gets special - attention and always gets can_hold_messages set to FALSE - -2000-07-24 Dan Winship <danw@helixcode.com> - - * camel-folder.c: Remove exceptions from a number of methods that - work on what ought to be static data: get_parent_folder, - get_parent_store, get_message_count, get_unread_message_count, - get_permanent_flags, get_message_flags, set_message_flags, - get_message_user_flag, set_message_user_flag, get_uids, - get_summary, get_subfolder_names. Turn camel_folder_delete_message - into a macro. (Mostly a pull-up from the camel-async branch.) - - * providers/{imap,mbox,nntp,pop3,vee}: Update for CamelFolder - changes - -2000-07-24 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_message_info): Updated - to port easily to the new Camel API - (imap_init): Don't SELECT INBOX, we don't need to do that - -2000-07-24 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): - Initialize the summary and subfolder listing. - (imap_summary_free): Now takes a GPtrArray arg rather than a - CamelImapFolder as it increases it's usefullness for free()'ing - temporary summaries. - (imap_get_message_count_internal): A new convenience function for - getting the actual message count on a server to be used by - imap_get_summary_internal) - (imap_get_message_count): Since the Camel API is on the move again, - the future version of this function will not be able to make a - call to the store, it must only access previously fetched data (thus - the creation of the _internal function) - (imap_get_subfolder_names_internal): Again, because the future version - of imap_get_subfolder_names will not take an exception, we must rename - this function which will be called by camel_imap_folder_new() - (imap_get_subfolder_names): We now return the previously collected - subfolder listing that the _internal function fetched previously - (imap_get_summary_internal): Again, same idea as the previous _internal - functions... - (imap_get_summary): Again... now returns a previously aquired summary - - * providers/imap/camel-imap-store.c (imap_noop): This will hopefully - prevent the imap store from disconnecting. - (imap_connect): Modified to add a gtk timeout event that will call - imap_noop() every 10 minutes (we may want to change this time value) - (imap_disconnect): Modified to remove the NOOP timeout event from the - store. - (camel_imap_command_extended): Commented out the code that would try - and detect if the store was disconnected and then reconnect if it was - needed. - -2000-07-24 Dan Winship <danw@helixcode.com> - - * camel-folder.[ch]: Remove camel_folder_get_message_uid, which - was not used, and not implemented by any provider. - - * providers/nntp/camel-nntp-folder.c: Remove get_message_uid - non-implementation. - - * camel-folder-pt-proxy.[ch], camel-arg-collector.c, - camel-marshal-utils.[ch]: Bye bye bye. - - * Makefile.am: remove reference to camel-arg-collector.c - -2000-07-23 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (imap_disconnect): Made it a - little more forgiving. Also set current_folder to NULL as there is - no selected folder after a disconnect. - (stream_is_alive): Detects whether or not a socket is "alive" - (camel_imap_command_extended): Use stream_is_alive() to aid in the - detection of a disconnected state. - -2000-07-22 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (get_folder): Clear - CamelExceptions when appropriate (eg when folder is marked as - \NoSelect). Still needs some cleanup and perhaps Dan will have a - better way of doing this as this seems like a messy way of - handling this. - - * providers/imap/camel-imap-folder.c (imap_get_uids): Took out - some debug statements as they are no longer needed. - -2000-07-21 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_subfolder_names): - Updated to not strip out subfolders that are marked as \NoSelect - because this will be correctly handled in store->get_folder from - now on. - - * providers/imap/camel-imap-store.c (folder_is_selectable): New - convenience function for use in get_folder(). - (parse_list_response): Now takes a char **flags argument which is - needed by folder_is_selectable(). - (imap_connect): Updated to reflect changes to - parse_list_response(). - -2000-07-21 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-stream.c (stream_read): Updated with - some of the same fixes I've made to camel-imap-folder.c like - recalculating message part lengths. - - * providers/imap/camel-imap-store.c (camel_imap_command_extended): - Rewrote the code to check for "* %d RECENT". Still needs to be - modified, but should no longer cause an infinite loop by detecting - mis-detecting RECENT messages. - -2000-07-20 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_summary): - (imap_get_message_info): Oops. Fix UID parser to allow 0 and 9 to - be in the range of valid UID chars. - -2000-07-20 Peter Williams <peterw@helixcode.com> - - * camel-object.c (camel_object_unref): Add a new global mutex - 'refcount' held when refcounting operations occur. - -2000-07-19 Peter Williams <peterw@helixcode.com> - - * camel-object.c (camel_type_lock_up): Correct the recursiveness; - the locklevel is stored as a private, so each thread has its own - idea of the locklevel. Thus one thread can relock, but a different - one will think that it's a level 0 and try to lock the type_system - mutex. - -2000-07-19 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c: General cleanup working - towards getting Actions->Expunge working correctly. - - * providers/imap/camel-imap-store.c - (cammel_imap_command_extended): Added code to look for "* %d - RECENT" and to emit the folder_changed signal if there are any - recent messages. Note: this is a hack and needs to be rewritten - badly. - -2000-07-19 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_summary): If the - folder's message count is not the same as the number of summaries, - free the old summary and create a new summary. - -2000-07-18 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c - (camel_imap_folder_class_init): Added in - imap_[g,s]et_message_user_flag() methods - (imap_get_message_info): Rewrote to use the more efficient way of - downloading summary information and also added a UID comparison so - that if the UID requested doesn't match the UID received, it - returns NULL. FIXME: When the mailer gets NULL when it requested - message info, it seems that it displays a row for that message and - when you try and select the blank row, it segfaults. - - * providers/imap/camel-imap-store.c (get_folder): Oops, this - should not be checking against "/", it should be checking against - dir_sep. - - * providers/imap/camel-imap-folder.c (imap_parse_subfolder_line): - Updated to trim out the leading namespace. - (imap_get_subfolder_names): Let the subfolder parser trim the - namespace off the folder name. - -2000-07-17 Peter Williams <peterw@helixcode.com> - - * camel-object.c (camel_type_lock_up): New function; the - Camel type_system lock is now fakey-recursive, being controlled - by a semaphore that goes up and down and is protected by another - lock. Theoretically all we need is the lock on the semaphore, - but this we catch exceptions "better" (by deadlocking). - (camel_type_lock_down): Corresponding to above. - (all functions): s,G_LOCK,camel_type_lock_up, etc. - -2000-07-17 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (imap_disconnect): Send a - "LOGOUT" command. - - * providers/imap/camel-imap-folder.c (imap_get_message): Hacks to - get IMAP code to work with CommunigatePro and MS Exchange (and any - other servers that send back a UID at the end of each FETCH inside - of the main body of the message part). - (imap_sync): Un-#if 0 the code that sets the flags on the IMAP - server for messages that have changed. Oops, don't mask with - DELETED to find out if the message has been answered ;-) - (imap_expunge): sync before expunging. - -2000-07-16 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c: All SELECT calls now pass - a NULL folder argument to camel_imap_command_extended() since it's - not needed. - (imap_connect): Moved service_class->connect() to the point right - after a connection is established with the server rather than - waiting until the end of the function. - (camel_imap_command): Updated the documentation comment - (camel_imap_command_extended): Before sending a command, first - check to make sure we are connected; if we aren't, then reconnect. - Don't strncmp() command with "SELECT" as it's redundant. - - * providers/imap/camel-imap-folder.c: All SELECT calls now pass - a NULL folder argument to camel_imap_command_extended() since it's - not needed. Also s/camel_imap_command/camel_imap_command_extended as - I will probably be doing away with camel_imap_command() or at least - only using it for LOGIN and similar commands where the server won't - notify us of any recent messages. - -2000-07-15 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): - One last fix to get rid of hard-coded "/" directory separators - -2000-07-14 Peter Williams <peterw@helixcode.com> - - * camel-object.c : Implement 'events', which are suspiciously - like signals except without all the marshalling baggage, and - with quasi-thread-safety. - (camel_object_class_declare_event): New func. - (camel_object_hook_event): Ditto. - (camel_object_trigger_event): Ditto. - (obj_class_init): Declare the "finalize" event. - (obj_class_finalize): Free the hashtable of events->preps - (obj_finalize): Free the hashtable of events->hooklists - (camel_object_unref): Trigger the finalize event (ourselves, - to prevent massively unpleasant looping things.) - -2000-07-14 Peter Williams <peterw@helixcode.com> - - * camel-object.c (make_global_classfuncs): Change to return - a CamelObjectClass. Change parents to a GSList and free it - when done. - (camel_object_new): Don't allocate a classfuncs for every object; - merely give it a reference to the global_classfuncs. Convert - parents to a GSList and free it when done. - (camel_object_unref): Don't free the classfuncs. Free the parents - list, which is changed to a GSList. - -2000-07-14 Jeffrey Stedfast <fejj@helixcode.com> - - * string-utils.c (string_unquote): New convenience function - to unquote a string if it's encapsulated by "'s - - * providers/imap/camel-imap-folder.c: - * providers/imap/camel-imap-store.c: Made the necessary changes - to stop using hard coded directory separators. - -2000-07-13 Dan Winship <danw@helixcode.com> - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load): - If the summary is for a smaller mbox, and rebuilding from the - last-known end position fails, try rebuilding from the beginning. - Deals with the case where the user edits the mbox and makes it - bigger, without adding new messages. - -2000-07-13 Peter Williams <peterw@helixcode.com> - - * camel-object.c: Rewritten to not be based on GtkObject, - but a tiny threadsafe ripoff thereof. Objects still cannot - be shared across threads, but ref/unref/destroy/new/etc - will work. Signals are not implemented because doing it - robustly would be a major pain in the butt, but class - functions are. There's a small demonstration that it doesn't - crash in ./temp-test.c: build it with ./make-test.sh. - * camel-stream.c, camel-seekable-stream.c, camel-stream-mem.c: - moved over to CamelObject. Proof of concept: two levels of - subclass and class functions, all working without coredumps. - To port to CamelObject: - - s,GTK_,CAMEL_,g in the cast checks - - s,gtk_type_new,camel_object_new,g - - s,GtkType,CamelType,g - - Change get_type function over to camel_type_declare - - instead of hooking to finalize function, it goes into the - type declaration. - - remove signals. - - instead of GTK_OBJECT(so)->klass, CAMEL_OBJECT_GET_CLASS(so) - - s,gtk_type_class,camel_type_get_global_classfuncs,g - - don't chain finalize handlers; it will be done for you - -2000-07-13 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c: - * providers/imap/camel-imap-store.c: If a SELECT fails, set - imap_store->current_folder to NULL so a SELECT is forced before - any message/folder operations are requested. Also, because some - users don't use a namespace, make sure that if the url->path is - "/" we don't use it when creating the folder_path. - (camel_imap_command[_extended]): Since we allow the passing of - a NULL folder which we can use to bypass a forced SELECT, no need - to check for the individual commands that don't require a folder - to be selected. - -2000-07-13 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c: - * providers/imap/camel-imap-store.c: Updated to use CAMEL_IMAP_OK, - CAMEL_IMAP_NO, CAMEL_IMAP_BAD, and CAMEL_IMAP_FAIL rather than the - ones copied from the POP3 provider. - -2000-07-13 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_summary): Oops. - If the number of messages in the folder is 0, don't fetch - summaries 1 thru 0, just return an empty summary. - (imap_copy_message_to): Fixed to use message UID and also send - the source folder as an arg to camel_imap_command rather than NULL. - (imap_move_message_to): Same. - (imap_init): If SELECT is successful, we need to set the current - folder to the one selected, this was causing problems with move/copy - -2000-07-13 Dan Winship <danw@helixcode.com> - - * camel-service.h: define a set of CAMEL_SERVICE_URL_ALLOW_* flags - parallel to the _NEED_* flags, and make the _NEED_* flags imply - the _ALLOW_* ones. - - * providers/imap/camel-imap-store.c (camel_imap_store_init): imap - urls ALLOW_PATH - -2000-07-13 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_summary): New - and improved approach to fetching an entire folder summary - that should be much much faster than the old way as it gets - the entire folder summary in 1 shot rather than requesting - message by message. As with the last update, this version - also only fetches the minimum number of header fields. - (imap_get_summary): Oops, forgot to free the temp - GPtrArray *headers - -2000-07-13 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_summary): Don't - fetch the entire RFC822 header, just fetch the fields we want. - (imap_get_message_info): Same. - -2000-07-13 Not Zed <NotZed@HelixCode.com> - - * camel-mime-filter-basic.c (camel_mime_filter_basic_new_type): - Reset filter on setup. - (reset): When resetting qp encoding, set the state to -1, instead - of 0. - - * camel-mime-utils.c (quoted_encode_step): Actually count the - characters output sofar (it never counted any). Bunch of other - fixes. - (quoted_encode_close): Also flush out final character, if there's - one. - -2000-07-12 Jeffrey Stedfast <fejj@helixcode.com> - - Chris forgot to add #include <e-util/e-util.h> to the source files - - * providers/imap/camel-imap-store.c (imap_connect): Fixed Peter's - fix, we don't want to send a string to a %d. - -2000-07-12 Christopher James Lahey <clahey@helixcode.com> - - * camel-folder-search.c, providers/imap/camel-imap-store.c: - Changed from strstrcase to e_strstrcase. - - * string-utils.c, string-utils.h: Removed strstrcase (in favor of - e_strstrcase in e-util/e-util.c.) - -2000-07-12 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-folder.c - (nntp_folder_set_message_flags): get the article num out of our - uid and mark it read in the newsrc. - (nntp_folder_get_message): get the message id out of the uid to - fetch the article. - - * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): the uid - is now <article-num>,<messageid> - (get_HEAD_headers): same. - - * camel-mime-parser.c (folder_scan_step): go to HSCAN_MESSAGE - state when ct->subtype is "news" as well as "rfc822". this makes - attachments of type "message/news" display properly. - -2000-07-12 Dan Winship <danw@helixcode.com> - - * camel-folder.c (camel_folder_free_deep, - camel_folder_free_shallow, camel_folder_free_nop): Useful default - implementations for free_{uids,subfolder_names,summary}. - (free_subfolder_names, free_uids): Make these g_warning-ing - default implementations. - - * providers/*/camel-*-folder.c: Use the new functions where - appropriate, remove duplicated code. - -2000-07-12 Peter Williams <peterw@helixcode.com> - - * providers/imap/camel-imap-store.c (query_auth_types): Check for - NULL parameters when setting the exception so as to not crash on - Solaris (can't handle a %s passed NULL). - (imap_connect): Same. - -2000-07-12 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/mbox/camel-mbox-folder.c (mbox_delete_message): Use - mbox_set_message_flags () instead of setting the flags by hand. This - fixes the problem of the "message_changed" signal not being emitted - at the correct time. - - * providers/imap/camel-imap-folder.c: "folder_changed" signals should - pass a third argument (which is ignored). - - * camel-folder.c: Undo gtk signal emits done in set_flags and - expunge. - (move_message_to): - (copy_message_to): Create info as a const CamelMessageInfo - -2000-07-12 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/Makefile.am: don't add test-newsrc to the build - since it needs libcamel (which isn't built at the time test-newsrc - needs linking.) - - * providers/nntp/camel-nntp-utils.c (get_HEAD_headers): fill in - MessageInfo->message_id. - (get_XOVER_headers): same. - - * providers/nntp/camel-nntp-folder.c (nntp_folder_init): move - summary loading here. - (nntp_folder_sync): summary/newsrc changes should be stored here. - put a comment to that effect. - (nntp_folder_set_message_flags): don't save the newsrc here. - (nntp_folder_get_uids): use g_ptr_array_index instead of the - cast/addition. - (nntp_folder_get_summary): no need to check if we should generate - the summary here. already done. - (nntp_folder_get_message_info): implement. - - * providers/nntp/camel-nntp-store.c - (camel_nntp_store_get_toplevel_dir): use evolution_dir instead of - computing it ourselves. - (nntp_store_disconnect): call camel_nntp_newsrc_write. - (ensure_news_dir_exists): new function to create the news/<news - server> subdir. - (camel_nntp_store_class_init): hook up connect/disconnect and - finalize. - (nntp_store_connect): if ensure_news_dir_exists fails throw an - exception. - -2000-07-12 Peter Williams <peterw@helixcode.com> - - * camel-folder.c (camel_folder_set_message_flags): Emit a message_changed - signal once the flags are set on the message. - (camel_folder_set_user_flag): Ditto. - (camel_folder_expunge): Emit a folder_changed if no exception. - -2000-07-12 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-stream.c: Use size_t and ssize_t for read/write methods - - * providers/imap/camel-imap-folder.c (imap_set_message_flags): - Updated to emit the message_changed signal. - (imap_delete_message): Updated to use imap_set_message_flags (). - (imap_move_message_to): Updated to use imap_set_message_flags () - and to emit the folder_changed signal on the destination folder. - (imap_copy_message_to): Updated to emit the folder_changed signal - on the destination folder. - (imap_append_message): Updated to emit the folder_changed signal - on the destination folder. - -2000-07-11 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-folder.c (camel_folder_append_message): Now takes a - flags argument to specify the flags to be set on the message - since we might not necessarily want the flags to be wiped clean. - (move_message_to): - (copy_message_to): Updated to send a flags argument to - append_message (); currently sends the original message's flags. - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): - * providers/imap/camel-imap-folder.c (imap_append_message): - Updated. - -2000-07-11 Dan Winship <danw@helixcode.com> - - * camel-folder.c: Remove exceptions from a number of methods - that work on what ought to be static data: get_parent_folder, - get_parent_store, get_message_count, get_unread_message_count, - get_permanent_flags, get_message_flags, set_message_flags, - get_message_user_flag, set_message_user_flag, get_message_uid, - get_uids, get_summary, get_subfolder_names. Turn - camel_folder_delete_message into a macro. - - * providers/{mbox,pop3,vee}: Update for CamelFolder changes - - * providers/Makefile.am: Disable imap and nntp for now - -2000-07-11 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_search_by_expression): - This shouldn't return NULL, it should return g_ptr_array_new () - so the mailer gets what it expects. - -2000-07-10 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-folder-summary.c (camel_folder_summary_decode_string): - Oops, an unsigned integer can never be < 0 - -2000-07-10 Dan Winship <danw@helixcode.com> - - * providers/vee/camel-vee-folder.c (vee_search_by_expression): - Initialize a variable to make this not crash again. And fix a bug - so it actually does something. - -2000-07-10 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-folder-summary.c: Cleaned up a bunch of compile warnings - -2000-07-10 Dan Winship <danw@helixcode.com> - - * providers/vee: kill more debugging messages - -2000-07-10 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/mbox/camel-mbox-folder.c (mbox_get_unread_message_count): - * providers/vee/camel-vee-folder.c (vee_get_unread_message_count): - * providers/imap/camel-imap-folder.c (imap_get_unread_message_count): - Implemented. - - * camel-folder.c (camel_folder_get_unread_message_count): New - convenience function to allow the mailer to query the number - of unread messages in a folder (for displaying message stats - in a folder tree?). - -2000-07-09 Dan Winship <danw@helixcode.com> - - * camel-mime-utils.c (header_references_dup): New function to copy - a header_references structure. - - * camel-folder-summary.c (camel_message_info_dup_to): New function - to (deep) copy the data from one CamelMessageInfo into another. - (camel_message_info_free): And free the data. - - * providers/vee/camel-vee-folder.c (vee_sync): Implement. (empty). - (vee_search_by_expression): belatedly update for - camel_folder_search change. - (vee_folder_build): belatedly update for camel_folder_search - change. Use camel_message_info_dup_to and camel_message_info_free - (in particular, so that we get message_id and references info so - vfolders can be threaded). - (vee_folder_build_folder): Ditto. - -2000-07-08 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/nntp/camel-nntp-folder.c: - * providers/nntp/camel-nntp-utils.c: - * providers/nntp/camel-nntp-store.c: Update to reflect past changes - in the Camel API. Use gtk macro casts wherever possible and use glib's - memory functions instead of standard c's (since they are not - compatable) - - * providers/smtp/camel-smtp-transport.c: - * providers/imap/camel-imap-store.c: Wrap debug print statements - in a macro - - * providers/imap/camel-imap-stream.c (stream_read): Make sure - that we get up to and including the last \n of the mime part. - - * providers/imap/camel-imap-folder.c (imap_get_message): Make sure - that we get up to and including the last \n of the mime part. - Wrap debug print statements in a macro. - - * providers/imap/camel-imap-stream.c (stream_read): Only cache - the important data (aka the mime part requested and no extra - server response stuff) - -2000-07-07 Dan Winship <danw@helixcode.com> - - * camel-mime-utils.c (header_references_decode): Work around - In-Reply-To's with unquoted punctuation. So many broken mailers. - - * camel-folder.c (camel_folder_search_by_expression): Make this - return a GPtrArray rather than a GList. - - * camel-folder-search.c (camel_folder_search_execute_expression): - * providers/imap/camel-imap-folder.c (imap_search_by_expression): - * providers/mbox/camel-mbox-folder.c (mbox_search_by_expression): - * providers/nntp/camel-nntp-folder.c (nntp_search_by_expression): - Update to return a GPtrArray rather than a GList. - -2000-07-07 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c (esmtp_get_authtypes): - Fixed the parser to actually work - -2000-07-06 Dan Winship <danw@helixcode.com> - - * camel-mime-utils.c (header_references_decode): Make this deal - with the full RFC822 References/In-Reply-To format rather than - just the more-nicely-behaved RFC1036 version. (Needed to parse - In-Reply-To headers with extra junk in them.) - -2000-07-06 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_summary): Parse for - more header information to allow message threading in IMAP. - (imap_get_message_info): Same. - - * camel-folder-summary.c: Renamed summary_format_* to - camel_summary_format_* and moved them into public scope. - - * providers/smtp/camel-smtp-transport.c (smtp_connect): Oops. Don't - pass port # as a string in the error code (if it fails to connect). - - * providers/imap/camel-imap-folder.c (imap_append_message): Changed - over to camel_imap_command_extended as that was the source of the - problems - apparently appending replies with more than just 1 line. - -2000-07-05 Dan Winship <danw@helixcode.com> - - * camel-folder-search.c (search_header_contains): make header - matching case-insensitive - - * camel-folder-summary.c: - * camel-session.c: - * providers/mbox/camel-mbox-folder.c: - * providers/mbox/camel-mbox-summary.c: Remove some non-error case - debugging-type messages. - -2000-07-05 Ettore Perazzoli <ettore@helixcode.com> - - * providers/mbox/camel-mbox-summary.c (d): Define to empty so that - we get rid of a ton of debugging messages. - -2000-07-05 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-utils.h: Added prototype for uudecode_step - - * camel-mime-utils.c (uudecode_step): Cleaned up some junk that - should have been cleaned up when debugging printf's were taken out. - -2000-07-05 Ettore Perazzoli <ettore@helixcode.com> - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync): - Update the X-Evolution: header even if the in-memory UID and the - saved UID are not the same. Otherwise mboxes with clashing UIDs - can never be fixed. - - * camel-folder-summary.c - (camel_folder_summary_add_from_parser): Add the message to the - summary before doing any ibex stuff. In fact, this might also - have the side effect of reassigning the UID so it needs to be done - before we start using the UID. - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): Add - debugging message to keep track of the UIDs we add. - -2000-07-05 Dan Winship <danw@helixcode.com> - - * camel-folder-summary.c: Add "Cc" to summary and bump summary - version number. - - * camel-folder-search.c (search_header_contains): make "Cc" a - searchable header. - -2000-07-03 Ettore Perazzoli <ettore@helixcode.com> - - * camel-folder-summary.c (camel_folder_summary_next_uid_string): - New. - (camel_folder_summary_add): Use - `camel_folder_summary_next_uid_string()' instead of recomputing - the UID manually here. - (camel_folder_summary_add_from_parser): Likewise. - -2000-07-03 Ettore Perazzoli <ettore@helixcode.com> - - * camel-folder-summary.c (camel_folder_summary_set_uid): Removed. - -2000-07-03 Dan Winship <danw@helixcode.com> - - * camel-folder-summary.c (message_info_new): Parse In-Reply-To - with header_references_decode, not header_msgid_decode. - - * camel-mime-message.c (camel_mime_message_class_init): message - headers are case-insensitive. - - * providers/pop3/camel-pop3-store.c (camel_pop3_command): Fix a - bug in error-setting code. - (pop3_connect): Don't re-prompt for password in the KPOP case. - (pop3_get_response): New function, split out from - camel_pop3_command. - (connect_to_server): Use pop3_get_response to parse the greeting - message, and error out appropriately if it's -ERR. - -2000-07-02 Dan Winship <danw@helixcode.com> - - * camel-folder.c (camel_folder_freeze, camel_folder_thaw): New - functions to freeze and thaw a folder (to prevent message/folder - changed signals in the middle of a long series of operations). - (camel_folder_class_init): Change signals to GTK_RUN_FIRST. - (message_changed, folder_changed): Add default implementations - that stop the emission and record info for later if the folder is - frozen. - - * providers/mbox/camel-mbox-folder.c (mbox_sync): leftover fixes - from the close->sync change: don't destroy the ibex, summary, and - search when syncing. - (append_message): emit "folder_changed" on a successful append. - -2000-07-02 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-utils.c (uudecode_step): A rather complex uudecoder - written in the spirit of Zucchi-ness, is it up to par? Only the - Z-man can tell us :-) - -2000-07-01 Dan Winship <danw@helixcode.com> - - * camel-service.c (camel_service_get_name): New method, to return - an end-user-friendly name corresponding to a service. (eg, "POP - service for danw on trna.helixcode.com"). - - * providers/imap/camel-imap-store.c, - providers/mbox/camel-mbox-store.c, - providers/nntp/camel-nntp-store.c, - providers/pop3/camel-pop3-store.c, - providers/sendmail/camel-sendmail-transport.c, - providers/smtp/camel-smtp-transport.c: Implement. - - * providers/imap/Makefile.am: remove unneeded - libcamelimap_la_LDADD. - - * providers/pop3/camel-pop3-store.c (connect_to_server): fix the - CAPA-parsing code to not get into an infinite loop. - -2000-07-01 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_message): Fixed - the bug that would sometimes leave part of the server response - tacked on to the end of the message. - - * camel-folder.c: Renamed _by_uid methods. Since we no longer - have get-by-number methods, no need to have the _by_uid - extensions. - (get_message_by_uid): Renamed to get_message - (delete_message_by_uid): Renamed to delete_message - (summary_get_by_uid): Renamed to get_message_info - - * providers/mbox/camel-mbox-folder.c: - * providers/pop3/camel-pop3-folder.c: - * providers/imap/camel-imap-folder.c: - * providers/vee/camel-vee-folder.c: Updated to reflect - camel-folder changes. - -2000-06-30 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-folder.c (camel_folder_copy_message_to): New function, to - copy a message from one folder to another. The default - implementation just uses append_message, but providers can - implement more efficient versions for use when both folders are on - the same store. - - * broken-date-parser.[c,h]: Utilities for parsing broken - date strings. - - * providers/imap/camel-imap-folder.c (imap_move_message_to): - (imap_copy_message_to): Implemented. - - * camel-mime-utils.c (header_decode_date): Wrote some code to try - and un-mangle broken date formats and then parse that new string - instead. - -2000-06-30 Dan Winship <danw@helixcode.com> - - * camel-folder.c (camel_folder_move_message_to): New function, to - move a message from one folder to another. The default - implementation just uses append_message and delete_message, but - providers can implement more efficient versions for use when both - folders are on the same store. - -2000-06-29 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_expunge): Should now - print a meaningful error message when it doesn't succeed - -2000-06-28 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (imap_connect): Changed to - keep prompting user for a valid password until it either - authenticates or until Canceled by the user. - (camel_imap_command_extended): Improved speed (replaced the - g_strjoinv call with a faster implementation) - - * providers/pop3/camel-pop3-store.c - (camel_pop3_command_get_additional_data): Fixed. - (pop3_connect): Changed to keep prompting the user for a - password until it either works or until Canceled by the user. - - * providers/mbox/camel-mbox-summary.c: General cleanup - (camel_mbox_summary_sync): Fixed a memory leak and added - CamelException handling. - - * providers/mbox/camel-mbox-store.c (delete_folder): Fixed a - memory leak - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): - Default 'off_t seek' to -1 so as to make sure it's initialized - before it's used in the case of a bad stat() call. - (mbox_sync): Updated - (mbox_expunge): Updated - -2000-06-27 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (imap_connect): Move the - CAPABILITY command here so we don't have to keep checking - each time we open a folder. - (camel_imap_command_extended): If we are doing an EXAMINE, - don't bother doing a SELECT first. - - * providers/imap/camel-imap-folder.c (imap_init): Update so - folder->has_search_capability depends on the parent IMAP store - (since this is really dependant on the IMAP implementation and - not the folder) - -2000-06-27 Christopher James Lahey <clahey@helixcode.com> - - * providers/smtp/camel-smtp-transport.c: Don't close the filter - stream when done with it (this causes the source stream to close); - Instead, just flush it when done. - -2000-06-27 Michael Zucchi <zucchi@zedzone.mmc.com.au> - - * camel-folder-search.c (search_header_contains): Make header - search 'to' match 'to', and not 'from', small typo, fixes #317. - -2000-06-26 Christopher James Lahey <clahey@helixcode.com> - - * providers/mbox/camel-mbox-summary.c: Added debugging - information. - -2000-06-23 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c: - * providers/imap/camel-imap-folder.c: Improved folder parsing. - Not specifying a namespace should no longer list the entire - filesystem. - -2000-06-22 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/.cvsignore: ignore test-newsrc - - * providers/nntp/camel-nntp-store.c, - providers/nntp/camel-nntp-store.h, - providers/nntp/camel-nntp-folder.c, - providers/nntp/camel-nntp-folder.h, - providers/nntp/camel-nntp-utils.c: Bring the nntp provider up to a - state where it builds and is usable with the current camel. there - are still warts (semi-broken .newsrc file handling, and a lack of - a subscribe ui -- in fact no way to add a new server, really), but - it'll display news messages. - - * providers/nntp/Makefile.am (libcamelnntp_la_SOURCES): add - camel-nntp-newsrc.c - (libcamelnntpinclude_HEADERS): add camel-nntp-newsrc.h - also, add test-newsrc stuff. - - * providers/nntp/test-newsrc.c: new file that tests the newsrc - stuff by parsing and regurgitating a .newsrc file for a particular - server. - - * providers/nntp/camel-nntp-newsrc.c, - providers/nntp/camel-nntp-newsrc.h: new files, initial support for .newsrc files. - -2000-06-22 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_message_count): - Oops. Now appends the namespace to the folder before querying - for the number of messages. - - * providers/imap/camel-imap-store.c (imap_folder_exists): New - convenience function for use by imap_create(). - (get_folder): If folder is specified as "/", we really want - "INBOX". - - * providers/sendmail/camel-sendmail-provider.c: - * providers/vee/camel-vee-provider.c: - * providers/smtp/camel-smtp-provider.c: - * providers/mbox/camel-mbox-provider.c: - * providers/pop3/camel-pop3-provider.c: - * providers/imap/camel-imap-provider.c: Updated - - * camel-session.c: Moved service_cache hash table into the - providers. - (service_cache_remove): Updated. - (camel_session_get_service): Updated. - - * camel-url.c (camel_url_hash): Took out the hashing of - url->passwd. We don't want this anymore. - - * providers/imap/camel-imap-folder.c (imap_init): Took out - references to 'namespace' - (camel_imap_folder_init): Same - - * providers/imap/camel-imap-folder.h: No more namespace. We are - instead going to use url->path as the namespace. - -2000-06-21 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (imap_create): Modified to - use the "namespace" (url->path) if it exists. - - * providers/imap/camel-imap-folder.c (imap_delete_message_by_uid): - Now just sets the deleted flag on the summary rather than speaking - directly to the IMAP server. This is both faster and cleaner. - -2000-06-21 Dan Winship <danw@helixcode.com> - - * providers/pop3/camel-pop3-store.c (query_auth_types): Fix dumb - bug. - -2000-06-21 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_message_by_uid): - We are getting mail in IMAP now!! whoo-hoo!. Stripped out the - filtering so messages may have some dot-stuffing, but the - filtering can always be added back in later when we know it - works and isn't the problem. - -2000-06-21 Peter Williams <peterw@curious-george.helixcode.com> - - * providers/mbox/camel-mbox-folder.c (mbox_init): Use the basename - of the mailbox so we don't get pathnames like ~/evolution/inbox///movemail.ibex - -2000-06-21 Dan Winship <danw@helixcode.com> - - * camel-folder-summary.c (message_info_new): Set date_received - based on the first (most recent) "Received" header. - -2000-06-20 Dan Winship <danw@helixcode.com> - - * camel-mime-part.c (write_to_stream): flush the filter stream - before unreffing it, so it will camel_mime_filter_complete. - - * camel-stream-filter.c (camel_stream_filter_class_init): Fix a - braino so camel_stream_flush works here. - - * camel-stream-mem.c (stream_seek): Fix a bug that resulted in - large attachments being silently dropped. - - * providers/pop3/camel-pop3-store.c - (camel_pop3_command_get_additional_data): Don't use g_strjoinv - here, since it is O(n^2) on the length of the output string, and - we can do O(n). - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): add a CRLF decoder - after the QP/B64 decoder if it's text. - -2000-06-20 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_summary): Only - fetch the summary if the folder summary doesn't already exist. - When the summary *does* exist, start fetching from 1, not 0. - (imap_free_summary): Don't do anything here. - (imap_finalize): Free the summary here instead of in - imap_free_summary(). - (imap_set_message_flags): Implemented - (imap_sync): Added code to set flags on messages that have had - their flags changed (however I #if'd it out until we are more - confidant in the IMAP code :) - (imap_summary_get_by_uid): Now parese flags correctly. - (imap_get_summary): Now parese flags correctly. Also correctly - parses the UID correctly. - - * camel-url.c (check_equal): No need to check s1 if s2 is NULL - (camel_url_equal): Don't check the passwd component of the url. - -2000-06-20 Dan Winship <danw@helixcode.com> - - * camel-folder-summary.c (camel_folder_summary_add): mark the - message info with CAMEL_MESSAGE_FOLDER_FLAGGED if we change the - uid, so the folder will know that it's dirty. - -2000-06-20 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (camel_imap_command_extended): - Now returns the last line of data that the server sends back as - well. This is needed for commands like SELECT (like Peter pointed - out). - (camel_imap_command): No longer checks for SELECT (no need) - - * providers/imap/camel-imap-folder.c: Added namespace stuff - which we will need later on... - (imap_parse_subfolder_line): Convenience function for use in - get_subfolder_names() - (imap_get_subfolder_names): Updated. Also changed it to use LIST - instead of LSUB (temporary change). - -2000-06-19 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (camel_imap_folder_init): Set - summary equal to NULL. - (imap_get_summary): Store the summary in the ImapFolder - (imap_summary_get_by_uid): If we have a summary cache in the - ImapFolder, first check to see if that message info is in the - cached summary first, if not fetch it directly from the IMAP - server and append it to the summary cache. - (imap_get_message_flags): Don't free the message info that we get - back from summary_get_by_uid as we don't want to be corrupting our - cached summary. - -2000-06-19 Peter Williams <peterw@curious-george.helixcode.com> - - * providers/imap/camel-imap-store.c (camel_imap_command{,_extended}): When - SELECT'ing a folder for an IMAP command, use _extended to grab the entire - response (before we just used camel_imap_command and missed the OK codes) - -2000-06-18 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_summary_get_by_uid): - Now gets the message flags as it should. - (imap_get_summary): Same as imap_summary_get_by_uid - (imap_get_permanent_flags): Return the permanent flags stored - on the folder. - (imap_get_message_flags): Return message flags associated with - given uid. Note: we may want to somehow cache summary info so - that we don't have to keep querying the IMAP provider in - imap_summary_get_by_uid(). - -2000-06-17 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_free_summary): We were - leaking memory - but not anymore! - (imap_get_summary): We now get the UIDs and the beginnings of the - code to get the message flags as well. - -2000-06-17 Dan Winship <danw@helixcode.com> - - * camel-mime-parser.c (folder_scan_header): Don't copy newlines - into the parsed header text, and turn any number of tabs and - spaces after a newline into a single space. - -2000-06-17 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_init): Should now - correctly do CAPABILITY. - -2000-06-17 Dan Winship <danw@helixcode.com> - - * providers/mbox/camel-mbox-summary.c: Add some debugging printfs - when rebulding summary to help figure out why people's summaries - are always being rebuilt. - -2000-06-17 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_search_by_expression): - Began to implement, need to get information on how to - deconstruct @expression into an IMAP search expression and - parse the results. - (imap_init): Now queries the IMAP provider for CAPABILITY to - determine if SEARCH is implemented or not. - - * providers/imap/imap.c: Removed - no longer a need to have - this as an example for anyone interesting to help mecode IMAP - support. - -2000-06-16 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_sync): Added code - to expunge if called for (still need to finish coding this). - (imap_get_uids): Implemented. - (imap_get_summary): Found a way to get the date - (imap_summary_get_by_uid): Same. - (imap_free_summary): Implemented. - - * string-utils.c (strstrcase): Fixed a compile warning - - * providers/imap/camel-imap-summary.c: Removed - we don't - need a CamelImapSummary structure. - -2000-06-16 Dan Winship <danw@helixcode.com> - - Move flag handling from CamelMimeMessage to CamelFolder. This - simplifies several flag-handling pieces of code in the mailer, and - lets you change a message's flags without having to fetch the - message body. It also means that fully-constructed - CamelMimeMessages are now essentially constant, which will help - simplify locking issues later since it means two threads - interested in the same message can just work with separate copies - of it. - - * camel-mime-message.h (struct _CamelMimeMessage): Removed flags - and user_flags (moved to summary). Removed expunged and - message_number which were unused. Removed message_uid and folder - which are no longer needed in the new scheme. - (struct CamelMimeMessageClass): Removed message_changed signal and - get/set_message_number methods. - - * camel-mime-message.c: Updates for CamelMimeMessage changes. - (camel_mime_message_get/set_flags, - camel_mime_message_get/set_user_flag): Replaced with methods in - CamelFolder. - (camel_flag_get, camel_flag_set, camel_flag_list_size, - camel_flag_list_free): Moved verbatim to camel-folder-summary.c - - * camel-folder.c (camel_folder_get/set_message_flags, - camel_folder_get/set_message_user_flag): New methods (and - corresponding useless default implementations) - (camel_folder_class_init): add a message_changed signal - - * camel-folder-summary.c (camel_flag_get, camel_flag_set, - camel_flag_list_size, camel_flag_list_free): Moved here from - camel-mime-message.c - - * providers/mbox/camel-mbox-folder.c (message_changed): Removed. - (mbox_get_message_flags, mbox_set_message_flags, - mbox_get_message_user_flag, mbox_set_message_user_flag): Tweak - summary bits as appropriate. (Functionality moved here from - message_changed.) - (mbox_get_message_by_uid): Update for CamelMimeMessage changes - (less stuff to initialize). - - * providers/imap/camel-imap-folder.c (message_changed): Remove - this. It was just copied from the mbox provider and doesn't deal - with the real IMAP flag stuff anyway. (So there's currently no - flag support in the IMAP provider.) - (imap_get_message_by_uid): Update for CamelMimeMessage changes. - - * providers/vee/camel-vee-folder.c: (message_changed): Remove old - one. Add a new one to listen for message_changed on each folder - and re-emit message_changed signals that correspond to messages in - the vfolder. - (vee_get/set_message_flags, vee_get/set_message_user_flag): Proxy - flag setting to the underlying real messages. - (vee_append_message): Removed for now; there's no way to translate - this into the new CamelMimeMessage/CamelFolder scheme, but (a) - there's also no code which would ever call it and (b) we're - probably going want a better interface than append_message for - message drag and drop to work anyway. To be revisited. - -2000-06-16 Dan Winship <danw@helixcode.com> - - * camel-mime-utils.c (rfc2047_decode_word): - * camel-mime-part-utils.c (simple_data_wrapper_construct_from_parser): - * camel-folder-summary.c (summary_build_content_info): - KLUDGE! Since neither ETable nor GtkHTML supports UTF-8 yet, - output ISO-8859-1 instead, so Ettore can read his Italian mail. :) - This will be reverted later. - -2000-06-15 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_summary): Started to - implement - may want to use ENVELOPE instead of BODY.PEEK[HEADER] - (imap_summary_get_by_uid): Started to code, I've got to find a way to - get the date in time_t format and also get the flags - - * string-utils.c (strstrcase): Added this convenience function - I - know about strcasestr() but it's not portable. - -2000-06-15 Dan Winship <danw@helixcode.com> - - * camel-service.c: Remove camel_service_connect_with_url. (URLs - must be specified when the service is requested from the session, - so that there can only ever be one service for any URL.) - - * camel-folder.c: (camel_folder_open, camel_folder_is_open, - camel_folder_get_mode): Kill. Folders are now always open, and - handle "closing" sorts of operations at sync or finalize time. - (camel_folder_sync): renamed from camel_folder_close. Syncs state - to the store but doesn't necessarily close/disconnect. - - * providers/*/camel-*-folder.c: Merge "open" methods into "init" - methods. Rename close to sync and update appropriately. - - * providers/imap/camel-imap-store.c: Remove camel_imap_store_open - and camel_imap_store_close, which should not have been copied from - the POP provider (where the exist to work around limitations of - the POP protocol). - - * providers/mbox/camel-mbox-summary.c: fix a bug. (don't expunge - deleted messages if called with expunge == FALSE) - - * providers/pop3/camel-pop3-store.c (connect_to_server): Check - server for various interesting extensions. - - * providers/pop3/camel-pop3-folder.c (get_uids): If the server - supports UIDL, use real UIDs rather than fake ones. - (etc): Map uids back to numbers appropriately - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): Fix to - previous change: make sure the "seek" variable ends up with the - value it should. - - * providers/mbox/camel-mbox-summary.c (summary_rebuild): Update - summary mtime as well as size. - -2000-06-14 Dan Winship <danw@helixcode.com> - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): if the - mbox doesn't end with a '\n', write one before appending the new - message. - -2000-06-14 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-filter-crlf.c (filter): Updated the encoder to allocate - more memory (since we are also now adding dots). Also updated the - decoder as we have found that it sometimes passes the end of the - buffer. - - * providers/pop3/camel-pop3-folder.c (get_message_by_uid): Took out the - filter code (we already filter in - camel_pop3_command_get_additional_data) - - * camel-folder.c (init): Updated: a separator is now a char* rather - than a single char because IMAP can have a string for a directory - separator. Also, since IMAP does not begin with a directory separator, - there is a new argument (path_begins_with_sep) which decides if a - directory should begin with a directory separator. - - * providers/imap/camel-imap-store.c (imap_create): Since, on connect, - Camel tries to create INBOX (which already exists on every IMAP - provider) we can return TRUE when the folder name is "INBOX". - - * providers/vee/camel-vee-folder.c (vee_init): Updated. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Updated. - - * providers/mbox/camel-mbox-store.c (get_folder): Updated. - - * providers/mbox/camel-mbox-folder.c (mbox_init): Updated. - - * providers/pop3/camel-pop3-folder.c (camel_pop3_folder_new): Updated. - -2000-06-14 Dan Winship <danw@helixcode.com> - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync): - Renamed from camel_mbox_summary_expunge. Takes a gboolean saying - whether to expunge or just sync the mbox file. Change some - g_errors to g_warning so we don't abort. Make the quick - X-Evolution updating code lseek around correctly. Update the - mbox mtime in the summary file even in the quick case. - - * providers/mbox/camel-mbox-summary.h: make - CAMEL_MESSAGE_FOLDER_NOXEV not conflict with - CAMEL_MESSAGE_FOLDER_FLAGGED defined in camel-mime-message.h - - * providers/mbox/camel-mbox-folder.c (mbox_close): call - camel_mbox_summary_sync to save flag state if not expunging. - (mbox_expunge): Update for camel_mbox_summary_expunge rename. - -2000-06-13 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (camel_imap_store_open): - (camel_imap_store_close): Added. - (camel_imap_command_extended): Fixed a segfault and updated - to use camel_imap_status() - (camel_imap_command): Updated to use camel_imap_status() - (camel_imap_status): New convenience function for parsing - the return status of an IMAP command - -2000-06-12 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c (imap_get_message_by_uid): - Works like the POP fetch code, should work temporarily until - we get around to coding it the way it "Should Be". - - * providers/pop3/camel-pop3-folder.c (get_message_by_uid): Now uses - the camel-mime-filter-crlf decoder when retrieving messages. - - * camel-mime-filter-smtp.c: Deprecated. - - * providers/smtp/camel-smtp-transport.c (smtp_data): Updated to use - camel-mime-filter-crlf with my 'dot' extension in place of - camel-mime-filter-smtp - - * camel-mime-part.c (write_to_stream): Updated to reflect changes - made to camel-mime-filter-crlf.c - - * camel-mime-filter-crlf.c (filter): Modified to be able to - encode/decode dots ("\n.\n"<->"\n..\n"). Also fixed the decoder - so that it should no longer get caught in an infinite loop. - -2000-06-12 Dan Winship <danw@helixcode.com> - - * providers/*/Makefile.am: don't pass a second (incorrect) -rpath - in addition to the (correct) one automatically provided by - automake. - - * camel-mime-filter-crlf.c: New filter to do CRLF<->LF conversion. - (Currently only tested in the LF->CRLF direction.) - - * camel-mime-part.c (write_to_stream): if content-type is text, - and it's QP or B64 encoded, pass through the CRLF filter before - the other filter to satisfy the "canonical encoding" rules in the - MIME spec. - -2000-06-09 Dan Winship <danw@helixcode.com> - - * camel-session.c (camel_session_query_authenticator): Add another - argument, "mode", which can be CAMEL_AUTHENTICATOR_ASK or - CAMEL_AUTHENTICATOR_TELL, so callers can get the app to un-cache - bad info. - - * providers/pop3/camel-pop3-store.c (pop3_connect): uncache the - password if it doesn't work. - -2000-06-09 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-stream.c (stream_read): Updated to reflect - changes made in camel-imap-store.c - - * providers/imap/camel-imap-store.c (imap_create): No longer checks to - make sure a folder doesn't already exists (as this is no longer needed) - (camel_imap_command): Now takes a CamelFolder argument so it can detect - whether or not it needs to SELECT a folder or not - (camel_imap_command_extended): Same. - - * providers/smtp/camel-smtp-transport.c (smtp_connect): Will now always - send EHLO first, if that fails it will fall back on HELO. - (esmtp_get_authtypes): Should now correctly parse authtypes. - -2000-06-07 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-summary.c: Now builds (not that it's worth - much yet). - - * providers/imap/camel-imap-folder.c (imap_get_uids): Now uses the - correct cast to a CamelImapMessageInfo structure (should get rid of - compile warnings). - - * providers/imap/Makefile.am: Added rules to build - camel-imap-stream - - * providers/imap/camel-imap-store.c (get_folder): Update. - Moved imap_create here. - - * providers/imap/camel-imap-folder.c (delete_messages): Remove. - (imap_create): Removed. - (imap_delete): Removed. - (imap_exists): Removed. - - * providers/imap/camel-imap-stream.h: Added typedef's for the stream - - * providers/imap/camel-imap-stream.c: Modified to build cleanly - -2000-06-07 Not Zed <NotZed@HelixCode.com> - - * camel-mime-utils.c (header_msgid_decode_internal): Properly - dereference warning/debug messages. - (header_references_decode): Check we actually have msgid stuff - before trying to decode it ... - -2000-06-06 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-imap-stream.[c,h]: Removed - - * providers/imap/camel-imap-stream.[c,h]: Relocated to this - location - - * providers/imap/camel-imap-summary.c: Added - -2000-06-06 Dan Winship <danw@helixcode.com> - - * camel-folder.c: Remove exists, create, delete. A CamelFolder - now always references an existing folder. Remove delete_messages - too since it wasn't being used. Add a "create" flag to - get_subfolder saying whether or not to create the subfolder if it - doesn't yet exist. - - * camel-store.c (camel_store_get_folder): Add a "create" flag to - say whether or not to create the folder if it doesn't yet exist. - (camel_store_delete_folder): New method, moved from CamelFolder. - (cache_folder, uncache_folder): Fix up a bit. - (get_folder_name): Explain what this is for. - - * providers/mbox/camel-mbox-folder.c: - * providers/mbox/camel-mbox-store.c: Update. Remove support for - hierarchical folders to simplify this for now, since we're not - using it, and it's not completely clear how they should work in an - ELocalStorage world. Needs to be revisited. - - * providers/pop3/camel-pop3-folder.c (delete_messages): Remove. - * providers/pop3/camel-pop3-store.c (get_folder): Update. - - * providers/vee/camel-vee-folder.c (exists): Remove. - * providers/vee/camel-vee-store.c (vee_get_folder): Update. - -2000-06-06 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-*.[c,h]: Started on getting - imap to build cleanly (tho some work has not been completed - so it still won't build until camel-imap-summary is finished - along with a few methods in camel-imap-folder) - - * camel-stream.[c,h]: Changed the read and write method prototypes - to return an ssize_t type rather than an int and also changed - the 'number of bytes' to read or write to a size_t type - - * camel-stream-fs.c: same as above - - * camel-stream-mem.c: again, same as above - - * camel-stream-buffer.c: same - - * camel-imap-stream.[c,h]: Added this new stream, cache's previously - read data so each successive call will instead read from the cache - -2000-06-05 Dan Winship <danw@helixcode.com> - - * camel-mime-part.c (camel_mime_part_set_disposition): fix - typo/braino (set "Content-Disposition", not "Content-Description") - (camel_mime_part_set_filename): const poison - -2000-06-02 Not Zed <NotZed@HelixCode.com> - - * camel-mime-utils.c (base64_encode_step): Ick, damn signs! Fix a - bug with sign extended bytes. - - * camel-mime-filter-smtp.c (filter): Changed layout/logic slightly - (to match From filter) - -2000-06-02 Jeffrey Stedfast <fejj@helixcode.com> - - * camel-mime-filter-smtp.c (filter): Fixed the filter so that it - wouldn't insert garbage under certain conditions. - -2000-06-02 Christopher James Lahey <clahey@helixcode.com> - - * camel-session.c: Don't ref the services in the cache. - -2000-06-02 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c: Rearanged where debug - fprintf statements we placed so that any data the server sends - back is printed out before an exception is set and the function - returns. - -2000-06-02 Not Zed <NotZed@HelixCode.com> - - * camel-mime-utils.c (header_decode_date): If we get a funny - result, just throw it out. Basically a fix for the one true - broken TradeClient. - -2000-06-01 Not Zed <NotZed@HelixCode.com> - - * camel-folder-summary.c (message_info_free): Free - references/messsage id. - (message_info_save): Save them. - (message_info_load): Load them. - (message_info_new): And get them from the new message. - (CAMEL_FOLDER_SUMMARY_VERSION): Bumped for new changes. - - * camel-folder-summary.h: Added references and messageid to - summary. - -2000-06-02 Christopher James Lahey <clahey@helixcode.com> - - * camel-session.c: Ref and unref objects in the service cache - properly. - - * camel-store.c: Ref the folder when returning it using - lookup_folder. Used the folder's full name for the key for the - folder cache since that's used to uncache it. - -2000-06-02 Dan Winship <danw@helixcode.com> - - Fun with purify. - - * providers/pop3/camel-pop3-store.c (pop3_connect): free msg on - success as well as failure. - (camel_pop3_command_get_additional_data): free buf after reading - the last line ("."). - - * providers/pop3/camel-pop3-folder.c (get_message_by_uid): free - body data after creating the memstream from it (which will copy - the data). - - * providers/mbox/camel-mbox-folder.c (mbox_finalize): free summary - and index paths. - - * camel-data-wrapper.c (finalize): unref the stream, if it exists. - -2000-06-01 Not Zed <NotZed@HelixCode.com> - - * camel-mime-part.c (construct_from_parser): For a message part, - set the default content-type to message/rfc822. Maybe needs to be - done for multiparts too? - -2000-05-31 Not Zed <NotZed@HelixCode.com> - - * camel-mime-message.c (construct_from_parser): Typo in assersion. - - * camel-mime-parser.c (folder_scan_step): Use a default type of - message/rfc822 for multipart/digest. Bug Z192. - (folder_scan_drop_step): Remove warning. - -2000-05-30 Not Zed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): Init - filter_from to NULL, for exception case. - (mbox_get_message_by_uid): Cast off_t to long int for diagnostics. - - * camel-url.c (camel_url_hash): Hash funciton for using camel - url's as hash keys. - (camel_url_equal): equal function for same. - - * camel-session.c (camel_session_finalise): Free cached services. - (camel_session_init): Init service cache. - (service_cache_remove): destroy callback to remove a service from - the cache. - - * camel-store.c (get_folder_internal): Remove the extra ref of the - folder. That seems the right behaviour ...? - (camel_store_get_type): Doh, actually call store init, so the - cache works. - (cache_folder): strdup the folder name! no wonder it never found - it again. - -2000-05-30 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-folder.c: Implemented a few more - methods like imap_append and 1 or 2 others - -2000-05-29 Not Zed <NotZed@HelixCode.com> - - * camel-store.c (camel_store_init): Move it to here. If this - level is going to maintain it, it should set it up. Lets see what - caching folders breaks :( - - * providers/pop3/camel-pop3-store.c (camel_pop3_store_init): Dont - init folder cache here. - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_expunge): Make sure we copy messages which are - still intact to the new folder. - (camel_mbox_summary_expunge): Update the frompos as well when - moving the content. - (camel_mbox_summary_expunge): Remove some debug, and dont offset - frompos? - - * providers/vee/camel-vee-folder.c (vee_folder_build): Check the - searched folder is open before trying to search it. - (message_changed): Track changes to the source message in the - summary. - (folder_changed): Track folder changes, re-query the folder that - changed, and cascade the changed event as well. - (camel_vee_folder_finalise): Free subfolder and subfolder summary. - -2000-05-29 Dan Winship <danw@helixcode.com> - - * camel-service.c (camel_service_new): Fix up some glib - precondition stuff. Try to set the URL in camel_service_new before - checking whether or not it's "empty" so that you can successfully - set "sendmail:" as a URL. - -2000-05-28 Dan Winship <danw@helixcode.com> - - * camel-provider.h: Add a domain field to CamelProvider, to say - what kind of data it provides. - - * providers/imap/camel-imap-provider.c: - * providers/mbox/camel-mbox-provider.c: - * providers/pop3/camel-pop3-provider.c: - * providers/sendmail/camel-sendmail-provider.c: - * providers/smtp/camel-smtp-provider.c: Set domain to "mail". - - * providers/nntp/camel-nntp-provider.c: Set domain to "news". - - * providers/vee/camel-vee-provider.c: Set domain to "vfolder". (So - it doesn't end up being listed as a potential mail source in the - mail config wizard.) - - * providers/pop3/camel-pop3-store.c: Split apart password and APOP - auth, since some servers seem to do both, but don't really. - (connect_to_server): Renamed from try_connect. Now actually does - the connection up to the point of checking the greeting for APOP - support. - (query_auth_types): Return APOP, if appropriate. Call - pop3_disconnect after connect_to_server since we don't really want - to be connected. - (pop3_connect): Use connect_to_server rather than duplicating - code. Fix a one-byte buffer overrun in the APOP code. - (pop3_disconnect): Make this able to clean up after a partial - connect. - (connect_to_server): Remove port number from error message since - it's not terribly useful and we were getting it from the wrong - place anyway. - - * camel-mime-utils.c (header_address_list_format_append): Use - `foo@bar' rather than `"" <foo@bar>' for email addresses with no - name component. - -2000-05-27 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c: Removed - camel_imap_command_get_additional_data() as it was - completely useless, replaced with - camel_imap_command_extended() which may eventually replace - camel_imap_command() as well. - - * providers/imap/camel-imap-store.h: Modified to reflect - changes made to camel-imap-store.c - - * providers/imap/camel-imap-folder.c: Wrote the first of many - methods: camel_imap_init(), imap_open(), imap_expunge(), - imap_get_message_count(), and imap_get_subfolder_names() - -2000-05-26 Dan Winship <danw@helixcode.com> - - * camel-multipart.c (camel_multipart_init): Don't set a default - boundary. Require the caller to do that. - (set_boundary): if boundary is NULL, generate a "random" boundary. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Add a call to - camel_multipart_set_boundary after creating a new multipart. - -2000-05-25 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap/camel-imap-store.c (try_connect): Removed - Exception code - Pop doesn't seem to set exceptions - - * providers/imap/camel-imap-folder.c: Initial code, mostly - just a template for future code - - * providers/imap/imap.[c,h]: Source code from my personal - mailer - for reference only! - -2000-05-25 NotZed <NotZed@HelixCode.com> - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Replace simple - data wrapper here too, oops. - - * Makefile.am (libcamel_la_SOURCES): Removed - camel-simple-data-wrapper again. Less code to maintain == better - code. - - * camel-data-wrapper.c (construct_from_stream): Fixes for bug - where text attachments dont work. Made data-wrapper concrete for - the second time. - -2000-05-23 NotZed <NotZed@HelixCode.com> - - * providers/vee/camel-vee-folder.c (vee_folder_build_folder): - Update the vfolder details for a single folder. - -2000-05-25 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c (_send_to): Took out code - that had been there to reconnect to the server if it was not - already connected - Mailer code was fixed so that this should not - be needed. - - * providers/imap/camel-imap-store.[c,h]: Initial code. - -2000-05-24 Dan Winship <danw@helixcode.com> - - * camel.h: Re-add camel-simple-data-wrapper.h, which was removed - for some reason. - -2000-05-24 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.[c,h]: Moved global - variables into struct CamelSmtpTransport to make SMTP - thread-safe - - * providers/imap/camel-imap-*.h: Stolen from Mbox. Rough structure - for Imap. - -2000-05-23 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/imap: Added some initial code to the camel tree - for IMAPv4 - - * providers/imap/.cvsignore: Added to repository - - * providers/smtp/camel-smtp-transport.c: Added debug fprintf's - so that testers can provide more information. Tested with simple - messages and a reply to the hello@helixcode.com default message - but should really be tested more. - (smtp_data): Fixed to use data_wrapper_write_to_stream. - - * camel-mime-filter-smtp.c (filter): Modified to escape all lines - beginning with a '.' and to place a \r before each \n if one did - not previously exist. Removed code to escape "From " as it was - found to not be needed for SMTP. - -2000-05-22 Jeffrey Stedfast <fejj@helixcode.com> - - * providers/smtp/camel-smtp-transport.c (smtp_data): Fixed the - filtered stream. Fixes for stream changes, updated to use - camel-mime-filter-smtp. - - * Makefile.am: Added camel-mime-filter-smtp.c - - * camel-mime-filter-smtp.[c,h]: Added to camel tree - Smtp filter used to change \n into \r\n, escape lone dots, - and escape "From "'s. - -2000-05-19 NotZed <NotZed@HelixCode.com> - - * camel-simple-data-wrapper.c (construct_from_stream): If we - already have been constructed, unref our content. - (write_to_stream): Check we've been constructued, and change for - stream api changes. - - * camel-mime-parser.c: Removed exception stuff. - - * md5-utils.c (md5_get_digest_from_stream): repaired. - - * camel-mime-message.c: Remove exception from write_to_stream, and - fix, and fix formatting. - - * providers/sendmail/camel-sendmail-transport.c (_send_internal): - Fix for stream changes. - - * providers/pop3/camel-pop3-store.c (camel_pop3_command): Fixes - for stream changes. - - * providers/mbox/camel-mbox-folder.c, and elsewhere, fix all - stream api changes. - (mbox_append_message): Use stream_close() now its back. - (mbox_append_message): unref the from filter. - - * camel-stream-mem.c: And here. - - * camel-stream-fs.[ch]: Here too. - - * camel-stream-filter.c: Likewise. This is getting tedious. - - * camel-stream-buffer.c (stream_write): Fix a few little problems. - (stream_close): Reimplement. - (camel_stream_buffer_read_line): Slightly more efficient version, - that also only allocates the right amount of memory for strings. - - * camel-seekable-substream.c: Likewise. - - * camel-seekable-stream.[ch]: Remove exceptions, fix formatting, - changes for stream (re)fixes. set_bounds returns an error. - - * camel-stream.[ch]: Remove exceptions. Make flush and reset return - an error code, repair all the screwed up formatting, and put back - close. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): And here. - - * camel-mime-part.c (camel_mime_part_set_content): And this too. - (write_to_stream): Fixed for stream changes. - - * camel.h: Fixed. - - * providers/vee/camel-vee-folder.c (vee_search_by_expression): - Implement. Performs an intersection of the two searches. - (camel_vee_folder_finalise): Unref search folders. - (vee_append_message): Implement append. - -2000-05-18 Dan Winship <danw@helixcode.com> - - * camel-folder.c: remove message_number_capability and require uid - capatibility. - (camel_folder_list_subfolders, camel_folder_get_uid_list, - camel_folder_get_subfolder_info, camel_folder_get_message_info): - removed - (camel_folder_get_subfolder_names, - camel_folder_free_subfolder_names): new subfolder interfaces. - (camel_folder_get_uids, camel_folder_free_uids): new uid - interfaces - (camel_folder_get_summary, camel_folder_free_summary): new summary - interfaces - - * providers/mbox/camel-mbox-folder.c, - * providers/nntp/camel-nntp-folder.c: - * providers/vee/camel-vee-folder.c: Update for changes - - * providers/pop3/camel-pop3-folder.c: Implement get_uids, update - for other changes. - -2000-05-18 NotZed <NotZed@HelixCode.com> - - * providers/vee/camel-vee-folder.c: Guess! - - * camel-folder-search.c (search_user_flag): Implement user_flag - search term. - - * camel-folder-search.h: Added user_flag search capability - (user-flag "blah") - - * providers/mbox/camel-mbox-folder.c (mbox_init): Set USER flag in - permanent flags for the folder. - -2000-05-17 Dan Winship <danw@helixcode.com> - - * camel-folder.c: Remove unused async open/close and - copy_message_to functions. - Rename functions without initial _. Fix glib preconditions and - gtk-doc comments. - -2000-05-17 Dan Winship <danw@helixcode.com> - - * camel-data-wrapper.c: remove get/set_output_stream operations. - They're redundant with write_to_stream, and CamelMimePart and - CamelMimeMessage only implement the latter, meaning that trying to - get_output_stream on a CamelMimeMessage that was built from pieces - rather than being parsed from a stream doesn't work. Anything that - uses get_output_stream can be rewritten to use write_to_stream, so - we'll standardize on that. - (camel_data_wrapper_new): remove this: CamelDataWrapper is - supposed to be an abstract class. - (write_to_stream): remove default implementation. (Moved to - CamelSimpleDataWrapper) - - * camel-simple-data-wrapper.c: resurrect, although it's not really - the same thing it was before. A simple data wrapper, which is - backed by a CamelStream. - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): Use - construct_from_stream rather than set_output_stream. - (camel_mime_part_construct_content_from_parser): Change - camel_data_wrapper_new to camel_simple_data_wrapper_new. - - * camel-mime-part.c (camel_mime_part_set_content): Change - camel_data_wrapper_new to camel_simple_data_wrapper_new. - -2000-05-17 Darin Adler <darin@eazel.com> - - * camel-folder-summary.c: (message_info_load): - Quick fix to get it to compile. I hope I don't get into trouble. - -2000-05-17 Dan Winship <danw@helixcode.com> - - * camel.h: Don't include the no-longer-distributed - possibly-to-be-removed headers. - - * providers/smtp/camel-smtp-transport.c - (smtp_get_email_addr_from_text): fix an off-by-one error in - address parsing - (smtp_data): use camel_data_wrapper_get_output_stream rather than - data_wrapper->output_stream - -2000-05-17 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-folder.c (message_changed): Snoop - changes to user flags on the message into the summary as well. - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_init): - Changed version init to include the parent class version info - (i.e. add it not overwrite it). - - * camel-folder-summary.c (message_info_new): Initialise user_flags - to empty. - (message_info_load): And load user flags. - (message_info_save): And save user flags. - (message_info_free): And free them. - (CAMEL_FOLDER_SUMMARY_VERSION): Bumped file revision. - - * camel-folder-summary.h: Added user-flags to summary. - - * camel-mime-message.c (camel_mime_message_set_user_flag): Dont - use a hashtable for user flags. - (camel_mime_message_get_user_flag): And changed here too. - (camel_flag_get): New interface to get a flag from a flag - list. Flag lists are easier to work with than hash tables, and - save memory too. - (camel_flag_set): And set. - (camel_flag_list_free): And free. - (free_key_only): Discard. - (finalize): Remove the flag list. - -2000-05-17 Jeffrey Stedfast <fejj@stampede.org> - - * providers/smtp/camel-smtp-transport.c: (smtp_helo): Error - checking on gethostbyaddr() eliminating a possible segfault. - -2000-05-16 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-folder.c (mbox_delete_message_by_uid): - Implement. - -2000-05-12 NotZed <NotZed@HelixCode.com> - - * camel-movemail.c (camel_movemail): Open the destination with - O_APPEND, so we dont blow away a partially transferred mbox. - (camel_movemail): Loop if we get errno=INTR, and not fail. - -2000-05-11 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-summary.c (summary_rebuild): Update - the summarised file size, if everything went ok. - (camel_mbox_summary_expunge): Clear header flags after updating. - -2000-05-16 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-folder.c: - * providers/nntp/camel-nntp-folder.h: - * providers/nntp/camel-nntp-provider.c: - * providers/nntp/camel-nntp-store.c: - * providers/nntp/camel-nntp-utils.c: - * providers/nntp/camel-nntp-utils.h: - get things working with new camel summary stuff. - - * providers/nntp/camel-nntp-summary.c: - * providers/nntp/camel-nntp-summary.h: - removed files since camel-folder-summary does all we need. - -2000-05-15 Jeffrey Stedfast <fejj@stampede.org> - - * providers/smtp/camel-smtp-transport.c: Added some preliminary - AUTH support. - -2000-05-15 Dan Winship <danw@helixcode.com> - - * camel-folder.h: Remove camel_folder_get_summary, which no longer - exists. - -2000-05-11 Dan Winship <danw@helixcode.com> - - * Makefile.am: remove some cruft that we're not currently using. - - * camel-stream-mem.c (camel_stream_mem_new_with_buffer): Change - to match prototype (size_t vs unsigned int) so it works on 64-bit - machines. Noted by msw. - -2000-05-11 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-folder.c (message_changed): Indicate - the summary changed also. - -2000-05-11 Jeffrey Stedfast <fejj@stampede.org> - - * providers/smtp/camel-smtp-transport.c: (smtp_helo): - Updated to more closely comply with RFC 821 standards - -2000-05-11 NotZed <NotZed@HelixCode.com> - - * camel-mime-part.c (write_to_stream): Unref the filter after - adding it to the filtering stream. - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_finalise): Free the folder path. - (camel_mbox_summary_update): Also save summary when done. - (camel_mbox_summary_expunge): Unindex items when deleting them. - (camel_mbox_summary_expunge): Save the index as well as the - summary. - - * camel-folder-summary.c (camel_folder_summary_finalise): Free the - summary path. - (camel_folder_summary_touch): New function, indicate the summary - info changed. - (camel_folder_summary_remove): Dirty here. - - * camel-internet-address.c (internet_decode): Free multiple entry - addresses properly. - - * camel-mime-utils.c (header_decode_mailbox): Plugged another - memleak, free text after converting it. - (header_decode_addrspec): More leaks plugged. - - * camel-mime-message.c (finalize): Free message_uid. - (finalize): Free the recipients hashtable. - -2000-05-11 NotZed <notzed@helixcode.com> - - * camel-folder-summary.c (camel_folder_summary_finalise): Free - summary items and charset filters. - -2000-05-10 NotZed <notzed@helixcode.com> - - * camel-folder-summary.c (camel_folder_summary_finalise): Don't - free stuff in p, after we've free'd p. - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): Unref - the stream we created for appending. - -2000-05-10 Jeffrey Stedfast <fejj@stampede.org> - - * providers/smtp/camel-smtp-transport.c: (camel_smtp_transport_class_init): - Added initialization for service_class - -2000-05-10 Dan Winship <danw@helixcode.com> - - * camel-multipart.c (write_to_stream): fix a stupid typo. Thank - you, C. - - * camel-mime-part.c (write_to_stream): don't ref the stream before - wrapper a filter around it, since nothing will ever unref it. - -2000-05-10 Christopher James Lahey <clahey@helixcode.com> - - * Makefile.am: Added camel-types.h, camel-folder-pt-proxy.h, and - camel-thread-proxy.h. - -2000-05-09 Dan Winship <danw@helixcode.com> - - * providers/sendmail/camel-sendmail-transport.c (_send_internal): - Bleah. Can't fsync a pipe. As a quick kludge, just don't - stream_flush it. The right fix will require bringing back - stream_close though. - -2000-05-09 Jeffrey Stedfast <fejj@stampede.org> - * camel-internet-address.[c,h]: Undid my changes (moved - struct _address back into came-internet-address.c) - * providers/smtp/camel-smtp-transport.c: (_send): changed - from using it's own address manipulation (using struct _address) - to using camel_internet_address_get(). Also some format changes - to keep consistant with the rest of Camel - -2000-05-09 Jeffrey Stedfast <fejj@stampede.org> - - * camel-internet-address.[c,h]: Moved struct _address from - camel-internet-address.c to camel-internet-address.h - (hopefully this doesn't break anything...) - * providers/smtp/camel-smtp-transport.c: (_send): now - populates the recipient list with To, Cc, and Bcc addresses. - Should now be able to use this module. - -2000-05-09 Dan Winship <danw@helixcode.com> - - * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid): - one more refcounting fix I missed before. - -2000-05-08 Jeffrey Stedfast <fejj@stampede.org> - - * providers/smtp/camel-smtp-transport.c: no longer frees memory it - shouldn't, updated to reflect camel-stream changes involving - CamelException (perhaps it should use a different CamelException - variable than is passed to the camel smtp module?) - -2000-05-08 Dan Winship <danw@helixcode.com> - - * camel-stream.c (camel_stream_read, camel_stream_write, - camel_stream_flush, camel_stream_reset, camel_stream_printf, - camel_stream_write_to_stream): Use CamelException to signal - failure. - (camel_stream_write_strings): Remove. camel_stream_printf is more - useful in most of the places that used this. - (camel_stream_write_string): Change from macro to function to - prevent problems with double-evaluation. - - * camel-seekable-stream.c (camel_seekable_stream_seek, - camel_seekable_stream_set_bounds): Use CamelException. - (reset): Update. - - * camel-seekable-substream.c, camel-stream-buffer.c, - camel-stream-filter.c, camel-stream-fs.c, camel-stream-mem.c: - Update. - - * camel-stream-fs.c: Remove the virtual init functions and move - the code into the creator functions. Add CamelExceptions to - creation functions that could fail. - - * camel-data-wrapper.c (camel_data_wrapper_write_to_stream): Use - CamelException. - * camel-mime-message.c, camel-mime-part.c, camel-multipart.c - (write_to_stream): Update. - - * camel-mime-parser.c: add an exception to the mime parser private - data and pass that to stream functions as needed. - - * gmime-content-field.c, md5-utils.c: Update (badly) for stream - changes. - - * camel-exception.h (camel_exception_is_set): convenience macro. - - * providers/Makefile.am: disable SMTP for now - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): Pass - CamelException to the functions that now need it. Check the - exception after calling camel_stream_flush, and fail if it fails. - (mbox_get_message_by_uid): More updates. - - * providers/pop/camel-pop3-folder.c, - providers/pop/camel-pop3-store.c, - providers/sendmail/camel-sendmail/transport.c: Update. - - -2000-05-08 NotZed <NotZed@HelixCode.com> - - * camel-mime-message.c (process_header): Format From and Reply-To - to at least a decoded string. Should probably store them as an - camelinternetaddress. - - * Merged NEW_SUMMARY branch back to trunk, and resolved conflicts. - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_update): - Return status. - (camel_mbox_summary_expunge): Force an update of the summary - before we do anything. - (camel_mbox_summary_expunge): Build new xev line in xevnew, and - free that, and consify xev. - (camel_mbox_summary_load): If we are rebuilding from scratch, make - sure we clear the summary content. - - * camel-stream-filter.c (do_close): We NEED a stream close. - -2000-05-07 Dan Winship <danw@helixcode.com> - - Make camel not leak like a sieve. - - * camel-object.c: New subclass of GtkObject which is now the base - of the Camel object hierarchy. Currently the only difference - between CamelObject and GtkObject is that CamelObjects don't start - out floating. - - * *.h: Move a bunch of typedefs to camel-types.h. Standardize on - using <camel/foo.h> in header files rather than <foo.h>, "foo.h", - or "camel/foo.h". Remove some unneeded includes. - - * camel-address.c, camel-data-wrapper.c, camel-folder-search.c, - camel-folder-summary.c, camel-folder.c, camel-mime-filter.c, - camel-mime-parser.c, camel-service.c, camel-session.c, - camel-stream.c: These are now subclasses of CamelObject. - - * camel-data-wrapper.c (set_output_stream): - * camel-medium.c (set_content_object): - * camel-seekable-substream.c - (init_with_seekable_stream_and_bounds): - * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid): - remove gtk_object_sink calls. - - * camel-stream-buffer.c (init_vbuf): - * camel-stream-filter.c (camel_stream_filter_new_with_stream): - ref the original stream. - - * camel-folder-summary.c (camel_folder_summary_finalise): unref - the filters when finalizing. - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser, - camel_mime_part_construct_content_from_parser): - * camel-mime-part.c (camel_mime_part_set_content): Unref objects - that are created only to be handed off to other objects. If - they're going to be needed later, they will have been additionally - ref'ed by the object that needs them. - - * providers/pop3/camel-pop3-folder.c (get_message_by_number): - unref the message stream after creating the data from it. - - * camel-stream.c, camel-stream-buffer.c, camel-stream-filter.c, - camel-stream-fs.c, camel-stream-mem.c: Remove camel_stream_close, - since its semantics are dubious (what happens when you close a - stream other people still have references on?). - - * providers/nntp/camel-nntp-store.c: - * providers/smtp/camel-smtp-transport.c: - * providers/pop3/camel-pop3-store.c: - replace camel_stream_close calls with gtk_object_unref. - - * providers/mbox/camel-mbox-folder.c: - * providers/nntp/camel-nntp-folder.c: - * providers/sendmail/camel-sendmail-transport.c: - replace camel_stream_close with camel_stream_flush + - gtk_object_unref - -2000-05-06 Dan Winship <danw@helixcode.com> - - * providers/pop3/camel-pop3-store.c (query_auth_types): A machine - which serves neither POP nor KPOP is not a POP server. - - * providers/smtp/camel-smtp-provider.c: Note in the description - that this provider is not yet tested. - -2000-05-08 NotZed <notzed@helixcode.com> - - * camel-mime-part.c (write_to_stream): Free the filter stream when - done. - - * camel-mime-parser.c (folder_seek): Make sure we add the \n - terminal when we seek as well (frob!). - - * camel-mime-utils.c (header_decode_addrspec): Plug minor memleak. - - * camel-mime-part.c (finalize): Free header tables once finished. - - * camel-folder-summary.c (camel_folder_summary_remove): Dont try - to access info after its free'd. - -2000-05-07 NotZed <NotZed@HelixCode.com> - - * camel-mime-part.c (write_to_stream): Apply encoding to content - part, when writing to a stream *sigh*. - - * camel-stream-filter.c (do_write): implement write for the - filtering stream. Writes shouldn't be mixed with reads. - (do_flush): Implemented flush. Again write/flush shouldn't be - mixed with reads. Only flushes if the last op was write. - (do_close): Force flush on close. - - * camel-mime-filter.c (filter_run): Oops, make sure we include the - backlen in the total length before passing onto the filter. - - * camel-mime-filter-from.c: New filter, munges 'From ' lines into - '>From ', for mbox. - - * camel-mime-parser.c (camel_mime_parser_header_remove): New - function to remove the parser's raw header, rather than - manipulating the header directly (wich doesn't work with - mempools). - - * camel-mime-utils.c (header_address_list_clear): Fixed some - broken(tm) logic, which would leak entries on multivalued lists. - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load): - Use ibex_save() to save the ibex. Makes a big difference to - startup times for very large mailboxes. - (camel_mbox_summary_expunge): Dum de dum, reimplemented. Designed - to be much more robust, and to stop immediately if anything awry - happens. - (copy_block): Utility function to copy n bytes from one fd to - another. - (header_write): Utility function to write out raw headers to an - fd. - (camel_mbox_summary_update): Incremental summary updater. - - * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid): - Dont unref the stream, because of the broken(tm) ref model of gtk - widget that for some odd reason is being perpetuated in camel. - (mbox_expunge): Reenable expunge again. - (mbox_append_message): Removed the optimised mbox append. If its - an issue, it can go back later. Cleaned up a lot, checks error - returns, and automagically translates 'From ' into '>From' as - necessary. - -2000-05-07 NotZed <notzed@helixcode.com> - - * camel-mime-filter.c (filter_run): Oops, forgot to add the - backlen to the pre-buffer (*poof*). - -2000-05-07 NotZed <NotZed@HelixCode.com> - - * camel-mime-message.c (construct_from_parser): Allow - HSCAN_FROM_END to terminate the processing of a message. - - * camel-folder-summary.c (perform_content_info_load): Ick, dont - try and append a node onto its own list. - (camel_folder_summary_clear): Actually clear the indexes after - we've removed the messages. - (camel_folder_summary_clear): Set dirty if it changes. - (camel_folder_summary_load): Clear dirty. - (camel_folder_summary_save): Only save if dirty. - - * providers/mbox/camel-mbox-summary.c (summary_header_load): Oops, - remember to call that parent class first ... - (summary_header_save): Here too. - (camel_mbox_summary_load): Do more checking to verify the index - contents as well as teh summary contents, against the mbox - contents. - (camel_mbox_summary_load): Removed some fo that checking, it needs - more code to work reliably. - -2000-05-07 NotZed <notzed@helixcode.com> - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load): - Set the size and mtime of the mbox we indexed once done. - - * camel-folder-summary.c (camel_folder_summary_set_index): Dont - write the index if it changes - let the claler fix it (uh, kind of - impacts performance). - (camel_folder_summary_load): close in. - - * camel-folder-summary.c (summary_format_string): Check header - exists before trying to strip its leading spaces. - -2000-05-06 NotZed <NotZed@HelixCode.com> - - * camel-folder.h: Removed summary info from here, and include - camel-folder-summary.h as well. - - * camel-mime-parser.c (camel_mime_parser_step): Allow it to accept - a NULL databuffer. - - * providers/mbox/camel-mbox-summary.c: Totally new file, now - subclasses camel-folder-summary. - - * camel-folder-summary.c (message_info_load): Load the uid as a - string. - (message_info_save): And save too. - (camel_folder_summary_clear): New function, clears the contents of - the summary. - - * providers/mbox/camel-mbox-folder.c: Fixes for summary changes. - (mbox_get_message_by_uid): Completely redone. Now cross-checks - the summary information to make sure we get a real message. - (mbox_append_message): Disabled the copy version of append for - now. - (mbox_expunge): Temporarily disabled the expunge function, until - it is put back in camel-mbox-summary.c - -2000-05-05 NotZed <NotZed@HelixCode.com> - - * camel-folder-summary.c: And same here ... - (camel_folder_summary_encode_fixed_int32): Ugh, fwrite doesn't - return -1 on error .. - (camel_folder_summary_decode_fixed_int32): Neither deos fread. - (camel_folder_summary_encode_token): Fix here too. - (summary_build_content_info): Use start-headers to get the pos of - the message, not parser_tell(), which might not be what we - expected because of parser_unstep(). - (camel_folder_summary_encode_token): Use bserch() to tokenise the - values, rather than a linear search. - - * camel-mime-utils.c: Defined out some memory profiling stuff I - left there by mistake. - (header_decode_mailbox): Dont try to append the word part of a - local address if we ran out of words. - - * camel-mime-parser.c (folder_scan_content): Apply the fix from - the header scanner to here too. - (folder_scan_header): Only check for end of header if we have - space for it (didn't end the read with a newline) - (folder_scan_header): inptr is the only real thing we need - registerised for performance. Try to help the compiler be smart - about it .. - (folder_scan_header): Simplified the save header case a tad. - - Commented out some memory profiling stuff. - -2000-05-05 NotZed <notzed@helixcode.com> - - * camel-mime-utils.c (header_decode_mailbox): Plug a memory leak. - (header_decode_text): Fixed memory leaks with g_string_append(). - (header_encode_string): And here too, and a few other places. The - glib api is so awful ... - (header_content_type_decode): More memory leaks. - -2000-05-05 NotZed <notzed@helixcode.com> - - * camel-mime-parser.c (folder_scan_init_with_fd): Make sure we - init the end of buffer sentinal! - (folder_scan_init_with_stream): And here too ... - -2000-05-04 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-folder.c (summary_get_message_info): - Maxcount is minimum of the max and the requested count, not the - maximum :) - - * camel-mime-parser.c (folder_scan_content): Properly set midline, - so we dont falsely catch offset boundary markers (i.e. From inside - content). - (folder_read): Set a sentinal on the end of the read data (\n) so - we dont have to check the buffer boundary in the inner loop. - (mempool_*): New experimental memory management routines, speed - up simple structure parsing by about 25% ... not compiled in by - default. Something similar may be needed for camel-mime-utils to - address performance issues with g_malloc and friends. - - * camel-mime-utils.c: Added a macro w(x) used to wrap all warnings - about mime/rfc violations, so they can be turned off. - - * camel-folder-summary.c (summary_build_content_info): Step after - the end of a message ... - Turn into a stand-alone program for testing and profiling. - -2000-05-04 Dan Winship <danw@helixcode.com> - - * providers/pop3/camel-pop3-store.c (pop3_connect): Don't fall - back to plaintext passwords if APOP fails, since it should also - fail. - -2000-05-04 Dan Winship <danw@helixcode.com> - - * camel-session.c (camel_session_list_providers): New function to - replace camel_provider_scan. Returns a list of either (a) all - currently-loaded providers, or (b) all available providers. - - * camel-url.[ch]: Add an "empty" flag to CamelURL (indicating that - it contains only a protocol). - - * camel-service.c (camel_service_query_auth_types): Make this take - a CamelException (since it may have to try to connect to the - server, and it might not able to.) - - * providers/pop3/camel-pop3-store.c: add KPOP (Kerberized POP) - support. This is mostly so I have two kinds of authmech to play - with instead of just one. (But it does actually work.) - - * providers/smtp/camel-smtp-transport.c (query_auth_types): update - for prototype change, but disable the functionality, since it - doesn't really support any auth types yet. - (camel_smtp_transport_get_type): add an object init function to - set the service url_flags. - -2000-05-04 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-summary.c: Yes, and anotherone. - - * camel-mime-utils.c: And another one. - - * camel-mime-part.c: And another one. - - * camel-mime-part-utils.c: And another one. - - * camel-folder-search.c: And another one. - - * camel-mime-parser.c: Reverted a change wihtout a ChangeLog entry. - -2000-05-04 NotZed <NotZed@HelixCode.com> - - * camel-folder-summary.[hc]: Yes, CamelFolderSummary is back ... - ... re-usable class to summarise and index any stream or message - and to manage/load/save the created summaries. - - * camel-folder.c: Include string.h to kill a warning. - -2000-05-03 Jason Leach <leach@wam.umd.edu> - - * Makefile.am (INCLUDES): add $(UNICODE_CFLAGS) to the INCLUDES, - people who installed libunicde in non-standard include paths need - this. - -2000-05-03 NotZed <NotZed@HelixCode.com> - - * camel-folder.h: Added pos/bodypos/endpos to the basic message - content info object. Size to be removed? Moved the - messageconentinfo and messageinfo back to camel-folder-summary.h. - - * camel-mime-filter-index.c (camel_mime_filter_index_set_ibex): - New function to (re)set the index to use on a filter. - - * camel-mime-parser.c (camel_mime_parser_scan_from): Whole bunch - of inline docs. - (camel_mime_parser_drop_step): New function to drop a state from - the parser. Needs more testing. - - * camel-mime-utils.c (rfc2047_decode_word): If the iconv handle is - -1, then dont try and convert (crashes unicode_iconv?). - (rfc2047_decode_word): Use alloca for variables instead of - g_malloc - by the rfc they should always be short. - (rfc2047_decode_word): If we can't do the charset conversion, undo - the quoted-printable/base64 at least? Should probably convert - unknown characters to the utf-8 unknown character. - -2000-05-02 Larry Ewing <lewing@helixcode.com> - - * camel-mime-utils.c (header_decode_date): fix typo when - dereferencing saveoffset. - -2000-05-02 NotZed <NotZed@HelixCode.com> - - * camel-folder-search.c: Added some header doco. - - * camel.h: REmove gmime-utils.h from here. - - * providers/mbox/camel-mbox-search.[ch]: Removed. Functionally - redundant. - - * providers/mbox/camel-mbox-folder.c (mbox_search_by_expression): - Use the new CamelFolderSearch class to do the actual searching, - just setup the search here. - - * camel-folder-search.[ch]: A helper class that providers may - subclass to provide their own search functionality, or they can - simply use as is, it supports body searches if an ibex is - supplied, and header searches if a summary is supplied. - -2000-05-02 Matt Loper <matt@helixcode.com> - - * Makefile.am: set G_LOG_DOMAIN. - * providers/MH/Makefile.am: same. - * providers/maildir/Makefile.am: same. - * providers/mbox/Makefile.am: same. - * providers/nntp/Makefile.am: same. - * providers/pop3/Makefile.am: same. - * providers/sendmail/Makefile.am: same. - * providers/smtp/Makefile.am: same. - -2000-05-02 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-search.c - (camel_mbox_folder_search_by_expression): Dont store/remove - current search from the search list. - - * providers/mbox/camel-mbox-folder.h: Removed searches list, - searches are all sync now. - - * gmime-utils.[ch]: What the hell, remove it. This will break the - nntp provider. The mime parser can be used instead though. - Removed from all code including it (but none were using it). - - * gmime-utils.c (_store_header_pair_from_string): Removed bizarre - string_dichotomy version of this. This code is somewhat redundant - now, and is headed for death anyway. - - * gstring-util.c (g_string_dichotomy): Same with this one. - (g_string_clone): Removed a memory leak, g_string_new() allocates - its own memory. - (g_string_append_g_string): Allow to append an empty gstring onto - another gstring, dont abort()! - - * string-utils.c (string_dichotomy): Removed this incredibly weird - function. - - * camel-folder.c (_create): Replaced the rather obtuse use of - "string_dichotomy" function with a simple strrchr(). Still not - sure it'll work. - - * camel-folder-summary.c: cvs removed a long-removed file. - - * camel-mime-parser.c (folder_scan_header): Fix the previous - overflow problem properly (can happen in 2 places). - (header_append): A new macro to include the code changed above, so - it only appears in one place. - (folder_scan_step): Change the content type to text/plain if the - multipart is broken. Doesn't actually change the header though. - (header_append): Also move the header-start tracking stuff here. - Could be a static function to save code. - -2000-05-02 NotZed <notzed@helixcode.com> - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): Dont use autofill on - these fucking long function anmes!!!!!! - -2000-05-02 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_expunge): Fix the offset for the summary when - an item is expunged to take account of the From line. - -2000-05-01 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-folder.h (CamelMboxFolder): Removed - search_id. - - * providers/mbox/camel-mbox-search.c - (camel_mbox_folder_search_cancel): Remove.d - (camel_mbox_folder_search_complete): Removed. - (camel_mbox_folder_search_by_expression): Changed back to sync - api. - (struct _searchcontext): Removed cancelled flag. - (find_context): Removed. - (func_header_contains): Debug out some search stuff. - - * providers/mbox/camel-mbox-search.h - (camel_mbox_folder_search_by_expression): Moved back to sync api. - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_set_flags_by_uid): New function to update the - flags in the summary. - (camel_mbox_summary_expunge): Expunge messages from a folder. - (offset_content): Re-align offsets of summary when messages - added/removed to an existing summary. - (camel_mbox_summary_remove_uid): Remove a message summary entry by - uid. - (index_folder): Restore flags from X-Evolution header, if they are set. - (index_folder): Make sure we index using a decimal uid, since - thats what everything else indexes off (oops). - Upped SUMMARY_VERSION as a result. - (camel_mbox_summary_expunge): Oops, my wrong, use the string uid - to unindex on. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): - Connect to the message_changed signal. - (_init): Set permanent flags to something reasonable. No user - flags yet ... - (message_changed): If the flags of the message change, update the - flags in the summary. - (mbox_expunge): Implement the expunge. - (camel_mbox_folder_class_init): Renamed all leading _'s to mbox_'s - (mbox_expunge): Emit a folder_changed signal on expunge (uh, even - if it didn't ...) - - * camel-folder.c (_finalize): Uh, dont free permanent_flags - anymore (this wouldn't failed anyway, it was a GList !!!) - (camel_folder_search_complete): Removed. - (camel_folder_search_cancel): Removed. - (camel_folder_expunge): Changed to only allow expunge on an open - folder. It doesn't make sense for mbox, otherwise (?) - (camel_folder_class_init): Added a folder_changed signal. - - * camel-folder.h (struct _CamelFolder): Change permanent_flags to - a bitfield. - (list_permanent_flags): Renamed to get_permanent_flags, and - returns a bitfield. - (camel_folder_expunge): Changed expunge to a void type. The - messages would no longer be useful after they have been removed - ... - (CamelFolderClass): New function summary_get_by_uid() to get a single - summary. - (*search*): Moved back to synchronous search api ... *sigh* - - * camel-folder.h: Removed CamelSearchFunc. - - * camel-mime-message.c (set_flag): Removed. - (camel_mime_message_set_flag): Removed. - (get_flag): Removed. - (camel_mime_message_get_flag): Removed. - (add_flag_to_list): Removed. - (get_flag_list): Removed. - (camel_mime_message_get_flag_list): Removed. - (camel_mime_message_get_flags): New interface to get system flags. - (camel_mime_message_set_flags): " to set ". - (camel_mime_message_get_user_flag): To get a user flag. - (camel_mime_message_set_user_flag): To set a user flag. - (finalize): Hmm, the old one free'd the key and data, not good - when the data is a boolean ... - -2000-04-30 Dan Winship <danw@helixcode.com> - - * camel-provider.h: Tweak the definition of CamelProvider. Among - other things, a provider may now be both a store and a transport. - - * camel-provider.c: Remove a lot of code we had no intention of - using. This now only contains two functions: camel_provider_init - to read the installed .urls files, and camel_provider_load to - load and register a new provider. - - * camel-session.c: Remove more unused code and simplify some of - the remaining code. The list of available provider modules is now - stored in the session, and it handles calling camel_provider_load - to load them as needed. Provider registration is now done by - calling back from the module init routine, which allows a single - module to register providers for multiple URL types. - - * providers/*: Update provider structures and init routines for - the new stuff. Add a .urls file to each provider specifying what - urls it handles, and install that with the library. - - * providers/nntp/camel-nntp-provider.c: Add hints towards - supporting both news: and nntp: URLs, and using nntp as both a - store and a transport. - -2000-04-29 Dan Winship <danw@helixcode.com> - - * camel-internet-address.c (camel_internet_address_get): const - poison - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): - camel_mime_parser_tell() returns an offset from where it started - parsing, not necessarily from the start of data. Since we're - parsing a bounded seekable_stream, we need to add the stream's - starting bound to camel_mime_parser_tell's return value to - create the substream in the right place. - - * camel-seekable-substream.c - (camel_seekable_substream_new_with_seekable_stream_and_bounds): - say CAMEL_STREAM_UNBOUND rather than -1 in doc. - - * camel-seekable-stream.c (camel_seekable_stream_seek): Add more - info to docs. - -2000-04-28 Dan Winship <danw@helixcode.com> - - * camel-mime-parser.c (folder_scan_header): fix a bug that would - cause corruption with very long headers. - -2000-04-27 Ettore Perazzoli <ettore@helixcode.com> - - * providers/pop3/Makefile.am (INCLUDES): Add `-I$(srcdir)/../../..' - to pick the Camel includes. - * providers/sendmail/Makefile.am (INCLUDES): Likewise. - - * camel.h: Don't #include <camel/data-wrapper-repository.h> anymore. - -2000-04-27 NotZed <NotZed@HelixCode.com> - - * camel-mime-utils.c (check_header): Dont try and check a NULL - header. - - * camel-recipient.[ch]: Dead. Its not pining. - - * camel-mime-message.h: Dont include recipients.h anymore. - - * camel-mime-message.c (camel_mime_message_add_recipient): Accept - name/address separately, and store in an CamelInternetAddress. - (add_recipient): Removed. - (remove_recipient): Removed. - (remove_recipient_address): Renamed from remove_receipient, works - via address. - (camel_mime_message_remove_recipient_name): New function to remove - by name. - (get_recipients): Removed. - (camel_mime_message_get_recipients): Return a camel-internet-address. - (write_to_stream): No longer write receipients directly. - (write_recipients_to_stream): Removed. - (write_one_recipient_to_stream): Removed. - (camel_mime_message_init): Setup recipients hashtable, rather than - usign the recipients stuff. - (set_recipient_list_from_string): Killed, a violent and lengthy - death. - (process_header): Simplified recipient handling code a lot. - (received_date_str, sent_date_str, reply_to_str, subject_str, - from_str): Removed some oddly-defined global statics. - (camel_mime_message_class_init): Dont initialise above variables - anymore. - (init_header_name_table): Removed, use a table to init this, and - do it in class init (2 lines of code ...). - - * camel-news-address.c: Class to represent news addresses - - currently empty, and not built. - - * camel-internet-address.h: Class to represent internet (email) - addresses. - - * camel-address.h: Abstract class to represent (lists of) - addresses. - -2000-04-27 Dan Winship <danw@helixcode.com> - - * camel-mime-part.c (write_to_stream): Revert previous change. I - was confused. - - * camel-url.[ch] (camel_url_encode, camel_url_decode): expose - these routines. - -2000-04-26 Dan Winship <danw@helixcode.com> - - * camel-mime-part.c (write_to_stream): Only write a newline - between the headers and the content object if the content object - is not a CamelMedium. (If the content is a medium, it may have its - own headers, which then need to go before the blank line.) - - * camel-mime-body-part.[ch]: Remove. We weren't using the fields - that made this different from camel-mime-part, so it basically - just forced us to do lots of gratuitous typecasting. - - * camel-multipart.[ch]: Use CamelMimePart. Remove the multipart - parent stuff, since we weren't using that either. - - * etc: update for CamelMimeBodyPart -> CamelMimePart - -2000-04-26 Dan Winship <danw@helixcode.com> - - * camel-medium.c (set_content_object): sink the content object - after referencing it. - - * camel-mime-part.c: fix various little things in the handling - of CamelMedium methods. Change camel_mime_part_set_text to the - more generic camel_mime_part_set_content. - - * camel.h: sync to current reality - - * camel-folder-utils.[ch]: removed - - * camel-mime-utils.c (header_format_date): fix format specifier - for time zone. Fix typo in month names array. - -2000-04-26 NotZed <NotZed@HelixCode.com> - - * camel-seekable-substream.c (stream_seek): Changed to have - absolute seek semantics, not relative to the bounds. - - * camel-seekable-stream.c (reset): When we reset, seek to the - start of the bound, if there is one. - (stream_tell): Make tell virtual. - - * camel-stream-filter.c (do_available): Removed. - - * camel-stream-buffer.c: Remove leading _'s from static functions. - (stream_read): Renamed from read(). Fancy that conflicting! (my - boo!) Others too. - - * providers/pop3/camel-pop3-folder.c (get_message_by_number): - Changed to stream_mem interface. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): Fixed - for streamfs interface changes, and implement a failure case. - (_append_message): Changed for fs stream interface change. - - * camel-multipart.c (print_part): Iterate rahter than callback. I - hate glists's interface (hence, move this to write_to_stream). - (write_to_stream): Return an error (yuck, this is a royal PITA to - do with the stream write interface). - - * camel-mime-message.c: Removed leading _ from static names. - - * camel-mime-part.h: construct_from_parser() now returns an error - code. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Changed to use a - camel-data-wrapper instead of a camel-simple-data-wrapper (no - change needed elsewhere?). - (simple_data_wrapper_construct_from_parser): Fixes for stream-mem - interface changes. - - * camel-simple-data-wrapper.[ch], - camel-simple-data-wrapper-stream.[ch], - camel-stream-data-wrapper.[ch], removed. Fixed including of these - files. - - * camel-mime-part.c (camel_mime_part_set_text): Remove the use of - the camel-simple-data-wrapper-stream, just use a mem stream. - (write_to_stream): Renamed from my_* - (construct_from_stream): Return an error on error. - - * camel-stream-mem.c (camel_stream_mem_new*): Remove mode - parameter. - - * camel-stream-mem.h (enum CamelStreamMemMode): Removed. It - wasn't used at all. - - * camel-data-wrapper.h: Add camel_data_wrapper_new() to create - these. - (write_to_stream, construct_from_stream): Return an error - indicator for success. Fixed all methods to match (ICK). - - * Makefile.am (libcamel_la_SOURCES): Remove - camel-simple-data-wrapper.c, camel-simple-data-wrapper-stream.c, - camel-stream-data-wrapper.c. Obsoleted by code re-use! - - * camel-data-wrapper.c (construct_from_stream): Change the default - implementation to just set the output stream == construction - stream. Well, this lets me get rid of both simple-data-wrapper - and stream-data-wrapper (unused anyway), and - simple-data-wrapper-stream in one hit. CamelDataWrapper is now - also a concrete class. - (write_to_stream): Use camel_stream_write_to_stream() to - calculate/return values (and save code). - Include <errno.h> for obvious reasons. - - * camel-stream.c (eos): Provide a default implementation of .eos(). - (camel_stream_write_to_stream): Make it return an error code on - error. - (camel_stream_printf): Changed to return the number of bytes - written/error. - (camel_stream_available): Removed. - - * camel-stream-fs.h (enum CamelStreamFsMode): Removed. Changed to - use unix modes and so forth (wasn't used for anything but new file - creation and didn't work well either). - - * camel-stream-fs.c: Removed leading _'s for names. And removed - some virtual method 'documentation'. - (destroy): Dont try and close a closed/error fd. Only report - error if close returns -1. Moved all the code to finalise(), and - killed this function. - (init_with_fd): Properly setup the seek offset, if it is a - valid and seekable file descriptor. - (init_with_fd_and_bounds): Use off_t for bounds, set bounds on the - seekable stream. - (init_with_name): Return error codes. - (init_with_name_and_bounds): Ditto. - (camel_stream_fs_new_with_name): REturn NULL object if it failed. - (camel_stream_fs_new_with_name_and_bounds): Return NULL object on - failure. Changed with_name* api's to take unix open style args - and flags. - (read): The bounded stream bounds checking seemed off, simplified - code a bit. - (write): Implement bounds checking for writing, the comment was - wrong, it could make sense to bound writing. Cleaned up a little. - (available): Gone. - (eos): Removed. Use CamelStream's implementation now. - (close): Reset the fd to -1, provide a warning for bad usage. - (seek): Cleaned up. Changed the behaviour a little, the returned - offset is the absolute position in the file, even in bounded - streams. - (seek): Seek from end mirrors lseek() behaviour (reverse seeking). - -2000-04-25 NotZed <NotZed@HelixCode.com> - - * camel-stream-fs.h (struct _CamelStreamFs): Moved bounds and eof - indicator to other parent classes. - - * camel-stream.c (camel_stream_printf): New utility - function. Obvious use. - - * camel-stream-mem.c: Removed leading _'s from static func's. - (camel_stream_mem_new_with_byte_array): Fixed for api changes, set - the owner for the byte array to us. - : Removed A bunch of gtk doc stuff for static (implementation) functions. - (available): Removed. - (write): Fixed the write implementation so that seek() works on a - seekable memory stream, as expected. Seeking past the end of the - buffer has unix semantics (filling with 0). - (available): Removed. - (write): Implement seekable stream bounded stream. - (read): Implement seekable stream bounded stream. - (close): Dont free the stream_mem if we're not the owner. - (seek): Allow to seek beyond the end of memory area, - implement bounds checking. - (seek): Set errno on bad policy. - - * camel-stream-mem.h (struct _CamelStreamMem): Changed position to off_t. - (new_with_buffer): Changed len to be a size_t. - (set_buffer, set_byte_array): New interface functions. - (struct _CamelStreamMem): Removed position, it is stored in the - superclass. - - * camel-stream.h: Removed some of the seemingly random - whitespace. Removed the available method (its not - impelemented/useful enough). - - * camel-seekable-substream.c - (init_with_seekable_stream_and_bounds): Remove the data_available - stuff, it hasn't been properly implemented/finished, and may never - work (unfortunately *sigh). - (reemit_parent_signal): Removed part of the above change. - (set_bounds): Removed (moved to seekable-stream). - : Fixed up some of the generally unreadable indenting (sorry, - wrapping at 80 characters with - camels_really_long_function_names() - just_doesnt_work_very_well_does_it(). - (available): Removed. - (stream_seek): Fixup for object changes. Make sure we return -1 - if the parent stream can't seek. - - * camel-seekable-stream.c (ccamel_seekable_stream_set_bounds): New - function to bound any seekable stream. - : Removed _'s. - (camel_seekable_stream_class_init): Implement an init function, to - setup the stream bounds to unbound. - - * camel-seekable-stream.h (CamelSeekableStreamClass): New virtual - method set_bounds for seekable streams. - (CAMEL_STREAM_UNBOUND): New define for no bound. - - * camel-seekable-substream.h (struct _CamelSeekableSubstream): - Removed sup_bound and inf_bound, moved to CamelSeekableStream (and - renamed, and changed to off_t's). - (new_with_seekable_stream_and_bounds): Use off_t as the bounds. - (CamelSeekableSubstreamClass): Uh, why was the intialiser virtual? - Removed. - - * camel-seekable-stream.[ch] (CamelSeekableStreamClass): Changed seek - to accept an off_t as the offset. - (struct _CamelSeekableStream): Renamed cur_pos to position and - changed it to an off_t type. - (enum CamelStreamSeekPolicy): Set to match the SEEK_* constants - from lseek(). - (get_current_position): Renamed to tell(). - - * camel-stream-buffer.h: Commented out set_vbuf - never implemented. - -2000-04-25 Dan Winship <danw@helixcode.com> - - * camel-stream-buffer.c (_eos): only return TRUE if the parent is - at eos AND the buffer has been exhausted - - * camel-mime-message.c: fix some incorrect macro usage that - resulted in bogus casts - -2000-04-24 Dan Winship <danw@helixcode.com> - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): fix a cut-and-pasto. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): ref - (and sink) the message stream if we're going to unref it later. - Otherwise it could get destroyed while there are still substreams - attached to it. This needs a cleaner solution. - - * camel.h: remove data-wrapper-repository.h include(s) - -2000-04-24 NotZed <NotZed@HelixCode.com> - - * camel-mime-message.c (construct_from_parser): Allow MESSAGE_END - _or_ EOF as valid termination conditions. - - * providers/mbox/camel-mbox-summary.c (message_struct_new): Decode - and then re-encode the addresses, so they are consistently - formatted. - - * camel-mime-utils.c (header_decode_mailbox): Store the address in - a _header_address. And try to get a comment-stored name if there - is one. - (header_decode_address): Actually return an address. - (header_to_decode): Renamed to header_address_decode() - (header_mailbox_decode): New function to get a single mailbox. - (header_mime_decode): Return the major/minor value, as - appropriate. - (header_address_new, and friends): Whole bunch of utility - functions for working with the address thingies. - (header_decode_domain): Free the string header, and dont expand - '.' into ' . '. - - * camel.c (camel_init): No longer call - data_wrapper_repository_init. - - * camel-medium.c (write_to_stream): Moved (back) to - camel-mime-part. - (add_header): - (set_header): - (remove_header): - (get_header): Make all these abstract, and spit warnings if - called. I guess it could manage the list, but well, it doesn't. - - * camel-medium.h (struct _CamelMedium): Dont store headers here, - the implementor is the only one who knows their format. - (CamelMediumClass): Changed header values to be void *'s. They - need not be strings? - - * camel-simple-data-wrapper.c (construct_from_stream): And we're - back. Set the output stream. - (construct_from_parser): Moved to camel-mime-part-utils. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Create the - contents of multipart and simple messages. - (camel_mime_part_construct_content_from_parser): Oops, this was - totally screwed up, try creating the right cotnent on the right - object. - - * camel-multipart.c (construct_from_parser): Moved to - camel-mime-part-utils. - (separate_part): Removed. - - * camel-mime-part.c (construct_from_stream): Back again! This now - switches over to using a mime parser for any mime parts, only. - (my_write_to_stream): Write our headers and so forth here. - (add_header): Add header directly, parent class is abstract. - (remove_header): Ditto. - (set_header): Ditto. - - * camel-data-wrapper.c (camel_data_wrapper_construct_from_stream): - Remade abstract. - (camel_data_wrapper_construct_from_parser): Moved to - camel_mime_part. - - * camel-data-wrapper.h: Put back construct_from_stream. - - * camel-mime-part.h: Put construct_from_parser in here, the - data-wrapper shouldn't know about mime. Ok, so now to undo half - of the last hours changes ... duh. - -2000-04-23 Dan Winship <danw@helixcode.com> - - * camel-mime-utils.c (header_to_decode, header_mime_decode): fix - some obvious minor bugs noted by -Wall. - -2000-04-23 NotZed <NotZed@HelixCode.com> - - * providers/pop3/camel-pop3-folder.c (get_message_by_number): Use - construct_from_stream instead of set_input_stream(). - - * camel-simple-data-wrapper-stream.c - (camel_simple_data_wrapper_stream_construct): REmoved the destroy - callback code. - (wrapper_destroy_cb): Removed. - - * camel-simple-data-wrapper.h: Add prototype for _construct() - method. - - * camel.c: Include unicode.h to kill a warning. - - * camel-data-wrapper.h (CameldataWrapperClass): Removed - construct_from_stream virtual method. - Removed get/set input stream. - - * data-wrapper-repository.[ch]: Removed&from build. Obsoleted? - The justification as is follows: It is mixing storage - protocol/format with message architecture. It really just doesn't - serve any purpose, as each medium implementor will have to have its - own type->handler mapping, and the only current implementor, - mimepart has a very simple structure and no need for this. - - * camel-medium.c (write_to_stream): Moved here from most of the - stuff in camel-mime-part. Well, the MEDIUM is the one that knows - what the headers are, and the content is, let it write it out. - - * camel-mime-part-utils.c (camel_mime_part_construct_content): - Copied from camel-mime-part.c, removed handling of message - followon state (moved to camel-mime-message). - (camel_mime_part_construct_content_from_parser): Renamed from - construct_content. - (camel_mime_part_construct_headers_from_stream): - (camel_mime_part_construct_content_from_stream): - (camel_mime_part_store_stream_in_buffer): Removed. Replaced by - the new construct from parser stuff. - - * camel-mime-message.c (construct_from_parser): Do - construct_from_parser for mime-message. - (_write_to_stream): Set the mime-version header for medium to - write out, rather than writing it out ourselves. - - * camel-data-wrapper.c (set_mime_type_field): Ref the - content_field when we get it? - (construct_from_stream): Removed. - (camel_data_wrapper_construct_from_stream): Changed to a helper - function, creates a mime_parser, and constructs from that. - (set_input_stream): Removed. - (camel_data_wrapper_set_input_stream): Removed. - (get_input_stream): Removed. - (camel_data_wrapper_get_input_stream): Removed. - - * camel-mime-parser.c (camel_mime_parser_unstep): New function. - Cause a subsequent call to mime_parser_step() to return the same - state over again. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): - Initial test code using the mime parser to construct the message. - (_get_message_by_uid): Use construct_from_stream() instead of - creating our own parser. - - * camel-mime-part.c (construct_from_parser): part constructor. - (camel_mime_part_construct_content): Basically a simpler - replacement for the datawrapper repository. - (camel_mime_part_init): Set the default type to text/plain. - (camel_mime_part_construct_content): Removed to - camel-mime-part-utils.c - (my_get_output_stream): Removed. The streeam is in the - data-wrapper. - (my_get_content_object): Removed. The content object is stored in - the medium. If none is there, the object wasn't created properly. - (my_write_content_to_stream): Removed. The content object is the - one that knows how to write itself out!!!!!!!! - (my_write_to_stream): Remove the base header writing stuff - has - been moved to camel-medium, where it belongs. This can just be - used to check for mandatory headers. - (my_construct_from_stream): Removed. - (my_set_input_stream): What the hell, i'll remove this too. - Nobody seems to understand how it differs from create from stream, - and they both seem to serve the same purpose ... - - * camel-simple-data-wrapper.c (construct_from_parser): Initial - implementation of a content constructor. - (construct_from_stream): Removed! Job taken over by - construct_from_parser. - - * camel-multipart.c (construct_from_parser): Multipart - construction routine. - (camel_multipart_init): Set the default multipart type to - multipart/mixed. Duh, no subtype is not allowed anyway. - (set_input_stream): REmoved. Replaced by construct_from_parser. - -2000-04-22 Dan Winship <danw@helixcode.com> - - * camel-multipart.[ch]: clean, document, etc. - (camel_multipart_init): pick a prettier default boundary. Still - need to deal with the larger problem - -2000-04-22 NotZed <NotZed@HelixCode.com> - - * camel-mime-message.h (struct _CamelMimeMessage): Removed - send_date, and received_date, and replaced it with a time_t - 'date' (this is what the header is called), and date_offset to - store the GMT offset of the date. - - * camel-mime-message.c (camel_mime_message_set_from): Update raw - header as we go. - (_set_from): Removed. - (_get_from): Removed. - (camel_mime_message_get_from): Moved implementation here. - (camel_mime_message_get_subject): Move implementation here. - (_get_subject): Nuked. - (camel_mime_message_set_subject): Handle utf-8 input, and also - update raw header when changed. - (_set_subject): Removed. - (_set_received_date): Removed. - (camel_mime_message_set_received_date): Removed. - (_get_received_date): Removed. - (camel_mime_message_get_received_date): Removed. - (_get_sent_date): Removed. - (camel_mime_message_get_sent_date): Removed. - (camel_mime_message_get_date): New function to get the date as a - time_t/offset. - (camel_mime_message_set_date): Set the date as a time_t/offset. - (camel_mime_message_get_date_string): Get the date as a string. - (camel_mime_message_init): Initialise the current date as - 'CMAEL_MESSAGE_DATE_CURRENT'. - (_set_reply_to): Removed. - (camel_mime_message_set_reply_to): Moved implementation here. - This is still broken, reply-to can have multiple addresses. - (_get_reply_to): Removed. - (_set_field): Removed, no longer used anywhere. - (_get_field): Also removed. - (_init_header_name_table): Add the Date header. - (process_header): Also handle snooping of Date header here. - - * camel-stream-filter.c (finalise): Unref the source stream on - finalise, and also call the parent class (oops). - - * camel-mime-parser.c (camel_mime_parser_state): New function to - get the current parser state. - (camel_mime_parser_stream): Allow you to get the stream back from - the mime_parser. - (camel_mime_parser_fd): Alternative to allow you to get the fd - back from the mime_parser. - (folder_scan_init_with_stream): Properly ref/unref the stream. - (folder_scan_close): Properly unref the stream/close the fd on - exit. - (folder_scan_init_with_fd): Close the old fd if there is one. - - * camel-data-wrapper.c (camel_data_wrapper_construct_from_parser): - New method, construct a data wrapper from an initialised parser. - (construct_from_parser): Empty implementation. - - * providers/mbox/camel-mbox-summary.c (message_struct_new): - Convert subject line to unicode, before storing in the summary. - (strdup_trim): Removed, no longer needed. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): Ref - the folder after setting it in the new message. - - * camel-mime-part.c (my_set_content_object): Have the headers - follow the content-type change here too. - (my_write_to_stream): Dont write content-type here, automatically - stored in the headers ... - (my_write_to_stream): Use header_disposition_format() to format - the content-disposition header. - (my_write_to_stream): Removed old code, all headers are now stored - in the camel-medium level, always. Need to do the same with - camel-mime-message i suppose ... - (my_write_to_stream): Write the content using the parent class, - not some weird function. - (camel_mime_part_class_init): Dont override get_output_stream. - (camel_mime_part_encoding_from_string): Bleh, make it - case-insensitive. - - * camel-mime-utils.c (header_content_type_is): Handle empty types. - (header_encode_string): Start of an implementation of the rfc2047 - encoder. It does iso-8859-1, and us-ascii, and utf-8 (others get - tricky *sigh*) - (rfc2047_encode_word): Convert a single word/string into rfc2047 - encoding. - (quoted_encode): Different quoted-printable encoding for rfc2047 - encoding of headers. - - * gmime-content-field.c (gmime_content_field_write_to_stream): Use - header_content_type_format() to format it. - -2000-04-21 NotZed <NotZed@HelixCode.com> - - * camel-mime-utils.h: Add prototype for header_param_list_free. - - * camel-recipient.c: New function to remove all the types of a - recipient list. I think this whole object needs a major review. - - * camel-mime-message.c (camel_mime_message_class_init): Removed - parse_header_pair override, override add_header instead. - (_parse_header_pair): Renamed to add_header. - (remove_header): Add this method, to make sure we keep upto date - with removed headers too. - (_set_field): If given a NULL value, clear it out. - (_set_recipient_list_from_string): Constify. - (set_header): Override set_header from camel_medium. - (process_header): Local function to handle set/add/remove of each - header we know about. - - * camel-mime-part.c (camel_mime_part_class_init): Removed - parse_header_pair setup. - (my_parse_header_pair): Moved into add_header(), removed. - (my_set_disposition): Allow a NULL disposition to clear it. - (my_set_content_id): Allow NULL content id to clear it. - (remove_header): Track removed headers. - (my_set_description): Allow NULL description to clear it. - (my_set_content_MD5): Make sure we copy the md5 value, and allow a - NULL value to reset it. - (my_set_filename): Copy the filename. - (my_set_header_lines): Removed. Nothing uses it, it doesn't - actually serve any purpose. - (camel_mime_part_set_header_lines): Ditto. - (my_get_header_lines): Ditto. - (camel_mime_part_get_header_lines): Ditto. - (camel_mime_part_class_init): Remove *_header_lines setup. - (camel_mime_part_init): Remove header_lines init. - (my_finalize): Remove header_lines finalise. - (my_write_to_stream): Write the headers here. This is just WRONG, - camel_medium should be doing this. - (my_get_output_stream): Kill a warning. - (camel_mime_part_encoding_to_string): Ditto. - (camel_mime_part_set_description): Unvirtualiase, use add_header() - to do the processing. - (my_set_description): Removed. - (set_disposition): Renamed from my_set_disposition. - (camel_mime_part_get_description): Get the descriptionf rom the - get_header method. - (my_get_description): Removed. - (my_set_filename): Removed. - (camel_mime_part_get_filename): Get the parameter from the - disposition. - (camel_mime_part_encoding_from_string): Handle NULL string. - (camel_mime_part_init): Remove reference to filename. - (my_finalize): Dont free filename. - - * camel-mime-part.h (CamelMimePartClass): Removed - parse_header_pair() method, it doesn't add anything that - add_header() can't be used for. - (CamelMimePartClass): Remove *_header_lines methods. - (struct _CamelMimePart): Remove header_lines list. - (struct _CamelMimePart): Removed filename attribute. - - * camel-medium.c (camel_medium_init): Init headers to null, not a - hashtable. - (add_header): Append the headers as a list. - (remove_header): Remove headers as a list. - (get_header): Likewise for lookup. - (free_header): Removed, no longer needed. - (finalize): Free headers using header_raw_clear(). - (camel_medium_set_header): New function, to reset and override all - values of a header with a new value. - - * camel-medium.h (struct _CamelMedium): Changed to use a - header_raw struct rather than a hash table, to store headers - (many headers can occur multiple times). - - * camel-mime-utils.c (header_raw_find_next): New function, allows - you to find multi-valued header fields. - (header_disposition_format): New function to format/create - content-disposition header string. - (header_param_list_format_append): Function to format parameter - lists into a GString. - (header_content_type_format): Function to format content-type into - a usable format. - (header_set_param): allow NULL value to remove the parameter. - (decode_token): Renamed from header_decode_token. - (header_decode_token): New interface for external use. - (quoted_decode): Made static to kill annoying warnings. - (g_strdup_len): Killed, replaced with calls to g_strndup(). - (rfc2047_decode_word): Made static to kill warnings. - (decode_coded_string): Terminated. - (g_string_append_len): Made static to kill warnings. - (header_decode_text): Made static to kill warnings. - (header_decode_text): Constify. - (rfc2047_decode_word): Constify. - (header_param): Constify. - (header_content_type_new): Copy the type/subtype strings. - (header_param_list_decode): Made static. - (header_param_list_format_append): Made static. - (quoted_decode): Constify. - (g_string_append_len): Constify. - (header_token_decode): New function to decode a single token. - - * providers/mbox/camel-mbox-summary.c (header_write): Append a - trailing \n when writing headers. - (strdup_trim): Killed a warning. - (camel_mbox_summary_set_uid): Make sure the next uid is at least 1 - higher than any existing one. - (header_evolution_decode): Use header_token_decode to get the - token. - - * camel-mime-parser.c (folder_scan_header): Strip the trailing \n - of the end of all header lines. - -2000-04-20 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-utils.[ch]: Removed. - - * providers/mbox/camel-mbox-parser.[ch]: Removed. Removed - references to it. - -2000-04-20 Dan Winship <danw@helixcode.com> - - * camel-mime-utils.c (rfc2047_decode_word): use libunicode iconv - functions rather than libc ones (since libc might not have them). - (header_decode_date): add autoconfiscation on timezone code - - * camel.c (camel_init): call unicode_init () - -2000-04-20 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-summary.c (message_struct_new): Trim - leading/trailing spaces off the raw headers. - - * MERGE NEW_PARSER branch into HEAD, fixed conflicts. - - * gmime-content-field.c (_print_parameter): Duh, removed again - (@@#$@ cvs merge). - - * camel-mime-utils.c (header_content_type_is): Constify. - (header_content_type_unref): Killed a couple warnings. - - * camel-folder.c (_init): Removed more log crap. - - * providers/Makefile.am (SUBDIRS): Removed nntp, pending fixes for - summary changes. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_number): - Fixed for new summary interface. Added a warning for using this - broken api. - (_get_message_by_uid): Fixed for message new with session - vanishing. - -2000-04-19 Dan Winship <danw@helixcode.com> - - * camel-simple-data-wrapper-stream.c - (camel_simple_data_wrapper_stream_get_type): This is a subtype of - CamelSeekableStream, not CamelStream. - - * camel-seekable-substream.c: clean up a lot. - (eos): When testing for end-of-stream, reset the parent position - before testing if it is at end-of-stream, since either (a) it may - have been seek'ed to eos by someone else, or (b) we may have been - seek'ed away from eos and it hasn't been synced yet. - - * camel-medium.[ch] (camel_medium_add_header): const poison. - (Belatedly goes with my change of 2000-02-23.) - (camel_medium_init): Use g_strcase_{hash,equal} on the header - array. - -2000-04-18 Dan Winship <danw@helixcode.com> - - * camel-mime-part.c (my_set_input_stream): - * camel-data-wrapper.c (set_input_stream, set_output_stream): do - better reference counting of streams so they actually go away - when they should. - - * camel-log.[ch], *: Nuke camel log stuff. Replace calls to - CAMEL_LOG_WARNING with calls to g_warning. - - * camel-data-wrapper.[ch]: - * camel-simple-data-wrapper.[ch]: - * camel-medium.[ch]: Clean, polish, document. Most of the gtk-doc - comments added to camel-data-wrapper.c note serious problems that - need to be fixed. - -2000-04-17 Dan Winship <danw@helixcode.com> - - * camel-mime-message.[ch]: Remove the "session" field from - CamelMimeMessage. Nothing uses it, about half of the existing - calls to camel_mime_message_new_with_session pass NULL, and - there's no obvious reason for it to be there. - - * providers/MH/camel-mh-folder.c: - * providers/maildir/camel-maildir-folder.c: - * providers/mbox/camel-mbox-folder.c: - * providers/mbox/camel-mbox-utils.c: - * providers/nntp/camel-nntp-folder.c: - * providers/pop3/camel-pop3-folder.c: Use camel_mime_message_new - instead of camel_mime_message_new_with_session. - - * camel-session.c (get_store_for_protocol_with_url): Set the - exception if no provider is found. - - * camel-url.c: Add code to encode and decode %-escapes in URLs, - and do some additional correctness-checking on URL syntax. From - Tiago Antào with modifications by me. - -2000-04-14 Chris Toshok <toshok@helixcode.com> - - * providers/Makefile.am (SUBDIRS): add nntp - -2000-04-14 Christopher James Lahey <clahey@helixcode.com> - - * providers/mbox/camel-mbox-folder.c: Fix switch statement. - -2000-04-14 Chris Toshok <toshok@helixcode.com> - - * providers/nntp/camel-nntp-folder.c (_exists): always return TRUE - for now. we need to check the server response to make sure the - group exists. - (_get_message_by_uid): make sure to account for the \n we add to - the string after every line. - - * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): function - to get the headers using the XOVER command. - (get_HEAD_headers): function to get the headers using the HEAD - command on each message. slooooooow. - (camel_nntp_get_headers): make this function use either XOVER or HEAD - versions depending on whether or not the server extension is present. - -2000-04-14 Dan Winship <danw@helixcode.com> - - * camel-formatter.[ch]: This didn't belong in Camel. Move to mail/ - - * Makefile.am, camel-types.h: remove references to - camel-formatter. - -2000-04-12 Matt Loper <matt@helixcode.com> - - * camel-folder-pt-proxy.c (_folder_open_cb): Print warning message - for broken function. - (_folder_close_cb): Same. - -2000-04-12 Miguel de Icaza <miguel@gnu.org> - - * Makefile.am (pthread_SRC): Use correct names for the pthread - source variables. - -2000-04-10 Dan Winship <danw@helixcode.com> - - * providers/pop3/camel-pop3-store.c (pop3_connect): fix various - bugs in APOP code (still untested) and some of the error cases. - - * camel-provider.h: Clarify what provider.protocol, provider.name, - and provider.description should be. - - * providers/mbox/camel-mbox-provider.c: - * providers/pop3/camel-pop3-provider.c: - * providers/sendmail/camel-sendmail-provider.c: - * providers/smtp/camel-smtp-provider.c: update protocols, names, - and descriptions - - * providers/mbox/camel-mbox-folder.c (_get_message_by_number): - implement get_message_by_number for the mail fetch code. - -2000-04-09 Jeffrey Stedfast <fejj@stampede.org> - - * providers/smtp/camel-smtp-transport.c: reformatted to fit - the standard indent format used by helix code - -2000-04-09 Dan Winship <danw@helixcode.com> - - * camel-movemail.c: New file with new function to dot-lock an mbox - file and copy it to a safe private directory. - -2000-04-08 Christopher James Lahey <clahey@helixcode.com> - - * providers/smtp/.cvsignore: Added a .cvsignore file. - -2000-04-08 Dan Winship <danw@helixcode.com> - - * providers/sendmail/camel-sendmail-transport.c (_send_internal): - actually record the pid returned by fork(). Noticed by clahey. - - * providers/smtp/camel-smtp-transport.c: #include <sys/param.h> - for MAXHOSTNAMELEN. (This is a stopgap: some of the uses of - MAXHOSTNAMELEN are wrong anyway...) - -2000-04-07 Jeffrey Stedfast <fejj@stampede.org> - - * providers/smtp/camel-smtp-transport.c: fixes to numerous bugs; - should now build fine. - * providers/Makefile.am: Readded smtp now that smtp builds without - error. - -2000-04-20 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_next_uid): Public function to get the next - uid, makes sure its saved to disk too. - - * camel-mime-part.c (my_finalize): Fix disposition crap with a - real disposition. - (my_set_disposition): Likewise. - (my_get_disposition): And here. - (my_write_to_stream): And here, needs more cleanup. - - * providers/mbox/camel-mbox-folder.c (_append_message): Assign a - new uid at this point. - - * gmime-content-field.c (gmime_content_field_write_to_stream): - Make something up if we have an invalid/missing content type - (i.e. text/plain). - -2000-04-19 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-folder.c (_delete): Fixed completely - broken switch() syntax, only compiled because errno is a macro on - some systems. - (_list_subfolders): Likewise. - -2000-04-18 NotZed <NotZed@HelixCode.com> - - * camel-mime-parser.c (folder_scan_init): init stream to null. - - * providers/mbox/camel-mbox-summary.c - (CAMEL_MBOX_SUMMARY_VERSION): Moved to .c file, incremented. - (index_folder): Changed to have index passed via the summary. - (decode_string): Do a sanity check on the string size, so we dont - visit g_malloc()'s friendly abort(). - - * camel-folder-pt-proxy.c (camel_folder_pt_proxy_class_init): - Removed reference to set_name. - (_set_name): Removed. - - * providers/mbox/camel-mbox-utils.c - (parsed_information_to_mbox_summary): Removed. Most of this file - is about to be binned. - - * providers/mbox/camel-mbox-search.c (func_header_contains): Fixes - for changes to summary interface. - (struct _searchcontext): Remove pointer to message info, get it - straight from the mboxsummary. - (camel_mbox_folder_search_by_expression): New summary interface. - (camel_mbox_folder_search_by_expression): Uh, the summary is not - an object anymore (well not yet). - - * providers/mbox/camel-mbox-folder.c - (camel_mbox_folder_class_init): Removed set_name init. - (_set_name): Removed. - (_open): Call new summary interface. - (_close): Use new summary interface. - (_create): Removed a summary object leak. - (_get_message_count): New summary interface. - (_get_uid_list): Use new summary interface. FIXME: this is leaky. - (_get_message_by_uid): Use the new summary interface, some - cleanup. - (_append_message): Totally changed, basically just appends the - message directly, ignores the summary (for now), the summary will - fix itself up if it needs to. - (_check_get_or_maybe_generate_summary_file): Bye bye old code. - (summary_get_message_info): Implement get_message_info again, for - folder. - - * camel-folder.c (camel_folder_class_init): Removed set_name - setup. - (_set_name): Moved contents into _init. - (_init): Perform the old functions of set_name here. - - * camel-folder.h: Removed the set_name internal interface. - -2000-04-14 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-summary.[ch]: Completely replaced with - new code. - - * Makefile.am (libcamel_la_SOURCES): Removed - camel-folder-summary.[ch]. - - * camel-folder.h (struct _CamelFolder): Removed summary. - (struct _CamelFolder): Changed flags to be 1 bit bitfields. - - * camel-folder-summary.[ch]: Class removed entirely. - - * camel-folder.c (camel_folder_get_summary): Removed. - (camel_folder_summary_get_message_info): Moved from - camel-folder-summary.c - (camel_folder_summary_get_subfolder_info): Moved from - camel-folder-summary.c - - * camel-mime-parser.c (folder_scan_step): Store the start of - headers and start of from in the scan state. - (camel_mime_parser_tell_start_headers): Query the start of the - headers. - (camel_mime_parser_tell_start_from): Query the cached start of - from marker. - -2000-04-13 NotZed <NotZed@HelixCode.com> - - * gmime-content-field.c (gmime_content_field_free): Removed this - function. If its too dangerous to use, it shouldn't be here. - (gmime_content_field_ref): Also ref the embedded content-type. - (gmime_content_field_unref): Ditto to unref it. - - * camel-mime-utils.h: Add a refcount for content-type header. - - * camel-mime-utils.c (header_content_type_unref): Implement unref - for content-type. - (header_content_type_ref): Implement ref for header content type. - -2000-04-12 NotZed <NotZed@HelixCode.com> - - * gmime-content-field.h: Changed to use a _header_content_type. - Added type/subtype back for compatability with clients. - - * gmime-content-field.c: Basically a total rewrite, and now just a - thin wrapper ontop of header_content_type. - (_free_parameter): Got rid of it. - (gmime_content_field_new): Use header_content_type_* functions. - (gmime_content_field_set_parameter): Likewise. - (_print_parameter): Blow away. - (gmime_content_field_write_to_stream): Get details from the - content_type field. Should check if it needs to escape chars in - the paramter value. - (gmime_content_field_get_mime_type): Likewise. - (___debug_print_parameter): Get rid of this rather annoyingly - named function. - (gmime_content_field_get_parameter): Simplified function. - (gmime_content_field_construct_from_string): Fixed this to use a - real parser. - (gmime_content_field_is_type): New function to test if a type matches. - (gmime_content_field_construct_from_string): Track type/subtype - from subordinate content_type header struct. - - * gmime-rfc2047.[ch]: Removed. Unused. - - * camel-stream-b64.[ch]: Blown away more duplicated code. - - * Makefile.am: Removed camel-stream-b64.[ch], and - gmime-base64.[ch]. - - * camel-mime-part.c (my_get_content_object): Replaced - camel-stream-b64 with camel-stream-filter/camel-mime-filter-basic. - (my_write_content_to_stream): Replaced camel-stream-b64 with the - camel-stream-filter with an encoder. - (my_get_content_object): Also implement quoted-printable decoding. - (my_write_content_to_stream): Also implement quoted-printable - encoding. - (my_get_output_stream): Took out stream-b64 code (nothing's being - executed yet anyway). - - * gmime-base64.[ch]: Blown away. Not used, dont need it. - - * camel-mime-utils.h: Added offset for this header. Records where - it is in the source. - - * camel-mime-utils.c (header_raw_append_parse): Add offset - parameter, to store where the header is stored in the stream. - (header_raw_append): Added offset param. - (header_raw_find): Return offset, if a pointer supplied for it. - (header_raw_replace): Add offset param. - (header_content_type_new): New function, to create an empty - content type. - (header_content_type_set_param): Set a parameter in the - content-type. - (header_set_param): Generic header parameter setting function. - (header_decode_string): Handle NULL input. - - * camel-mime-parser.c (camel_mime_parser_headers_raw): New - function to get access to all the raw headers. - (folder_scan_header): Keep track of the header start position, and - store it when saving the header. - -2000-04-11 NotZed <NotZed@HelixCode.com> - - * camel-mime-utils.c: Moved a bunch of printf's to debug. - - * camel-mime-parser.c: Moved a bunch of printf's to debug. - (folder_scan_header): Detect end of each header line using the - last scanned char, and not the last scanned position. - - * camel-mime-filter-index.[ch]: Indexing filter. Indexes unicode - sequences into ibex files. - -2000-04-09 NotZed <NotZed@HelixCode.com> - - * camel-mime-part.c: Dont include gmime-base64.h - - * camel-mime-filter-charset.c (complete): Implement the completion - function. - - * camel-mime-parser.c (folder_scan_step): If we get to the end of - the body data, check any filters for outstanding completion data. - (camel_mime_parser_scan_from): Set whether we scan for "From " - headers or not. - - * camel-stream-filter.c (do_read): If we get to end of stream on - the source, then call the filtering completion function to see if - we have any more data to return. - - * camel-mime-filter-basic.c (filter): Implement quoted printable - encoding and decoding filters. - (complete): And the complete function as well. - - * camel-mime-utils.c (base64_encode_close): Also take an input - buffer, allow closing of filters. - (quoted_encode_step): First cut, simple quoted-printable encoder. - Doesn't handle trailing spaces/tabs on end of line properly yet. - (quoted_encode_close): Complete a quoted-encoding. - (is_qpsafe): New type check, for quoted-printable safe characters - (that do not need encoding). Thats all bits used in the type - table! Rebuilt the types table. - (header_content_type_is): Checks a content type against at - type/subtype match. - (header_content_type_param): Handle NULL content type pointer. - -2000-04-08 NotZed <NotZed@HelixCode.com> - - * camel-mime-filter-basic.c (filter): Implement the base64 - encoder. Problem is, there is no way to know when to close it. - Close/Reset will have to provide the same args as filter, so it can - flush remaining data *sigh* - - * camel-mime-utils.c (base64_encode_step): A rather complex base64 - encoder, fast? - (base64_step_close): Companion function to finish off the base64 - sequence. - - * camel-mime-part.c (my_write_content_to_stream): Changed to use - camel_stream_write_to_stream(). - - * camel-stream.[ch] (camel_stream_write_to_stream): From - camel_stream_b64_write_to_stream(). Fixed some infinite loop - bugs with error conditions. - - * camel-stream-b64.[ch] (camel_stream_b64_write_to_stream): Removed. - This has nothing to do with stream-b64, so i've moved it to - CamelStream. - - * camel-mime-utils.h: Add a comment about refcounting - header_content_type struct. - - * Makefile.am: Added camel-stream-filter*.[ch]. - - * camel-stream-filter.[ch]: Class to implement a generic - (multipass) filter ontop of a stream. Only implements a read-only - stream. - - * camel-mime-parser.c (camel_mime_parser_filter_add): Ref the - filter we just added. - - * Makefile.am: Added camel-mime-filter*.[ch]. - - * camel-mime-filter-charset.[ch]: A filter to preform character set - conversion (uses unicode_iconv). - - * camel-mime-filter-save.[ch]: A simple filter which will save all - data directly to a file or file descriptor. - - * camel-mime-filter-basic.[ch]: Implements the basic mime filters, - base64 and quoted-printable decoding (encoding not implemented yet). - - * camel-mime-filter.[ch]: A filtering class, which can filter streams - of data without having to copy them. Simpler than stream classes, - and can be plugged into a single stream class (when i write it). - -2000-04-07 Dan Winship <danw@helixcode.com> - - * providers/pop3/camel-pop3-store.c (pop3_connect): Clarify error - messages. - (finalize): fix a bug in camel_exception usage - (pop3_connect): Remember the password after asking for it the - first time. - -2000-04-07 NotZed <NotZed@HelixCode.com> - - * Makefile.am: Added camel-mime-parser/camel-mime-utils. - - * camel-mime-parser.c: Fast mime parser. - - * camel-mime-utils.c: Mime utility functions, and email header - parsers. - -2000-04-07 NotZed <NotZed@HelixCode.com> - - * providers/Makefile.am: Removed smtp for now, its a long way from - building. - * providers/smtp/Makefile.in: Removed file that shouldn't have been - checked in. - -2000-04-06 Matt Loper <matt@helixcode.com> - - * camel-folder-pt-proxy.c (_get_full_name): Remove exception param - from get_full_name() called, since get_full_name() was changed to - not have an exception in the last param (see dan's notes below). - (_get_name): same. - -2000-04-06 Dan Winship <danw@helixcode.com> - - * camel-store.[ch]: Reorganize the folder-fetching methods and - implement a folder cache so that multiple requests for the same - folder will yield the same CamelFolder object (as long as it - remains active). Includes some code to remove no-longer-active - folders from the cache, but it doesn't get used since nothing is - ever unref'ed in Camel right now... - - * providers/mbox/camel-mbox-store.c: - * providers/pop3/camel-pop3-store.c: update for CamelStore - changes. - - * camel-folder.[ch]: Remove the (unused) CamelException argument - from camel_folder_get_name and camel_folder_get_full_name. - (camel_folder_set_name): make this go away since changing a - folder's name after it has been created could result in it - conflicting with a separately-issued folder. - -2000-04-05 Dan Winship <danw@helixcode.com> - - * g_url_new really wanted to take a CamelException. So, rename - Gurl to CamelURL, g_url_* to camel_url_* (with camel_url_new - taking an exception), and url-util.[ch] to camel-url.[ch]. Also - force url->port to be numeric and remove camel_service_getport. (I - was confused before: the URL RFC says the port must be numeric, so - we don't want to do getportbyname.) - -2000-04-01 Dan Winship <danw@helixcode.com> - - * providers/mbox/camel-mbox-folder.c - (_check_get_or_maybe_generate_summary_file): Compare - mbox_file_size and mbox_modtime to the results of stat()ing the - mbox file, not the summary file. Duh. - (_close): Update the summary's mbox_file_size and mbox_modtime - before writing it to disk. - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_save, - camel_mbox_summary_load): Wow. I must have been tired when I wrote - this code. First, the comparison bug above. Second, it was using - ntohs and htons instead of ntohl and htonl. Third, I was reading - the status flag byte in two different places and thus getting out - of sync. Fourth, it was writing out field_length bytes of each - header field after having converted field_length to network byte - order, resulting in lots of random crap being appended, and the - summary files being huge. (Fortunately, since the size/modtime - comparison was biffed, the garbage summary read from disk was - always immediately discarded.) - - * providers/mbox/camel-mbox-parser.c (camel_mbox_parse_file): fix - an off-by-one error that caused the last-used UID to be reused if - the summary file was regenerated. (That one wasn't my fault. :-) - -2000-03-31 Dan Winship <danw@helixcode.com> - - * camel-stream-mem.c: implement unimplemented methods - - * gmime-content-field.c - (gmime_content_field_construct_from_string): - * data-wrapper-repository.c - (data_wrapper_repository_get_data_wrapper_type): - * camel-simple-data-wrapper.c (my_write_to_stream): - * camel-mime-part.c (my_set_input_stream): - remove debugging printf()s that no longer seem useful. - -2000-03-31 Matt Loper <matt@helixcode.com> - - * camel-formatter.c (text_to_html): Added "convert_newlines_to_br" - boolean param, to give the option of not converting '\n's to <br> - tags. This way, when we stick stuff in a <pre> tag, newlines stay - newlines. - -2000-03-30 Matt Loper <matt@helixcode.com> - - * camel-formatter.c (handle_text_plain): Use <pre> tag to force - the use of monospaced fonts. - -2000-03-30 Dan Winship <danw@helixcode.com> - - * camel-service.c (camel_service_getport): Add a htons in the - default_number case, and document the fact that the function - returns the port in network byte order. - - * providers/pop3/camel-pop3-store.c (pop3_connect): Revert - Miguel's change. The port number bug was actually somewhere - else, and the IP address copying code was fine already. - -2000-03-29 Miguel de Icaza <miguel@gnu.org> - - * providers/pop3/camel-pop3-store.c (pop3_connect): Add htons - (port), and only copy 4 bytes for the IP address to prevent a DNS - attack. - -2000-03-28 Dan Winship <danw@helixcode.com> - - * camel-seekable-substream.c - (camel_seekable_substream_new_with_seekable_stream_and_bounds): - make this return a CamelStream rather than a - CamelSeekableSubstream, because that's the way Gtk objects tend to - work. - - * camel-service.c (camel_service_gethost, - camel_service_getport): convenience functions to canonicalize - the host and port values of a service's URL. - * providers/pop3/camel-pop3-store.c: use them - - * providers/mbox/camel-mbox-folder.c - (_check_get_or_maybe_generate_summary_file): Make this work when - the inbox file doesn't yet exist. - -2000-03-27 Dan Winship <danw@helixcode.com> - - * providers/mbox/camel-mbox-folder.c (_append_message): uncomment - the call to unlink the temp file: there's no way to tell - camel_stream_fs to truncate a file, so reusing the same file was - resulting in junk at the ends of messages. - - * camel-folder.[ch]: add delete_message_by_{number,uid}. - - * providers/pop3/camel-pop3-folder.[ch]: implement - delete_message_by_uid. Add a close method to do expunging - of deleted messages if requested. - - * providers/pop3/camel-pop3-store.[ch]: support for - CamelPop3Folder::close. (You have to close the connection - in order to expunge the folder, thus the store may be - connected in the CamelService::is_connected sense when it - is not actually connected to the server.) Also some bugfixes. - -2000-03-27 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-folder.c (_append_message): Unref the - output_stream when done, close doesn't do it. - (_append_message): Clear all uid's from the appending messages, so - they are reassigned proper unique id's. - - * gmime-utils.c (get_header_array_from_stream): Actually free the - header, it is copied elsewhere. - -2000-03-26 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): Added - folder parameter to function. Fixed callers. - (index_message): Index a message as it is assigned a unique id. - - * camel-mime-part.c (my_set_content_id): Make sure we malloc and - copy the content_id, otherwise *poof* - -2000-03-25 NotZed <NotZed@HelixCode.com> - - * camel-medium.c (_finalize): Another leak, unref the content if - finished with it. - - * camel-recipient.c (camel_recipient_table_free): Plug another - memory leak - actually free the recipient table. - - * camel-mime-message.c (_finalize): Plugged a memory leak with the - flags table. - - * gmime-utils.c (_store_header_pair_from_string): A simpler, more - debuggable and functionally identical header extraction function. - -2000-03-24 NotZed <NotZed@HelixCode.com> - - * gmime-content-field.c (gmime_content_field_set_parameter): - Remove the hash table entry before freeing its key and data. - -2000-03-27 Dan Winship <danw@helixcode.com> - - * providers/Makefile.am (SUBDIRS): Add pop3. - - * providers/pop3/camel-pop3-store.c: keep separate input and - output streams so the output doesn't end up being buffered. - - * providers/pop3/camel-pop3-folder.c (get_message_by_number): - finish implementing this. - -2000-03-27 Michael Meeks <michael@helixcode.com> - - * camel-mime-part.c (my_set_disposition): fix so less broken. - (my_finalize): remove dodgy disposition free. - - * camel-data-wrapper.c (my_set_mime_type_field): unref instead of - free on mime_type. - -2000-03-27 Dan Winship <danw@helixcode.com> - - * camel-service.c (camel_service_free_auth_types): new routine to - free the data allocated by camel_service_query_auth_types. - - * providers/pop3/camel-pop3-store.c (free_auth_types): implement - - * camel-stream-mem.c (camel_stream_mem_new_with_buffer): rename - camel_stream_mem_new_with_buffer to ..._with_byte_array and add a - new ..._with_buffer that takes a char * rather than a GByteArray. - - * Remove CamelStreamBufferedFs, since CamelStreamBuffer makes it - redundant. - -2000-03-25 Dan Winship <danw@helixcode.com> - - * camel-folder-summary.[ch]: change the CamelFolderSummary - interfaces to allow partial summary queries (for dealing - with very large folders). Remove the "extended_fields" from - CamelFolderInfo and CamelMessageInfo: this is better dealt - with by subtyping. - - * providers/mbox/camel-mbox-summary.[ch]: Make CamelMboxSummary a - subclass of CamelFolderSummary. Update interfaces for that. Remove - the internal/external summary distinction. Remove the (unused) md5 - checksum in the folder summary. Change the summary file format - (primarily to make it no longer byte-order dependent) and add a - version number to it so it will be easier to change in the future. - - * providers/mbox/camel-mbox-folder.[ch] - * providers/mbox/camel-mbox-search.c - * providers/mbox/camel-mbox-utils.c: update for summary changes - - * camel-exception-list.def: add - CAMEL_EXCEPTION_FOLDER_SUMMARY_INVALID - -2000-03-23 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-provider.c: Added flag to provider - initialisation, to match changed structure. - -2000-03-22 NotZed <NotZed@HelixCode.com> - - * camel-folder.[ch]: Added async search api. - - * providers/mbox/camel-mbox-search.c - (camel_mbox_folder_search_by_expression): Changed to use an - asynchronous interface. - (camel_mbox_folder_search_cancel): Cancel function for async - interface. - -2000-03-23 Dan Winship <danw@helixcode.com> - - * camel-stream-buffer.c (camel_stream_buffer_read_line): Function - to read one line of any size from a stream and return it in - allocated memory. - -2000-03-22 Dan Winship <danw@helixcode.com> - - * camel-service.c (camel_service_query_auth_types): New function - to query a service for the authentication protocols it supports. - * providers/pop3/camel-pop3-store.c (query_auth_types): implement - - * camel-provider.c (camel_provider_scan): New function to - scan the provider dir and return a list of all providers. - - * providers/pop3/camel-pop3-folder.c: fill this in partially - * providers/pop3/camel-pop3-store.c: make camel_pop3_command - return the text after "+OK"/"-ERR" and add a separate - camel_pop3_get_additional_data to get the message body or - whatever. Also make them take a CamelPop3Store rather than - a CamelStreamBuffer. - -2000-03-22 Matt Loper <matt@helixcode.com> - - * camel-formatter.c (debug): Disabled some useless debug - messaging. - -2000-03-21 Dan Winship <danw@helixcode.com> - - * providers/pop3: some initial bits of the POP3 provider, to - make Matt happy. Incomplete, untested, etc. - -2000-03-21 bertrand <bertrand@helixcode.com> - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_append_internal_to_external): copy the size field - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): initialize - message_info to NULL - - * camel-folder-summary.h: added the size field. - - * providers/mbox/camel-mbox-summary.h: - added the received_date field. - - * providers/mbox/camel-mbox-summary.c: - documented all functions. - - * camel-folder-summary.h: name change and - new fields. - - * providers/mbox/camel-mbox-search.c: update to - conform to name change in the summary fields. - -2000-03-10 bertrand <bertrand@helixcode.com> - - * camel-service.h: cosmetic changes. - -2000-03-09 Dan Winship <danw@helixcode.com> - - * s/HelixCode/Helix Code, Inc./ in the copyrights - -2000-03-07 bertrand <bertrand@helixcode.com> - - * camel-formatter.c (handle_mime_part): - plug mem leaks due to bad documentation - of camel_content_field_get_mime_type - (print_camel_body_part): idem - (handle_multipart_alternative): idem - - * gmime-content-field.c (gmime_content_field_get_mime_type): - documentation fix. - - - * camel-mime-part.c (my_finalize): unref the - content_input_stream if any. - -2000-03-06 bertrand <bertrand@helixcode.com> - - * camel-stream-fs.c (_seek): fix a bogus calculation - in the return position. - -2000-03-05 bertrand <bertrand@helixcode.com> - - * camel-session.h: cosmetic fixes. - - * camel-stream-fs.c (_read): - (_seek): fixed the current position so that it refers - to the current position in the stream, not in its parent. - -2000-03-04 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-search.c - (camel_mbox_folder_search_by_expression): Ref the summary - after we have got it. - -2000-03-04 bertrand <bertrand@helixcode.com> - - * camel-mime-part.c (my_write_content_to_stream): - stream the raw content instead of nothing if the encoding - is not supported. - - * camel-stream-fs.c (_seek): handle eos more - properly. - - * camel-formatter.c (get_bonobo_tag_for_object): - bonobo-goad-id is the good key to look for. - (get_bonobo_tag_for_object): close the <object> tag. - (get_bonobo_tag_for_object): the correct syntax for the - to set a parameter inside an <object> tag is : - <object classid="..."> <param name="uid" value="..."> <param ...> - </object> - -2000-03-03 bertrand <bertrand@helixcode.com> - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): - use set_input_stream instead of construct_from_stream - to feed the message object. - - * camel-data-wrapper.c (my_write_to_stream): reset output stream. - (my_set_input_stream): unref the previous input stream. - use the set_output_stream for default behaviour. - (my_set_output_stream): unref previous output stream. - - * camel-mime-part.c (my_write_content_to_stream): reset content - object output stream. - -2000-03-03 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): Make - sure we open with create with a creation mask. - -2000-03-01 NotZed <NotZed@HelixCode.com> - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_stream): DO NOT assert on - content type, we have fallback code 4 lines below it ... *sigh* - -2000-02-29 NotZed <NotZed@HelixCode.com> - - * Makefile.am (libcamelinclude_HEADERS): Added camel-stream-buffer - to build. - - * camel-stream-buffer.[ch]: Generic buffer which can be applied to - any stream. - -2000-03-03 bertrand <bertrand@helixcode.com> - - * camel-formatter.c (handle_image): in the case - of images, put the content object output stream - in the url. This allows the message browser - to show inline images. - - * camel-stream-b64.c (my_read_encode): fixed state - 0 keep value. - -2000-03-02 bertrand <bertrand@helixcode.com> - - * camel-stream-b64.c (my_read_encode): don't forget to - set the state to 0 after 3. - (my_read_encode): don't forget to encode, even in state 3. - - * camel-simple-data-wrapper.c: static functions are prefixed - with my_ instead of _ - * camel-multipart.c: static functions are prefixed - with my_ instead of _ - (my_write_to_stream): commented. - (my_write_to_stream): warning in case the boudary is set - but is a zero length string. - - * camel-mime-part.c (camel_mime_part_encoding_from_string): - remove debug trace. - - * camel-mime-part.c: Replaced all static functions - with name begining with _ by the same name begining - with "my_" to prevent the possible conflicts - with system symbols Dan warned us about. - - * camel-stream-b64.c (camel_stream_b64_write_to_stream): - use CamelStreamB64 type for the input stream. - - * camel-mime-part.c (_get_content_object): remove - debugging trace - (_write_content_to_stream): implement the b64 - encoding the new way (that is using camel_stream_b64) - - * camel-data-wrapper.c (my_write_to_stream): - fix implementation so that it writes properly - to the output stream even. - - * camel-stream-b64.c (camel_stream_b64_write_to_stream): - fix implementation. - -2000-02-29 bertrand <bertrand@helixcode.com> - - * camel-stream-b64.c (camel_stream_b64_write_to_stream): new - utility function. - - * camel-data-wrapper.c (_write_to_stream): default - implementation. - - * gmime-utils.c (_store_header_pair_from_string): - revert strange changes. - - * camel-stream-b64.c (my_read_decode): set eos to true when we - have read the whole input stream. - (my_reset): set eos to FALSE. - -2000-02-28 NotZed <NotZed@HelixCode.com> - - * camel-mime-part.c (_parse_header_pair): Dont free this either. - - * camel-medium.c (_remove_header): Ugh, dont free the header - before we actually remove it. - (_add_header): Ugh, dont free hashtable entries which may be - duplicated (hash_insert _will_ reference that memory). - - * string-utils.c (string_trim): Trimming a 0-length string is not - an error. - - * camel-mime-message.c (_parse_header_pair): Fixed very broken - memory handling of header_name/value. - - * providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): - Initialise end_of_last_message always. - (camel_mbox_copy_file_chunk): Stop trying to read if we run out of - data, rather than looping forever. - (camel_mbox_write_xev): Use an open flag when opening with create. - - * camel-folder.c (camel_folder_search_by_expression): No, its not - a fatal error to search on a non-searchable folder, you just dont - get any matches. - (_open): Dont open an opened folder (i dont see why this is really - a bug, but what the hell ...) - - * providers/mbox/camel-mbox-folder.c (_init): Set search cap on. - (_open): Call parent class to perform open. Remove folder-open - check to parent instead. - (_create): open takes a creation mask, dont use umask to try and - set the open mode. - (_delete): Dont bother checking folder==NULL, its already been - checked on the external interface (changed to an assertion, this - would have to be a camel bug). - (_delete_messages): Likewise. - (_create): Ditto. - (_init): Dont go and clear all the paths and shit that the parent - open just setup for us. - (_delete_messages): Get rid of more umask stuff. - (_append_message): Make sure we pass file mode to open with create. - (_append_message): Cleaned up some indenting to make it readable. - - * camel-stream-b64.c (my_read_encode): Fixed a typo. - - * providers/mbox/camel-mbox-search.c: Changed to use e-sexp, - rather than filter-sexp. - -2000-02-28 bertrand <bertrand@helixcode.com> - - * camel-stream-b64.c (my_read_encode): encoding - filter. - -2000-02-23 bertrand <Bertrand.Guiheneuf@aful.org> - - * camel-stream-b64.c: changed the __static - suffix into a my_ prefix. - (camel_stream_b64_set_mode): reset the persistent - status. - (my_read_decode): remove superfluous % - - * providers/mbox/camel-mbox-utils.c (camel_mbox_copy_file_chunk): - fix exception description message. - -2000-02-24 Dan Winship <danw@helixcode.com> - - * camel-session.c: Add camel_session_get_transport_for_protocol. - - * camel-transport.h: - * camel-transport.c: Add an abstract CamelTransport class. - - * providers/sendmail/*: A CamelTransport that uses sendmail - to deliver mail. - -2000-02-24 Dan Winship <danw@helixcode.com> - - * camel-folder.c: use CamelExceptions for run-time errors, not - incorrect code. Don't bother validating that an object exists from - inside one of its methods, since you couldn't have gotten there if - it didn't. Fix some code style bugs. - - (_init): Rename init_with_store to init and add parent_folder, - separator, and name arguments. - (_set_name): Get separator from self, not parent_store now. - - * camel-store.h: - * camel-store.c: Remove get/set_separator. - - * providers/mbox/: Update for above. - -2000-02-23 Dan Winship <danw@helixcode.com> - - * camel-medium.c (_finalize): Free the data in the headers hash - table. - (_add_header): g_strdup the header name and value when adding it. - - * camel-mime-part-utils.c - (camel_mime_part_construct_headers_from_stream): Free the header - data after calling camel_medium_add_header, since it will have - g_strdup()ed it itself. - -2000-02-22 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-search.c: Dont compile by default. - - * providers/mbox/Makefile.am: Fuck off the filter code. - -2000-02-22 bertrand <Bertrand.Guiheneuf@aful.org> - - * camel-stream-b64.c (read_decode__static): - don't read the char if we reached the length - of the output buffer. Hours lost on this - %$!@# bug : 3.5 - - * camel-folder.c (camel_folder_get_subfolder): - (camel_folder_create): - (camel_folder_delete): - (camel_folder_delete_messages): - (camel_folder_list_subfolders): - (camel_folder_expunge): - (camel_folder_get_message_by_number): - (camel_folder_get_message_count): - (camel_folder_append_message): - (camel_folder_copy_message_to): - (camel_folder_get_summary): - (camel_folder_get_message_uid): - (camel_folder_get_message_by_uid): - (camel_folder_get_uid_list): - Check folder state (open/close) and raise an - exception if it is not ok. - - * providers/mbox/camel-mbox-folder.c (_create): - create the file and the path with two different - names. - - * camel-folder.c (_create): handle the case - when the folder name starts with '/' - - * camel-exception.c (camel_exception_new): use - (void) instead of () in decl. - - * camel-exception.h: cosmetic fixes. - - * camel-exception.c (camel_exception_init): new routine. - Fix a bug in mail/message-list.c - - - * camel-folder.h: cosmetic changes. - - * camel-stream-b64.c (reset__static): added a - reset method. Thanks message-browser to find - so much bugs :) - - * providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): readd - Unicode libs. - -2000-02-21 bertrand <Bertrand.Guiheneuf@aful.org> - - * camel-formatter.c (lookup_unique_id): - awful hack to test get_output_stream. - * camel-stream-b64.[ch] : - b64 encoding/decoding is now implemented as - a stream. - -2000-02-21 bertrand <Bertrand.Guiheneuf@aful.org> - - * camel-seekable-substream.c (_reemit_parent_signal): - emit "data_available" when parent stream emits it. - -2000-02-21 NotZed <NotZed@HelixCode.com> - - * providers/mbox/Makefile.am: Uh, fixed LIBADD again. What was - there was never ever going to work, wasn't it tested? - -2000-02-21 Dan Winship <danw@helixcode.com> - - * camel-session.h: (struct _CamelSession): Add authenticator. - - * camel-session.c (camel_session_new): Add authenticator. - (camel_session_query_authenticator): New function to query the - session authenticator for password, etc, information. - -2000-02-21 Dan Winship <danw@helixcode.com> - - * camel-session.c: add CamelExceptions to several functions. Use - camel_session_new to initialize the session and URL fields of - created CamelStores as appropriate. - - * camel-store.h: - * camel-store.c - * camel-service.h: - * camel-service.c: Move the session and url (and associated - functions) from CamelStore to CamelService. Add url_flags to - CamelService so subclasses can specify which URL components - are mandatory for them. Add camel_session_new for - camel_session_get_store* to use. - - * providers/mbox/camel-mbox-folder.c: - * providers/mbox/camel-mbox-store.c: - * providers/mbox/camel-mbox-store.h: Update for above changes. - - * camel-exception-list.def: Once camel is being used for real, - exceptions won't be renumberable. So renumber them now to make - more room to add exceptions to the various categories later, and - add a big warning message. - -2000-02-20 Dan Winship <danw@helixcode.com> - - * providers/mbox/Makefile.am: add libibex back to - libcamelmbox_la_LIBADD - -2000-02-18 NotZed <NotZed@HelixCode.com> - - * providers/mbox/camel-mbox-search.h - (camel_mbox_folder_search_by_expression): Added exception to call, - and fixed caller. - - * providers/mbox/camel-mbox-search.c - (camel_mbox_folder_search_by_expression): Major changes, to use - the sexp evaluator from filter/filter-sexp.c to implement the - searching. - (func_body_contains): Changed to support multiple strings in 1 - command (results or'd together) - - * url-util.c (g_url_new): Fixed a typo (colon == 0 isn't right), - and made it so full url's are absolute pathed (Dan, this is how it - has to work!). Also, always include a path part, even if it is an - empty string. - -2000-02-18 Dan Winship <danw@helixcode.com> - - * camel/camel-types.h: New header with the typedefs for all camel - classes. Now the class headers can just include this and the - header for the parent type. This makes it possible for - CamelService to include a CamelSession without creating an - #include loop. - - * camel/*: - * composer/e-msg-composer-attachment-bar.h: - * mail/folder-browser.c: - * mail/message-list.c: frob #includes to match the new reality - -2000-02-17 Dan Winship <danw@helixcode.com> - - * camel/camel-service.h: - * camel/camel-service.c: Make camel-service us a Gurl internally. - Remove the login/password interfaces and instead provide - camel_service_connect_with_url. Add CamelExceptions - -2000-02-17 bertrand <Bertrand.Guiheneuf@aful.org> - - * camel/camel-formatter.c (handle_text_plain): - (handle_text_html): use camel_stream_reset instead - of seek. The formatter should be able to work - with all streams, not only seekable streams. - In the case where some provider implementation - would not be able to provide a reset method - to their stream, implementors would have - to find a workaround. - - * camel/camel-session.c (camel_session_new): use - (void) instean of () in function decl. - - * camel/camel-folder.c: ifdef async operation - related code. - - * camel/camel-seekable-stream.c (_seek): added a warning. - (_reset): default implementation of reset for seekable - stream. - - * camel/camel-mime-message.h: set_received_date declaration fix. - cosmetic changes. - - * camel/providers/mbox/camel-mbox-provider.c (camel_provider_module_init): - use (void) instead of (). - - * camel/camel-stream.c (camel_stream_reset): - new method for CamelStream. - -2000-02-17 Dan Winship <danw@helixcode.com> - - * camel/url-util.c (g_url_to_string): New function to convert - a Gurl back into a char *. - -2000-02-17 bertrand <Bertrand.Guiheneuf@aful.org> - - * camel/camel-formatter.c (handle_text_plain): - revamped so that it uses the output stream - of the data wrapper - (handle_text_html): ditto. - - - * camel/camel-simple-data-wrapper.h: - * camel/camel-simple-data-wrapper.c (camel_simple_data_wrapper_new): - use (void) instead of (). - (_get_output_stream): simple implementation. - -2000-02-16 bertrand <Bertrand.Guiheneuf@aful.org> - - * camel/camel-data-wrapper.c (_set_input_stream): ref input stream - (_set_output_stream): ref output stream - (_finalize): unref input and output streams - - * camel/camel-seekable-substream.c (_set_bounds): don't - seek the begining of the substream. - (_eos): fix eos condition testing. - (_finalize): unref parent stream - (_init_with_seekable_stream_and_bounds): ref parent stream - - * camel/gstring-util.c (g_string_equal_for_hash): - (g_string_equal_for_glist): return type is int. - - * camel/camel.h: - * camel/camel.c (camel_init): use (void) - instead of (). - -2000-02-16 NotZed <NotZed@HelixCode.com> - - * providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): Added - libfilter to link line (temporarily?). Required for - filter-sexp. - -2000-02-15 bertrand <bertrand@helixcode.com> - - * camel/camel-multipart.c (_localize_part): - this routine replaces the _read_part routine - and does not store the part in a buffer. - (_set_input_stream): use the set_input_stream - instead of the construct_from_stream. - each bodypart is given an input stream. - - * camel/camel-mime-part-utils.c: - include the data-wrapper-repository header. - (camel_mime_part_construct_content_from_stream): - use the set_input_stream instead of the - construct_from_stream method. - - * camel/camel-seekable-substream.c (_set_bounds): - cur position is set to 0 not to inf_bound. - -2000-02-15 bertrand <Bertrand.Guiheneuf@aful.org> - - * camel/camel-mime-part.c: include gmime-base64.h - various compilation and runtime fixes. - (_set_input_stream): store the input substream - for the content object. - - * camel/camel-data-wrapper.h: declare the - set/get function on input/output stream. - - * camel/camel-mime-part.c (_get_content_object): - don't use a temporary mem stream. - - * camel/camel-seekable-substream.c (_seek): - (_eos): - (_read): the substream can be unlimited in length - - * camel/camel-data-wrapper.c (camel_data_wrapper_class_init): - set the get/set_input/output_stream methods. - - * camel/camel-multipart.c (_construct_from_stream): - camel_stream_seek -> camel_seekable_stream_seek - -2000-02-14 Miguel de Icaza <miguel@gnu.org> - - * camel/providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): Add - the unicode libraries as well. - - * camel/camel-provider.c (camel_provider_register_as_module): Add - error reporting here. Desire to use Solaris increases. Hair loss - in the last two hours: 5,400. - - * camel/providers/mbox/camel-mbox-provider.c - (camel_mbox_get_provider): Renamed function. - - * camel/camel.h: All include files use camel/ now here. - - * camel/providers/mbox/Makefile.am: Drop all the dynamism from - Camel, and make this a standard library. - -2000-02-14 bertrand <Bertrand.Guiheneuf@aful.org> - - * camel/gmime-utils.c (get_header_array_from_stream): use the - eos stream method. - (gmime_read_line_from_stream): ditto. - - * camel/camel-stream-fs.h (struct ): add the eof field - cosmetics changes. - - * camel/camel-stream-fs.c (camel_stream_fs_init): set eof. - (_read): set eof on end of file. - (_eos): implemented. - - * camel/gmime-utils.c (get_header_array_from_stream): - make a blocking version of the header parser. - When the fs stream uses gnome-vfs, this should - be changed. - (gmime_read_line_from_stream): ditto. - -2000-02-11 bertrand <Bertrand.Guiheneuf@aful.org> - - * camel/camel-stream-fs.c: - everywhere, when using the cur_pos field, do it - on the CamelSeekableStream object. - (_seek): small fix. - - * camel/camel-seekable-stream.c (camel_seekable_stream_seek): - s/camel_stream_seek/camel_seekable_stream_seek/g - - * camel/camel-seekable-stream.h: - (struct ): added a field to store the - current position. - - * camel/camel-seekable-stream.c (camel_seekable_stream_get_current_position): - New function. Allows to get the current position - of a seekable stream. - - -2000-02-13 NotZed <notzed@zedzone.helixcode.com> - - * providers/mbox/camel-mbox-search.c: New file, implements the - search api for mbox folders. - - * providers/mbox/Makefile.am: Link with ibex. - - * camel-folder.c (camel_folder_has_search_capability): Api - additions. - (camel_folder_search_by_expression): Ditto. - -2000-02-12 NotZed <notzed@zedzone.helixcode.com> - - * providers/mbox/camel-mbox-folder.c (_set_name): Setup index - filename as well. - (_init_with_store): Init index filename. Hmm, none of these - names ever seem to get free'd (FIXME?) - - * providers/mbox/camel-mbox-folder.h: Add index file name. - -2000-02-12 NotZed <notzed@helixcode.com> - - * camel-folder.h: Add folder search functions. - - ** Created ChangeLog just for camel ** - - refer to ../ChangeLog for changes prior to this date. diff --git a/camel/ChangeLog.pre-1-4 b/camel/ChangeLog.pre-1-4 new file mode 100644 index 0000000000..7ea58c89d4 --- /dev/null +++ b/camel/ChangeLog.pre-1-4 @@ -0,0 +1,22083 @@ +2003-06-01 Jeffrey Stedfast <fejj@ximian.com> + + * broken-date-parser.c (d): Turn off debugging. + + * providers/pop3/camel-pop3-engine.c (get_capabilities): Move the + code that prepends the 'password' authtype to the auth list so + that we don't add it again when regetting the capabilities. + +2003-05-30 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (run_only_once): Turned off a debugging + printf. + +2003-05-27 Jeffrey Stedfast <fejj@ximian.com> + + This should finish fixing all variations of bug #42854, which, + funnily enough specified "copying" as the scenario for reproducing + this bug, but somehow I found/fixed it only for expunging for some + reason? I can't even guess as to how this happened. Oh well, + expunging needed fixing either way. + + * providers/imap/camel-imap-folder.c (imap_transfer_online): Sort + the uids here too (just like I had fixed for expunge a week or so + ago). + (imap_transfer_resyncing): Sort them here too. + (imap_search_by_uids): Sort here too, even though I don't think it + is necessary. Can't hurt. + (imap_expunge_uids_offline): Might as well sort here too. + +2003-05-22 Jeffrey Stedfast <fejj@ximian.com> + + * camel-object.c (camel_object_bag_destroy): Lets try this + again. We don't actually want to free the key here, because + camel_object_bag_remove() does that for us. This should fix bug + #43406 properly. + +2003-05-20 Jeffrey Stedfast <fejj@ximian.com> + + * camel-object.c (camel_object_bag_destroy): Create a second + GPtrArray for the keys. We don't want to use bag->free_key() on + the object. Fixes bug #43406. + +2003-05-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-summary.c (camel_folder_summary_load): Only display + a warning if errno != EINVAL (EINVAL means there was a version + mismatch, so we don't really need to warn here since we are + supposed to be able to handle this situation). + (perform_content_info_load): Turn off debugging message. + (summary_assign_uid): Turn off uid-clash warning. + (camel_folder_summary_decode_token): Turn off debug messages. + (summary_header_load): Turn off version-mismatch warning. + +2003-05-16 Jeremy Katz <katzj@redhat.com> + + * providers/smtp/camel-smtp-transport.c (smtp_helo): Ensure cmdbuf + is initialized to avoid compiler warning. + + * providers/local/camel-mbox-summary.c (summary_header_load): Cast + folder_size to uint32 to fix warning. + (camel_mbox_summary_sync_mbox): Update for new API. + + * providers/imap/camel-imap-utils.c (parse_params): + imap_parse_nstring expects size_t, not int + (imap_body_decode): Likewise. + + * camel-stream-filter.c (do_read): presize needs to be size_t + instead of int. + (do_write): Likewise. + + * camel-seekable-substream.c (stream_read): Return ssize_t instead + of int to match prototypes. + (stream_write): Likewise. + + * camel-mime-part.c (construct_from_parser): len needs to be + size_t instead of int. + + * camel-mime-parser.c (folder_scan_step): datalength needs to be a + size_t* instead of an int* to make dependent APIs safe. + (camel_mime_parser_step): Likewise. + (folder_scan_content): Likewise. + * camel-mime-parser.h: Likewise. + + * camel-mime-message.c (camel_mime_message_class_init): Use glib + macro for pointer/int conversions. + (construct_from_parser): Update for new API. + + * camel-folder-summary.c + (camel_folder_summary_info_new_from_parser): Update len to be + size_t for new API. + (summary_build_content_info): Likewise. + * camel-http-stream.c (http_get_headers): Likewise. + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): Likewise. + * camel-multipart-signed.c (signed_construct_from_parser): Likewise. + * camel-multipart.c (construct_from_parser): Likewise. + + * camel-folder-search.c (match_words_index): Use glib macros for + pointer/int conversions. + * camel-html-parser.c (tokenise_setup): Likewise. + (convert_entity): Likewise. + * camel-block-file.c (block_hash_func): Likewise. + (camel_block_file_get_block): Likewise. + (camel_block_file_get_block): Likewise. + (camel_block_file_detach_block): Likewise. + * camel-session.c (session_thread_msg_new): Likewise. + (session_thread_msg_free): Likewise. + (session_thread_wait): Likewise. + * camel-text-index.c (text_index_compress_nosync): Likewise. + (text_index_compress_nosync): Likewise. + (camel_text_index_validate): Likewise. + * camel-vee-folder.c (vee_folder_remove_folder): Likewise. + (unmatched_check_uid): Likewise. + (folder_added_uid): Likewise. + (vee_folder_build_folder): Likewise. + (folder_changed_add_uid): Likewise. + (folder_changed_remove_uid): Likewise. + * providers/imap/camel-imap-search.c (imap_body_contains): Likewise. + * providers/pop3/camel-pop3-folder.c (cmd_list): Likewise. + (cmd_uidl): Likewise. + + * camel-data-cache.c (data_cache_init): Cast to CamelCopyFunc. + Fixes a warning. + +2003-05-15 Not Zed <NotZed@Ximian.com> + + * camel-mime-utils.c (header_decode_word): Simplistic quick-fix + for #42710. Add a charset argument. If the data is 8 bit, try to + decode into the passed in charset (i.e. the message header?), at + worst, fall back to latin1, similarly to header_decode_text. + Fixed all callers to pass in a charset if available, or NULL. + +2003-05-14 Not Zed <NotZed@Ximian.com> + + ** See bug #42540 + + * camel-service.c (camel_gethostbyname): pre-initialise the error + return to invalid, so if we cancel, we definetly get a bad result. + Also, for a valid return against result, not herr. + (camel_gethostbyaddr): Likewise. + +2003-05-13 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-local-folder.c (local_delete): Only delete + the index if it is non-NULL. Fixes bug #42763. + +2003-05-13 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-utils.c (imap_uid_array_to_set): Added + a note to the comment block for this function noting that uids + MUST be in sorted order. + + * providers/imap/camel-imap-folder.c (imap_expunge_uids_online): + Sort the uids before splitting them into UID set chunks. The code + that splits the uid array into sets expects the uids to be in + sorted order. Fixes bug #42854. + + * providers/imap/camel-imap-command.c (imap_command_start): + Re-enable camel_verbose_debug logging. + +2003-05-12 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_helo): If + host->h_name is NULL or an empty string, default back to using the + IP address rather than the hostname in the EHLO command. + +2003-05-13 Ettore Perazzoli <ettore@ximian.com> + + * providers/imap/camel-imap-folder.c (d): Disable debugging. + + * providers/imap/camel-imap-command.c (d): Disable debugging. + + * providers/imap/camel-imap-search.c (d): Disable debugging. + +2003-05-02 Dan Winship <danw@ximian.com> + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): Don't call + g_utf8_validate on an empty message. Fixes a warning. + +2003-05-01 Jeffrey Stedfast <fejj@ximian.com> + + Workaround for POS mailers like the one in bug #42045. + + * camel-mime-utils.c (header_decode_date): Make sure the numeric + timezone is between -1200 and 1200, otherwise it is invalid. + + * broken-date-parser.c (get_tzone): Make sure the numeric timezone + is between -1200 and 1200, otherwise it is invalid. + +2003-04-29 Dan Winship <danw@ximian.com> + + * Makefile.am (camel_lock_helper_SOURCES): Remove camel-lock.c + from here because it upsets automake 1.6 for some reason + (camel_lock_helper_LDADD): Add camel-lock.o here + +2003-04-29 Jeremy Katz <katzj@redhat.com> + + * providers/imap/camel-imap-folder.c (parse_fetch_response): + body_len needs to be a size_t instead of int + +2003-04-22 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-utils.c: Disable debugging printfs. + + * providers/imap/camel-imap-store.c (imap_connect_online): #if 0 + out some code that parsed the namespaces since the results aren't + used and they generate debugging output. + +2003-04-23 Not Zed <NotZed@Ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_helo): only free the + host if it was set. removes a run-time warning. + + * camel-session.c (get_service): oops, the service owns the url + after we construct it. + +2003-04-22 Not Zed <NotZed@Ximian.com> + + ** Should fix #41629, #41448, et al. + + * tests/folder/test10.c: a new torture test for object bag + creation/unreffing. + + * camel-url.c (camel_url_copy): new function to copy a url. + + * camel-object.c (camel_object_bag_new): add arguments for key + copy and key free functions. Fixed all callers. + (camel_object_bag_destroy): fix a memleak, free the bag key. + (camel_object_bag_get, camel_object_bag_reserve) + (camel_object_bag_abort, save_bag, save_object): Make the key a + void type, rather than char *. + (camel_object_bag_add): As above, and also copy the key. + (camel_object_bag_remove_unlocked): free the key using + bag->free_key. + + * camel-session.c (register_provider) + (camel_session_destroy_provider, get_service): Changed to use an + object bag instead of a hash table for the service 'cache'. + (service_cache_remove): Removed, no longer required. + +2003-04-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_ctx_parse_status): Don't set seen_eof1 + here anymore once we get a trust metric. + (gpg_ctx_new): Init seen_eof1 to TRUE here. + (gpg_ctx_set_ostream): Change seen_eof1 to FALSE here this way we + only ever have to set this if we are expecting output. + (gpg_ctx_parse_status): Don't set seen_eof1 for importing either. + (gpg_ctx_op_step): Only FD_SET() those fd's that we have not yet + finished reading. + +2003-04-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-url-scanner.c (camel_url_web_end): Urls are unlikely to + end with punctuation or closing braces, so strip any of those off + the end of the url. Fixes bug #41461. + + * tests/mime-filter/data/html.1.out: Removed a trailing \n at the + end of the file, this is incorrect (since out input file does not + contain one). + + * camel-mime-filter-tohtml.c (html_convert): Only output a <br> if + we found an eoln in the input. Along the same lines, don't write a + '\n' to the output buffer unless we've encountered that eoln in + the input. Fixes bug #41407. + +2003-04-17 Not Zed <NotZed@Ximian.com> + + ** for #40989 + + * camel-text-index.c (text_index_delete): delete the block + file/key file directly, not just its files. + + * providers/local/camel-local-folder.c (local_delete): implement, + just delete the index file if it exists. + camel-store-delete-folder will delete other data (maybe it all + should be done here). + + * camel-block-file.c (camel_key_file_finalise): keep lock around + decrementing key file use count. + (camel_key_file_delete): new function to delete the key file (& + close it off). + (key_file_use): if we've been deleted, always fail. + (camel_block_file_finalise): only close the file if its a valid + fd. + (block_file_use): if we've been deleted, always fail. + (camel_block_file_delete): delete the block file & close. + (struct _CamelBlockFilePrivate): fix the !ENABLE_THREADS case to + still compile this. + + ** for #41163 + + * camel-multipart-signed.c (parse_content): Dont assume adding 1 + to line length will go to the next line. e.g. for dos lines that + end in \r\n. Fix for #41163. + (parse_boundary): util function to help above. + +2003-04-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_verify): The gpg child process exiting + does not necessarily mean that we've ready everything that we can + from its pipes, so don't use gpg_ctx_op_exited() as a loop-exit + condition. If for some reason the gpg child process does exit (due + to an error), gpg_ctx_op_step() will eventually fail (as soon as + it has finished reading any data in the pipes) and cause the loop + to be terminated anyway. This fixes truncation of the gpg --verify + stderr output that Evolution displays as the "validity report" + (for lack of a better description). + (gpg_ctx_op_step): Removed some debugging printf's + (gpg_ctx_get_diagnostics): Use a bitfield to decide if we've + already flushed the diagnostics stream, much simpler (plus we have + plenty of bits to spare so might as well use them). + (gpg_ctx_new): Fixed another logic bug which determined whether or + not we should convert the gpg output from the locale charset into + UTF-8. + +2003-04-10 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c: Turn off debugging if + CAMEL_VERBOSE_DEBUG isn't set. + +2003-04-10 Not Zed <NotZed@Ximian.com> + + * tests/mime-filter/data: filter data test cases. + + * tests/mime-filter/test-tohtml.c: New test for html filter. + + ** See bug #40969 + + * camel-mime-filter-tohtml.c (html_convert): Change the logic + slightly, scan a whole line within the main loop. + +2003-04-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_ctx_get_utf8_diagnostics): Removed. I + just realised that we ALWAYS want to get gpg's stderr in UTF-8, so + the better solution (plus less code duplication) is to just have + the diagnostics buffer be a CamelStreamMem with a charset filter. + (gpg_ctx_new): Setup a filter stream to convert our gpg stderr + diagnostics into UTF-8 if needed. + (gpg_ctx_free): Unref the diagnostcis stream. + (gpg_ctx_parse_status): Flush the diagnostics stream if we are + going to use the data in an exception. + (gpg_ctx_op_step): Use camel_stream_write() to append to the + diagnostics stream rather than appending the buffer to a + GByteArray like we used to do. + (gpg_ctx_op_step): Flush the diagnostics stream here too. + (gpg_verify): Use a const char *diagnostics string here, forcing a + slight rearrangement of calls - use the const char *dignostics + before we gpg_ctx_free, otherwise we'll be passing free'd memory + off to the cipher_validity. + (gpg_ctx_get_diagnostics): Do the work here to flush the + diagnostics stream and nul-terminate the buffer. Also return const + now, instead of strdupping. No need for that. + (gpg_ctx_parse_status): Convert the user hint to UTF-8. + +2003-04-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_ctx_get_utf8_diagnostics): Changed my + mind a bit on how I wanted this to work. Instead of aborting on an + illegal sequence, do like we do with camel-mime-filter-charset and + just skip over invalid sequences. Also, in the noop failure case, + close the iconv_t so we don't leak it. + +2003-04-09 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-utils.c (imap_body_decode): Save the + content size in a temp variable until after we've successfully + parsed all of the body_type_1part expr. Also fixed a type-o in the + body_type_mpart case that caused the parser to fail. + (imap_parse_body): On failure to parse the body, as we iterate + through the child nodes, set their children/parent/next nodes to + NULL so that content_info_free() won't double-free any of the + other nodes we have already free'd (or are about to free). + + * camel-gpg-context.c (gpg_ctx_get_utf8_diagnostics): New function + to get the UTF-8 version of the diagnostics (if the locale isn't + already UTF-8 safe). + (gpg_verify): Use the utf-8 diagnostics here. Also fixed a memleak + in the exception case. + + * camel-mime-filter-charset.c + (camel_mime_filter_charset_new_convert): NULL-protect the to/from + charsets in the g_warning call. + +2003-04-08 Jeffrey Stedfast <fejj@ximian.com> + + Fixes for bug #40778. Probably others as well. + + * providers/imap/camel-imap-utils.c (parse_params): Return 0 on + success, or -1 on fail. The other small utility functions should + probably do the same, but I was too lazy to fix them. Setting + inptr to NULL is just lame. + (imap_body_decode): New function to correctly parse a BODY + response. + (imap_parse_body): Rewritten to use the above function. + +2003-04-08 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_helo): Make sure + host->h_name is not an empty string too? Apparently for one user + his resolved hostname is "". Go figure. Probably a broken system, + but easy enough to work around. + + * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): If + store->engine->line is NULL, use _("Unknown error") as the error + string instead. + +2003-04-08 Not Zed <NotZed@Ximian.com> + + * camel-folder-summary.c (camel_folder_summary_load): use + g_strerror, and use errno directly rather than ferrno(). + (summary_header_load): set errno when we get a version mismatch. + +2003-04-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c: Disable debug printf's + +2003-03-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-gssapi.c (gssapi_challenge): If we are using the + heimdal krb5 implementation, don't free outbuf ever. Seems to + segfault if we do. + +2003-03-31 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-enriched.c (enriched_to_html): Use strncasecmp + for matching the nofill and /nofill tags. Also fixed to handle + enriched tags that require <param> tags. + +2003-03-28 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-store.c (get_folder): remove unused + var. + + * providers/imap/camel-imap-utils.c (imap_parse_list_response): + moved an unused var to the #if 0'd out block. + + * providers/imap/camel-imap-store.c + (parse_list_response_as_folder_info): remove unused vars. + + * camel-index-control.c (main): deifne camel_init() before using + it. + + * camel-vee-store.c (vee_get_folder): removed unused var. + + * camel-stream-mem.c (stream_write): warning -> fixme. + + * camel-stream-filter.c (_CamelStreamFilterPrivate): Add a ; to + the end of the struct definition. + + * camel-store.c (camel_store_delete_folder): remove unused var. + (camel_store_rename_folder): " + (camel_store_unsubscribe_folder): " + + * camel-mime-part.c (write_to_stream): Changed warning into a + TODO. + (construct_from_parser): removed warning, the code was fixed. + + * camel-mime-message.c (construct_from_parser): Remove the + warning, the code was fixed. + + * camel-mime-filter-enriched.c (camel_mime_filter_enriched_new): + Remove unused var. + + * camel-medium.c (camel_medium_get_header): Removed warning, and + changed docs to reflect it. + + * camel-gpg-context.c (gpg_ctx_parse_status): handle MODE_EXPORT + as a noop (warning). + + * camel-folder.c (get_message_user_tag): changed a warning into a + fixme (its not that important). + (camel_folder_get_message_user_tag): " + + * camel-data-cache.c (data_cache_finalise): removed unused vars. + (data_cache_expire): " + +2003-03-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-gssapi.c (gssapi_challenge): Get rid of debug + printf's that are no longer needed. In the case of errors, don't + release the outbuf gss_buffer_t since it shouldn't be set. Also + g_free (str) when we are done with it. + + * camel-mime-utils.c (header_encode_phrase_merge_words): When we + remove a node from the list, make sure to g_list_free_1(). + (header_encode_phrase_merge_words): Don't use + CAMEL_FOLD_PREENCODED as the upper-bound for merged-word length if + the merged-word will not be an rfc2047 encoded word. Instead, use + CAMEL_FOLD_SIZE-8 (which is the value we use in other places for + determining upper-bound lengths). Solves bug #38659. + +2003-03-27 Dan Winship <danw@ximian.com> + + * camel-url.c (append_url_encoded): Like camel_url_encode, but + works directly on an existing GString. + (camel_url_to_string, output_param): Use it. + (camel_url_encode): Likewise. Remove "escape_unsafe" arg since the + "unsafe" chars are the ones that should *always* be escaped, and + the places we were passing FALSE were wrong. + (camel_url_decode): replace with a new version + + * camel-file-utils.c (camel_file_util_safe_filename): Remove extra + arg to camel_url_encode. + + * tests/misc/url.c (main): Add tests of basic URL parsing and + unparsing + +2003-03-28 Not Zed <NotZed@Ximian.com> + + * + camel-mime-part-utils.c (simple_data_wrapper_construct_from_parser): + Do a more thorough check for html marked as text/plain. Check + that the text starts with <html or <!doctype. More complete fix + for #16817. + +2003-03-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-gssapi.c (camel_sasl_gssapi_finalize): Pass in the + addresses of the second args to the delete/release functions. + +2003-03-27 Not Zed <NotZed@Ximian.com> + + * camel-object.c (camel_object_bag_list): Ignore whether or not + the bag is currently reserved. We'll miss the new potential + object, but only 1. Should address #40103. + +2003-03-25 Jeffrey Stedfast <fejj@ximian.com> + + * camel-service.c (camel_gethostbyaddr): Don't use setv when we + don't need the stdarg interface. + (camel_gethostbyname): Same. + +2003-03-24 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-search.c (search_user_tag): This expression can + never return an array. We must always return a string value. + +2003-03-24 Timo Sirainen <tss@iki.fi> + + * camel-imap-command.c (imap_read_untagged) Integer overflow fix. + If server sent a huge literal length, only a few bytes of memory + was allocated to it, but server could write as much data there as + it wanted. + +2003-03-21 Jeffrey Stedfast <fejj@ximian.com> + + Camel part of the fix for Lewing's bug #39204. Second half of the + patch should also fix it so that text/plain parts that are + detected as being text/html are rendered as html (not that I agree + with this mind you, but corporate customers want this "feature"). + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): If the part is + text/html and doesn't have a charset and we are able to find a + charset in the meta tags of the html content, set the charset + param on the content-type. + (camel_mime_part_construct_content_from_parser): After setting the + content object on the mime part, re-set the content-type of the + content object back to the one from the parser (as it may contain + changes from the original - see changes made to the ct in + simple_data_wrapper_construct_from_parser for details). + +2003-03-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (camel_certdb_nss_cert_get): continue + reading the cert file until we've read it all or get a non-EINTR + errno. + +2003-03-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-gssapi.c: #include <com_err.h> instead of + #include <et/com_err.h> + +2003-03-20 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl.c: Plug in GSSAPI support. + + * camel-sasl-gssapi.[c,h]: Various fixes to make it compile (fixed + type-o's mostly). + +2003-03-20 Dan Winship <danw@ximian.com> + + Handle raw 8-bit From data "correctly". (The same way we handle + raw 8-bit Subject data.) + + * camel-mime-utils.c (header_decode_mailbox): Take a charset arg + and pass it to header_decode_string. + (header_decode_address): Take a charset arg and pass it to + header_decode_mailbox. + (header_mailbox_decode): Likewise. + (header_address_decode): Take a charset arg and pass it to + header_decode_address. + + * camel-folder-summary.c (summary_format_address): Take a charset + arg and pass to header_address_decode. + (message_info_new, camel_message_info_new_from_header): Pass + charset to summary_format_address + + * camel-internet-address.c (internet_decode): Update for + header_address_decode change. (Unfortunately we don't have a + charset to pass here.) + + * camel-mime-message.c (camel_mime_message_build_mbox_from): Move + this here from camel-mbox-summary since the same functionality is + needed by evolution-mail too (and update for header_address_decode + change) + + * providers/local/camel-mbox-summary.c + (camel_mbox_summary_build_from): Moved to CamelMimeMessage + +2003-03-17 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part.c (process_header): Removed unused variable left + over from my previous fix. + + * providers/smtp/camel-smtp-transport.c (smtp_send_to): Don't pass + 'has_8bit_parts' to smtp_data() anymore. + (smtp_data): No longer takes 'has_8bit_parts' argument. Ignore + whether or not the message has 8bit parts when deciding what the + required encoding type we need to enforce. Fixes bug #39744. + +2003-03-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part.c (process_header): Use + header_contentid_decode() as this new function should be safer + than the hack that we had before. + + * camel-mime-utils.c (header_contentid_decode): New function to + try and parse a content-id string in such a way as to work around + some of the known bugs in other MIME implementations. Try to be as + "safe" as we can - ie. don't allow for more than 1 @ (since the + mailer uses "@@@%d" as a fake content-id value for parts without + content-ids) and don't allow for invalid content-type chars. + +2003-03-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder.c (get_uids): Don't add bogus uids to the uid + array. Might fix bug #38868 (it's the only way I can figure that + camel_folder_get_message_info() could possibly return NULL for the + Outbox folder). + +2003-03-12 Not Zed <NotZed@Ximian.com> + + * camel-object.c (remove_bag): removed, it was double-freeing the + key. + (save_object): Just save the object in an array. + (camel_object_bag_destroy): first save the object bag's objects in + a list, then remove them one at a time from the bag since we can't + remove hash table entries while we're in a foreach (PITA glib + shit). For #39486. + (camel_object_bag_*): killed some warnings. + +2003-03-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-url-scanner.c (camel_url_addrspec_end): Doh! If inptr == + pos + 1, then return FALSE (before it was checking for inptr == + pos, but it will never be pos). + +2003-03-07 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (vee_search_by_expression): handle a null + return from search_by_expression, for bug #33786. + +2003-03-06 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-utils.c (imap_next_word): + s/g_strncasecmp/strncasecmp/g + + * camel-iconv.c: Updated to be an exact copy of e-iconv (except + names changed). We don't use this yet, but we may in the future. + + * camel-url.c (camel_url_new_with_base): Here too. + + * camel-sasl-kerberos4.c (krb4_challenge): Use camel_strdown() + here instead of g_strdown() since the latter has been deprecated. + + * providers/imap/camel-imap-utils.c (imap_parse_body): Use + camel_strdown() since g_ascii_strdown() does not do what we + thought. + + * providers/imap/camel-imap-store.c: + s/strstrcase/camel_strstrcase/g + + * providers/imap/camel-imap-folder.c (do_append): + s/strstrcase/camel_strstrcase/ + (handle_copyuid): Same. + + * string-utils.c (camel_strdown): New function because the + g_ascii_strdown interface sucks. + (camel_strstrcase): Renamed from strstrcase. + +2003-03-06 Jeffrey Stedfast <fejj@ximian.com> + + * camel-text-index.c (camel_utf8_next): Same as below. + + * camel-search-private.c (camel_utf8_getc): Updated since not all + platforms/compiles support __inline__. + +2003-03-06 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part.c (camel_mime_part_get_encoding): Get rid of the + const return - it mismatches the prototype and we don't need it + anyway. Fixes bug #39173. + +2003-03-06 Jeffrey Stedfast <fejj@ximian.com> + + Fixes for bug #39170 + + * camel-store-summary.c (camel_store_info_set_string): Remove + return keyword. + + * camel-session.c (camel_session_thread_msg_free): Remove return + keyword. + (camel_session_thread_wait): Same. + + * camel-index.c (camel_index_cursor_reset): Remove return keyword. + +2003-03-06 Jeffrey Stedfast <fejj@ximian.com> + + Fixes for bug #39168 + + * providers/local/camel-spool-summary.c: Get rid of the empty + private struct. + + * providers/local/camel-mbox-summary.c: Get rid of the empty + private struct. + + * camel-vee-store.c: Get rid of the empty private struct. + + * camel-mime-filter-from.c: Get rid of the empty private struct. + +2003-03-05 Jeffrey Stedfast <fejj@ximian.com> + + * providers/sendmail/camel-sendmail-transport.c + (sendmail_send_to): Add a CRLF filter to the output stream to + convert any CRLF sequences into plain old line-feeds to work + around a bug in some local transport programs. + +2003-03-04 Jeffrey Stedfast <fejj@ximian.com> + + * camel-object.h: s/class/klass in one place so that the header is + c++-safe. + +2003-03-03 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-openssl.c (camel_tcp_stream_ssl_new): Updated + to use the new API from a fe commits ago for the NSS stream. This + is just to make it compile, but does not update the behaviour to + act like the NSS stream. Note that people shouldn't be using + OpenSSL anyway. + (camel_tcp_stream_ssl_new_raw): Same. + + * camel-process.[c,h]: New source file containing convenience + functions for process creation/termination mainly for use with + Pipe filters but should be usable for anything we want. + + * camel-io.[c,h]: New source files implementing read/write system + calls with proper error checking and cancellation + (ie. StreamFs::read/write and CamelTcpStreamRaw::read/write). No + sense duplicating the same code over and over. Now I can use this + same code easily in other i/o code (such as Pipe filters and gpg + code?). + +2003-03-03 Not Zed <NotZed@Ximian.com> + + * camel-store.c (camel_store_unsubscribe_folder): Do similar + folder != NULL checking as for delete_folder before passing a NULL + to object_bag_remove. + +2003-02-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-http-stream.c (http_connect): Here too. + + * providers/smtp/camel-smtp-transport.c (connect_to_server): Same + as IMAP and POP. + + * providers/imap/camel-imap-store.c (connect_to_server): Same as + the POP3 code. + + * providers/pop3/camel-pop3-store.c (connect_to_server): Pass in + appropriate flags for camel_tcp_stream_ssl_new*() functions. + + * camel-tcp-stream-ssl.c (enable_ssl): Not all ssl/tls streams + will want to allow each of SSLv2, SSLv3 and TLSv1 so use flags to + decide which to enable/disable. + (camel_tcp_stream_ssl_new): Now takes a flags argument to mask out + which SSL/TLS versions the stream should be compatable with. + (camel_tcp_stream_ssl_new_raw): Same. + +2003-02-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-stream-filter.c: Add a 'flushed' state variable to the + private struct. + (do_read): Set p->flushed to TRUE after we call + camel_mime_filter_complete() on all the filters. + (do_reset): Set p->flushed to FALSE. + (do_eos): Make sure the filters have been flushed before returning + that the stream is at EOS. + + * camel-mime-filter-canon.c (complete): Don't add a eol - + otherwise we will fail to verify some mutt signatures that do not + have a blank line before the boundary line (and note that the last + \n before the boundary really belongs to the boundary anyway) so + #if 0 this code out for now. + +2003-02-27 Not Zed <NotZed@Ximian.com> + + * camel-multipart-signed.c: Undo jeff's changes. + + * providers/local/camel-spool-store.c (scan_dir): Fix a paste-o in + the object_bag_get key. + +2003-02-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-multipart-signed.c: Updated to use g_alloca instead of + alloca so that we can skip all the #ifdef checks and skip checking + for alloca in configure.in and all that foo. + + * camel-store.c (camel_store_delete_folder): Make sure the folder + is non-NULL before trying to remove it from the store's + object-bag. + +2003-02-25 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): canonicalise the + charset name (if it is an iso charset) so that our strncasecmp to + see if it is an iso-8859-# charset will be guarenteed to work on + all systems. + (canon_charset_name): New function to return the canonical iso + charset name. + (simple_data_wrapper_construct_from_parser): If the charset is + NULL *or* the charset == "us-ascii" then check that it is 7bit + clean to decide if it is rawtext (we did not check the case where + charset was "us-ascii" before). + +2003-02-25 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-message.c: Same as the ones below. + + * camel-mime-part.c: Reverted back to pre-camel-iconv + + * camel-filter-search.c: Same as below. + + * camel-folder-summary.c: Reverted back to pre-camel-iconv + + * camel.c (camel_init): Reverted to pre-camel-iconv + + * camel-charset-map.c (camel_charset_locale_name): Removed (part + of the revert). + (camel_charset_canonical_name): Same. + + * camel-mime-filter-charset.c: Revert back to using e_iconv from GAL. + + * camel-mime-part-utils.c: Revert back to using e_iconv from GAL. + + * camel-mime-utils.c: Revert back to using e_iconv from GAL. + + * camel-sasl-digest-md5.c: Revert back to using e-iconv from GAL. + +2003-02-24 Jeffrey Stedfast <fejj@ximian.com> + + * camel-charset-map.c (camel_charset_canonical_name): g_alloca + (strlen (charset) + 1) so we don't overflow the buffer. + + * providers/pop3/camel-pop3-stream.c (stream_write): Don't write + the passwd, fixes "bug" #38601. + + * camel-iconv.c: Make bucket->refcount 31 bits and bucket->used 1 + bit instead of having each use their own 32bit int. + (iconv_cache_bucket_expire): Use g_iconv_close() here, missed this + before. + (camel_iconv): Might as well call g_iconv here even though it just + calls iconv directly. + +2003-02-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-iconv.c (camel_iconv_charset_name): New function...back + from the depths of hell from whence it came originally. Turns out + that g_iconv_open() is lame and can't handle all the stuff we used + to handle in e_iconv_charset_name(). + (camel_iconv_open): Use camel_iconv_charset_name() on the to/from + charsets rather than camel_charset_canonical_name(). Now maybe + g_iconv_open will work for charsets such as "ks_c_5601-1987". + + * providers/pop3/camel-pop3-store.c (pop3_connect): Reget the + capabilities after a successful authentication. + + * providers/pop3/camel-pop3-engine.c (get_capabilities): If we are + in the TRANSACTION state and CAPA did not list UIDL as a supported + command, try checking for it the hard way. + +2003-02-23 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_data): Do it the + same way we just made the sendmail code do it. + + * providers/sendmail/camel-sendmail-transport.c + (sendmail_send_to): My last change but in a better way. + +2003-02-22 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_data): Remove all + Bcc headers before sending to the smtp server. + + * providers/sendmail/camel-sendmail-transport.c + (sendmail_send_to): Remove all Bcc headers before sending to + sendmail. + +2003-02-20 Jeffrey Stedfast <fejj@ximian.com> + + * camel.c (camel_init): Call camel_iconv_init(). + (camel_shutdown): Call camel_iconv_shutdown(). + + * camel-sasl-digest-md5.c (digest_response): Updated to use + camel-iconv and the new camel-charset-map functions. + + * camel-mime-utils.c: Updated to use camel-iconv and the new + camel-charset-map functions. + + * camel-mime-part-utils.c (check_html_charset): Use + camel_charset_canonical_name() instead of e_iconv_charset_name() + which is longer available. + (convert_buffer): Use camel-iconv. + (simple_data_wrapper_construct_from_parser): Since + camel_charset_iso_to_windows() returns the charset in it's + canonical format, no need to re-canonicalise it. + + * camel-mime-part.c (process_header): Use + camel_charset_canonical_name() instead of e_iconv_charset_name() + which is longer available. + + * camel-mime-message.c (process_header): Use + camel_charset_canonical_name() instead of e_iconv_charset_name() + which is longer available. + + * camel-mime-filter-charset.c: Use camel-iconv. + + * camel-folder-summary.c (message_info_new): Use + camel_charset_canonical_name() instead of e_iconv_charset_name() + which is longer available. + (content_info_new): Use camel_charset_locale_name(). + (camel_message_info_new_from_header): Same as message_info_new(). + + * camel-search-private.c: Use g_alloca() instead of alloca(). + + * camel-filter-search.c (check_header): Use + camel_charset_canonical_name() instead of e_iconv_charset_name() + which is longer available. + + * camel-charset-map.c (camel_charset_locale_name): New function, + replaces e_iconv_locale_charset(). + (camel_charset_canonical_name): New function, similar to + e_iconv_charset_name() but instead of returning the iconv-friendly + name, it returns the canonical name. (g_iconv will do the + iconv-friendly name conversions for us). + +2003-02-20 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-search.c (run_command): Redirect program's stdout + and stderr to /dev/null + + * camel-filter-driver.c (pipe_to_system): Redirect the program's + stderr to /dev/null + (pipe_to_system): Write the pipe to a mem stream and use the mem + stream in the parser. Also, when setting an exception get the + errno from the parser so we can give more info about the error to + the user. + +2003-02-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (stream_connect): Fixed a type-o in the + ENABLE_IPv6 ifdef section. + +2003-02-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (pipe_message): New filter action that + pipes the message source to the user-program and reads back the + modified message and replaces driver->priv->message with the new + message object. + (do_copy): Check p->modified to make sure the message hasn't been + modified by the pipe-message action - if it has been modified, + default to the slower camel_folder_append_message() way of + copying. + (do_move): Same. + (pipe_to_system): Set p->modified to TRUE if the user-program gave + us back a message stream and we were able to parse it. + (camel_filter_driver_filter_message): If the message has been + modified, always use camel_folder_append_message() when appending + it to the default folder. + +2003-02-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-search.c: Added a (get-size ) function to fix bug + #38073. + (search_get_size): Implemented. + +2003-02-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-url-scanner.c (url_scanner_table_init): Mark chars with + the high-bit set as CTRL chars. + (camel_url_web_end): If the char before the start of the url is an + open-brace, watch out for the matching close-brace. + (camel_url_file_end): Same. + +2003-02-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-smime-context.c (smime_get_password): Same as the gpg and + pkcs7 contexts. + + * camel-sasl-popb4smtp.c (popb4smtp_challenge): Updated for + camel_session_get_password(). + + * camel-pkcs7-context.c (get_password): Same as the gpg code. + + * camel-gpg-context.c (gpg_ctx_parse_status): Updated for + camel_session_get_password(). + + * providers/smtp/camel-smtp-transport.c (smtp_connect): No need to + set USER_CANCEL exception here as it is done by + camel_session_get_password(). Also updated for the new + get_password() API change. + + * providers/imap/camel-imap-store.c (imap_auth_loop): Updated for + camel_session_get_password() changes. We don't need to play the + "bad passwd" game here too, do we? Bah, probably should but I + don't feel like it for now. Maybe when we rewrite the IMAP + provider. + + * camel-session.c (camel_session_get_password): Now takes a + 'reprompt' argument that will force user-input to be given even if + we have the passwd cached. + + * providers/pop3/camel-pop3-store.c (pop3_connect): Instead of + uncaching the passwd after we receive a -ERR from the POP server, + set 'reprompt' to TRUE to force user-input for the next password + prompt (ie, make sure the front-end knows not to just return the + cached value). The front-end can then decide to fill-in the + user-input field with the last passwd that the user supplied. + (pop3_try_authenticate): Now takes a reprompt argument which we + pass into camel_session_get_password(). + +2003-02-05 Dan Winship <danw@ximian.com> + + * Makefile.am (libcamelincludedir): Define in terms of + privincludedir. + (camellibexecdir): Define in terms of privlibexecdir + (libcamel_la_LDFLAGS): Remove -rpath. (automake will add that) + + * providers/imap/Makefile.am (libcamelimapincludedir): Define in + terms of privincludedir. + (INCLUDES): Remove -I$(includedir) + * providers/local/Makefile.am: Likewise + * providers/nntp/Makefile.am: Likewise + * providers/pop3/Makefile.am: Likewise + * providers/sendmail/Makefile.am: Likewise + * providers/smtp/Makefile.am: Likewise + +2003-02-04 Not Zed <NotZed@Ximian.com> + + * camel-object.c (camel_object_bag_new): Init bag->owner to 0. + +2003-01-31 Not Zed <NotZed@Ximian.com> + + * camel-object.c (camel_object_bag_*): Changed to use a posix + semaphore instead of a condition variable + flag to reserve the + object bag because e_mutex_cond is broken. + +2003-02-04 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-utils.c (imap_parse_body): Use + g_ascii_strdown() instead of g_strdown, since g_strdown is + deprecated. + (imap_parse_body): Same. + + * providers/imap/camel-imap-folder.c (decode_internaldate): Use + strncasecmp() here too. + (parse_fetch_response): And here. + (camel_imap_folder_selected): Here too. + + * providers/imap/camel-imap-utils.c (imap_namespace_decode): Use + strncasecmp() instead of g_strncasecmp() because the latter is + deprecated. + + * providers/imap/camel-imap-store.c (imap_get_capability): Again here. + (hash_folder_name): Here too. + (compare_folder_name): And here. + (get_folder_online): Again. + (get_folder_offline): And again. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): + Same as below again. + + * providers/imap/camel-imap-command.c (camel_imap_response_free): + Same as below. + + * providers/smtp/camel-smtp-transport.c (smtp_data): Use + strcasecmp() because g_strcasecmp() is deprecated. + + * camel-url.c (camel_url_new_with_base): Use g_ascii_strdown() + instead of g_strdown, since g_strdown is deprecated. + +2003-01-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-gssapi.c (gssapi_challenge): Pass in some default + flags to gss_init_sec_context() (these default flags are defined + as a MUST in rfc1964). + +2003-01-22 Hans Petter Jansson <hpj@ximan.com> + + * Makefile.am: $(libexec) -> $(libexecdir) + +2003-01-22 Ettore Perazzoli <ettore@ximian.com> + + * providers/imap/Makefile.am (libcamelimapincludedir): Update to + the new $(BASE_VERSION)-versioned path. + * providers/smtp/Makefile.am (libcamelsmtpincludedir): Likewise. + * providers/sendmail/Makefile.am (libcamelsendmailincludedir): + Likewise. + * providers/pop3/Makefile.am (libcamelpop3includedir): Likewise. + * providers/nntp/Makefile.am (libcamelnntpincludedir): Likewise. + * providers/local/Makefile.am (libcamellocalincludedir): Likewise. + + * camel-lock-client.c (camel_lock_helper_init): Use + CAMEL_LIBEXECDIR instead of CAMEL_SBINDIR to find + camel-lock-helper. + + * Makefile.am: Install camel-lock-helper and camel-index-control + in $(libexec)/evolution/$(BASE_VERSION)/camel. Install + libcamel.la in $privlibdir. + (install-exec-hook): Update for the new location of + camel-lock-helper. + (libcamelincludedir): Version using $(BASE_VERSION). + (INCLUDES): Define CAMEL_LIBEXECDIR. + +2003-01-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-canon.c (complete): Set the backbuflen to 0 so + that calling us again won't re-flush the same data. + +2003-01-17 Larry Ewing <lewing@ximian.com> + + * camel-mime-filter-enriched.c (enriched_to_html): only grow the + buffer when we are out of space. + +2003-01-14 Not Zed <NotZed@Ximian.com> + + * camel-mime-parser.c (folder_scan_step): If we have no + content-type header, set it to text/plain explcitly, rather than + NULL, because some code doesn't handle NULL. + +2003-01-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-gssapi.[c,h]: New source files implementing the + GSSAPI SASL mechanism. + +2003-01-13 Not Zed <NotZed@Ximian.com> + + * camel-mime-filter-tohtml.c: fix header include order. + + * camel-object.c (camel_object_bag_reserve): Add an assert to + check we're not trying to reserve the bag more than once in a + given thread. + (camel_object_bag_list): If we have reserved the bag, dont try and + cond wait. Fixes a deadlock. + + * camel-mime-filter-tohtml.c (writeln): Read the characters as + utf8, rather than as 8 bit bytes. Remove the PRESERVE_8BIT as it + has no meaning. Also change the default logic slightly so that 8 + bit or greater characters are properly converted to entities. + + * camel-utf8.c (camel_utf8_getc_limit): new function, gets a utf8 + char, bounded by an end pointer. + +2003-01-07 Dan Winship <danw@ximian.com> + + * camel-provider.h (CamelProvider): add a "translation_domain" + field. (NULL for all providers in the camel source tree itself). + + * camel-session.c (register_provider): Translate provider strings + in the correct domain + +2003-01-06 Not Zed <NotZed@Ximian.com> + + * camel-store.c (store_sync): init local exception before doing + anything. fixes a crash. + +2003-01-04 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_send_to): Instead of + checking recipients != NULL, check that camel_address_length + (recipients) != 0 since it is illegal for recipients to be NULL + (camel_transport_send_to already checks this). + +2002-12-17 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-utils.c: Replace calls to + g_string_sprintfa() with g_string_append_printf() since the former + seems to have been deprecated. + + * providers/imap/camel-imap-search.c: Same. + + * providers/imap/camel-imap-folder.c: Here too. + + * providers/local/camel-mbox-summary.c: And here. + + * providers/local/camel-local-summary.c: Replace + g_string_sprintf() with g_string_printf(). + + * camel-data-cache.c (data_cache_expire): Replace + g_string_sprintf() with g_string_printf(). + + * camel-url.c: Replace calls to g_string_sprintfa() with + g_string_append_printf() since the former seems to have been + deprecated. + + * camel-service.c: Same. + + * camel-mime-utils.c: Here too. + +2002-12-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): Detect text/html + parts that were marked as text/plain and re-tag them as text/html + parts. Note: currently just checks if the first non-lwsp char is a + '<' - but we might need to be smarter about this? *sigh* Stupid + Windows mailers. + + * camel-mime-filter-tohtml.c (camel_text_to_html): New convenience + function to replace calls to e_text_to_html() in the + mailer/composer etc. + + * camel.h: #include some headers we had forgotten to add + previously, also added camel-mime-filter-enriched.h. + + * camel-mime-filter-enriched.[c,h]: New stream filter to convert + text/enriched and text/richtext into HTML. + +2002-12-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-multipart-signed.c (camel_multipart_signed_verify): Don't + apply the CANON_STRIP filter here, since we are verifying whatever + raw data we received (all we want to do is convert o the canonical + CRLF format). + +2002-12-10 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-tohtml.c (html_convert): Use camel-url-scanner + instead of regex. + +2002-12-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-url-scanner.c (camel_url_addrspec_end): Fixed to not be + fooled in the case where the address is followed immediately by a + period. + (camel_url_web_end): Made more robust. + (camel_url_scanner_scan): Oops. We need to set the match->pattern + string pointer to the correct pattern before executing the + start/end methods (as some of them rely on this info). + +2002-12-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-url-scanner.c: New code to scan for patterns (used only + for url pattern matching atm, but we may find other uses for this + and thus rename it? I dunno). Uses ETrie. + +2002-12-07 Not Zed <NotZed@Ximian.com> + + * camel-data-cache.c (data_cache_init): Use a bag instead of a + hashtable to track the cache streams. + (data_cache_finalise): Same. + (free_busy): No longer needed. + (data_cache_expire): use bag instead of hashtable. + (stream_finalised): No longer required. + (camel_data_cache_add): objectbagise + (camel_data_cache_get): " + (camel_data_cache_remove): " + (data_cache_path): Set the now expired date before running expiry, + so it plays better with multiple threads. Still a couple of + harmless races. + +2002-12-06 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-store.c (scan_dir): folders -> + object bag. + (get_folder_info_mbox): folders -> object bag. + + * providers/local/camel-mh-store.c (folder_info_new): folders -> + object bag. + + * providers/local/camel-maildir-store.c (scan_dir): folders -> + object bag. + + * providers/local/camel-local-store.c (rename_folder): folders -> + object bag. + + * camel-private.h (CamelStorePrivate): Remove 'cache' lock, + handled by the objectbag. + + * providers/imap/camel-imap-store.c (copy_folder): Removed. + (imap_store_refresh_folders): folders -> object bag. + (get_folder_counts): folders -> object bag. + + * camel-vee-store.c (vee_get_folder): changes for folders + objectbag. + (vee_get_folder_info): Change to use folders objectbag. Also, + dont refresh the base folder if we're in FAST mode. + (build_info): Removed, no longer needed. + (vee_rename_folder): Fixed for folders objectbag. + + * camel-store.c (camel_store_init): init the folders objectbag. + (camel_store_finalize): Destroy the folders object bag. + (folder_matches): + (folder_finalize): Removed, now handled implicitly by the + objectbag. + (camel_store_get_folder): object bag changes. + (camel_store_delete_folder): " + (get_subfolders): Removed, now handled without a callback. + (camel_store_rename_folder): Changed to use object bag of folders. + (trash_add_folder): Removed. + (init_trash): use folders object bag. + (copy_folder_cache): + (sync_folder): Removed, no longer needed. Weird arsed code anyway. + (store_sync): Use folder object bag instead of hashtable. + (camel_store_unsubscribe_folder): " + (camel_store_init): remove cache_lock init, no longer used. + (camel_store_finalize): Same for cleanup. + +2002-12-05 Not Zed <NotZed@Ximian.com> + + * camel-store.h (struct _CamelStore): change folders from a + hashtable into a CamelObjectBag. + + * camel-object.c (camel_object_ref): Use type_lock instead of + class lock for ref counting. + (camel_object_unref): Use type_lock instead of class lock for + unref. + (camel_object_unref): If the object is 'bagged', then also look + hooks, and remove it from any bags. + (camel_object_bag_new): + (camel_object_bag_destroy): + (camel_object_bag_add): + (camel_object_bag_get): + (camel_object_bag_remove_unlocked): + (camel_object_bag_list): + (camel_object_bag_abort): + (camel_object_bag_remove): New functions to implement a utility + object which can manage a 'bag' of weakly ref'd children in an + atomic & threadsafe way. + +2002-12-04 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store-summary.c + (camel_imap_store_summary_add_from_full): Properly handle the case + where the namespace is "". Fixes bug #34975 + +2002-12-03 Jeffrey Stedfast <fejj@ximian.com> + + * broken-date-parser.c (get_tzone): Fixed to not get false + positives when the token is shorter than the actual timezone + string (but matches the first little bit of it). + (datetok): Modified to properly handle when the first char of a + token is a special char (such as a '-') that is also used as a + token delimiter. + +2002-11-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (stream_read): Use the new + camel_operation_cancel_prfd() function to get the cancellation fd + so we can poll on it for cancellation stuff. + (stream_write): Same. + +2002-11-22 Not Zed <NotZed@Ximian.com> + + * camel-operation.c (camel_operation_cancel_prfd): Implement, gets + a nspr pr filedesc to poll/wait on + (struct _CamelOperation): include a pr filedesc. + +2002-11-21 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store-summary.c + (camel_imap_store_summary_namespace_find_path): If we have a + namespace of "", then always match any path. + (camel_imap_store_summary_namespace_find_full): Same, for full + names. Should address #33309 & friends. + +2002-11-19 Radek Doulik <rodo@ximian.com> + + * camel-mime-filter-tohtml.c (html_convert): added + CAMEL_MIME_FILTER_TOHTML_PRESERVE_8BIT flag + +2002-11-18 Rodney Dawes <dobey@ximian.com> + + * tests/*/Makefile.am: Removed $(GNOME_LIBDIR) and $(GNOMEUI_LIBS) + +2002-11-15 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (imap_connect_online): If the + namespace is at/below INBOX, check for the INBOX explicitly (since + it obviously won't show up in a LSUB INBOX.*). If either INBOX is + not returned in the response or if the folder flags contain + \NoSelect, subscribe to INBOX and then try LSUB again. + +2002-11-11 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-tohtml.c (html_convert): Rewritten. Much much + much cleaner implementation now, though uses malloc/free more + often than I'd like. + +2002-11-11 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (get_message_simple): Use + g_strerror when setting an exception string (we need it to be in + UTF-8). + + * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): Use + g_strerror when setting an exception string (we need it to be in + UTF-8). + + * providers/pop3/camel-pop3-folder.c (pop3_refresh_info): Use + g_strerror when setting an exception string (we need it to be in + UTF-8). + (pop3_get_message): Same. + + * providers/local/camel-spool-summary.c (spool_summary_sync_full): + Use g_strerror when setting an exception string (we need it to be + in UTF-8). + (spool_summary_check): Here too. + + * providers/local/camel-spool-store.c (construct): Use g_strerror + when setting an exception string (we need it to be in UTF-8). + (get_folder): Same. + (scan_dir): Here too. + + * providers/local/camel-spool-folder.c (spool_lock): Use + g_strerror when setting an exception string (we need it to be in + UTF-8). + + * providers/local/camel-mh-summary.c (mh_summary_check): Use + g_strerror when setting an exception string (we need it to be in + UTF-8). + + * providers/local/camel-mh-store.c (delete_folder): Use g_strerror + when setting an exception string (we need it to be in UTF-8). + + * providers/local/camel-mbox-summary.c (summary_update): Use + g_strerror when setting an exception string (we need it to be in + UTF-8). + (mbox_summary_sync_full): Here too. + (mbox_summary_sync_quick): Same. + (mbox_summary_sync): Also here. + (camel_mbox_summary_sync_mbox): Again here. + + * providers/local/camel-mbox-folder.c (mbox_lock): Use g_strerror + when setting an exception string (we need it to be in UTF-8). + (mbox_append_message): Same. + (mbox_get_message): Here too. + + * providers/local/camel-maildir-summary.c (maildir_summary_load): + Use g_strerror when setting an exception string (we need it to be + in UTF-8). + (maildir_summary_check): Same. + + * providers/local/camel-maildir-store.c (get_folder): Use + g_strerror when setting an exception string (we need it to be in + UTF-8). + (delete_folder): Same. + (delete_folder): Here too. + + * providers/local/camel-local-summary.c (local_summary_sync): Use + g_strerror when setting an exception string (we need it to be in + UTF-8). + + * providers/local/camel-local-store.c (get_folder): Use g_strerror + when setting an exception string (we need it to be in UTF-8). + (create_folder): Same. + (xrename): Here too. + (rename_folder): And here. + (delete_folder): Also here. + + * camel-provider.c (camel_provider_init): For debugging printfs, + we want to use normal strerror (we want locale charset, not + UTF-8). + + * camel-movemail.c (camel_movemail): Use g_strerror when setting + an exception string (we need it to be in UTF-8). + (movemail_external): Same. + (camel_movemail_copy_file): Here too. + (camel_movemail_solaris): Also here. + + * camel-mime-utils.c (rfc2047_decode_word): For debugging printfs, + we want to use normal strerror (we want locale charset, not + UTF-8). + (header_encode_param): Same. + + * camel-mime-part-utils.c (convert_buffer): For debugging printfs, + we want to use normal strerror (we want locale charset, not + UTF-8). + + * camel-lock-client.c (camel_lock_helper_init): Use g_strerror + when setting an exception string (we need it to be in UTF-8). + + * camel-data-cache.c (camel_data_cache_remove): Use g_strerror + when setting an exception string (we need it to be in UTF-8). + + * camel-tcp-stream-raw.c (flaky_tcp_write): For debugging printfs, + we want to use normal strerror (we want locale charset, not + UTF-8). + (flaky_tcp_read): Same. + + * camel-gpg-context.c (gpg_ctx_op_step): For debugging printfs, we + want to use normal strerror (we want locale charset, not UTF-8). + + * camel-service.c (camel_gethostbyname): Use g_strerror when + setting an exception string (we need it to be in UTF-8). + + * camel-lock.c (camel_lock_dot): Use g_strerror when setting an + exception string (we need it to be in UTF-8). + (camel_lock_fcntl): Same. + +2002-11-07 Not Zed <NotZed@Ximian.com> + + * camel-mime-part.c (camel_mime_part_set_content_type): constify + the content_type. + +2002-11-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-i18n.h: Added. + + * camel-object.h: #include camel-i18n.h instead of gnome-i18n.h + + * camel-lock.c: Same. + +2002-11-07 Rodrigo Moya <rodrigo@ximian.com> + + * camel-object.h: removed gnome-defs.h, it does not exist. + +2002-11-05 Not Zed <NotZed@Ximian.com> + + * Makefile.am (camel_lock_helper_LDADD): Created temporary link + list, we need to link with something for gettext. + + * camel.h: Remove gstring-util.h and hash-table-utils.h. + + * camel-text-index.c: + (text_index_normalise): Changed for g_utf8_strdown api change. + + * camel-search-private.c: + * camel-mime-utils.c: + * camel-mime-part-utils.c: + * camel-html-parser.c: + * camel-charset-map.c: Include glib/gunicode.h from glib instead + of gal. + + * camel-filter-driver.c: Remove include of gtk/gtk.h, should never + have been there. + +2002-11-01 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (g_string_append_len): Removed. Glib2 has + this function. + + * providers/local/camel-local-store.c (delete_folder): Use + g_path_get_basename instead of g_strdup (g_basename (filename)). + + * camel-uid-cache.c (camel_uid_cache_new): Use g_path_get_dirname + since g_dirname has been deprecated. + +2002-10-31 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (camel_gpg_context_class_init): Set the + virtual method pointers to the import/export methods. + (camel_gpg_context_init): Set the key_protocol string. + (gpg_hash_to_id): Handle 2 more hash types. + (gpg_id_to_hash): Same. + (gpg_ctx_op_step): Slight fixes to support import/export. + (gpg_ctx_parse_status): Fix to hack around the fact that importing + keys doesn't write to stdout. + (gpg_import_keys): Implemented. + (gpg_export_keys): Implemented. + + * camel-cipher-context.c (camel_cipher_context_class_init): Hook + up default virtual methods for import/export. + (camel_cipher_import_keys): Implemented. + (camel_cipher_export_keys): Implemented. + +2002-10-31 Jeffrey Stedfast <fejj@ximian.com> + + * Makefile.am: Removed hash-table-utils.[c,h] from the build. + + * hash-table-utils.[c,h]: Removed. + + * string-util.c: Imported g_strcase[hash,equal] into here so we + can remove hash-table-utils.[c,h]. + + * camel-medium.c: Removed #include "hash-table-utils.h" + + * camel-mime-message.c: Same here. + + * camel-mime-part.c: And here. + + * camel-session.c: Here too. + + * providers/imap/camel-imap-store-summary.c: #include + string-utils.h instead of hash-table-utils.h + + * camel-charset-map.c: Same. + + * camel-folder-summary.c: Here too. + + * camel-provider.c: Again here. + + * camel-store-summary.c: And again... + +2002-10-31 Jeffrey Stedfast <fejj@ximian.com> + + Remove a ton of useless snot. + + * Makefile.am: Remove gstring-util.[c,h] from the build. + + * gstring-util.[c,h]: Removed. + + * string-utils.c (string_equal_for_glist): Removed. + (string_split): Removed. + (string_trim): Removed. + (string_prefix): Removed. + (string_unquote): Removed. + (strip): Removed. + + * hash-table-utils.c (g_hash_table_generic_free): Removed. + + g_str[n]casecmp functions are deprecated in glib2. + + * string-utils.c (strstrcase): Use strncasecmp instead of + g_strncasecmp. + + * hash-table-utils.c (g_strcase_equal): Use strcasecmp + instead of g_strcasecmp. + + * camel-smime-utils.c (camel_smime_is_smime_v3_signed): Same. + (camel_smime_is_smime_v3_encrypted): Here too. + + * camel-sasl-digest-md5.c (decode_data_type): And here. + (parse_server_challenge): Again here. + + * camel-pgp-mime.c (camel_pgp_mime_is_rfc2015_signed): Same. + (camel_pgp_mime_is_rfc2015_encrypted): Same + + * camel-mime-part-utils.c (check_html_charset): Here too. + + * camel-folder-summary.c (camel_system_flag): Same. + +2002-10-25 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_ctx_parse_status): Don't prematurely + set gpg->complete to TRUE. Let gpg_ctx_op_step () set it to TRUE + when gpg closes the status-fd instead. + +2002-10-24 Not Zed <NotZed@Ximian.com> + + ** For bug #31647 and bug #31456. + + * camel-store-summary.c (store_info_string): for STORE_INFO_NAME, + skip the leading /. + + * providers/imap/camel-imap-store.c + (parse_list_response_as_folder_info): Remove jeff's last patch, + and use the store summary to create the name and path of the + folderinfo so it manages namespace issues. + (get_folder_info_online): Just pass @top directly to + build_folder_info always, since namespace is mapped to 1 tree + level. + (imap_build_folder_info): Remove jeff's last patch, dont strip + leading /'s, they shouldn't exist. + (imap_connect_online): Remove adding the INBOX here, we add it + later. + (get_subscribed_folders): Make sure INBOX is always in the list. + some imap servers dont seem to let you subscribe to it(?), so + always have it act as subscribed. + + * camel-store.c (camel_folder_info_build): back out the last 2 + patches from Jeff (for #31456) to get the original behaviour. + (camel_folder_info_build): When creating a fake + parent, dont strip the namespace from the full_name. malloc keys + in hash since we dont have them anymore. + (free_name): Helper to free names. + + * providers/imap/camel-imap-store-summary.c + (camel_imap_store_summary_namespace_new): Canonicalise the + namespace (strip trailing dir_sep), and change the path to remove + any /'s. + (camel_imap_store_summary_namespace_find_path): + (camel_imap_store_summary_namespace_find_full): new, find + namespace by path/full name. + (camel_imap_store_summary_full_from_path): Changed to a simple + wrapper around path_to_full, after checking namespace. + (camel_imap_store_summary_add_from_full): map the namespace if + present. + (camel_imap_store_summary_path_to_full): If namespace exists, + unmap it. + +2002-10-18 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_folder): + Canonicalise the source_uri to not have a path. Fixes bug #32268. + +2002-10-17 Jeffrey Stedfast <fejj@ximian.com> + + Possible fix for bug #32270 + + * providers/pop3/camel-pop3-store.c (try_sasl): If we get an I/O + error, we should not be setting the CANT_AUTH exception but should + instead be setting the SYSTEM exception. Also check for EINTR + which signifies a USER_CANCEL exception. + (pop3_try_authenticate): If the auth mechanism isn't supported, + don't set the CANT_AUTH exception since then we will loop and try + again with the same data which will just cause an infinite loop. + (pop3_connect): Simplified a bit. + +2002-10-17 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (camel_certdb_nss_cert_set): If + ~/.camel_certs doesn't exist, create it. + +2002-10-15 Not Zed <NotZed@Ximian.com> + + * camel-tcp-stream-ssl.c (cert_fingerprint): helper, build + fingerprint. + (camel_certdb_nss_cert_get): Helper for nss certs. Lookup cert. + As well as fingerprint, the whole raw cert is checked for + validity. + (camel_certdb_nss_cert_add): Add an nss cert to a certdb, also + saves the cert by fingerprint in ~/.camel_certs/. + (ssl_bad_cert): Changed to use above functions to simplify logic. + (ssl_bad_cert): Also added non-compiled code which mimics what + mozilla does, but it doesn't work right :-/ + (camel_certdb_nss_cert_set): Save the raw cert associated with a + cert. + + * camel-certdb.c (certdb_cert_free): Free the raw cert data if + set. + +2002-10-14 Not Zed <NotZed@Ximian.com> + + * camel-file-utils.c (camel_file_util_encode_string): Encode a + length of 0 as 1, not 0, to match the decode code. + +2002-10-03 Not Zed <NotZed@Ximian.com> + + * camel-folder.c (filter_filter): Do the filtering ourselves. + This is so a problem like a missing uid (which can happen + legitemitely) doesn't prematurely abort filtering. Stop on all + other errors. See #31667. + +2002-10-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (camel_gpg_context_new): No longer takes a + path argument. + (camel_gpg_context_fianlise): No need to free ctx->path. + (gpg_ctx_new): No longer takes a path argument either. + (gpg_ctx_free): No need to free ctx->path, it's no longer used. + (gpg_ctx_op_start): Don't stat the path anymore and change the + first arg to execvp to "gpg" so that we use the shell's + environment to find gpg. + (gpg_sign): Updated. + (gpg_verify): Updated. + (gpg_encrypt): Updated. + (gpg_decrypt): Updated. + (gpg_ctx_get_argv): Removed some debug printfs. + +2002-10-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_id_to_hash): If the hash id is NULL, + return CAMEL_CIPHER_HASH_DEFAULT. Fixes bug #32229. + +2002-10-08 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-command.c (imap_read_response): If the + response from the IMAP server is "No", don't set the + SERVICE_UNAVAILABLE exception, this makes error reporting in the + UI for deleting IMAP folders that cannot be deleted inaccurate + (ie, it reports "Cannot delete in offline mode" which is not the + problem). + +2002-10-07 Jeffrey Stedfast <fejj@ximian.com> + + Fixes bug #31752 + + * providers/smtp/camel-smtp-transport.c (connect_to_server): Don't + forget to send another EHLO command to the server once we toggle + into STARTTLS mode. + (smtp_helo): Reset any flags set using the EHLO response and also + any authtypes. + +2002-10-06 Jeffrey Stedfast <fejj@ximian.com> + + Fixes bug #31681 + + * camel-mime-utils.c: Fix all mailing list regex patterns to allow + any number of spaces *or* tabs as pre-padding for the header + values. + +2002-10-03 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part.c (write_to_stream): Use the content-object's + rawtext flag to decide if it needs to be filtered through the + charset filter instead of using the mime part's rawtext flag since + this will never be set. Partial fix for bug #31655. + +2002-10-03 Not Zed <NotZed@Ximian.com> + + * camel-folder.c (folder_changed): Dont get the filter driver + inside the change_lock. Its not necessary, and can cause deadlock + with the way the mailer gets the filter driver via g_mainloop. + Should fix #31572. + +2002-10-02 Jeffrey Stedfast <fejj@ximian.com> + + * camel-charset-map.c (camel_charset_iso_to_windows): Map us-ascii + to windows-1252 also. + +2002-10-02 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-folder.c (get_matching): Set *set to + NULL if we dont get any matches. + (imap_sync_online): If we get no matches, skip any work, also + reorder some code to make it easier to skip. See #31031. + + * providers/imap/camel-imap-store.c + (imap_check_folder_still_extant): Default to "TRUE", if the list + command failed, it probably means a server problem, assume the + worst. This makes imap_refresh_info not clear the exception and + crash. Fixes crash of #31000. + +2002-10-01 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-folder.c (imap_refresh_info): Make + sure we pass the exception to imap_folder_selected(), otherwise + failures can be lost. See bug #31000. + +2002-10-01 Not Zed <NotZed@Ximian.com> + + * camel-folder.c (thaw): Add an assertion that the frozen count>0. + (freeze): Same for >= 0. + + * camel-vee-folder.c (camel_vee_folder_remove_folder): Use the + unmatched freeze_count when thawing folders removed from + unmatched, rather than the folder's freeze_count. Might be + related to #27391. + +2002-10-01 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (decode_internaldate): Use + strtol when decoding the timezone (since it can be negative) and + don't forget to increment inptr to the start of the time (ie, + don't leave inptr pointing to the year when decoding the + hour:min:sec). + +2002-09-30 Jeffrey Stedfast <fejj@ximian.com> + + Fixes bug #31456. + + * providers/imap/camel-imap-store.c (imap_connect_online): Don't + LSUB "" "*", instead get both an LSUB containing the subfolders of + the namespace and an LSUB of INBOX (assuming namespace was + non-empty). This fix really has nothing to do with bug #31456 but + is what should have been done in the first place. + (parse_list_response_as_folder_info): Simplify a tad and strip + extra leading /'s from fi->path. + (imap_build_folder_info): Strip extra leading /'s from fi->path. + + * camel-store.c (camel_folder_info_build): Don't strip the + namespace from the fi->full_name when hashing or creating fake + parent folder-infos. Fixes a bug I found while trying to reproduce + bug #31456. + (camel_folder_info_build_path): Strip off extra leading dir_sep + chars from the path. + +2002-09-30 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-folder.c (imap_get_message): Remove + debug content_info_dump, could cause a crash, and not really + needed anymore. + + * camel-folder-summary.c (camel_content_info_dump): Check ci->type + != NULL before dereferencing it. Should fix crash #31331. + +2002-09-27 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (decode_internaldate): New + function to decode the INTERNALDATE response from an IMAP server + so we don't have to use my broken-date-parser routines. + +2002-09-27 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (connect_to_server): + NULL-check the streams before unreffing them in the case of a + failure during ssl negotiations. + + * camel-tcp-stream-ssl.c (camel_tcp_stream_ssl_enable_ssl): Check + SSL_ResetHandshake() for errors. Also force a handshake after + we've reset the handshake state on the socket. + +2002-09-27 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-folder.c (imap_update_summary): Use + the summary's last uid as the one to fetch from, ignoring the + cache. Use strtoul instead of atoi as well. + + * providers/imap/camel-imap-store.c (get_folder_counts): If we + have the folder open, and the unread count has changed, refresh + it. Should fix #30399 enough. Also in non-check-all mode, if we + have the folder open, use it anyway. + +2002-09-26 Not Zed <NotZed@Ximian.com> + + * tests/folder/test2.c (main): Treat spool as a local folder, so + the ref checks work right. + + * providers/local/camel-spool-store.c (get_folder): Implement + FOLDER_CREATE flag. + (scan_dir): Dont free name on exception, its alloca'd. + (scan_dir): If we start scanning from a file, just add that + directly. + (scan_dir): Allow empty files to also show up in folder list, as + well as files starting with "From ". + (get_folder): Use creat() instead of open() to create file. + + * providers/local/camel-spool-folder.c (camel_spool_folder_new): + Check folder != NULL before writing to it. + + * providers/local/camel-local-store.c (create_folder): Handle a + parent of NULL for creating top-level dirs. Part of #31186. + + * providers/imap/camel-imap-store.c + (parse_list_response_as_folder_info): Store the folder flags in + the store summary. + (get_one_folder_offline): Set the noselect url parameter if this + is a noselect folder, from the stored summary flags. #30877. + +2002-09-23 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-charset.c (complete): Handle EILSEQ by eating + bytes in the input buffer until conversion is successful. The old + behaviour aborted when it got EILSEQ and just dumped the raw data. + (filter): Same. Fixes bug #30873. + +2002-09-24 Not Zed <NotZed@Ximian.com> + + * camel-mime-utils.c (mail_list_magic[]): Changed the Mailing-List + rule to get the complete domain (* in wrong spot). #31087. + + * camel-text-index.c (text_index_compress_nosync): If we have no + data written to a key, dont add it, or its partition header. + +2002-09-23 Not Zed <NotZed@Ximian.com> + + * camel-block-file.c (sync_nolock): Mark root block dirty if we're + going to sync it. + (camel_key_file_finalise): de-count the active list if we close + it. + + * camel-text-index.c (text_index_delete): Implement. + (text_index_compress_nosync): Use index_delete when we're finished + with the old one, so it is properly deactivated. + + * camel-index.c (camel_index_delete): Remove api call. Mark index + deleted in new state variable. + (camel_index_*): Wrap all calls in check for deleted state. + +2002-09-23 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder.c (transfer_message_to): If the original message is + deleted, reset the deleted flag when we're done. Fixes bug #30876. + + * providers/imap/camel-imap-folder.c (add_message_from_data): + Decode the INTERNALDATE if we've got one. + (imap_update_summary): Instead of requesting a list of specific + headers, request HEADER.FIELDS.NOT (RECEIVED) to reduce bandwidth + usage even more. + (parse_fetch_response): Change slightly to allow HEADER.FIELDS or + HEADER.FIELDS.NOT so that we can make changes in + imap_update_summary and not need to keep changing this function to + match. Also parse an INTERNALDATE response. + +2002-09-22 Dan Winship <danw@ximian.com> + + * camel-mime-parser.c (folder_scan_drop_step): fix non-ANSI switch + statement. + + * camel-service.c (service_getv): Likewise. + + * providers/imap/camel-imap-store.c (imap_getv): Likewise. + + * providers/pop3/camel-pop3-folder.c (cmd_builduid): Likewise. + +2002-09-20 Not Zed <NotZed@Ximian.com> + + * tests/misc/split.c: New regression test for word + splitting/search input parsing code. + + * tests/folder/test9.c (main): Fix for filter_driver api change. + + * camel-search-private.c (camel_search_words_split): Handle "'s + and \'s to escape characters. For fat, lazy, slobs who dont like + anything changing. + +2002-09-19 Not Zed <NotZed@Ximian.com> + + * camel-filter-search.c (camel_filter_search_match): Take new + session arg. Update callers. + (symbols[]): changed get-source to header-source + (header_source): Changed from get_source. Now a boolean, returns + true if source matches one of the arguments. Uses the provider + url comparison directly for accurate checking. Makes 'filter on + source' work. + + * camel-filter-driver.c (camel_filter_driver_new): Take new arg, + session. + (camel_filter_driver_finalise): Free session. + +2002-09-19 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (parse_fetch_response): Don't + increment the response pointer when deciding what type of header + response we got, this screws up the string that we strdup into the + part_spec string later. Also, instead of using the entire blob of + HEADER.FIELDS that we get in the response, shorten it to just + HEADER.FIELDS to use as the part_spec key. + +2002-09-18 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (CAMEL_MESSAGE_INFO_HEADERS): + Include MIME-VERSION and CONTENT-TYPE. + +2002-09-18 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-command.c + (camel_imap_command_response): If we get an ALERT, pass it to the + user. An rfc2060 MUST, and bug #22496. + +2002-09-17 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (parse_fetch_response): + Handle when the response is from a HEADER.FIELDS (if so, we don't + want to cache the result). + (imap_update_summary): Request specific headers when building the + CamelMessageInfo's rather than fetching the full headers. + +2002-09-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part.c (process_header): If header_msgid_decode fails + for the content-id field, just grab whatever is between the <>'s + (yes, this means that the content-id is invalid - but what can ya + do?). Addresses bug #21027. + +2002-09-11 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_encode_string): Revert a patch that I + had not meant to commit that was aimed at fixing bug #29234. + +2002-09-10 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store-summary.c (camel_store_summary_load): Same as + below. Also save errno before closing the file so our caller can + figure out why we failed. + (camel_store_summary_save): Same here, but also flush the output + stream to disk. + + * camel-folder-summary.c (camel_folder_summary_load): s/fclose(in) + == -1/fclose(in) != 0/ since fclose doesn't necessarily return -1 + on fail, all we really know is that it returns 0 on success and + non-zero on fail. + + * camel-certdb.c (camel_certdb_save): fsync() the stream after we + fflush it. + + * camel-folder-summary.c (perform_content_info_save): Do proper + error checking and return -1 on fail. + (camel_folder_summary_save): Check the return of + perform_content_info_save and a few other output calls within the + message_info_save loop. If any of them fail, save errno, close the + file, and return -1. If we finish the loop without fail, fflush + the stream and then fsync (fflush only flushes user-space buffers, + you still need to fsync afterward to flush the data to disk). If + either fail, treat it as an exception by saving errno, closing the + stream, and returning -1. I suspect that this also fixes bug + #30150 because the old code would fclose if fflush or fclose + failed in the check after the loop (man fclose(3) states that any + further calls using the stream (even another call to fclose) will + have undefined behaviour no matter what the first fclose call + returned). + + * providers/local/camel-local-summary.c + (camel_local_summary_init): Don't malloc a private struct of 0 + size. + + * providers/imap/camel-imap-folder.c + (camel_imap_folder_fetch_data): Clear the exception even if we + failed to get the message (part) from the imap-message-cache if we + are online and able to try fetching it from the IMAP server. + +2002-09-10 Not Zed <NotZed@Ximian.com> + + * camel-data-cache.c (data_cache_expire): Remove the hash table + entry using the right path. Related to #29731. + (camel_data_cache_remove): " + +2002-09-09 Jeffrey Stedfast <fejj@ximian.com> + + Fixes bug #4224 + + * providers/imap/camel-imap-folder.c + (camel_imap_folder_fetch_data): Pass ex into + camel_imap_message_cache_get(). + + * providers/imap/camel-imap-message-cache.c + (camel_imap_message_cache_get): Now takes an exception and sets it + on fail. + (camel_imap_message_cache_copy): Updated to properly handle + cache_get error conditions. + +2002-09-04 Dan Winship <danw@ximian.com> + + * camel-mime-utils.c (header_decode_date): Use e_mktime_utc. + + * camel-mime-message.c (camel_mime_message_set_date): Use + e_localtime_with_offset. + + * broken-date-parser.c (decode_broken_date): Use e_mktime_utc. + +2002-09-04 Not Zed <NotZed@Ximian.com> + + * tests/folder/test4.c (main): clear nonfatal stuff. + + * tests/folder/test6.c (main): check inbox and 'another folder' + because some servers do different things w/ inbox. + + * providers/imap/camel-imap-message-cache.c + (camel_imap_message_cache_get): Dont try to open the directory + instead of an empty "" uid. + + * providers/imap/camel-imap-folder.c (imap_get_message): we dont + want to g_return_if_fail, we need to set an exception and always + handle the case. + (get_message_simple): Set an exception if we get a construct + failure. + (imap_refresh_info): if we're refreshing inbox, force a reselect. + this is required for at least cyrus. CHECK doesnt work either :( + + * tests/lib/folders.c (test_folder_basic): for non-local stores, + the folder will have an extra ref for selection, take this into + account when checking ref leaks. + (test_folder_message_ops): Dont try to delete folder with messages + in it, it works generally with imap. also, change params so we + can test different mailbox types. + (test_folder_message_ops): disconnect remote services before + finishing off. doesn't need to stricly but makes ref count + checking more accurate. + (test_folder_message_ops): removed explicit remote sync, imap does + it itself now ... + + * providers/imap/camel-imap-store.c: + (camel_imap_store_finalize): call service_disconnect, so it isn't + called later in the finalise chain, to properly cleanup on exit. + + * camel-mime-parser.c (folder_scan_content): If we fake the from + eof file boundary, also make sure we say we matched nothing. Also + make the end case a little more robust to make sure we expired all + hope of finding a sub-boundary. + + * providers/imap/camel-imap-store.c, + providers/imap/camel-imap-folder.c: Lots of changes, too numerous + to list. Changed to use camel-imap-store-summary to cache list + requests. Changed to use a canonicalised url path with / instead + of per-store directory separator. Indirects folder name so + invalid folder names can still be accessed. Summary now stored in + a new expandable format in .ev-store-summary. + +2002-08-29 Not Zed <NotZed@Ximian.com> + + * tests/folder/test3.c: Change the case sensitive search of + subject to expect case insensitive results, as the behaviour has + changed. + (main): Made the search content before sync nonfatal. its + something that needs to be fixed but not practical concern in + evolution. + + * camel-block-file.c (block_file_validate_root): Only spit out the + invalid root warnings if the file isn't empty. + + * camel-text-index.c (text_index_compress_nosync): Swap the path + as well when we compress. + + * camel-mime-parser.c (folder_scan_content): Treat the end of file + as a boundary if we're scanning From lines, and drop the last \n. + (folder_scan_init_with_fd): Dont pre-read from the fd, and init eof. + (folder_scan_init_with_stream): Similar. + (folder_read): Handle eof, and set eof on 0 read. + (folder_seek): Dont pre-read after a seek, and reset eof flag. + (camel_mime_parser_init_with_fd): Fix doco, no pre-read occurs + anymore. + (camel_mime_parser_init_with_stream): Same. + + * providers/local/camel-mbox-summary.c + (camel_mbox_summary_sync_mbox): Add a \n to end of content of each + message, not at start. + + * providers/local/camel-mbox-folder.c (mbox_append_message): + Instead of appending "\nFrom " to a mailbox, start with "From ", + and append a \n after the message always. For better mutt/elm + compatability. Also, unlock after we've stat'd. + (mbox_append_message): Set the message's from_pos exactly as the + mbox size. + +2002-08-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-openssl.c (stream_setsockopt): Fixed `set' to + hold the correct value when setting the flags. + + * camel-tcp-stream-raw.c (stream_setsockopt): Fixed `set' to hold + the correct value when setting the flags. + + * camel-mime-filter-tohtml.c (is_protocol): Match file: urls too. + +2002-08-28 Not Zed <NotZed@Ximian.com> + + * tests/folder/test8.c (test_add_message): Change message number + to use hex, so its properly unique. + (worker): Same here. + + * tests/misc/utf7.c: some utf7/utf8 tests. + + * providers/imap/camel-imap-utils.c (imap_mailbox_encode): Changed + to use camel_utf8_utf7 code. + (imap_mailbox_decode): As above, using camel_utf8_utf7. 'UTF-7' + isn't a widely support iconv() codeset, and besides the new code + is simpler. + + * camel-utf8.[ch]: robust utilities for working with utf8 and utf7. + +2002-08-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-thread.c (camel_folder_thread_messages_new): Now + takes a third argument to specify whether or not to group messages + by subject when threading. It seems some people don't want this + feature (see bug #22791 for details). + (thread_summary): If thread_by_subject is enabled, group + un-threaded messages by subject otherwise don't bother. + +2002-08-26 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-command.c + (camel_imap_response_free_without_processing): If the response is + NULL, just return. (now works the same way as imap_response_free + which allowed a NULL response argument). Fixes bug #25491. + +2002-08-26 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c: + + * providers/imap/camel-imap-folder.c: + + * providers/imap/camel-imap-command.c: Lock the + CamelService->priv->connect_lock instead of using our own + command_lock. This fixes bug #28177. + +2002-08-23 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_helo): If we fail to + send the EHLO/HELO command successfully, set transport->connected + to FALSE when we close the tcp connection. Also updated to work on + an IPv6 network. + (smtp_connect): transport->authtypes can be NULL, so NULL-protect + the call to g_hash_table_size() - this should fix a warning that + was reported on the evolution@ximian.com mailing list. + (smtp_set_exception): If the status message is multi-line, add a + \n between lines. + (connect_to_server): If we are going to ignore the EHLO/HELO error + as if it were non-fatal, then we should clear the exception. + +2002-08-22 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (imap_noop): If current_folder + is not NULL and the summary for that folder is dirty, sync the + flags rather than sending a NOOP. + + * providers/imap/camel-imap-utils.c (imap_parse_list_response): + Workaround for Courier imap's brokeness when LSUBing the INBOX + folder when it isn't subscribed to. Fixes bug #28929. + +2002-08-21 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (connect_to_server): If + imap_get_capability() fails, after unlocking the command_lock, + disconnect the service. + +2002-08-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-session.c (get_service): Don't register the noop timeout + here anymore, we're gonna handle all this in the mailer now. + (camel_session_register_timeout): Removed. + (camel_session_remove_timeout): Removed. + +2002-08-28 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c (construct): Load store + summary if it exists. + (can_work_offline): Just see if we have any folders to say whether + we can work offline or not. Should probably always just return + true. + +2002-08-27 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store-summary.[ch]: New files to + handle offline definition of folders, etc. + + * camel-url.h: Define CamelURL to be struct _CamelURL rather than + anonymous struct. + + * camel-store-summary.[ch]: a few api tweaks. Also, the summary + header is versioned separately at each level, so that version + upgrades can be handled separately. Renamed FolderInfo -> + StoreInfo to avoid namespace with current FolderInfo code. This + should be reversed when the FolderInfo code is rationalised to + this new base. + +2002-08-23 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-command.c (camel_imap_command): domt + encode folder name. + + * providers/imap/camel-imap-folder.c (do_copy): dont encode folder + name. + (do_append): dont encode folder name. + + * providers/imap/camel-imap-store.c (get_folder_status): don + encode folder name in imap request. + (get_folder_online): here too for creating folder. + (rename_folder): Assume the incoming 'new name' is a utf8 path, + whereas the 'old name' is as from get folder info (raw). + (create_folder): Dont encode parent_name, assume its the raw + thing. + +2002-08-22 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c (get_folder_online): Select + based on unconverted name. + (imap_build_folder_info): New function to create a folderinfo + properly based on raw name. + (subscribe_folder): Use above helper. + (imap_folder_effectively_unsubscribed): Same here. + (imap_forget_folder): Same here. + (get_one_folder_offline): " + +2002-08-21 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c + (parse_list_response_as_folder_info): Setup path properly, as + decoded path with / separator. Setup full_name as non-decoded raw + name. Keep url as decoded path but with server separator + ... (ick). + (create_folder): Dont call build_path anymore, get_folders() does + it for us. + (subscribe_folder): Build the path ourself. + (imap_folder_effectively_unsubscribed): Same here. + (get_subscribed_folders): list using %S not %F, we're using the + raw server provided name directly. + (subscribe_folder): As above, for SUBSCRIBE. + (unsubscribe_folder): Same here. + (delete_folder): Same. + (rename_folder_info): Same here for source name. + (rename_folder): And here? + (get_folders_online): Amd here. + + * providers/imap/camel-imap-utils.c: + (imap_parse_list_response): Dont decode the mailbox. + + * camel-utf8.[ch]: some new utf8 & utf7 utilities. + + * providers/imap/camel-imap-utils.c (imap_mailbox_encode): + (imap_mailbox_decode): use camel_utf7/8* functions instead. + : Add config.h and alloca.h headers. + +2002-08-20 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (imap_noop): Override the + default noop implementation. + + * camel-store.c (camel_store_noop): New virtual method to ping a + store. + + * camel-session.c (get_service): Register a timeout that calls + camel_store_noop() every 10 minutes. + +2002-08-19 Peter Williams <peterw@ximian.com> + + Plug some large leaks in the indexing code. + + * camel-mime-filter-index.c (camel_mime_filter_index_set_index): Unref + the old index if necessary. + + * camel-text-index.c (camel_text_index_get_type): Give it the correct + parent type so that finalize handlers chain. + (camel_text_index_name_get_type): Here too. + (camel_text_index_cursor_get_type): Here too. + (camel_text_index_key_cursor_get_type): Here too. + +2002-08-20 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (get_folders): Don't let the + minimum recursive depth be negative. + (get_folders): Pass flags & CAMEL_FOLDER_INFO_SUBSCRIBED as the + `lsub' argument to get_folders_online() otherwise we'll end up + doing a LIST when we really wanted to do an LSUB. + + * camel-session.c: Set CAMEL_URL_NEED_PATH for the vFolder + provider. + +2002-08-19 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c: Changed the STOREINFO_VERSION + - should fix bug #28571, but if it doesn't - oh well, I don't + care. I'm considering it fixed no matter what. + + * camel-gpg-context.c (gpg_sign): If the diagnostics are empty, + just explain that gpg failed to execute. + (gpg_encrypt): Same. + (gpg_decrypt): And here too. + + * tests/lib/camel-test.c (camel_test_init): Updated to pass the + needed arguments to camel_init() and to init gthreads before camel + (since camel expectes it to be initialised already). + + * tests/lib/session.c: #include <config.h> needed for + ENABLE_THREADS so that sizeof (CamelSessionClass) gives the + correct size. + + * tests/*: Updated to work with camel API changes. + +2002-08-16 Dan Winship <danw@ximian.com> + + * camel-session.c (get_service): If the passed-in URL contains a + path, but the service doesn't allow paths, then the path part must + be a folder name, and we should ignore it here. #29010 + +2002-08-16 Chris Toshok <toshok@ximian.com> + + * camel-arg.h: remove the outer parens from the expansion of + camel_argv_{start,end} since at least on freebsd va_end is + #defined to be nothing, so (va_end(..)) causes a syntax error. + +2002-08-16 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c (get_folders): Fix the logic + check for working out if we add inbox or not, we do it if we + listed the namespace. + +2002-08-15 Not Zed <NotZed@Ximian.com> + + * camel-store.h (CamelFolderInfo): added a flags field, defined + some flags, currently only used by imap. This and below is first + step to getting incremental folder tree loading. + + * providers/imap/camel-imap-store.c (get_subscribed_folders): If + the subscribed list is empty, always add inbox. + (imap_connect_offline): If the 'storeinfo' namespace isn't the + same as our own (if its set), then ignore it, assume we changed + settings. Otherwise you can't change the namespace ... + (get_folders): allow the env variable CAMEL_IMAP_MAX_DEPTH to + override the default maximum recursion depth if 10 levels. + (camel_imap_store_readline): Dont depend the log debug on d(x) + being defined. + (get_folder_info_online): changed to use new functions/names. + +2002-08-14 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c (get_subscribed_folders): + Removed the by_hand sillyness. Return an array instead. + (get_folders): New method to get folders recursively without + having to use '*'. Uses '%', and stops if it gets too deep + (current max of 10). + (get_folder_counts): New method to fill out unread counts on + folderinfo tree. + (get_subscribed_folders): Fix some failure logic. + + * providers/imap/camel-imap-utils.[ch]: Changed IMAP_LIST_FLAGS to + use the new CamelFolderInfoFlags directly. + +2002-08-09 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-folder.c (get_temp_uid): New function, + generate a UID that has better chances of being unique. + (imap_append_offline): Use it here. + (imap_transfer_offline): And here. + +2002-08-09 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-store.c + (get_folder_info_online): Tweak how we build the tree based on whether + a full tree or a subtree is being requested. Fixes subscribe dialog + on UW servers. + (get_one_folder_offline): Don't add folders that we're not subscribed + to; fixes UW folders that weren't being marked as NoSelect because + the storeinfo doesn't record that information. + +2002-08-09 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_rename): When renaming our + cache, add the "/folders" to the path. + +2002-08-08 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_init): Set + some default permanent_flags. This is the other cause of bug + #28038. + (imap_refresh_info): After calling camel_imap_command() with a + NULL format value (this is a shortcut to change the current_folder + by SELECTing it), call camel_imap_folder_selected(). This may have + been why permanent_flags never got set on the folder even after + going online in bug #28038. + (imap_update_summary): Same here. Also NULL-guard + camel_imap_response_free(). + +2002-08-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_encode_param): Oops - outbuf pointed + to alloca'd memory but we were g_free'ing it after using + it. Instead use g_malloc for this outbuf buffer since it may be + kinda large. Also don't depend on a single byte to nul-terminate + the outbuf buffer so as to be safe with charsets such as UCS2 and + UCS4, instead keep a pointer to the end of the buffer. + + * providers/imap/camel-imap-folder.c (parse_fetch_response): Only + add the stream to the gdatalist if it is non-NULL. + +2002-08-06 Jeffrey Stedfast <fejj@ximian.com> + + * providers/sendmail/camel-sendmail-transport.c + (sendmail_send_to): If writing to the sendmail pipe fails, wait + for the sendmail process to exit before returning. Fixes bug + #19636. + +2002-08-06 Not Zed <NotZed@Ximian.com> + + * providers/pop3/camel-pop3-folder.c (cmd_list): Add messageinfo + to id table, and store array index in messageinfo too. + (fi_to_index): Removed, use index member of messageinfo, fixed + callers. + (cmd_builduid): Parse the headers of the data, and ignore any + status or x-status headers. + (uid_to_fi): Removed, use the hashtable instead. + (id_to_fi): Same. + (cmd_uidl): Add messageinfo to uid table. + (pop3_refresh_info): Setup hash tables, and fill out uid table for + nonuid capable servers. + (pop3_finalize): Destroy hash tables. Only free resources if the + uids table is not null (if finalised before we ran refresh info). + (id_to_fi): Removed. Use id hash table instead, fixed caller. + +2002-08-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel.c (camel_init): Always set a g_atexit handler to + flush/save the camel-certdb. + + * providers/imap/camel-imap-store.c (get_folder_info_online): If + we are asking for the toplevel folders, use the IMAP store's + namespace as the toplevel folder rather than an empty + string. Fixes bug #28574. + (imap_forget_folder): Rearrange the code so that name can never be + used uninitialised. + + * providers/imap/camel-imap-utils.c (imap_namespace_concat): + Removed. + +2002-08-05 Dan Winship <danw@ximian.com> + + * camel-folder-summary.h (CamelMessageFlags): Add + CAMEL_MESSAGE_ANSWERED_ALL, for folders that can distinguish a + reply-to-sender from a reply-to-all. (eg, Exchange) + + * providers/local/camel-local-folder.c (local_init): Add + ANSWERED_ALL to permanent_flags too. + +2002-08-02 Jeffrey Stedfast <fejj@ximian.com> + + Fixes bug #26237. + + * providers/imap/camel-imap-command.c + (imap_command_strdup_vprintf): Don't prepend any namespace shit in + the %F case. + + * providers/imap/camel-imap-utils.c (imap_parse_list_response): + Don't strip off the namespace. + +2002-08-01 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-store.c (create_folder): If the folder + name contains the directory separator, reject it. + +2002-08-02 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-mbox-summary.c (mbox_summary_check): Clear + the summary after building the 'removed uid' list. + + * camel-folder-summary.c (message_info_load): revert jeff's patch + below, and do it slightly differently, and stop the auto-reformatting + bullshit. + +2002-08-02 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-maildir-summary.c (message_info_new): If + we get a duplicate, just re-use the old info. + (remove_summary): Add any removed to a change list. + (maildir_summary_check): If we find new ones in 'cur' track them + in the change list. Removed FIXME about it. For #18348. + +2002-08-01 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-summary.c (message_info_load): Do more error + checking to prevent crashing if we fail to read a string for + example. + +2002-07-29 Peter Williams <peterw@ximian.com> + + Fix bug #28238 + + * providers/imap/camel-imap-store.c (imap_forget_folder): New + function, breaking out the code in delete_folder() to handle when + a folder is removed. + (imap_folder_effectively_unsubscribed): New function, breaking out + the code in unsubscribe_folder() to handle when a folder is + unsubscribed. + (imap_check_folder_still_extant): New function, check whether a + folder exists by LIST'ing it. + (imap_store_refresh_folders): Add code here to check if the folder + still exists if we're unable to refresh its info. If so, pretend + that it was unsubscribed (to get the mailer to remove it from + the tree) and delete its cache. If somehow this goofs up, the + worst that can happen is that we must redownload the headers. + (get_folder_status): If we can't get the status, behave as above. + (delete_folder): Call imap_forget_folder() where the bulk of this + code has gone. + (unsubscribe_folder): Call imap_folder_effectively_unsubscribed() + where the bulk of this code has gone. + +2002-07-31 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (parse_fetch_response): + Disable my fix to not cache headers as it means that each time we + load the message, we've got to re-fecth the headers. + + * camel-mime-filter-tohtml.c (is_addr_char): Don't use + "isprint(c)" to mean "c >= 32 && c < 128" since it doesn't in most + locales. + (is_url_char): Same. + (is_trailing_garbage): Same. + (is_domain_name_char): New macro for dns-valid characters + (email_address_extract): Use is_domain_name_char rather than + is_addr_char for the part after the @. + +2002-07-30 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream.c (camel_tcp_address_new): Update the comment. + + * camel-tcp-stream-raw.c (socket_connect): If building with IPv6 + support and the address is an IPv6 address, connect using a + sockaddr_in6 otherwise use the standard IPv4 sockaddr_in + structure. + (stream_get_local_address): Fix to work with IPv6 addresses. + (stream_get_remote_address): Same. + + * camel-tcp-stream-openssl.c (socket_connect): Same as above. + (stream_get_local_address): Fix to work with IPv6 addresses. + (stream_get_remote_address): Same. + + * camel-tcp-stream-ssl.c (stream_connect): If building with IPv6 + support and the address is an IPv6 address, initialise the + PRNetAddr accordingly. + (stream_get_local_address): Fix to work with IPv6 addresses. + (stream_get_remote_address): Same. + +2002-07-30 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-openssl.c (ssl_verify): X509_digest() needs a + pointer to an int len. Also fixed some other compiler errors. + + * camel-certdb.h: #include <stdio.h> + +2002-07-30 Jeffrey Stedfast <fejj@ximian.com> + + * camel-certdb.c: New source file implementing a very basic + certificate database. This is mostly just here because the Mozilla + NSS certdb seems to not be working for everyone's Evolution + install (works fine for me and Ettore but not many other people). + + * camel-tcp-stream-ssl.c (ssl_bad_cert): If we have this + certificate in our own CamelCertDB, then get the trust value from + that and only prompt the user if the trust is unknown. + + * camel-tcp-stream-openssl.c (ssl_verify): Same. + + * camel.c (camel_init): Create our default certdb. + +2002-07-30 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_transfer_offline): Use + the same command-counter mojo that the append code uses in case + the use tries to copy the same message to the folder repeatedly. + +2002-07-29 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (unset_flag): New filter action to unset a + system flag. The exact opposite of set_flag. + +2002-07-26 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-local-store.c (get_folder): If the path + exists and is a directory, return non-NULL. Missed this before + which is how we could return NULL even on success. Oops. + +2002-07-26 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-summary.c + (camel_imap_summary_add_offline_uncached): The flags'n'tags + copy was unnecessary. Removed it. + +2002-07-25 Jeffrey Stedfast <fejj@ximian.com> + + If we're gonna do an elite hack, lets do it right. + + * providers/local/camel-local-store.c (get_folder): On success, + return non-NULL so that our caller doesn't have to depend on 'ex' + being non-NULL in order to work correctly. + + * providers/local/camel-mbox-store.c (get_folder): Don't bother + checking if an exception was set, just use the return value of + camel-local-store's get_folder. + + * providers/local/camel-maildir-store.c (get_folder): Same as the + mbox change. + + * providers/local/camel-mh-store.c (get_folder): Here too. + +2002-07-25 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-summary.h + (camel_imap_summary_add_offline_uncached): Prototype. + + * providers/imap/camel-imap-summary.c + (camel_imap_summary_add_offline_uncached): New function to add an + uncached message to the summary while offline. + + * providers/imap/camel-imap-store.c (imap_connect_online): Only + refresh the folders if the disco diary is empty (ie, we're not + resyncing.) + + * providers/imap/camel-imap-folder.c (imap_transfer_offline): Emit + an event for the source if deleting its originals. Also, if we + can't load the message, still process it, using the new imap + summary function. + +2002-07-25 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c: Remove "possibly + non-fatal" exception strings, all exceptions are fatal unless + their caller decides otherwise. + (connect_to_server): If smtp_helo() fails due to us getting + disconnected, treat the exception as fatal. + (smtp_connect): Abort if smtp_helo() fails and we got + disconnected. + (smtp_send_to): If smtp_mail() fails, abort the send operation. + (smtp_set_exception): If respbuf was NULL, then we got + disconnected and so update our state accordingly. + (smtp_disconnect): Only send a QUIT if we are still in the + connected state (or, at least think we are). + +2002-07-24 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-folder.c + (imap_expunge_uids_resyncing): It would help to mark the UIDs as + deleted before we try to expunge them + (in the case when no other UIDs were marked deleted this didn't + happen.) Also fix an FMR. + (imap_expunge_uids_offline): Trigger a folder_changed event with + our own changeinfo because camel_imap_response_free won't be able + to do that for us. + +2002-07-25 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (do_shell): Renamed from + shell_exec(). Also, we now want to pass argc/argv on to the + CamelFilterDriverShellFunc. + (camel_filter_driver_set_shell_func): Renamed a bit. + + * camel-filter-search.c (pipe_message): Renamed from shell_exec(). + +2002-07-25 Not Zed <NotZed@Ximian.com> + + * camel-folder-summary.c (camel_folder_summary_save): When writing + the summary, use TRUNC flag, duh. Also, write to a temp file + first, and rename when closed successfully, and check ferror() and + fclose() against 0 rather than -1. + + * providers/local/camel-mbox-summary.c (summary_update): Decrement + i if we remove the summary item so we dont skip every 2nd one. + + * camel-mime-utils.c (header_decode_mailbox): Use + rfc2047_decode_word explicitly incase we just found an encoded + word. Stops us re-decoding the string twice, which fixes memory + corruption in #26330 when the HUGE string is used later. + +2002-07-24 Not Zed <NotZed@Ximian.com> + + * camel-partition-table.c (camel_key_table_next): Didn't unlock if + we exited on an empty key list. + + * providers/imap/camel-imap-folder.c (imap_expunge_uids_online): + Sync before doing an expunge if we dont have uidplus. See #25766. + (imap_expunge_uids_resyncing): Same here. + + * providers/imap/camel-imap-store.c (get_folder_info_online): + Duplicated the very much hack in imap_store_refresh_folders() to + avoid a deadlock in #27959. A decent fix has to wait for a + rewrite. + (get_folder_online): Move folders to a subdirectory of + storage_path, rather than in it. Bye bye everyones settings. See + 24947. + (get_folder_offline): And here too. + (delete_folder): And here too. + (rename_folder): and here too. + (get_folder_info_offline): And here too. I love code reuse. + +2002-07-23 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream.c: #include <string.h> for memcpy. + +2002-07-22 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (vee_set_message_user_tag): Oops, forgot to + implement this. Fixes #24604. + +2002-07-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-crlf.c (filter): Only add a \r if the + character before the \n wasn't already a \r - this covers for when + people add DOS files as attachments. Fixes bug #28056. + +2002-07-19 Not Zed <NotZed@Ximian.com> + + * camel-mime-part-utils.c (convert_buffer): Changed to use a + different length calculator. + +2002-07-17 Jeffrey Stedfast <fejj@ximian.com> + + * camel-lock.c: Add the appropriate #include for the _() macro. + +2002-07-17 Not Zed <NotZed@Ximian.com> + + * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): Got + rid of the stupid "tryagain" semantics, which didn't work. + (pop3_connect): Fixed here to only retry under proper conditions. + +2002-07-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-canon.c (filter): When CRLF encoding, "empty" + (after stripping trailing whitespace characters) lines need to end + in CRLF also, not just lines with data in them. + +2002-07-16 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_sync_online): Clean + up some improper usage of CamelExceptions (looking at + camel_exception_is_set when ex = NULL). + + * providers/imap/camel-imap-store.c (get_folder_online): Here too. + + * providers/imap/camel-imap-message-cache.c + (camel_imap_message_cache_new): Nothing sets the exception so + don't bother to check it at the end of this function. Prevents + a warning about checking a NULL exception's value. + +2002-07-16 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_helo): Make the + standard AUTH format take priority over the AUTH= priority, since + sometimes servers only list a subset of the supported authtypes in + the AUTH= response while they list all authtypes in the standard + AUTH response. Fixes "bug" #27841. + +2002-07-15 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_get_message): If we're + not online and the message isn't in our cache, give up. + +2002-07-15 Not Zed <NotZed@Ximian.com> + + * camel-filter-search.c (get_label): Removed. + (get_score): Removed. Labels & scores are stored in tags, we + already have a function to get tags. + (user_tag): Fail if we dont get valid arguments, it must be a + string type. + (system_flag): Same here. + +2002-07-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_msgid_generate): Try to get the FQDN + from the results of gethostname(). If that fails, then fall back + to the results gotten from gethostname() or if that fails just use + "localhost.localdomain". Addresses bug #17416. + (header_decode_param): Protect against a NULL value. + + * providers/smtp/camel-smtp-transport.c (smtp_data): Get rid of + the constant 'required' variable, just use the value when calling + set_best_encoding. + + * providers/local/camel-local-provider.c: Changed the mbox and + spool provider descriptions to try and be more clear. I'm not sure + I like the mention of Evolution in the mbox provider description, + but there was no other way to make it clear that it MOVED mail out + of the mbox folder into a folder managed by Evolution without + mentioning Evolution. *sigh* Anyways, to me "retrieve" means move, + but apparently this isn't clear to the weak minded. + +2002-07-15 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_rescan): >= is not + appropriate here because the sequences are 1-based; so seq = + summary_len is valid. Hopefully addresses 15646, because this + caused the last message in a folder to be reloaded, replacing its + CamelMessageInfo, and the tree view was using the old + CamelMessageInfo. + +2002-07-13 Not Zed <NotZed@Ximian.com> + + * camel-folder-summary.c + (camel_folder_summary_info_new_from_message): Only assign a uid if + indexing is enabled. This stops us always assigning a uid in the + imap folder and disco folder? + + * providers/imap/camel-imap-folder.c (imap_update_summary): Also + check the uid is set at all, another bit of a fix for #15667. + +2002-07-09 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-folder.c (imap_update_summary): Check + for existing messages of the same uid before doing anything. If + it exists, do nothing (perhaps it should merge?). A dirty hack for + #15667. + +2002-07-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel-multipart-encrypted.c (camel_multipart_encrypted_decrypt): + On error, do not unref the parts gotten using + camel_multipart_get_part() since that function does not ref the + parts. Also don't forget to reset the decrypted stream before + trying to parse it ;-) + +2002-07-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel-multipart.c (camel_multipart_class_init): Updated to not + use camel_type_get_global_classfuncs() since this is just a cast + macro now. + + * providers/imap/camel-imap-folder.c (get_content): Handle + multipart/encrypted parts too. + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Handle + multipart/encrypted types too. + +2002-07-11 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_data): Don't let any + parts have a binary encoding. + +2002-07-11 Jeffrey Stedfast <fejj@ximian.com> + + Fixes bug #27672 + + * camel-mime-filter-bestenc.c: Conditionally #include <config.h> + + * camel-mime-filter-linewrap.c: Same here... although we could + probably just get rid of this filter? We don't seem to use it + anywhere since we try to QP/Base64 encode any text parts with long + lines. Besides, we couldn't use this filter for SMTP anyway since + we can't risk possibly linewrapping a binary mime part. I dunno, + maybe this could be useful in the composer though? *shrug* + + * providers/smtp/camel-smtp-transport.c (smtp_data): Always call + camel_mime_message_set_best_encoding() even if the server allows + 8BITMIME and even if we don't have any 8bit parts because we may + have parts with long lines (>998 octets) which also need to be + encoded. + + * camel-mime-message.c (check_8bit): Don't forget to check for the + binary encoding here as well. + +2002-07-11 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (parse_fetch_response): If we + are fetching HEADERs, don't cache the stream - instead just create + a mem-stream and return that. This reduces a significant amount of + overhead due to disk i/o. + + * camel-multipart-encrypted.c (camel_multipart_encrypted_decrypt): + Don't forget to set an appropriate exception before returning + NULL. + +2002-07-10 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (get_message_cb): Make sure message is + non-NULL before setting the source on it. + + * camel-gpg-context.c: Renamed stdin to stdin_fd, stdout to + stdout_fd, and stderr to stderr_fd in struct _GpgCtx since + Solaris' stdin/stdout/etderr variables seem to be macros and are + thus breaking the compilation. + +2002-07-04 Jeffrey Stedfast <fejj@ximian.com> + + * providers/nntp/camel-nntp-provider.c: Set the IS_SOURCE provider + flag. + + * providers/pop3/camel-pop3-store.c: Change all exceptions to + report which POP server failed (and tried to make a few of the + exceptions a bit more clear). + +2002-07-03 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (vee_sync): If we get an exception from the + child sync, update the exception string so we know where it really + was. + + * camel-vee-store.c (change_folder): Util to emit created/deleted + events. + (vee_get_folder): If the folder has path elements, and its parents + dont exist, create dummy no-select nodes. This is for bug #4246. + (vee_delete_folder): Use change_folder() to save code. + + * providers/local/camel-mbox-folder.c (mbox_set_message_flags): + Only set xevchange if we're storing status headers in pine format, + so we dont do a full sync every time any flag changes. + +2002-06-27 Not Zed <NotZed@Ximian.com> + + * camel-object.c (camel_object_hook_event): Take a void object arg. + (camel_object_remove_event): " + (camel_object_unhook_event): " + (camel_object_trigger_event): ", also, execute events in the same + order they were added, i.e. reverse hook-list order. + +2002-06-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_ctx_get_argv): Don't use + --no-auto-key-retrieve, this option has apparently been deprecated + in gpg 1.0.7. + +2002-06-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_ctx_op_step): Loop on our reads while + errno is EINTR or EAGAIN. Also make sure to completely read stdout + and stderr by keeping better state. + (gpg_ctx_parse_status): In the case of a NODATA response from gpg, + try to use the diagnostics that gpg may have written to its + stderr. + (gpg_verify): Check that the gpg process has not exited. + (gpg_ctx_op_wait): Make sure we haven't already exited (as by + gpg_ctx_op_is_exited()) and if we have, retrieve the exit status + from the gpg context. + +2002-06-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.[c,h]: Removed. + + * camel-pgp-mime.c (pgp_mime_part_sign_restore_part): Removed. + (pgp_mime_part_sign_prepare_part): Removed. + (camel_pgp_mime_part_sign): Removed. + (camel_pgp_mime_part_verify): Removed. + (camel_pgp_mime_part_encrypt): Removed. + (camel_pgp_mime_part_decrypt): Removed. + (camel_pgp_mime_is_rfc2015_signed): Documented. + (camel_pgp_mime_is_rfc2015_encrypted): Same. + +2002-06-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-multipart-encrypted.c (camel_multipart_encrypted_encrypt): + Oops, this needs to take a userid argument. + + * camel-gpg-context.c (gpg_clearsign): Removed (never did anything + anyway). + + * camel-pgp-context.c (pgp_clearsign): Removed. + + * camel-cipher-context.c (camel_cipher_clearsign): Removed unused + method. + + * camel-multipart-encrypted.[c,h]: New class implementing the + multipart/encrypted content type. Contains methods for encrypting + and decrypting a multipart/encrypted MIME object. + + * camel-gpg-context.c (gpg_ctx_parse_status): Check for NODATA + too. + +2002-06-25 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-local-provider.c: Remove the #include for + camel-spoold-store.h + +2002-06-26 Not Zed <NotZed@Ximian.com> + + * camel-gpg-context.c: Include <sys/time.h> for struct timeval. + + * providers/local/camel-local-provider.c + (camel_provider_module_init): Removed spoold provider. The spool + provider does it now. + (): Spoold doesn't exist anymore, remove its header. + +2002-06-25 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-folder.c (camel_spool_folder_new): + Support a new xstatus option - folders update/honour the + Status/X-Status headers in addition to X-Evolution. + + * providers/local/camel-local-summary.c + (camel_local_summary_write_headers): If supplied with an + additional status or xstatus arg, write a Status header and/or + X-Status. Also fix the case of properly terminating the headers + if an xev line isn't supplied. + + * providers/local/Makefile.am (libcamellocalinclude_HEADERS,SOURCES): + Removed spoold-store.[ch]. + + * providers/local/camel-local-provider.c + (camel_provider_module_init): For the spoold type, just use the + spool store instead. + + * providers/local/camel-spool-store.h: Added a type field, so the + 1 store can implement different types without having to subclass. + + * providers/local/camel-spool-store.c + (camel_spool_store_get_toplevel_dir): Removed, inherits from local + store now. + (construct): If we're pointing to a file, treat it as mbox mode, + otherwise treat it as 'elm' mode. + (get_folder): Only test for INBOX in mbox mode. + (get_folder_info_elm): + (get_folder_info_mbox): Two alternatives for getting folder info, + depending on the type of folder we're looking at. + (get_folder_info_mbox): Make the url include the protocol. + (scan_dir): " + + * providers/local/camel-spoold-store.c + (camel_spoold_store_get_toplevel_dir): Removed, inherits from + local store now. + + * camel-folder.c (get_message_user_tag): Dont use a + g_return_if_fail for info==NULL. This is not an error. + (set_message_user_tag): And same here. + (set_message_user_flag): Sigh, and here. + (get_message_user_flag): And here. + (set_message_flags): and here ... + (get_message_flags): Dum de dum, de done at last. + + * providers/local/camel-mbox-folder.c (mbox_get_message): Check + for new messages whenever we retrieve one. In the common + no-update case, this is a single stat. + (mbox_get_message): If we need to rescan, then force a full rescan + to make sure it does the right thing. + (mbox_get_message): Cleanup the exception handling a bit, if we do + get an error, propagate any folder changes anyway as well. + (mbox_set_message_user_flag): Argh more of these stupid g_returns + taht shouldn't be. + (mbox_set_message_user_tag): Here too. + (mbox_set_message_flags): If the read flag is being changed, mark + it as an xevchange (i.e. Status line change). + + * providers/local/camel-mbox-summary.c (summary_rebuild): Merged + into summary_update. + (summary_update): Changed to allow it to update existing lists of + messages without clearing out the summary. + (mbox_summary_check): Dont clear the summary, just re-scan. + (message_info_new): Attempt to support the 'Status: RO' elm/pine + thing. + (camel_mbox_summary_encode_status): + (camel_mbox_summary_decode_status): Util functions for + creating/parsing the Status line. + (camel_mbox_summary_sync_mbox): Write out the status line if we're + going to try support it. + (camel_mbox_summary_xstatus): Implement option to control + read/write of (x-)status. + (message_info_new): Do x-status stuff based on run-time option. + (camel_mbox_summary_sync_mbox): " + (mbox_summary_add): If x-status enabled, then always add + status/x-status headers to message. + + * camel-folder-summary.c (summary_assign_uid): If the messageinfo + is already in the summary, AND is the same messageinfo, dont do + anything, return a value to indicate this. + (camel_folder_summary_add): Do nothing if this info already in the + summary, so we can perform updates. + +2002-06-24 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-summary.c + (camel_local_summary_check_force): New method to force the next + summary check to be a full check, set if a mismatch occurs. + + * camel-folder-summary.c (camel_folder_summary_load): If we have + no summary path set, dont do any i/o, rather than abort. + (camel_folder_summary_save): " + (camel_folder_summary_header_load): " + + * providers/local/camel-spool-store.h: Inherit from camel mbox + store, even if we override almost everything. + + * providers/local/camel-local-folder.c + (camel_local_folder_construct): If the base path points to a file, + use that as the folder path as well. + + * providers/local/camel-spool-folder.h: Inherit from + camel-mbox-folder. + + * providers/local/camel-spool-summary.c (spool_summary_sync_full): + Use camel_mbox_summary_sync_mbox to do most of the work. + + * providers/local/camel-spool-summary.[ch]: Make spool-summary + inherit from mbox summary rather than foldersummary. + + * providers/local/camel-mbox-summary.c (mbox_summary_sync): Make + sync_full/quick virtual methods. + (camel_mbox_summary_sync_mbox): The full sync method put into a + simple function that sync's from fd to fd. + (mbox_summary_sync_full): Use summary_sync_mbox to do the real + work. + (mbox_summary_check): Create removed events if the folder gets + cleared. Also, dont clear the summary before a rebuild, try to + merge. + +2002-06-25 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c: #include <sys/time.h> + +2002-06-25 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_hash_str): Return the option as + --digest-algo=<micalg> + (gpg_ctx_parse_status): Decode more status information and keep + track of trust and such. + (gpg_ctx_op_complete): Make sure we aren't waiting for gpg to + write data to stdout (such as encrypted/decrypted data or a + signature). + (gpg_encrypt): Remove the fejj@stampede.org hard-coded value + (which had only meant to be for testing). + +2002-06-24 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_ctx_get_argv): Use --command-fd rather + than --passphrase-fd since what we really want is an interactive + mode (besides, --passphrase-fd requires a passphrase to be sent + before --status-fd will send a NEED_PASSPHRASE status message). + (gpg_ctx_parse_status): When we encounter a BAD_PASSPHRASE, tell + the session to uncache it. + (camel_gpg_context_set_always_trust): Implemented. + +2002-06-23 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_ctx_parse_status): Check for ERRSIG + also. + (gpg_ctx_op_step): Don't try writing a passphrase unless our + operation requires it. + +2002-06-22 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.c (gpg_encrypt): Return -1 on error. + (gpg_decrypt): Same. + (gpg_sign): Again here. + (gpg_ctx_op_step): Only attenmpt to read from the status-fd if we + are not already 'complete'. + + * camel-pgp-mime.c (camel_pgp_mime_part_encrypt): Flush the + filtered stream. + +2002-06-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-gpg-context.[c,h]: New source files implementing the + CamelCipherContext class for gnupg. + + * camel-pgp-context.c (camel_pgp_context_new): Return a + CamelCipherContext. + + * camel-pgp-mime.c (camel_pgp_mime_part_decrypt): Take a + CamelCipherContext argument rather than a CamelPgpContext since we + now have a CamelGpgContext also. + (camel_pgp_mime_part_encrypt): Same. + (camel_pgp_mime_part_verify): Same. + (camel_pgp_mime_part_sign): Same. + +2002-06-20 Jeffrey Stedfast <fejj@ximian.com> + + * camel-digest-folder.c: Updated to support searching as well as + making it use CamelDigestSummary. + + * camel-digest-summary.[c,h]: New class to handle the summary for + CamelDigestFolder. + + * camel-tcp-stream-ssl.c (set_errno): PR_IO_TIMEOUT_ERROR should + map to ETIMEDOUT and not EAGAIN. + (stream_connect): Reset the PR_Poll() timeout back to 2 minutes as + this wasn't the problem afterall. + +2002-06-19 Not Zed <NotZed@Ximian.com> + + * camel-mime-parser.c (folder_scan_drop_step): Drop back to + initial state if we came from eof state. + +2002-06-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (stream_connect): Set the poll timeout to + be PR_INTERVAL_MIN, this one shouldn't need to be 2 minutes (plus + it blocks my connection at home for far too long). + + * providers/imap/camel-imap-folder.c (imap_refresh_info): Make + sure we hold the command_lock before accessing current_folder. + (imap_append_online): Same. + (imap_transfer_online): Same. + + * providers/imap/camel-imap-store.c (delete_folder): We need to + hold the command_lock before we can set the current_folder to + NULL. + (rename_folder): Same. + (get_folder_info_online): We need to make sure we hold the + command_lock in order to use current_folder. + (everywhere): Same. + +2002-06-19 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_connect): Don't + bother trying to authenticate (and thus don't throw up an error + dialog) unless the server is an ESMTP server and supports + authentication. + + * camel-sasl-plain.c: Change the user-friendly name to PLAIN, this + is what it should be. Not "Password" because user's immediately + think that they need authentication when they see "Password" even + if they don't need it at all. + +2002-06-17 Jeffrey Stedfast <fejj@ximian.com> + + * camel-vee-folder.c (camel_vee_folder_add_folder): Update the + freeze state of the new source folder. + (camel_vee_folder_remove_folder): Undo any freeze state that we + have imposed on this source folder. + +2002-06-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-vee-folder.c (vee_freeze): Freeze source folders. + (vee_thaw): Thaw all source folders. Fixes bug #24317. + + * providers/imap/camel-imap-folder.c (imap_sync_online): Unlock + the command_lock after each UID STORE command so that other + (probably more important) threads can send their requests. + + * camel-arg.c: + * camel-disco-diary.c: + * camel-index-control.c: + * camel-mime-part.c: + * camel-pgp-mime.c: + * camel-store.c: + * camel-tcp-stream-ssl.c: + * camel-text-index.c: Fixed compiler warnings. + + * camel-multipart-signed.c: Updated to use ctx->sign_protocol + rather than ctx->protocol. + + * camel-cipher-context.h: Add an ecnryption protocol member. + + * camel-pgp-context.c (camel_pgp_context_init): Set the encryption + protocol. + +2002-06-11 Not Zed <NotZed@Ximian.com> + + * camel-vtrash-folder.c (camel_vtrash_folder_class_init): Our + parent class is camel_vee_folder, not camel_folder, fix setting of + parent folder (unused anyway, but removes a run-time warning). + +2002-06-07 Not Zed <NotZed@Ximian.com> + + * camel-pgp-context.c (camel_pgp_context_init): Duh! The protocol + is application/pgp-signature. TODO: need to have a signed and an + encrypted protocol specified separately. + +2002-06-06 Not Zed <NotZed@Ximian.com> + + * camel-folder-thread.c (thread_summary): Do the work here. + (camel_folder_thread_messages_remove): Implement. Remove some + uid's from the tree. Disalbe from build, for now. + (remove_uid_node_rec): Actually do the work. + (camel_folder_thread_messages_add): Implement. Add some summary + items to the tree. Disable from build though. + (camel_folder_thread_messages_apply): Make a thread tree built + using camel_folder_thread_new() map to a new set of uids, + preserving some order. Meant primarily to manage deleted + added + uids in a user-friendly manner. + +2002-06-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-multipart-signed.c (camel_multipart_signed_verify): Use + CAMEL_EXCEPTION_SYSTEM rather than '1' for clarity. + +2002-06-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (stream_connect): Up the timeout on the + connect code to 2 minutes. + +2002-06-05 Dan Winship <danw@ximian.com> + + * camel-mime-utils.c (header_decode_mailbox): Parse + "From: Dan Winship <danw>" (with no domain) in the way the sender + meant it, even though it's completely wrong. + +2002-06-04 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-provider.c: Remove the + CONF_DEFAULT_PATH entry, as this is handled by the url config + stuff. This made it basically impossible to configure any local + folder from the gui. + + * providers/local/camel-local-folder.c (local_refresh_info): Force + a refresh. Should work for all local folders to force them to + refresh. + + * providers/local/camel-maildir-folder.c (maildir_refresh_info): + Removed, moved into camel-local-folder. + + * providers/local/camel-mh-summary.c (mh_summary_next_uid_string): + Once we assign or get a uid, tell the summary of this, so the next + uid we get will be higher than any previously. + + * camel-object.c (camel_object_ref, camel_object_unref): I got + sick of casting, these now take void * like they should, and + perform their own run-time type checking. + + * providers/local/camel-mh-store.c (recursive_scan): Changed to + use stat, not lstat (*shrug* maybe someone wants to softlink their + maildir tree?). + (inode_hash): + (inode_equal): + (inode_free): Copied from camel-maildir store (should put into + camel-local-store or utils?). + (recursive_scan): Changed to check for re-visiting inodes. Also, + it builds the tree itself, rather than using folder_info_build. + (add_folder): Changed to folder_info_new. + (recursive_scan): Properly honour the recursive flag. Also, + lookup unread count from folder. + (folder_info_new): Init unread message count to -1, since we dont + know yet. + (folder_info_new): Take the name as an argument, and perform the + merging here. + (folders_update): Util func to add/remove folders from .folders + file. I'm assuming its sorted. + (get_folder): Add the folder to .folders if we created a new one, + and if it exists. + (delete_folder): Remove from .folders, etc. + (folders_scan): If we have a .folders file, read and use that + instead. + (recursive_scan): Handle scanning from a particular directory + properly. + (rename_folder): Implement so we can track any changes to the + .folders file if its turned on. + + ** Applied patch below from Greg Hudson. + +2002-05-10 Greg Hudson <ghudson@mit.edu> + + * camel-mh-store.c (get_inbox, get_folder_info, recursive_scan, + add_folder): Implement support for MH stores. + + * camel-mh-summary.c (mh_summary_check, sort_uid_cmp): Sort MH + messages by message number (uid), like we sort maildir messages by + date. + + * camel-local-provider.c (mh_provider): Turn on source and store + flags. + +2002-06-03 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (camel_vee_folder_add_folder): + (folder_changed_change): + (folder_changed_remove_uid): + (folder_changed_add_uid): + (vee_folder_build_folder): Check that any unmatched operation is + not concerning any vfolder. Other vfolders should never be part of any + unmatched handling. For #24615, and others probably. + +2002-06-02 Not Zed <NotZed@Ximian.com> + + * camel-sasl.c (camel_sasl_new): + (camel_sasl_finalize): setup/free the mech string. + + * camel-sasl.h: Added 'mech' mechanism string. + +2002-06-01 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-folder.c (imap_getv): Implement. Only + the object_description arg. + (camel_imap_folder_get_type): Init parent_class holder. + + * providers/local/camel-local-folder.c (local_getv): Implement, + object_description arg. + + * camel-folder.c (folder_getv): Implement, add a bunch of args you + can get -> camel_folder_get_unread_count etc will be going RSN i + hope. + (camel_folder_finalize): Free cached description string. + + * camel-object.c (cobject_getv): Implement + CAMEL_OBJECT_ARG_DESCRIPTION, just return the classname of the + object. + (camel_object_getv): + (camel_object_get): + (camel_object_setv): + (camel_object_set): Take object = void *, to simplify usage. + (camel_object_setv): Removed unecessary locals. + (camel_object_getv): Same. + (camel_object_free): New method, free an arg, upto implementations + whether args are static/const or not. + (cobject_free): Implement a dummy do nothing free. + +2002-05-31 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (camel_vee_folder_get_location): new function + to get the real location (folder) (and uid) of a vfolder object. + Using the folderinfo, since we already have it, maybe it should + use the uid. + +2002-05-31 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (get_content): When the part + is a multipart/signed, make sure to free the part_spec before + returning (the other types already did this properly). + + * providers/imap/camel-imap-message-cache.c + (camel_imap_message_cache_get): Free the path buffer when we're + done with it. + + * providers/imap/camel-imap-folder.c (imap_update_summary): Free + the final tagged response buffer. + + * providers/imap/camel-imap-command.c (imap_read_untagged): If we + fail to read a literal, free the temporary string buffer. + + * providers/imap/camel-imap-folder.c (imap_rescan): Revert my fix + from the other day since camel_imap_command_response() doesn't + guarentee that resp will be set to NULL on error. + + * camel-data-cache.c (camel_data_cache_get): If we fail to be able + to create a stream to insert into the cache, then free the 'real' + path. + +2002-05-30 Not Zed <NotZed@Ximian.com> + + * camel-cipher-context.h: Added a protocol field for users to use. + + * camel-stream-filter.c (do_read): Sigh, the pre-size is READ_PAD + not READ_SIZE. Big difference. + (READ_PAD): Bumped upto 128 from 64, so we can fit a typical line + in full. + + * providers/imap/camel-imap-folder.c (get_content): Changed to + load multipart/signed as an opaque block into the right kind of + object. + + * camel-multipart.h (struct _CamelMultipart): Removed the boundary + field. It wans't actually used anywhere. + + * camel-seekable-substream.c + (camel_seekable_substream_new_with_seekable_stream_and_bounds): + Shortened this stupidly long name to just :new(), its the only way + its ever used. Fixed all callers. + + * camel-multipart-signed.[ch]: new wrapper for multipart/signed + types. We need to treat the entire content as a blob of data for + transport purposes. This also cleans up a lot of the sign/verify + handling. + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Just call + camel_multipart_construct_from_parser for multipart parts, also + use a multipart_signed for multipart/signed types. + + * camel-multipart.c (camel_multipart_construct_from_parser): New + virtual function for multiparts to buld themselves. + (construct_from_parser): Implement for normal multiparts. + (toplevel): Got rid of a warning, it'll never be an abstract + class. + + * camel-pgp-context.c (pgp_hash_to_id): + (pgp_id_to_hash): Implement. + (camel_pgp_context_init): Init the pgp protocol specifier. + + * camel-cipher-context.c (camel_cipher_id_to_hash): + (camel_cipher_hash_to_id): Util virtual methods to handle the + cipher id string. + + * camel-mime-filter-canon.[ch]: A new filter, end/start of line + canonicalisation filter. Can escape "From " and strip trailing + whitespace, and canonicalise the end of line to crlf or to lf. + +2002-05-29 Not Zed <NotZed@Ximian.com> + + * camel-multipart.h (struct _CamelMultipart): Removed the + 'parent', nothing used it, anywhere. Cleaned up some formatting + slightly. + +2002-05-30 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (camel_imap_store_readline): + On error, don't leak the GByteArray buffer. + + * providers/imap/camel-imap-folder.c (imap_rescan): Free the + response before checking for errors. I'm not sure this'll actually + fix the memory leak here, but it might? Certainly can't hurt. + + * camel-block-file.c (camel_block_file_finalise): Destroy the + blocks hash table. + +2002-05-29 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (connect_to_server): Only free + the LOGOUT response if it is non-NULL. + +2002-05-28 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-maildir-folder.c (maildir_refresh_info): + Implement. Run a summary check to update for any newly arrived + messages. + + * providers/local/camel-maildir-store.c (scan_dir): If we have a + folder, execute a refresh_info on it, to suck in any new stuff. + +2002-05-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_log): Use the + CamelMessageInfo rather than the CamelMimeMessage because the + message may not have been loaded (thus NULL). + +2002-05-27 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (connect_to_server): On + connection failure, unref the tcp stream. + + * providers/pop3/camel-pop3-store.c (connect_to_server): On + connection failure, unref the tcp stream. + + * providers/imap/camel-imap-store.c (connect_to_server): On + connection failure, unref the tcp stream. + + * providers/nntp/camel-nntp-store.c (nntp_store_query_auth_types): + Our parent class is no longer CamelRemoteStore. + (nntp_store_init): Same. + (camel_nntp_store_get_type): Here too. + (nntp_connect): Rewritten to try to connect via SSL. Also remove + code using CamelRemoteStore. + (camel_nntp_command): Don't call camel_remote_store_connected(). + +2002-05-24 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (content_info_get_part_spec): + Helps if we allocate enough space here. Also, start smoking the + same purple flavoured IMAP crack when counting parts (parts don't + count if their parent part is a message/* part with a parent + part). Fixes bug #25260. + +2002-05-24 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-command.c (imap_read_untagged): Use + the new readline function. + + * providers/imap/camel-imap-store.c (connect_to_server): Use the + new camel_imap_store_readline() function which doesn't suck quite + as bad as the original camel_remote_store_recv_line() function. + (camel_imap_store_readline): New function to replace + camel_remote_store_recv_line(). This function is at least safe + with embedded nul chars. Not that any of our callers use it + *sigh*. + +2002-05-24 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (connect_to_server): Added + some NULL protection fixes. + +2002-05-22 Jeffrey Stedfast <fejj@ximian.com> + + * camel-remote-store.c: Removed from the build. Glory glory + hallelujah. + + * camel-disco-store.c: Updated to inherit from + CamelStore rather than CamelRemoteStore. + + * providers/imap/camel-imap-command.c (imap_command_start): Don't + use the camel-remote-store shit to send a string. Just use + camel_stream_printf for chrissakes. + + * providers/imap/camel-imap-store.c: Updated to not depend on + CamelRemoteStore and to handle STARTTLS. + (imap_disconnect_online): Unref the streams. + (imap_keepalive): Removed. + (camel_imap_store_connected): New function to replace + camel_remote_store_connected(). + (camel_imap_store_finalize): Unref the streams. + (camel_imap_store_recv_line): New function to replace + camel_remote_store_recv_line(). + (imap_get_capability): Renamed from connect_to_server + (connect_to_server): New function to try and connect to the + server. + (connect_to_server_wrapper): New wrapper function around + connect_to_server that takes the ssl modes into consideration. + (query_auth_types): Don't bother calling our parent's + implementation of query_auth_types() since CamelDiscoStore doesn't + have any anyway. + (imap_get_name): New method to implement CamelService::get_name + +2002-05-18 Not Zed <NotZed@Ximian.com> + + * camel-search-private.c (camel_utf8_getc): If we get an invalid + start char, just ignore it and goto the next character. + +2002-05-16 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (get_folder_offline): Don't + call some retarded function to simply set an exception. + + * camel-filter-search.c (get_label): New e-sexp callback function + to get a user_tag label value. + +2002-05-15 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-utils.c + (imap_parse_namespace_response): New function to parse a NAMESPACE + response properly. + (imap_namespaces_destroy): New function to destroy the returned + structure from the above function. + +2002-05-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-service.c (service_setv): Only reconnect if we are already + connected, if we are in a disconnected state then no need to + reconnect. + + * providers/imap/camel-imap-folder.c (get_content): If the + part_spec is an empty string for a leaft part, use "1" since we + don't actually want to get the raw message headers too. + +2002-05-15 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c (refresh_folder_info): removed. + (imap_store_refresh_folders): Copy the folders first, then refresh + them, outside of the cache_lock, which could cause deadlocks + because of a workaround for crappo exchange. + (imap_disconnect_online): Dont pass an exception to LOGOUT + command. The required response 'BYE' always sets an exception + when we call LOGOUT. This also interfered with a lot of other + processing causing partial failures and messed up offline/online + state. + + * camel-disco-folder.c (disco_prepare_for_offline): Do progress + reporting. + +2002-05-14 Jeffrey Stedfast <fejj@ximian.com> + + Fixes bug #24136. + + * providers/imap/camel-imap-folder.c (content_info_get_part_spec): + New function to take a CamelMessageContentInfo and generate a + part-specification string. + (get_content): Stop passing around part_spec strings and use + content_info_get_part_spec instead. + + * camel-folder-summary.c (camel_content_info_dump): Made this into + a public debugging function. + + * providers/imap/camel-imap-utils.c (imap_parse_body): Make sure + to set the parent of any message/rfc822 subparts. + +2002-05-13 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_get_message): Previous + fix reverted. + +2002-05-13 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (camel_imap_store_class_init): + Overload the setv/getv CamelObject virtual methods. + (imap_setv): Implemented. + (imap_getv): Implemented. + +2002-05-13 Dan Winship <danw@ximian.com> + + * camel-folder.c (camel_folder_append_message): Add a "char + **appended_uid" argument, for the caller to optionally pass in a + variable to receive the UID of the appended message (if the + provider knows it). + (camel_folder_transfer_messages_to): Likewise, add "GPtrArray + **transferred_uids" + (transfer_messages_to): Update default implementation to handle + transferred_uids. + + * camel-disco-folder.c (disco_append_message, + disco_transfer_messages_to): Update for API changes. + + * camel-disco-diary.c (camel_disco_diary_replay): Update the + diary's temporary uid->real uid map when replaying appends and + transfers. + + * providers/imap/camel-imap-folder.c (imap_append_offline, + imap_append_online, imap_transfer_offline): Pass back the new + UIDs, when requested and available. + (imap_append_resyncing): Pass back the new UIDs when requested and + available. Remove the diary uidmap managing code since + CamelDiscoDiary can handle that itself now. + (imap_transfer_online, imap_transfer_resyncing): Update for new + APIs, but don't actually pass back the new UIDs yet. (It's tricky + since the COPYUID response may not be in the same order as the + input uids.) + + * providers/local/camel-maildir-folder.c (maildir_append_message): + Pass back the new UID if requested. + + * providers/local/camel-mbox-folder.c (mbox_append_message): + Likewise. + + * providers/local/camel-mh-folder.c (mh_append_message): Likewise. + + * providers/local/camel-spool-folder.c (spool_append_message): + Likewise. + + * camel-digest-folder.c (digest_append_message, + digest_transfer_messages_to): Update for API changes. + + * camel-filter-driver.c (camel_filter_driver_filter_message, + do_copy, do_move): Update for API changes. + + * camel-vee-folder.c (vee_append_message, + vee_transfer_messages_to): Likewise. + + * camel-vtrash-folder.c (vtrash_append_message, + vtrash_transfer_messages_to): Likewise. + +2002-05-13 Not Zed <NotZed@Ximian.com> + + * camel-folder-thread.c + (camel_folder_thread_messages_new_summary): + (camel_folder_thread_messages_new): Since the fix for #3357 uses + 'order=0' to indicate tree structure nodes, make sure we dont + actually set order=0 for valid messages, otherwise we silently + lose duplicates of the first message (i==0). Fixes #19920. + +2002-05-10 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_get_message): Fetch the + BODYSTRUCTURE rather than BODY since BODY seems to be lacking some + of the data we need. This fixes bug #24136. + + * camel-transport.c (camel_transport_get_type): Might help if we + called camel_transport_class_init. + +2002-05-10 Dan Winship <danw@ximian.com> + + * camel-folder.c (camel_folder_transfer_messages_to): Replace + copy_messages_to and move_messages_to with a single function that + just takes a "delete_originals" flag. Also, use the vtrash + implementation if *either* folder is a vtrash. + (transfer_messages_to): Make this use camel_operation_progress + (previously move_messages_to did but copy_messages_to didn't), and + freeze/thaw the folder(s) if doing multiple messages. + + * camel-vtrash-folder.c (vtrash_transfer_messages_to): Update for + move/copy merge. Move the "move messages into vtrash" code here + from mail-ops.c. Now all of the vtrash move/copy special casing is + in camel instead of half of it being here and half in mail/. (This + should also make it so that "Move to Trash" will work in filter + rules.) + + * camel-vee-folder.c (vee_transfer_messages_to): Make this just + return an exception, since it will only be called when trying to + move/copy messages from one vfolder to another. + (vee_append_message): Add this too so we get a nicer error message + than the default "unimplemented" one in camel-folder.c. + + * camel-digest-folder.c: Replace copy_messages_to and + move_messages_to with transfer_messages_to. + + * camel-disco-folder.c: Likewise + + * camel-disco-diary.c (camel_disco_diary_log, + camel_disco_diary_replay): replace MOVE/COPY with TRANSFER. + + * providers/imap/camel-imap-folder.c (imap_transfer_offline, + imap_transfer_online, imap_transfer_resyncing): Update for + changes. (This ends up being a bit more complicated than it was + before for now, but later disconnected operation changes should + resimplify it.) + + * camel-filter-driver.c (camel_filter_driver_filter_message, + do_copy, do_move): Use transfer_messages_to instead of copy. + +2002-05-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-search.c (shell_exec): New filter function to pipe + a message to another program. + (run_command): Fixed some bugs to make this work. + +2002-05-09 Not Zed <NotZed@Ximian.com> + + * camel-service.c (camel_service_disconnect): Instead of testing + for SERVICE_CONNECTED, we need to also handle SERVICE_CONNECTING + too, as it will often have setup some details before it failed. + Make it !DISCONNECTED (and !DISCONNECTING for recursive calls, + which happen). Fixes #23782, and maybe also #21604 and many other + random crashes. + +2002-05-08 Jeffrey Stedfast <fejj@ximian.com> + + * camel-digest-store.c (digest_setv): Implemented. + (digest_getv): Implemented. + + * camel-disco-store.c (disco_setv): Implemented. + (disco_getv): Implemented. + + * camel-remote-store.c (remote_store_setv): Implemented. + (remote_store_getv): Implemented. + + * camel-transport.c (camel_transport_class_init): Implemented. + (transport_setv): Implemented. + (transport_getv): Implemented. + + * camel-store.c (store_setv): Implemented. + (store_getv): Implemented. + + * camel-service.c (service_setv): Implemented. + (service_getv): Implemented. + + * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): + camel_pop3_engine_iterate doesn't return the state, it returns -1 + on fail, 0 when finished processing request or >0 if more ops are + in the queue, so don't check status against CAMEL_POP3_STATE_OK, + instead check pcp->state against that. + +2002-05-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-object.h: s/class/klass for arguments so that c++ + developers don't complain later. + +2002-05-07 Dan Winship <danw@ximian.com> + + * camel-object.c (camel_object_class_cast): Fix a crash in a + g_warning. + +2002-05-07 Not Zed <NotZed@Ximian.com> + + * camel-remote-store.c (remote_send_string): Check for LOGIN xxxx + as well if debug is on, so we dont print passwords to evolution + logs. + + * providers/imap/camel-imap-utils.c (imap_is_atom_char): This was + really broken. 1. isprint() is locale dependent, and 2. it looked + up an 8 bit value in a 7 bit table without truncating it. I've + removed the isprint() stuff and just put it directly into the + special table, which i've expanded to the right size too. + + * providers/imap/*: Applied patch from Preston Elder + <prez@magick.tm> to make camel only use literals if it needs to + for simple strings. Changed slightly to use imap_is_atom() and + more consistent formatting. + * providers/imap/camel-imap-utils.c (imap_is_atom): Changed from + imap_needs_quoting(). + + ** Merged in camel-object2 branch. Simpler camelobject + implementation + object args interface. + + * camel.c (camel_init): Call camel_object_get_type() to make sure + camel_object_type is initialised. + + * camel-object.h (CAMEL_OBJECT_TYPE): Changed to return global + camel_object_type pointer, not call camel_object_get_type. + +2002-05-06 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): If + the pop3 command status is -1, then we probably have a TCP error + (?) so set a SYSTEM exception so our caller can distinguish + between a "bad password" and a "tcp error". + (pop3_connect): Only uncache the password on "bad password" + errors. + + * camel-pgp-mime.c (pgp_mime_part_sign_prepare_part): Use + CamelMimeFilterBestenc to get a more appropriate encoding rather + than just blindling assigning QP. + + * providers/imap/camel-imap-folder.c (do_append): Call + camel_mime_message_encode_8bit_parts() which fixes bug #10885. + + * camel-tcp-stream-raw.c (socket_connect): Don't bother with + counting down the timeout. + +2002-05-02 Jeffrey Stedfast <fejj@ximian.com> + + * camel-stream-fs.c (stream_read): Same fix as the tcp stream. + (stream_write): Again here. Just like tcp stream's stream_write(), + also make sure to save errno before calling fcntl to restore the + fd flags. + + * camel-tcp-stream-raw.c (stream_read): Handle EINTR errors for + select(). + (stream_write): Same and also preserve errno when setting the fd + flags back. If w == -1, return -1. + +2002-05-02 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_decode_mailbox): Fixed the fix for + stupidly-broken-mailer bug #5 to work when multiple unescaped + characters were in a row. Fixes bug #24140. + + * camel-tcp-stream-raw.c (socket_connect): Check select() for + EINTR errors. + + * camel-pgp-context.c (crypto_exec_with_passwd): Change the order + of some code so that we check if the select() failed before we + check for user-cancellation. + + * camel-service.c (camel_gethostbyname): Check for EINTR when + select()ing. + (camel_gethostbyaddr): Same. + +2002-04-29 Jeffrey Stedfast <fejj@ximian.com> + + * camel-provider.c (camel_provider_auto_detect): Now takes a + CamelURL argument rather than a GHashTable *settings argument. + +2002-04-29 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-store.c (get_folder_info): We want + to set unread_count to get_unread_message_count, not + get_message_count(). Might fix #17174. Also removed FIXME: as it + was fixed. + +2002-04-26 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/Makefile.am: Don't link to libibex.a anymore. + + * providers/nntp/Makefile.am: Same. + + * providers/imap/Makefile.am: And again here. + + * camel-store-summary.h: No longer want to #include + <libibex/ibex.h> + + * camel-provider.c (camel_provider_auto_detect): New function to + auto-detect configuration settings. + +2002-04-26 Not Zed <NotZed@Ximian.com> + + * camel-block-file.c (block_file_validate_root): Remove the + excessive \n's, after printfs. + + * camel-text-index.c (text_index_compress_nosync): @!#$@#$!@$#!. + Since the rename op was fixed, this broke compression's rename, + resulting in the index 'vanishing' after every compress + (i.e. after every reindex). Fix this code to account for the + fixed rename operation. + +2002-04-25 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_rcpt): Don't put a + space between the "RCPT TO:" and the "<recipient>" strings - + rfc0821 was not clear on this but it seems rfc2821 defines a + grammar excluding that SP. + (smtp_mail): Same. + +2002-04-24 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-local-provider.c + (camel_provider_module_init): Configure the default paths for mh, + mbox, maildir, spools, etc. + + * camel-provider.h: Add a CAMEL_PROVIDER_CONF_LABEL enum and + define some default CamelProviderConfEntry macros. + +2002-04-19 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-folder.c (pop3_refresh_info): Free the + LIST pop3 command. + + * camel-data-cache.c (data_cache_finalise): Free the cdc->path. + + * camel-multipart.c (write_to_stream): Don't g_return_val_if_fail + here if the boundary is an empty string. See bug #23676 for + details. The way I see it, we have 2 options: 1) leave this fix + the way it is, thus allowing multipart boundaries to be + empty-strings; or 2) make camel_multipart_get_boundary() change + the boundary to something legal if the boundary is an + empty-string. Since the parser should be able to handle an + empty-string boundary *and* more importantly because we want to + keep the same boundaries as the original raw message so as to be + able to verify multipart/signed parts, I vote for solution #1. + +2002-04-19 Not Zed <NotZed@Ximian.com> + + * devel-docs/camel-index.txt: Start of a white-paperish document + describing camel-index and older libibex. + +2002-04-18 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-store.c (rename_folder): If we get a + failure, make sure we set an exception. + + * camel-text-index.c (camel_text_index_rename): If the file + doesn't exist, just assume it never did, dont return failure. + (text_index_rename): Add '.index' to the path name we're using, + since we dont get it passed in. + + * camel-folder-search.c (check_header): When doing a contains + match, split the words and perform an and on it. + (match_words_messages): If we have an index, but were forced to do + a full search, first lookup a subset of messages using + the index and a simplified word set. Only do a manual search of + this subset. + +2002-04-17 Not Zed <NotZed@Ximian.com> + + * camel-folder-search.c (match_message_index): Changed to take a + utf8 string not a regex pattern. + (match_words_index): Matches against a camel_search_words list. + (match_words_1message): Matches a single message against a + camel_search_words list. + (match_words_message): Same, but gets the message from the folder + for you. + (match_words_messages): Matches a list of messages against a words + list. + (search_body_contains): Rewritten to handle multiple word + searches. For #23371. + + * providers/imap/camel-imap-search.c (sync_match): Split words + when searching, to support multiple search words. Also, try + searching specifying charset of utf8 if we can, if that fails, + fall back to not specifying charset. TODO: It should translate + the strings into the locale default charset? + + * providers/imap/camel-imap-store.c (connect_to_server): Added new + cap - utf8_search, if set, we tell the server we're searching + using utf8, otherwise we dont (incorrectly, since we always use + utf8 to search). + + * camel-search-private.c (camel_ustrstrcase): Make this class public. + (camel_search_words_split): Split a word into multiple words based + on whitespace, and keep track of whether the word is simple + (indexable directly), or not. + (camel_search_words_free): Free 'em. + +2002-04-17 Jeffrey Stedfast <fejj@ximian.com> + + * camel-vee-folder.c (vee_search_by_expression): If the vee-folder + is the unmatched, we don't have our own expression so we cannot + merge them. Instead, just use the expression passed in. This fixes + a Null-Pointer-Read crash on Solaris systems at least. + +2002-04-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_folder): Get + rid of an unused variable. + + * providers/smtp/camel-smtp-transport.c (smtp_helo): Use + camel_gethostbyaddr since gethostbyaddr is not reentrant. + + * camel-http-stream.c (http_connect): Updated after the rename of + camel_get_host_byname. + + * camel-service.c (camel_gethostbyname): Renamed. + (camel_gethostbyaddr): New cancellable/reentrant version of + gethostbyaddr. + +2002-04-14 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-spoold-store.c: Added #include + <sys/types.h> for dirent.h which needs it on MacOS X. + + * providers/local/camel-maildir-store.c: Same. + + * providers/nntp/camel-nntp-store.c: Same. + + * providers/imap/camel-imap-message-cache.c: Same. + + * camel-provider.c: Same. + + * camel-data-cache.c: Same. + +2002-04-12 Jeffrey Stedfast <fejj@ximian.com> + + * broken-date-parser.c (datetok): Treat commas as token + delimeters. + (WEEKDAY_CHARS): Use full weekday names in case the broken mailer + used the full names. + (MONTH_CHARS): Same as above but for months. + +2002-04-15 Not Zed <NotZed@Ximian.com> + + * *.c: Fix callers for api changes to camel-object, mainly + declare_event->add_event, and classfuncs->klass, and a couple + of missing #include <config.h>'s + + * camel-arg.[ch], Makefile.am: New support code for + camel_object_get/set arg. + + * *.h: Fixed all uses of get_type to return a CamelType rather + than a guint (now a pointer). + + * camel-object.[ch]: Major cleanup of object implementation. Also + added a get/set interface, and some debugging options. + +2002-04-11 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-summary.c (spool_summary_sync_full): + If the last message(s) were deleted, and we had any messages + output, account for the lost \n of the following From line by + adding an extra \n. fix for #8214. + +2002-04-10 Not Zed <NotZed@Ximian.com> + + * camel-mime-part-utils.c (convert_buffer): If we get a 0 length + input, return a 0 lenght output as valid - fixes bugs with some + iconv impl and its simpler anyway. + +2002-04-11 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c: Set the UID_SET_LIMIT value + to 4096. I ran into an issue tonight where apparently the IMAP + server changed the UIDVALIDITY and so Evo needed to re-fetch all + headers and it was trying to send a uid set of some 25k (yes, I + have a very large INBOX). Anyways, it was set to unlimited + before. Courier IMAPd can safely handle up to ~16k per token, but + UW IMAPd can only handle 8k per command-line, so I set it to 4k + just to be safe. + +2002-04-10 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part-utils.c (convert_buffer): Fixed a bug that would + miscalculate how much data to copy into the GByteArray (negative + value) thus causing a segfault. Also optimized it while I was at + it. + +2002-04-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (camel_store_init): Make the folder_lock + recursive. See bug #22363 for details. Basically, + get_folder_info() is requesting a diary folder which in turn + connects which requests then calls get_folder() but deadlocks + because get_folder_info already holds the lock. + + * camel-mime-message.c (camel_mime_message_set_date): Don't adjust + the timezone offset if we used tm.tm_gmtoff because it is already + adjusted. + +2002-04-09 Not Zed <NotZed@Ximian.com> + + * camel-mime-part.c (construct_from_parser): If we get multiple + Content-Type header values, change subsequent headers to + X-Invalid-Content-Type so it doesn't wreck processing. This fixes + the reported case in #18929, but i dont know if it fixes the + original posters problems. + +2002-04-08 Not Zed <NotZed@Ximian.com> + + * camel-vtrash-folder.c (vtrash_move_messages_to): If we find + we're moving from the vtrash to another folder, we need to convert + the uid from a vfolder uid to the source uid (+8). Fix for + #20886. Also changed to batch multiple moves to different folders + so they are done as efficiently as possible rather than one at a + time. + + * camel-mime-utils.c (base64_decode_step): If we only get passed + '=', we back track only if we actually output any data. Fix for + #21716. + (quoted_decode): Pass out size_t instead of int, and use 0 instead + of -1 for error since its not signed. This will fix similar bug + to above in different circumstances since the result is taken as + unsigned. This is only an internal func. + (quoted_encode): Return size_t just for consistency. + + * camel-block-file.c (block_file_validate_root): Comment out the + debug and move it into a warning when the validation fails. + +2002-04-08 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (uuencode_close): Don't count our filler when + encoding our line-length octet. + +2002-04-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel-http-stream.c (http_get_headers): Don't get the statuscode + here anymore. + (http_method_invoke): Use a User-Agent header and do basic proxy + authentication. + (stream_read): Handle redirects. + (camel_http_stream_set_user_agent): New function to allow client + to set the User-Agent string. + (camel_http_stream_set_proxy): New function for setting the proxy + server. + (camel_http_stream_set_proxy_authrealm): New function for setting + the proxy auth realm. + (camel_http_stream_set_proxy_authpass): New function for setting + the proxy auth password. + +2002-04-04 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-summary.c (message_info_new): Simplified since we + can now decode in-reply-to without getting extra cruft. Get rid of + the FIXME about having to check scan->id because of the + possibility of it being NULL, this can no longer happen. + + * camel-mime-utils.c (header_references_inreplyto_decode): New + function to decode in-reply-to headers. Only grabs the first thing + that looks like a message-id and then returns. + (header_references_decode): Loop calling + header_references_decode_single (a new internal function). + +2002-04-04 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-search.c (imap_body_contains): If + (body-contains) is not passed any arguments, return empty/false. + Fixes a crash exposed by #15001. + + * camel-remote-store.c (remote_connect): Reset the keepalive + timeout to 10 minutes rather than the 30 seconds I was using for + testing. + +2002-04-03 Dan Winship <danw@ximian.com> + + * camel-provider.h (CamelProvider): make service_cache be an array + of CAMEL_NUM_PROVIDER_TYPES elements so you can have a single + provider offer both stores and transports. (Eg, Exchange, NNTP) + + * providers/imap/camel-imap-provider.c: Don't initialize + service_cache here. (The session code can do it itself since the + url_hash and url_equal functions are stored as part of the + provider.) + + * providers/nntp/camel-nntp-provider.c: Likewise. + + * providers/local/camel-local-provider.c: Likewise. + + * providers/pop3/camel-pop3-provider.c: Likewise. + + * providers/sendmail/camel-sendmail-provider.c: Likewise. + + * providers/smtp/camel-smtp-provider.c: Likewise. + + * camel-session.c (register_provider): Initialize the provider's + service cache(s) here. + (camel_session_class_init): Don't initialize. + vee_provider.service_cache here. + (camel_session_destroy_provider): Update to destroy multiple + service_caches. + (service_cache_remove, get_service): Tweak these a bit to deal + with multiple service_caches. + +2002-04-02 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (set_errno): Handle a ton more nspr i/o + errno's. + (stream_connect): Act as if we are doing a non-blocking + connect. This is to try and work around bug #15120 where users get + an EINPROGRESS error. Maybe importing a PRFileDesc into SSL mode + automagically makes it non-blocking? I dunno. + +2002-04-01 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-summary.c (message_info_new): Updated the + construction of the references to match JWZ's updated algorithm + initialization (ie, append any In-Reply-To reference onto any + References header and never take more than a single message-id + from the In-Reply-To header since anything after the first will + probably just be email addresses). Fixes bug #1336. + +2002-04-03 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-folder.c + (camel_local_folder_construct): Turn indexing back on, fingers + crossed ... + + * camel-block-file.c (sync_nolock): #!@$@$#@~#$ + DF@#$!Q@$#!@$#!#%. Well it helps if we're iterating a list to + iterate the node pointer ... + + * camel-text-index.c (text_index_sync): Sync the key tables + explcitly. + (text_index_sync): Debug out frag info. + (camel_text_index_dump): Added a (rather large, but optional) raw + dumping mode for debugging purposes. + + * camel-partition-table.c (camel_key_table_finalise): Sync root + block when done. + (camel_key_table_sync): New function, sync key table (root) explicitly. + (camel_partition_table_sync): Method to explicitly sync the + partition table. + +2002-04-02 Not Zed <NotZed@Ximian.com> + + * camel-block-file.c (camel_block_file_free_block): Mark root + block dirty when we change it (this function isn't used yet + anyway). + + * camel-text-index.c (text_index_add_name_to_word): Touch the root + block when we modify the counts. Also, abort processing on any + errors. + (text_index_sync): Fix typo in comments. Sync the block file + inside the lock. + (text_index_compress_nosync): Lock the old index while we're + compressing. + (text_index_compress_nosync): Remove the bogus while() at the end + of the while() loops! Also plug a memleak - records weren't + freed. + (text_index_rename): Lock around rename op. + (text_index_add_name): More typos. + (text_index_sync): Touch root when changing it. + (text_index_add_name): " + (text_index_delete_name): " + (camel_text_index_new): Touch root if we change it. + (text_index_cursor_reset): Make sure we NULL pointers after we + free them (nothing uses this yet). + + * camel-partition-table.c (hash_key): Remove some debug + accidentally left in. + (camel_partition_table_add): When linking in the next block list, + set the right previous pointer. + (camel_key_table_add): Simplify the 'left' calculation (it was + already ok though). + (camel_key_table_next): Initialise returns before processing. + Broaden the lock slightly, and simplify validity calculations. + + * providers/imap/camel-imap-store.c (imap_keepalive): Put back in + the exception setup stuff i disabled for debugging. + + * providers/local/camel-local-folder.c + (camel_local_folder_construct): Temporarily disable indexing. + +2002-03-28 Not Zed <NotZed@Ximian.com> + + * camel-partition-table.c (camel_key_table_lookup): Change range + checking assert to a warning. + + * providers/pop3/camel-pop3-folder.c (pop3_finalize): Make sure we + flush out all outstanding commands before finalising, stops being + finalised while outsanding requests are processed by the store + finalise. + (pop3_get_message): Instead of pre-fetching all messages, just + pre-fetch a maxiumum number at any one time, stops us running out + of cache fd's. + + * providers/nntp/camel-nntp-folder.c (nntp_folder_init/finalise): + Setup priv data + locks, & free. + + * providers/imap/camel-imap-folder.c (imap_rescan): Batch all + message_chagned events into a single folder_changed event + (otherwise updates can be >>> expensive, like >5 hours for 80K + messages changing!). Alternately it could use folder + freeze/unfreeze perhaps. + +2002-03-27 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c (imap_keepalive): Pass an + exception to called code so it behaves properly since it uses the + passed exception to check returns. + +2002-04-01 Dan Winship <danw@ximian.com> + + * providers/imap/Makefile.am (libcamelimap_la_LDFLAGS): Use + -avoid-version instead of -version-info 0:0:0, and specify + -module. (From Max Horn <max@quendi.de>). + + * providers/local/Makefile.am (libcamellocal_la_LDFLAGS): Likewise. + + * providers/nntp/Makefile.am (libcamelnntp_la_LDFLAGS): Likewise. + + * providers/sendmail/Makefile.am (libcamelsendmail_la_LDFLAGS): + Likewise. + + * providers/smtp/Makefile.am (libcamelsmtp_la_LDFLAGS): Likewise. + + * providers/pop3/Makefile.am (libcamelpop3_la_LDFLAGS): Likewise. + Also remove $(KRB4_LDFLAGS) since KPOP is gone. + (INCLUDES): and $(KRB4_CFLAGS) + +2002-03-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (do_copy): We now have to check to make + sure that p->message is non-NULL because we only load the message + when we have to. + (do_move): Same here. + +2002-03-28 Dan Winship <danw@ximian.com> + + * camel-transport.c (camel_transport_send_to): Change the message + arg to a CamelMimeMessage instead of a CamelMedium. Even the NNTP + provider returns CamelMimeMessages, and we're never going to + support anything more exotic than that. Also do a few more + g_return_if_fails here instead of in the providers. + (camel_transport_can_send): No longer needed. + (camel_transport_send): Remove this too. It wasn't being used any + more, and it doesn't behave exactly the same in sendmail and smtp. + + * providers/smtp/camel-smtp-transport.c (smtp_send, + smtp_can_send): Gone. + (smtp_send_to): Update for arg change. + (smtp_data): Make this take a CamelMimeMessage too. + + * providers/sendmail/camel-sendmail-transport.c (sendmail_send, + sendmail_can_send): Gone. + (sendmail_send_to): Update for arg change, and merge in the part + that used to be shared with sendmail_send. + +2002-03-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_folder): + Construct the source_url the right way. The previous way was + generating urls like pop://fejj@ximian.com;keep_on_server/inbox + which is wrong. + +2002-03-26 Not Zed <NotZed@Ximian.com> + + * camel-text-index.c (text_index_normalise): Changed to use just + g_utf8_strdown instead of utf8_normalise, to match the indexing + code. utf8_normalise is just far too expensive (saves approx 25% + total processing). + +2002-03-25 Not Zed <NotZed@Ximian.com> + + * camel-text-index.c (text_index_add_name): When we add a new + name, up all of the cache limits, because we're probably going to + be adding more. + (text_index_sync): Drop the cache limits back down again, we dont + need them when looking words up. + + ** MERGE camel_index branch. + + * camel-text-index.[ch]: Added files i forgot to add (eep nearly + lost all this work!) + + * camel-block-file.c (sync_nolock): Fix an infinite loop in syncing. + +2002-03-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-summary.c (camel_message_info_new_from_header): Use + the date in the received header for the received_date. + +2002-03-22 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-folder.c + (camel_local_folder_construct): Use the right option to remove the + index file and reset the index file on creation. + (camel_local_folder_construct): Remove any existing '.ibex' files + - these are the old format index files. + + * camel-block-file.c (camel_block_file_rename): Lock io lock while + renaming. + (camel_key_file_rename): Lock around rename. + (block_file_validate_root): Implement sync flag checking. + (camel_block_file_touch_block): Turn off the sync flag if we're + touching any non-root block and write it to disk. Shoudl this + fsync()? + (sync_nolock): sync the root block only if we need to. + + * providers/local/camel-local-store.c (rename_folder): Re-enable + index rename code. Not sure how race-free it is though. + (delete_folder): Delete the index file properly. + + * camel-partition-table.c (camel_key_table_lookup): Initialise + output values to 0 before doing anything. + (camel_key_table_add): Do some range-checking on values. + + * camel-text-index.c (text_index_compress): Changed to call sync here. + (text_index_compress_nolock): and not here - stops a recursive + sync call when sync performs a compress also. + (text_index_compress_nolock): Change to _nosync, since the locking + is irrelevent (recursive lock). Fixed callers. + (text_index_add_name_to_word): If we get a failure with key table + ops, fail immediately. + (text_index_compress_nosync): Likewise. + (text_index_write_name): If the nameid is 0, do nothing. + (text_index_add_name): If we can't get a keyid, dont add it to the + partition table. + (camel_text_index_remove): Function to delete an index file. + (text_index_compress_nosync): Clean up temp files when done. + + * camel-folder-search.c (match_messages_index): New function, + split from body_contains, matches a regex against all words in an + index. + (match_message_index): Similar to above but matches against an + individual message. + (search_body_contains): Changed to use above functions for + matching - substring matches should now work on indexed data. + +2002-03-21 Not Zed <NotZed@Ximian.com> + + * camel-index.c (camel_index_words/names): New virtual + methods/stubs to get a cursor of all words and names. + + * camel-text-index.c (text_index_compress_nolock): Split from + text_index_compress, so we can call the compressor while locked + also, removed lock calls. + (text_index_compress): Changed to stub which calls + text_index_compress_nolock. + (camel_text_index_key_cursor_new): New object to iterate through + a key table. + (text_index_words, text_index_names): Implement virtual functions + for iterating through all words or names. + + * camel-block-file.c: Turn off some debug. + +2002-03-20 Not Zed <NotZed@Ximian.com> + + ** New body index implementation. + + * camel-index*: Code for camel index, a new class to replace ibex. + + * camel-block-file.[ch]: block-based and link based + filesystem-in-a-file classes. + + * camel-partition-table.[ch]: An implementation of a partition + table (automatically extending on-disk hash-table using ideal + hash), and a key-table, a key<>name mapping table. Used by + camelindex. + + * providers/local/*, camel-folder-summary.[ch]: Changed to use + camel-index interface rather than ibex. + +2002-03-05 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-maildir-summary.c (maildir_summary_check): + Do progress reporting of operations. + (maildir_summary_sync): Same here. + +2002-03-04 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spoold-store.c (scan_dir): Kill a warning + with a cast. + + * providers/local/camel-*.c: Changed for ibex->camelindex. + + * camel-folder-search.c (camel_folder_search_set_summary): Init + summary_hash to point to 'static' uid strings. + (search_body_contains): Use the static uid memory to return + results rather than the values from the index library. + + * camel-folder-search.[ch]: Changed to use camelindex object. + + * camel-folder-summary.c (summary_build_content_info_message): + Use a stream to index content, also filter html mail first. + (camel_folder_summary_info_new_from_message): Use a stream + filtered to index content. + (main): Removed the test main code. Added headers for open call + (ibex must've had them before). + + * camel-folder-summary.[ch]: Changed from ibex to CamelIndex. + + * camel-mime-filter-index.c (camel_mime_filter_index_finalize): + Unref index. + + * camel-mime-filter-index.[ch]: Changed from ibex to CamelIndex. + +2002-03-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_encode_param): Fix this to work + right. We need to convert the input buffer to the charset we claim + in the encoded param (duh). + +2002-03-18 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c + (connect_to_server_wrapper): Updated to use the same logic as the + POP code. + + * providers/pop3/camel-pop3-store.c (connect_to_server): No longer + takes a stls_supported argument since we no longer need it with + the new logic. + (connect_to_server_wrapper): New logic: First try connecting to + the SSL port (995 by default), if that fails with + SERVICE_UNAVAILABLE, then we attempt to connect (to port 110 by + default) and try to use STARTTLS. + +2002-03-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder.h: + + * camel-private.h: Don't allow any empty structs. If + !ENABLE_THREADS, provide a gpointer dummy member. Fixes bug #6382. + +2002-03-13 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_auth): Added a + work-around for SMTP servers that can't read the RFCs and thus + implement SASL incorrectly. Oh well, that's life in the world of + mail clients I guess. + +2002-03-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel-digest-store.c (camel_digest_store_new): Now takes a url + argument. + + * camel-digest-folder.c (digest_add_multipart): Fixed some memory + corruption and also modified to use CAMEL_IS_MIME_MESSAGE() rather + than comparing content-type strings. + (digest_get_message): Fixed a logic blooper. + + * camel-folder-summary.c (camel_message_info_new_from_header): Set + the date fields of the CamelMessageInfo as well. This may even fix + some filter-related bugs where the user was trying to compare + dates. + +2002-03-11 Jeffrey Stedfast <fejj@ximian.com> + + * camel-digest-store.c: A pretty empty store implementation to be + the parent store of a CamelDigestFolder. + + * camel-digest-folder.c: Updated to reference it's parent store. + +2002-03-11 Jeffrey Stedfast <fejj@ximian.com> + + * camel-digest-folder.c (camel_digest_folder_new): Allow any leaf + part to be a message/rfc822 part. + (digest_get_uids): Recurse the mime structure and add all + message/rfc822 parts and use a uid scheme similar to IMAP's mime + part naming convention. + (digest_get_message): Decode the uid to get the correct mime part. + +2002-03-11 Ettore Perazzoli <ettore@ximian.com> + + * camel-mime-utils.c: Change the order of the mailing list magic + patterns so that the more mailing-list specific ones are on the + top. + +2002-03-11 Jeffrey Stedfast <fejj@ximian.com> + + These fixes should fix bug #21737. + + * providers/smtp/camel-smtp-transport.c + (connect_to_server_wrapper): Same as with the POP code. + + * providers/pop3/camel-pop3-store.c (connect_to_server_wrapper): + Slight restructuring of the if-statements for the USE_SSL_ALWAYS + case so that we can't possibly return TRUE unless we really did + connect successfully. + +2002-03-10 Dan Winship <danw@ximian.com> + + Rename the OpenSSL implementation of things to match the NSS + implementation so that callers don't need to care which one is + being used. + + * camel-tcp-stream-openssl.c: Implement CamelTcpStreamSSL, not + CamelTcpStreamOpenSSL. Rename methods as well. Replace the + camel-tcp-stream-openssl.h include with camel-tcp-stream-ssl.h. + + * camel-tcp-stream-openssl.h: Gone. + + * camel-tcp-stream-ssl.c: Add a note explaining that this + implementation is only used for NSS, and that OpenSSL's + implementation is in another file. (Should probably do some CVS + renaming magic at some point.) + + * camel-http-stream.c (http_connect): Remove OpenSSL refs; the + previously-NSS-specific code works for both now. + + * camel-remote-store.c: Likewise. + + * providers/smtp/camel-smtp-transport.c: Likewise. + + * providers/pop3/camel-pop3-store.c: Likewise. + + * Makefile.am (libcamelinclude_HEADERS): Remove + camel-tcp-stream-openssl.h + +2002-03-10 Dan Winship <danw@ximian.com> + + * camel-tcp-stream.c (camel_tcp_stream_get_socket): Remove this: + it couldn't be generically used, because different subclasses + returned entirely different types of data. + (camel_tcp_stream_get_local_address, + camel_tcp_stream_get_remote_address): Add these to replace what + get_socket was being used for. + (camel_tcp_address_new, camel_tcp_address_free): Utility functions + for get_{local,remote}_address. + + * providers/smtp/camel-smtp-transport.c: Change localaddr to a + CamelTcpAddress *. + (connect_to_server): Call camel_tcp_stream_get_local_address to + get the local IP address. + (smtp_disconnect): free localaddr. + (smtp_helo): Update for localaddr change. + + * camel-tcp-stream-raw.c (stream_get_socket): Remove + (stream_get_local_address, stream_get_remote_address): Implement. + + * camel-tcp-stream-ssl.c (stream_get_socket): Remove + (stream_get_local_address, stream_get_remote_address): Implement. + + * camel-tcp-stream-openssl.c (stream_get_socket): Remove + (stream_get_local_address, stream_get_remote_address): Implement. + +2002-03-08 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-provider.c + (camel_provider_module_init): Don't call + camel_remote_store_get_authtypes since we no longer subclass + camel-remote-store. + + * providers/pop3/camel-pop3-engine.c: Added STARTTLS to the + capabilities to look for. + (camel_pop3_engine_reget_capabilities): New function to re-get + capabilities. + + * providers/pop3/camel-pop3-store.c: Updated to not subclass + CamelRemoteStore. + (connect_to_server): Rewritten to not depend on CamelRemoteStore's + connect implementation. Also added support for STLS (aka + STARTTLS). + +2002-03-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-mime.c (camel_pgp_mime_part_sign): Add support for + hash type RIPEMD160. + + * camel-cipher-context.h: Add RIPEMD160 hash type. + + * camel-pgp-context.c (pgp_sign): Updated to consider hash + function for pgp5 and pgp6. + (pgp_clearsign): Same. + + * camel-tcp-stream-openssl.c (stream_read): Add a timeout on the + select. + (stream_write): Same. + +2002-03-06 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (connect_to_server): Fix + to work with OpenSSL. + + * camel-tcp-stream-openssl.c: compile fixes. + (camel_tcp_stream_openssl_enable_ssl): Check to make sure that the + sockfd != -1, it's not enough to check that it is non-zero. Also + set the sockfd to -1 on fail (open_ssl_connection will close the + sockfd on fail). + +2002-03-06 Dan Winship <danw@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_construct): Make + this compile. + +2002-03-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (save_ssl_cert): Removed. Glory glory + hallelujah! + (ssl_bad_cert): No longer calls ssl_save_cert or + ssl_cert_is_saved. + +2002-03-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-openssl.c (camel_tcp_stream_openssl_new_raw): + Start the ssl stream off in non-ssl mode (useful for STARTTLS). + (camel_tcp_stream_openssl_enable_ssl): New function to toggle an + ssl stream into ssl mode. + (open_ssl_connection): Close the sockfd on fail so our caller + doesn't have to - this also allows us to save the original errno. + (stream_connect): If we want ssl mode, do our ssl stuff. + (camel_tcp_stream_openssl_class_init): Init some SSL stuff here + instead of in open_ssl_connection since these only ever need to be + called once. + (stream_read): Only use SSL_read if we are in ssl mode. + (stream_write): Only use SSL_write if we are in ssl mode. + + * providers/smtp/camel-smtp-transport.c (smtp_helo): Check for the + STARTTLS extension. + (connect_to_server): Try to use STARTTLS whenever possible rather + than the old way of doing things. + (connect_to_server_wrapper): Wrapper around connect_to_server() to + first try STARTTLS and then attempt normal SSL mode if we can't + connect via STARTTLS. + + * camel-tcp-stream-ssl.c (camel_tcp_stream_ssl_enable_ssl): New + function to toggle an ssl stream into ssl mode. + (camel_tcp_stream_ssl_new_raw): Start the ssl stream off in + non-ssl mode (useful for STARTTLS). + (stream_connect): Only connect in SSL mode if required. + +2002-03-01 Jeffrey Stedfast <fejj@ximian.com> + + * camel-vtrash-folder.h: + * camel-vee-store.h: + * camel-vee-folder.h: + * camel-stream-null.h: + * camel-stream-filter.h: + * camel-store-summary.h: + * camel-news-address.h: + * camel-mime-utils.h: + * camel-mime-parser.h: + * camel-mime-filter-save.h: + * camel-mime-filter-linewrap.h: + * camel-mime-filter-index.h: + * camel-mime-filter-html.h: + * camel-mime-filter.h: + * camel-mime-filter-from.h: + * camel-mime-filter-crlf.h: + * camel-mime-filter-chomp.h: + * camel-mime-filter-charset.h: + * camel-mime-filter-bestenc.h: + * camel-mime-filter-basic.h: + * camel-internet-address.h: + * camel-folder-thread.h: + * camel-folder-summary.h: + * camel-folder-search.h: + * camel-filter-driver.h: + * camel-charset-map.h: + * camel-address.h: Add c++ armoring. + + * camel-object.h: s/class/klass + +2002-03-01 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Reverted my + pgp/mime fixes here too. + + * camel-mime-part.c (write_to_stream): Removed my pgp/mime raw + stream hack, this is causing problems such as some messages to not + displaying, view->source not working at all, etc. + +2002-02-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-parser.c: Changed offset variables from int's to + off_t's since the system may support large files. + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Rearrange the + save filter stuff so that we save raw streams for all mime + parts. If the mime part turns out to be a multupart, then don't + bother saving the raw stream, we only need to save the raw stream + for leaf parts. + +2002-02-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-summary.h: Don't #include camel-mime-filter-save.h, + we don't use it. + + * camel-file-utils.c: Fixed a few 'might be used uninitialized' + warnings which were real problems. + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Save the raw mime + stream for any/all signed parts. + + * camel-mime-part.c (camel_mime_part_init): Initialize our raw + stream to NULL. + (camel_mime_part_finalize): Unref our raw stream, if we have one. + (write_to_stream): If we have a raw stream, write that out instead + of re-encoding. + + * camel-mime-filter-save.[c,h]: Rewritten to save to a stream + rather than a file. + +2002-02-28 Not Zed <NotZed@Ximian.com> + + * camel-mime-utils.c (header_fold): Use the FOLD_SIZE as a + recommended folding size, but add a new FOLD_MAX_SIZE (=998, the + smtp max line size) as the hard limit for any output. + +2002-02-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-chomp.c (camel_mime_filter_chomp_new): New + stream filter that chomps excess trailing whitespace from the end + of the stream. This is needed to update the PGP/MIME code to + comply with rfc3156. + + * camel-pgp-mime.c (camel_pgp_mime_part_verify): Don't attach a + from filter, if it ain't from-filtered already, then we'll just be + breaking stuff. To become rfc3156 compliant, add a chomp filter + here. + (camel_pgp_mime_part_sign): Add a chomp filter here too. + +2002-02-27 Not Zed <NotZed@Ximian.com> + + * camel-mime-part.c (init_header_name_table): Changed header + formatted table to contain a pointer to an output function, and + added in-reply-to and references headers. + (write_references): New function to write out references header, + folded properly. It only approximates based on the last >, but it + should be adequate and will also handle invalid headers. + (write_fold): Function to write out headers folded. Since this is + the default it isn't required. + (write_raw): Write out an already formatted header, e.g. most of + the rest. + (write_to_stream): Lookup header output function, if we have one, + use that, otherwise fold header using basic (dumb) function. + + This is all for #14779. A better fix is probably do have the + headers always stored formatted, but that can wait. + +2002-02-25 Jeffrey Stedfast <fejj@ximian.com> + + * camel-digest-folder.c (camel_digest_folder_new): Allow all + multiparts that contain message/rfc822 attachments. + (digest_get_uids): Only assign uids to message parts. + +2002-02-22 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part.c (camel_mime_part_set_filename): Set the 'name' + parameter on the Content-Type too. Fixes bug #20779. + +2002-02-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (pgp_sign): Pass --always-trust to gpg + (requested by users). + (pgp_clearsign): Same. + (pgp_encrypt): Here too. + +2002-02-12 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_helo): Since the + AUTH token sometimes uses '=' instead of whitespace, don't use + smtp_token_next here. + +2002-02-09 Not Zed <NotZed@Ximian.com> + + * providers/pop3/camel-pop3-engine.c (get_capabilities): Duh, when + we grab the apop stamp it needs to include the <> as well, I even + read the rfc, silly me. + + * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): Doh, + when iterating the authtype list, it helps to goto the next node. + Found with help from miles. + +2002-02-08 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-summary.c + (camel_spool_summary_build_from): The day number has to be 2 chars + wide, space filled to work properly with pine, etc. + + * providers/local/camel-spoold-store.[ch]: new type of provider + 'spool directory', which lets you view external mbox dirs without + adding any extra cruft. Perhaps it should use . files to store + summaries? Still a bit experimental, there's a warning when you + select it in the account editor. Finished off most of #1185. + Can't rename or move folders. + + * camel-mime-utils.c (header_decode_date): If the date is + 100->1900 then we actually want to use it as the year in the tm + struct, not year+100. e.g. year 102 -> 2002, not 2102. + +2002-02-07 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-store.c (get_folder): Pass path into + spool_folder_new. + + * providers/local/camel-spool-folder.c (camel_spool_folder_new): + (camel_spool_folder_construct): Take the full path to the folder + and use that as the file path, independent of the full_name we + use. + +2002-02-07 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-provider.c: Added new type, spoold + provider, spoold: for local directories. + + * providers/imap/camel-imap-store.c (get_one_folder_offline): + Create offline uri's in a compatible manner to online ones. + +2002-02-07 Dan Winship <danw@ximian.com> + + * camel-sasl-ntlm.c: Implementation of NTLM (aka "Secure Password + Authentication") auth, taken from soup. + + * Makefile.am (libcamel_la_SOURCES, libcamel_la_HEADERS): Add + camel-sasl-ntlm. + + * camel-sasl.c: Add refs to camel-sasl-ntlm. + + * providers/imap/camel-imap-store.c (try_auth): Use + imap_next_word() to skip over the "+ " of the continuation rather + than just "resp + 2" since Exchange (incorrectly) returns "+" + instead of "+ " for an empty continuation response. + +2002-02-06 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-summary.h: Remove the CAMEL_MESSAGE_NEEDS_REPLY + flag, we no longer will be using this. + +2002-02-04 Jeffrey Stedfast <fejj@ximian.com> + + * camel-http-stream.c (stream_read): Use camel_mime_parser_read to + read internal parser data. + (camel_http_stream_get_content_type): Implemented. + (http_method_invoke): Use HTTP/1.0 instead of 1.1 + + * camel-mime-utils.c (header_decode_int): Made public. + + * camel-http-stream.[c,h]: Added. New stream for HTTP requests + (currently supported are GET and HEAD). + + * camel-tcp-stream-ssl.c (stream_connect): Call set_errno + appropriately. + +2002-01-31 Not Zed <NotZed@Ximian.com> + + * camel-mime-utils.c (header_decode_domain): Oops, this was + converting foo@[blah] to foo@[ blah ], fixed. + +2002-01-30 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-provider.c: Use "pop" instead of + "pop3" so current configurations continue to work. + +2002-01-30 Not Zed <NotZed@Ximian.com> + + * camel-sasl-login.c: Changed name from "NT Login" to simply + "Login". + + * providers/pop3/*: Entirely new pop implmentation, supporting + pipelining. + +2002-01-29 Not Zed <NotZed@Ximian.com> + + * camel-data-cache.c (free_busy): We dont want to unref the + stream, instead, stop listening to the finalised events, and free + the path only. + +2002-01-25 Not Zed <NotZed@Ximian.com> + + * camel-data-cache.c (stream_finalised): Remove the object from + the busy_stream hashtable, not the busy_path hashtable. + +2002-01-29 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_update_summary): Added + more kludge to an existing Exchange IMAP 5.5 kludge to work around + it returning multiple messages with the same UIDs. + +2002-01-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-message.c (process_header): Handle Resent headers + too. + + * camel-mime-message.h: Added Resent-* #defines. + + * camel-filter-driver.c (camel_filter_driver_remove_rule_by_name): + Use while (node->next) instead of while (node) + + * providers/smtp/camel-smtp-transport.c (smtp_decode_status_code): + New function to decode an enhanced status code. + (smtp_set_exception): Sets an exception based on the + Enhanced-Status-Code. + (esmtp_get_authtypes): Don't diplicate the key in the hash since + the key and value are the same. + (smtp_rcpt): Include the failed recipient in the error message to + be more helpful to the user. + + * camel-mime-utils.c (hex_decode): Make sure to allocate enough + for the NUL byte. + +2002-01-28 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_construct): + (connect_to_server): Use flags rather than a bunch of gboolean + variables. + (smtp_connect): Same. + (smtp_mail): Here too. Use the enhanced status codes if available. + (smtp_data): And again here. + (smtp_helo): Finally here. Also detect the ENHANCEDSTATUSCODES + extension. + (smtp_rcpt): Use the enhanced status codes if available. + (smtp_rset): Here too. + (smtp_quit): And finally here. + + * camel-transport.h: Removed gboolean supports_8bit since this is + pretty local to only SMTP for now. + +2002-01-24 Ettore Perazzoli <ettore@ximian.com> + + * Makefile.am: Remove some old cruft. + +2002-01-24 Ettore Perazzoli <ettore@ximian.com> + + * tests/folder/Makefile.am: s/MAILER_LIBS/EVOLUTION_MAIL_LIBS/. + * tests/message/Makefile.am: Likewise. + * tests/mime-filter/Makefile.am: Likewise. + * tests/misc/Makefile.am: Likewise. + * tests/smime/Makefile.am: Likewise. + * tests/stream/Makefile.am: Likewise. + +2002-01-24 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (do_beep): Call the beep callback + function. + (camel_filter_driver_set_system_beep_func): New function to set + the beep callback. + +2002-01-22 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_remove_rule_by_name): + New function to remove a filter rule by name. + +2002-01-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (do_beep): As a temporary solution, just + printf ("\a"); to make a beep :-) + + * providers/imap/camel-imap-command.c + (imap_command_strdup_vprintf): Encode the mailbox to UTF-7 here. + + * providers/imap/camel-imap-utils.c (imap_parse_list_response): + Decode the mailbox name as we parse the list response. + (imap_mailbox_decode): It's only an illegal mailbox name if it + didn't switch back to US-ASCII mode. + +2002-01-18 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-utils.c (imap_mailbox_decode): New + function to decode an IMAP mailbox name from modified UTF-7 + encoding to UTF-8. + (imap_mailbox_encode): New function to convert a mailbox name from + UTF-8 to IMAP's modified UTF-7 encoding. + +2002-01-17 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-basic.c (filter): Stop uudecoding once the + CAMEL_UUDECODE_STATE_END state bit gets set. Set the + CAMEL_UUDECODE_STATE_BEGIN state bit once we find the begin line. + (reset): No longer have uu_begin or uulen state variables, these + are now stuffed into a single state variable. + + * camel-mime-utils.c (uudecode_step): No longer needs a uulen + argument and also keeps track of whether or not the end of the + encoded data has been found in 'state'. + (uuencode_step): Now stuffs uulen into state so that the uulen + argument is no longer needed. + (uuencode_close): Same. + +2002-01-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-basic.c (filter): If we don't want to corrupt + the uuencoded data by overwriting it with base64 decoded data + afterward, we need to add a break statement! + + * camel-folder-summary.c (summary_build_content_info): Add code to + add a uu filter. + (camel_folder_summary_finalize): Unref the uuencode filter. + +2002-01-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-basic.c (filter): Fixed slight logic error to + find the uuencode begin line. Fixes bug #18754. + +2002-01-15 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_send_to): Updated to + match the new send_to API. + (smtp_send): Get the from address and pass that along to + smtp_send_to(). + + * providers/sendmail/camel-sendmail-transport.c + (sendmail_send_to): Updated to match the new send_to API. + + * camel-transport.c (camel_transport_send_to): Now takes a from + argument too. + + * providers/imap/camel-imap-folder.c (imap_update_summary): Sort + the needheaders UID array and fixed to respect the + UID_SET_LIMIT. This should now finish the fixification of bug + #2529. There's still the possible issue that a command-line (The + only command-line I can think of that can still be too long is a + SEARCH command, but this can't possibly be fixed until we rewrite + the imap code to use Zucchi's ImapEngine idea). + +2002-01-14 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_expunge_uids_online): + Move the command-lock outside the loop. + +2002-01-14 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_expunge_uids_online): + Updated to use the new imap_uid_array_to_set() interface. + (imap_expunge_uids_resyncing): Same. + (do_copy): Here too. + (imap_update_summary): Added a FIXME comment to rewrite allowing + for a uid-set limitation. + (get_matching): Copy some of the logic over from + imap_uid_adday_to_set() to limit the length of the uid-set string. + (imap_sync_online): Added a comment to explain what is going on + with get_matching() since the behavior has changed slightly. + + * providers/imap/camel-imap-utils.c (imap_uid_array_to_set): + Modify the interface so that we can limit the size of the uid set + string returned. + +2002-01-14 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-search.c (imap_body_contains): + Rewritten to use a cache for body searches when online. Will need + some heavy testing but so far seems to be beneficial. + + * providers/imap/camel-imap-folder.c (imap_search_by_expression, + search_by_uids): dont initialise search object here. + (camel_imap_folder_new): Setup search object here with pointer to + cache dir. + +2001-12-01 Not Zed <NotZed@Ximian.com> + + * camel-store-summary.[ch]: New class to store a store's folder + list in. Not yet completed. + +2002-01-11 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_update_summary): Kludge + around a bug in Exchange 5.5 that reports 2 messages with the same + UID. Fixes bug #17694. Replaces the fix from yesterday. + +2002-01-10 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-local-folder.c: If PATH_MAX doesn't exist, + use _POSIX_PATH_MAX. + + * providers/imap/camel-imap-folder.c (imap_update_summary): If mi + is NULL, don't bother updating it. Should fix bug #17694. + +2002-01-10 Jeffrey Stedfast <fejj@ximian.com> + + * camel.h: #include camel-mime-filter-tohtml.h + + * providers/imap/camel-imap-folder.c (imap_update_summary): Kludge + around Microsoft Exchange 5.5 (bug #5348) by forgetting our + currently selected folder and re-SELECTing it so that the Exchange + server has a chance to realise it has new messages. + +2002-01-09 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-local-folder.c + (camel_local_folder_construct): If the mbox file is a symlink, + follow the symlink and get the One True Path so that we can + rewrite the mbox later without worrying about clobbering the + symlink. + +2002-01-08 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-search.c (TODO): There are a few sexp callbacks + that could be modified to use fms->info rather than using a + message object (like date and possibly mlist stuff) but *only* if + the date exists on the CamelMessageInfo object (since it may be + blank except for message flags). + (camel_filter_search_get_message): New internal convenience + function to make sure that the FilterMessageSearch has loaded the + message (and to load the message if this isn't the case). + (check_header): Call camel_filter_search_get_message(). + (header_exists): Same. + (header_regex): Here too. + (header_full_regex): And here. + (body_contains): Again here. + (body_regex): Here too. + (get_sent_date): Here also. + (get_received_date): Same. + (get_source): Here if we need to. + (camel_filter_search_match): Now takes a callback function/data + pair for on-demand message loading so that we don't necessarily + have to load the message if the defined filter rules don't require + it. + + * camel-filter-driver.c (camel_filter_driver_filter_folder): Don't + bother fetching the message here, let + camel_filter_driver_filter_message() worry about this. + (get_message_cb): New utility callback to fetch a message. + (camel_filter_driver_filter_message): Only fetch the message if we + absolutely need it to get a CamelMessageInfo. Instead of passing a + message object to camel_filter_search_match(), pass get_message_cb + and some user_data so that the matching code can fetch the message + on demand. + +2002-01-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder.c (filter_filter): Flush the only-once actions. + + * camel-filter-driver.c (camel_filter_driver_filter_message): + Don't increment a filtered_count here any longer. + (camel_filter_driver_reset_filtered_count): Removed. + (camel_filter_driver_get_filtered_count): Removed. + (do_beep): New action. + (play_sound): New action to play a sound + (do_only_once): Another new action. + (camel_filter_driver_finalise): Free the only_once hash if the + driver has not been "flushed". + (camel_filter_driver_flush): Flush all of the only-once actions. + + * camel-charset-map.c: Moved windows-1251 to the end of the list + since it contains the euro and we'd prefer to use iso-8859-15 when + the euro is requested than a windows charset if possible. + + * camel-charset-map-private.h: Regenerated. + +2001-12-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-summary.c (content_info_load): Don't try setting a + content-type parameter if either the name or value is NULL. + + * camel-mime-utils.c (header_set_param): NULL-protection. + +2002-01-02 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (ssl_bad_cert): Do more like what mutt + does so hopefully this'll fix bug #16363 and #16300. + +2001-12-21 Jeffrey Stedfast <fejj@ximian.com> + + * broken-date-parser.c (parse_broken_date): Completely + rewritten. It is now a load faster and a heck of a lot more + accurate, also now returns a time_t and sets the saveoffset + variable rather than returning a new char* buffer for the normal + camel date parser to re-parse. This saves a fair number of cpu + cycles :-) + + * camel-mime-utils.c (header_decode_date): Cleanup the broken date + parsing code. + +2001-12-20 Jeffrey Stedfast <fejj@ximian.com> + + * camel-address.h: Change the prototype for camel_address_get_type + to return a CamelType (since internally this is what it returns + and also in case we decide to write a replacement for the current + CamelObject it'd be easier to drop in). + + * camel-internet-address.h: Same but for + camel_internet_address_get_type() + + * providers/smtp/camel-smtp-transport.c (smtp_send_to): Updated to + use a CamelAddress of recipients. + (smtp_send): Since smtp_send_to now takes a CamelAddress + recipients argument, our lives have been simplified and we can now + just concat To/Cc/Bcc into a recipients addr and send away. + + * providers/sendmail/camel-sendmail-transport.c + (sendmail_send_to): Updated to use a CamelAddress of recipients. + + * camel-transport.c (camel_transport_send_to): Now takes a + CamelAddress argument for the recipient list rather than a GList. + +2001-12-19 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/Makefile.am: Remove the providerdir variable. + + * providers/sendmail/Makefile.am: Same. + +2001-12-17 Jeffrey Stedfast <fejj@ximian.com> + + * camel-charset-map.c (camel_charset_iso_to_windows): New function + to map ISO charsets to the Windows charsets. + + * camel-mime-part-utils.c (broken_windows_charset): Detect Windows + charsets. + (simple_data_wrapper_construct_from_parser): Simplify a tad and + also check for iso-8859-* charsets that are really Windows + charsets. Fixes bug #12631. + +2001-12-17 Dan Winship <danw@ximian.com> + + * Makefile.am (INCLUDES): define CAMEL_PROVIDERDIR to be the + configure.in-defined camel_providerdir. + + * providers/Makefile.am: Remove some outdated comments + + * providers/imap/Makefile.am (camel_provider_LTLIBRARIES, + camel_provider_DATA): renamed from provider_LTLIBRARIES, + provider_DATA. + + * providers/local/Makefile.am: Likewise + + * providers/nntp/Makefile.am: Likewise + + * providers/pop3/Makefile.am: Likewise + + * providers/sendmail/Makefile.am: Likewise + + * providers/smtp/Makefile.am: Likewise + +2001-12-16 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (get_content): Reverted my + previous changes here since it doesn't actually work afterall. + + * providers/imap/camel-imap-wrapper.c (imap_wrapper_hydrate): + Update to do uudecoding when appropriate. + +2001-12-16 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (get_content): Try to use the + original boundary so luis will stop bugging me about "data + corruption". Also preserve other params in the multipart + content-type by dumping it to a string and setting it on the mime + part. + +2001-12-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c + (camel_filter_driver_reset_filtered_count): Reset the + filtered_count to zero. + (camel_filter_driver_get_filtered_count): Return the private + filtered_count value. + (camel_filter_driver_filter_message): Increment the + filtered_count. + (camel_filter_driver_set_shell_exec_func): New function to set the + shell-exec func. + (shell_exec): New ESExp filter action callback. + +2001-12-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-mime.c (camel_pgp_mime_part_verify): Removed + x-inline-pgp-hack kludge because it doesn't work. + (camel_pgp_mime_part_decrypt): Same. + +2001-12-13 Chris Toshok <toshok@ximian.com> + + * camel-data-cache.c: include stdlib.h (for alloca on freebsd) and + only include alloca.h if HAVE_ALLOCA_H is defined. + +2001-12-11 Zbigniew Chyla <cyba@gnome.pl> + + Fixes #17085 + + * camel-charset-map.c: Added #include <errno.h>. + + * camel-charset-map-private.h: + Recreated (following instructions from camel-charset-map.c) + +2001-12-11 Jeffrey Stedfast <fejj@ximian.com> + + * camel-object.c (camel_type_register): Keep a name-to-type hash + so that we can make sure that the type has not yet been registered + (prevents a race condition such as the one in bug #16559). + + * camel-service.c (camel_service_connect): Make sure that the + connect_op is non-NULL before unregistering/unreffing it. + +2001-12-04 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_content_type_simple): Protect against + either of the types being NULL. + +2001-12-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-basic.c (filter): If complete() allocates + len+2 bytes for the out buffer, so should this. See bug #16371 for + an example case. + +2001-12-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-digest-md5.c: iconv() returns a size_t, not an int. + + * camel-pgp-context.c: The return value of iconv() is a size_t, + not an int. + + * camel-mime-part-utils.c (convert_buffer): Always use size_t args + for iconv(). + + * camel-mime-filter-charset.c (complete): Always use size_t args + for iconv(). + (filter): Same. + + * camel-mime-utils.c (header_address_fold): Make headerlen a + size_t instead of an int. + (header_fold): Same. + (base64_encode_close): We should be returning a size_t and inlen + should also be a size_t. + (base64_encode_step): Same here. + (base64_decode_step): Here too. + (base64_encode_simple): And here... + (base64_decode_simple): Same. + (uuencode_close): We should also use size_t's here... + (uuencode_step): And here too. + (uudecode_step): And also here. + (quoted_encode_close): Same idea here. + (quoted_encode_step): Again here. + (quoted_decode_step): Here too. + (quoted_encode): Input length should be a size_t. + (rfc2047_decode_word): Same. + (g_string_append_len): Here too. + (append_8bit): " + (rfc2047_encode_word): " + (quote_word): " + (hex_decode): " + (rfc2184_decode): Use size_t's with iconv(). + (header_decode_param): Same. + +2001-12-09 Jon Trowbridge <trow@ximian.com> + + * camel-folder-summary.c: Add "NeedsReply" to the flag_names array + for CAMEL_MESSAGE_NEEDS_REPLY. + + * camel-folder-summary.h: Added CAMEL_MESSAGE_NEEDS_REPLY flag. + +2001-12-07 Dan Winship <danw@ximian.com> + + * camel-mime-message.c (camel_mime_message_set_date): Fix the + tm_gmtoff case (its sign is the opposite of "timezone"). Fixes + #14678 + +2001-11-29 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-search.c (search_body_contains): Don't use regex + matching. Fixes bug #16227. + + * camel-mime-message.c (best_encoding): Check the content-object's + mime type, not the mime part types. Should fix bug #15843. + +2001-11-27 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (get_content): Return NULL if + construct_from_stream fails. + (get_message): Same. + (get_message_simple): Here too. + (add_message_from_data): And here. + +2001-11-14 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (folder_changed_remove_uid): Use the uid + rather than vuid for unmatched. Also add the uid to unmatched if + it wasn't in the unmatched_uids table at all. + (folder_changed_change): If checking for added, if the new ones + dont match, then try to add them to unmatched. Fixes #6893. + + * camel-folder-summary.c (camel_folder_summary_index): Change lock + order, always summary_lock before ref_lock. + (camel_folder_summary_array): " + (camel_folder_summary_uid): " + (camel_folder_summary_remove_uid): " Fixes a deadlock. + +2001-11-30 Not Zed <NotZed@Ximian.com> + + * providers/nntp/camel-nntp-*.c: Completely new implementation of + NNTP. + + Doesn't support subscriptions yet (lists all folders), but should + be more reliable (faster?), and has an integrated cache. + + * camel-exception.c (camel_exception_new): Use e_memchunks for + exception blocks. + (camel_exception_free): Same. + + * camel-data-cache.[ch]: New object for managing on-disk caches of + anything that can be stored in a camel-stream. + + * camel-file-utils.c (camel_file_util_mkdir): New function, just a + nicer place to put this (than camel-store), should be removed from + camel-store. + (camel_file_util_safe_filename): New function to url-encode a + filename. + + * camel-mime-parser.c (drop_states): New func to drop the parser + state to initial state. + (folder_scan_init_with_fd): + (folder_scan_init_with_stream): Call above func to reset state if + the stream is changed on us so we can change streams to reuse a + parser object. + +2001-11-25 Not Zed <NotZed@Ximian.com> + + * providers/nntp/camel-nntp-folder.c (nntp_folder_get_message): If + the uid doesn't have a ',' in it, fail to crash. + + * providers/nntp/camel-nntp-newsrc.c + (camel_nntp_newsrc_article_is_read): check group != NULL before + scanning. + (camel_nntp_newsrc_get_highest_article_read): " + (camel_nntp_newsrc_get_num_articles_read): " + (camel_nntp_newsrc_mark_range_read): " + + * providers/nntp/camel-nntp-store.c + (camel_nntp_store_get_overview_fmt): IF we dont have + nntp_list_follows, dont try and get a list response. + (nntp_store_get_folder_info): Set path part of folderinfo. + +2001-11-20 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (get_smtp_error_string): + Check to see that errno is non-zero before returning + g_strerror. If it's 0, then we have an unknown error. + +2001-11-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-basic.c: For the uudecoding mode, garble up + the "begin <mode> <filename>" line before decoding. + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): Add a uudecoder if + the transfer encoding is x-uuencode. + + * camel-mime-part.c (write_to_stream): Handle x-uuencoded content + too. + +2001-11-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (stream_read): Added a check to see if + the operation has been cancelled. + (stream_write): Same. + +2001-11-19 Jeffrey Stedfast <fejj@ximian.com> + + Updates for compliance with rfc2231 + + * camel-mime-utils.c (header_encode_param): + camel_mime_special_table[c] & IS_ESAFE should have been + !(camel_mime_special_table[c] & IS_ESAFE). Also added a few + comments for how to improve the code at some future date. + (header_decode_param): Now takes an argument rfc2184_part so our + caller can get this information as well. + (header_decode_param_list): Pass an rfc2184_part argument to + header_decode_param and also added a few comments on where to + improve on rfc2184/rfc2231 compliance. + (rfc2047_decode_word): Updated to respect the updated ABNF syntax + of rfc2047 encoded words, yay. + +2001-11-16 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-utils.c (imap_parse_body): Abort if + body == NULL. + + * camel-mime-filter-tohtml.c (camel_mime_filter_tohtml_new): New + mime filter to convert plain text to html. + +2001-11-16 Jeffrey Stedfast <fejj@ximian.com> + + Since some mail clients like Outlook are broken, we need to set a + name parameter on pgp signed and encrypted parts. + + * camel-pgp-mime.c (camel_pgp_mime_part_encrypt): Set a name + parameter. + (camel_pgp_mime_part_sign): Same. + +2001-11-14 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-command.c + (camel_imap_command_response): If we get a BYE response, call + camel_service_disconnect() and set an exception. Also do the check + for "* BYE" first instead of passing it off imap_read_untagged() + since we'll just waste time in there mallocing left and right only + to arrive at the single response line "* BYE" again :-) + +2001-11-13 Not Zed <NotZed@Ximian.com> + + * camel-filter-search.c (get_source): If we have no source string, + then use undefined, which should always evaluate to FALSE. Fix + for #15267. + +2001-11-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (camel_store_get_folder): Added a + g_return_val_if_fail for folder_name != NULL. + +2001-11-08 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (crypto_exec_with_passwd): If any of the + pipe()'s fail, clean up any pipes that may have succeeded. Also + close the password fds. + +2001-11-09 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c (imap_auth_loop): If we get a + user cancel and that causes us to fail to authenticate, abort + rather than loop forever. Fix for #14951. + +2001-11-06 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-command.c + (camel_imap_command_continuation): Now takes a command-length + argument so we can 1) avoid duping the command string yet again, + yay. 2) we now don't have to worry about embedded nul-chars + screwing us over (we still need to avoid allowing them into the + string but at least now it won't mess us up). + + * providers/imap/camel-imap-folder.c (do_append): Instead of + appending a nul char to the end of the byte array and then passing + that off as if it were a string to + camel_imap_command_continuation, instead pass the byte-array + length since that function now takes a length argument. Yay. Also + encode any 8bit parts to avoid the possibility of sending embedded + nul chars to the imap server. + + * providers/imap/camel-imap-store.c (try_auth): Updated to pass a + command-length argument to camel_imap_command_continuation(). + +2001-11-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (save_ssl_cert): Oops, pass a mode + argument to the open() call. + + * camel-tcp-stream-openssl.c (save_ssl_cert): Oops, pass a mode + argument to the open() call. + +2001-11-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-mime.c (camel_pgp_mime_part_decrypt): Add code to + kludge around any x-inline-pgp-hacks by prepending some content + headers to the decrypted data. + +2001-11-02 Jeffrey Stedfast <fejj@ximian.com> + + * camel-data-wrapper.c (camel_data_wrapper_init): Initialize our + private mutex. + (camel_data_wrapper_finalize): Destroy our private mutex. + (write_to_stream): Lock around camel_stream_write_to_stream() so + that we don't get 2 threads trying to read from our stream at the + same time. + +2001-11-01 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (folder_changed_change): Move all searching + operations outside of any locks except subfolder lock, same as + build_folder. Fix for #14294. + +2001-10-31 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-folder.c (spool_get_message): Same + as below. + + * providers/local/camel-maildir-folder.c (maildir_get_message): + Same as below. + + * providers/local/camel-mbox-folder.c (mbox_get_message): Set + USER_CANCEL if failed due to EINTR. + + * camel-filter-driver.c (camel_filter_driver_filter_mbox): If + construct from parser fails due to user cancel, set USER_CANCEL on + exception. + + * camel-mime-part.c (construct_from_parser): Return error if the + parser had an io error. + + * camel-mime-message.c (construct_from_parser): Check error on + parser/return error. + + * camel-mime-parser.c (folder_scan_init): Init error number. + (camel_mime_parser_errno): New function, return errno of any io + failures. + (folder_read): Set errno if a failure occured. + (folder_seek): Same. + (folder_scan_init_with_fd): Setup errno depeding on ok/failure. + (folder_scan_init_with_stream): Same. + +2001-10-30 Not Zed <NotZed@Ximian.com> + + * camel-operation.c (camel_operation_new): Dont setup cancel_fd. + (camel_operation_cancel_fd): If cancel_fd not created, set it up. + (camel_operation_cancel): Set cancel flag before sending message. + (cancel_thread): Same. + + * camel-filter-driver.c (camel_filter_driver_filter_mbox): Make + sure we unref the mimeparse when we're done (successfully). This + was leaking an fd every get-mail! :( + + * camel-lock-client.c (camel_lock_helper_init): Close all fd's + above 2. + + * providers/local/camel-mbox-folder.c (mbox_get_message): Remove + the X-Evolution header before anyone else gets to see this private + thing. Shoudl fix 11676 since we were inheriting flags from + X-Evolution headers we didn't want to. + + * camel-folder-search.c (match_message): If we can't retrieve the + message, ignore it, it can't match. + + * providers/imap/camel-imap-search.c + (camel_imap_search_class_init): Setup parent class pointer. + (imap_body_contains): If offline, just use the parent + body_contains method which will get the messages and search them + manually. + + * providers/imap/camel-imap-folder.c (imap_search_by_expression, + imap_search_by_uids): Remove offline check. + +2001-10-30 Dan Winship <danw@ximian.com> + + * camel-mime-part.c (free_headers): Fix this to match get_headers. + +2001-10-30 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-store.c (rename_folder): Dont try to + move ibex if we have none. + + * camel-tcp-stream-openssl.c (stream_write): Fixed compilation + errors. + +2001-10-29 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (camel_mime_utils_init): Removed unused + variable. + +2001-10-30 Not Zed <NotZed@Ximian.com> + + * camel-mime-utils.c (header_decode_mailbox): w(x) out some warnings. + + * providers/local/camel-local-summary.c + (camel_local_summary_load): Remove the warning about not loading + summary file - its a valid case for new folders. + +2001-10-29 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-openssl.c (my_SSL_write): Removed. + (stream_write): Keep looping (non-blocking case) if errno is + EAGAIN, EINTR or EWOULDBLOCK. For NONBLOCKing I/O, sync up with + CamelTcpStreamRaw. As with CamelTcpStreamRaw/SSL - make sure to + write out everything before returning. + (my_SSL_read): Removed. + (stream_read): Just call ssl_error_to_errno() and check the errno + values that we care about so we can keep the general look of all + this stream code the same. Also when checking the return value of + SSL_read, check for <0 instead of ==-1 since the man page for + SSL_read doesn't say it will return -1 on fail, it just says <0. + (stream_flush): Don't fsync() since syncing on a socket is a Bad + Thing (tm). + + * camel-tcp-stream-ssl.c (stream_write): Make sure we write out + everything just like in camel-tcp-stream-raw.c. + + * camel-stream-buffer.c (camel_stream_buffer_gets): If + camel_stream_read() returns -1, don't necessarily return -1 to our + caller since it's possible that we did actually "read" some data + (ie, we copied some pre-buffered data into the out buffer). + + * camel-stream-buffer.h: Removed CAMEL_STREAM_BUFFER_NEWLINE since + it never got used anywhere and it isn't supported anyway. + +2001-10-30 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c + (parse_list_response_as_folder_info): If we get an empty name, + then mark that as NoSelect. Workaround fix for #13239. + +2001-10-29 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c (get_message_simple, + imap_get_message): Set an X-Evolution-Source header on the + returned message so replies come from the right identity. + +2001-10-29 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (folder_changed_change): If we're not going + to search on a changed uid, make sure we change out copy still. + Fixes #13916. + +2001-10-29 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (subscribe_folder): Don't emit + a folder_subscribed signal if we are in the process of renaming + folders. + (unsubscribe_folder): Same here but for the unsubscribe signal. + (rename_folder): Unsubscribe from the folder being renamed and any + subfolders it may have before actually renaming. Once the folder + has been renamed, re-subscribe to it and it's subfolders with the + new name. + + * camel-store.c (camel_folder_info_build): Sort the folder info's + before constructing the tree. + + * camel-mime-utils.c (header_decode_param): Minor fix - should + have been using a strNcmp when checking if it was an rfc2047 + encoded word. + + * camel-pgp-context.c (pgp_sign): Notify the user that PGP 2.6.x + is no longer supported and use camel_exception_set() instead of + setv() where appropriate. + (pgp_clearsign): Same. + (pgp_verify): And again here. + (pgp_encrypt): Here too. + (pgp_decrypt): And finally here. + +2001-10-29 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-store.c (unsubscribe_folder): Don't + free the hash table key if the folder wasn't found in the hash + table. I'm not sure where the bug is/was that made it possible to + add a folder to the tree after creating it failed, but now if that + happens, it won't crash if you try to delete it again. (#11492) + + * camel-disco-store.c (camel_disco_store_status): if the service + is being connected and thinks it's online, but the session is + offline, then mark the service offline as well. Fixes 13683. + +2001-10-29 Not Zed <NotZed@Ximian.com> + + * camel-mime-utils.c: Turn off w() -> warnings. + + * providers/imap/camel-imap-store.c (rename_folder): Also rename + the message cache. + (rename_folder): Fix subscribed folders table with rename(s). + + * providers/imap/camel-imap-folder.c (imap_rename): Implement, + rename the cache dir pointer. + + * providers/imap/camel-imap-message-cache.c + (camel_imap_message_cache_set_path): New method to set the path + used by a message cache. + + * camel-vee-store.c (build_info): Fix the 'is this a matching + subfolder or subfolder' logic to match camel-store + get_subfolders'. + + * camel-store.c (get_subfolders): Fix the 'is this a matching + folder or subfolder' logic. + +2001-10-28 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-store.c (rename_folder): Changed to + call ibex_move to rename it internally. + + * camel-store.c (camel_store_rename_folder): Use the right + variable, not info. + +2001-10-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-stream-buffer.c (camel_stream_buffer_read_line): Make sure + we've actually read data before checking if p[-] is '\r' or not. + + * camel-tcp-stream-raw.c (stream_write): Same. + + * camel-stream-fs.c (stream_write): If errno isn't EAGAIN, just + exit with -1 and instead of using continue (which doesn't go to + the top of the do-while thus making our logic suck), just set w to + 0. Still seems to be a bug in select() if it's telling us the + socket is ready for data when it really isn't but oh well. + +2001-10-28 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-folder.c + (camel_local_folder_construct): Use path not protocol as the path + part of the uri of the folder_created event. + + * providers/local/camel-maildir-store.c (scan_dir): If FAST is + set, dont try and scan for unread counts. + + * providers/local/camel-local-store.c (create_folder): Implement, + just return the folderinfo of the folder matched, not all of it. + + * camel-store.c (camel_store_rename_folder): Rename the + camelfolders before emitting the folderchanged event (otherwise + vstore fails to pick up change. + +2001-10-27 Not Zed <NotZed@Ximian.com> + + * camel-store.c (camel_store_init): Always use a default dir_sep + of '/'. + + * camel-store.h (struct _CamelStore): Added a dir_sep to the base + store so rename and whatnot can work, temporary fix for mixed dir + separator in folder name api's. + + * providers/imap/camel-imap-store.c (rename_folder): Finished + implementation. + (imap_connect_online): Also set the store's dir_sep here. + (imap_connect_offline): " + + * providers/local/camel-local-folder.c (local_rename): Implement + local rename of folder objects. + +2001-10-26 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (camel_vee_folder_class_init): Hook into + rename function. + (vee_rename): Implement the veefolder rename function. + (camel_vee_folder_class_init): + (folder_changed_change): Kill a warning with a cast. + + * camel-vee-store.c (vee_rename_folder): Emit a folder_renamed + event properly, also call parent to do some rename stuff. + + * camel-store.h: Added a CamelRenameInfo for the rename event. + + * camel-folder.c (camel_folder_rename): New function to rename a + folder object. + (camel_folder_class_init): Added a renamed event. + (folder_rename): Default impl, set full_name, and set name + assuming the dir separator is '/'. + + * camel-store.c (camel_store_class_init): Added folder_renamed + event. + (camel_store_rename_folder): Rename an active folder object if we + have one, and update the folder table. + (rename_folder): Make a default implementation that handles + updating the folder tree. + +2001-10-26 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (delete_folder): Don't bother + checking ex since we can rely on the response being NULL on error. + (rename_folder): Implemented. + +2001-10-26 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_get_message): Check to + make sure that the dataset is non-NULL before using and/or + freeing. + + * camel-tcp-stream-raw.c (stream_write): Check for EWOULDBLOCK + too? + (stream_read): Same. + (stream_flush): Return 0 always, fsync() and tcp sockets don't + play nice :-) + + * providers/imap/camel-imap-message-cache.c + (camel_imap_message_cache_get): Lets try putting a + camel_stream_reset() here. Logic being that the stream may have + been read from since it was cached and thus our caller may try + reading from it and get no data from it since it is already at the + EOS. This may fix bug #12943. + +2001-10-25 Not Zed <NotZed@Ximian.com> + + * camel-search-private.c (utf8_get): Remove the stupid warning + that should never have been there in the first place. + + * camel-sasl-digest-md5.c (digest_response): s/iconv/e_iconv/ + + * camel-pgp-context.c (pgp_verify): " + + * camel-mime-utils.c (rfc2047_decode_word, rfc2047_decode_word, + append_8bit, rfc2047_encode_word, rfc2184_decode, + header_decode_param): " + + * camel-mime-part-utils.c (convert_buffer, convert_buffer): " + + * camel-mime-filter-charset.c (reset, complete, filter): " + +2001-10-24 Not Zed <NotZed@Ximian.com> + + * camel-mime-filter-basic.c (complete): For qp decoding, if the + data isn't really qp encoded, we could possible grow the buffer by + upto 2 bytes above the input size, fix allocations/assertions + appropraitely. + + * camel-vee-folder.c (folder_changed_change): If we're not + autoupdate, only search for new matches against changed uid's that + we dont already have. + +2001-10-24 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-store.c (unsubscribe_folder): Don't + let fi->name be NULL. + +2001-10-24 Jeffrey Stedfast <fejj@ximian.com> + + * camel-stream-fs.c (stream_read): Same as in the TcpStreamRaw code. + (stream_write): And again here... + + * camel-tcp-stream-raw.c (stream_read): Handle the EAGAIN error + case as well. + (stream_write): Same here, this might fix the SMTP truncation + thing? I hope? + +2001-10-23 Dan Winship <danw@ximian.com> + + * camel-mime-utils.c (mail_list_magic): Remove an extra * in one + of the regexps that glibc apparently doesn't mind but bsd does. + +2001-10-23 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-mbox-summary.c: made d(x) x recompile again. + +2001-10-22 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-summary.c (summary_rebuild): No, use + Storing, as the other code does :p + (spool_summary_check): Check for consistency. + +2001-10-22 Jon Trowbridge <trow@ximian.com> + + * providers/local/camel-spool-summary.c (summary_rebuild): + s/summarising/summarizing/. + (spool_summary_check): s/summarise/summarize/. + +2001-10-22 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-mime.c (camel_pgp_mime_part_verify): If we are + kludging around a inline-pgp signed part, do some charset + conversion to protect any 8bit text. + +2001-10-22 Not Zed <NotZed@Ximian.com> + + * camel-filter-search.c, camel-folder-search.c (check_header): Use + search_type_mlist for mailing list searches. + + * camel.c (camel_init): call camel-mime-utils-init func. + + * camel-mime-utils.c: Changed mail mail_list_magic to include a + domain part, also pre-compile all the patterns. They are all + backward compatible except List-Id: which now uses the + mail-address-like <list-name.host.name> part rather than the + plain-text part (which might've been blank anyway). + (camel_mime_utils_init): Initialisation function to setup any + static data required by camel-mime-utils at run-time. We now + setup the base64/charset class tables here, so it doesn't need to + be done statically. + (camel_mime_special_table, camel_mime_base64_rank): No longer + statically initialise these. + (main): Removed + the tests at the end of the file. + (header_raw_check_mailing_list): Dont compile regex's here, + already compiled in utils_init. Use the regex patterns to remove + leading <'s from addresses. Also, if there is a domain part + matched, add that after a '@' is added. + + * camel-search-private.c (camel_search_header_match): Match check + against all addresses in a multiple address match. Should fix + #13051. + (camel_search_header_match): Oops, missing i=0. + (camel_search_header_match): Added SEARCH_TYPE_MLIST for mlist + search types. It ignores the domain part if either (but not both) + of the values dont have it. + +2001-10-22 Dan Winship <danw@ximian.com> + + * camel-pgp-mime.c (camel_pgp_mime_part_verify): Add a hack: if + the multipart/signed part has a "x-inline-pgp-hack" parameter in + its Content-Type, don't pass the MIME headers as part of the data + to be verified. + +2001-10-22 Rodrigo Moya <rodrigo@ximian.com> + + * Makefile.am: added $GNOME_INCLUDEDIR to INCLUDES, needed for latest + libgnome, which install headers in $(prefix)/gnome-1.0 + +2001-10-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): Only do the rawtext + checks if the part is a text part, otherwise don't bother wasting + cpu cycles. + + * camel-store.c (camel_folder_info_build): Updated comments to + make the code a bit more clear. + +2001-10-21 Not Zed <NotZed@Ximian.com> + + * camel-store.c (CS_CLASS): Dont do the macro stuff - basically so + you can actually debug calls. + (camel_store_uri_cmp): New function to compare store objects. + + * camel-vee-folder.c (vee_folder_add_info): oops, dont free the + vuid, since its alloca'd now. + (folder_changed_change): Kill a compile warning. + +2001-10-20 Not Zed <NotZed@Ximian.com> + + * camel-folder.c (move_messages_to): If no exception supplied, use + a local one. + (move_message_to): Set the seen flag also when we delete it. + +2001-10-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-vtrash-folder.c (vtrash_move_messages_to): If the + destination folder is the vfolder source folder, then + set_message_flags on it. + +2001-10-19 Not Zed <NotZed@Ximian.com> + + * camel-session.c (register_provider): When registering provider, + translate all strings. + + * camel-vee-folder.c (camel_vee_folder_remove_folder): Lock the + right lock for unmatched subfolder list stuff. If the sub folder + is deleted & part of unmatched, or the last ref to the sub folder + is gone from unmatched, blow it away completely from unmatched, + but only do it once. + (vee_folder_remove_folder): Added arg to kill unmatched + unconditionally. Also handle deleted folders, always remove + stuff. + (folder_changed_change): Lock subfolder lock for entirety of + operation, and also check to see if the subfolder is still there + before doing any fancy work (incase it got removed while we were + waiting to execute). + (folder_changed_change_uid): Use alloca for vuid, and not + sprintf(".lengths") + (vee_search_by_expression): Dont use sprintf for vuid. + (vee_search_by_uids): " + (vee_folder_add_info): " + (folder_changed_remove_uid): " + (folder_changed_change): " + (folder_changed_change_uid): Also check folder_unmatched for + changed uid's so we properly update/propagate unmatched changes. + (folder_changed_change): Ok, so dont hold the subfolder lock for + the whole duration of the changed event, although we probably + should, requires a recursive mutex. + (folder_changed_change): Change logic, we always add changed stuff + if it now matches, but dont remove it unless its auto-remove, only + propagate changes for it. + (vee_set_message_flags): Call parent method after doing our work. + (vee_set_message_user_flag): Same here. + +2001-10-18 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): If a charset isn't + specified or claims to be utf-8, check the validity of the text + and if it's invalid, set the rawtext bit to TRUE. If the charset + is x-unknown or some other x- charset, always set the rawtext bit + to TRUE. + +2001-10-18 Not Zed <NotZed@Ximian.com> + + * camel-store.c (camel_store_unsubscribe_folder): If we are + unsubscribing from a folder we have loaded, set the folder + deleted, as with the delete_folder case. + + * providers/(imap|local|pop3|sendmail|smtp)/Makefile.am: Added + CAMEL_CFLAGS so we get the right iconv stuff, patch from Yanko + Kaneti <yaneti@declera.com> + +2001-10-18 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (crypto_exec_with_passwd): Make sure the + cancel_fd isn't -1. + +2001-10-18 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-message-cache.c (insert_finish): Flush + the stream here, not sure it really matters but it might + (hopefully) fix bug #12943. + + * camel-pgp-context.c (crypto_exec_with_passwd): Make + user-cancellable. + + * providers/local/camel-local-provider.c: String cleanup for bug + #6640. + + * providers/imap/camel-imap-folder.c (imap_sync_online): Fix my + Cyrus imapd workaround...instead of checking to see if info->flags + == FLAGGED, just check to see if it contains any IMAP flags. + +2001-10-17 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-maildir-folder.c + (camel_maildir_folder_new): Use '.' as the inbox name for filter + new messages test. + + * camel-store.c (camel_folder_info_clone): New function to clone a + folderinfo tree. + +2001-10-17 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-mh-folder.c (mh_append_message): Same as + maildir and mbox append-message. + + * providers/local/camel-maildir-folder.c (maildir_append_message): + Same as mbox append. + + * camel-exception.c (camel_exception_set): Make sure the new + description isn't the same as the old description pointer before + freeing the old one. + (camel_exception_setv): Don't free the old description until we + set the new one this way we can reuse the old description in the + new description. + + * providers/local/camel-mbox-folder.c (mbox_append_message): If + errno == EINTR, then we got a user-cancel so set the exception + appropriately so that we don't make the user shit his pants. + + * camel-filter-driver.c (do_copy): Add an optimization for when + destination folder is the same as the source folder. + +2001-10-17 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c (get_folder_info_online): + (parse_list_response_as_folder_info): Patch from Danw, Use unread + count of -1 to mark unflagged messages. Make sure any folder we + dont lookup explicitly is marked as -1. Should fix #9947 and + friends. + + * providers/local/camel-mbox-summary.c (mbox_summary_sync): Only + touch the summary if the timestamp or size changed. + +2001-10-17 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_message): Set + the DELETED flag on directly on the info if the source folder + doesn't have summary capability. + +2001-10-17 Not Zed <NotZed@Ximian.com> + + * camel-tcp-stream-raw.c (stream_write): As below. + + * camel-stream-fs.c (stream_write): If not checking cancellation, + make sure we write out everything asked of us. + +2001-10-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (pgp_verify): Rearange the order of the gpg + options slightly otherwise it might try to use "--no-tty" as the + filename to verify :-) + + * camel-object.[c,h]: If CAMEL_DEBUG is defined, print some useful + ref/unref info. + + * providers/imap/camel-imap-store.c (delete_folder): Fixed an + assignment warning. + + * camel-uid-cache.c (camel_uid_cache_new): Make sure that the + parent directory exists before trying to open the filename, if it + doesn't, create it. + +2001-10-16 Not Zed <NotZed@Ximian.com> + + * camel-mime-utils.c (header_address_decode): If no content, dont + try and decode further and spit meaningless warnings. + +2001-10-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (do_flag): Only perform the operation on + the folder if the folder has summary capability, else just poke + the info directly. Fixes the "Filters don't work" bug. + (do_score): Same. + (do_colour): And here too. + +2001-10-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-stream-fs.c (stream_read): Save the errno before calling + fcntl so fcntl doesn't overwrite errno in case of a previous + error. + (stream_write): Same. + +2001-10-13 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_data): Replace the + Bcc headers in a single location and don't flush the data unless + the write was successful. + +2001-10-12 Jeffrey Stedfast <fejj@ximian.com> + + * Makefile.am: Remove the stripheader filter from the build. + + * camel-mime-filter-stripheader.[c,h]: Removed. + + * providers/smtp/camel-smtp-transport.c (smtp_data): Check the + return value of camel_stream_flush to make sure it flushed the + data successfully before continuing. Don't use the stripheader + filter, it was completely broken - instead remove the header and + set it again after we send. + +2001-10-12 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (camel_vee_folder_remove_folder): Unhook from + all events before removing folder. + (camel_vee_folder_add_folder): Hook onto delete event. + (camel_vee_folder_finalise): Unhook from deleted event for suibfolder. + (subfolder_deleted): When the folder is deleted, remove it from + the vfolder automagically. + +2001-10-11 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (vee_search_by_uids): convert the uids list + to a subset appropriate for each subfolder before trying to search + on it. + + * camel-charset-map.[ch]: Removed charset/locale charset lookup + and iconv_open/close functions, moved to gal. Fixed all callers. + +2001-10-11 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (ssl_cert_is_saved): Same. + + * camel-tcp-stream-openssl.c (ssl_cert_is_saved): Instead of + opening the file, stat it and make sure that it belongs to us. + +2001-10-10 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-openssl.c (ssl_verify): Same hack as below. + + * camel-tcp-stream-ssl.c (ssl_bad_cert): Hack around the fact that + adding a cert to nss's certdb seems to not work. + +2001-10-10 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (vee_sync): Only re-build the folder if we're + expunging. Also only clear out the changed folders list if we're + expungung and everything worked. + +2001-10-10 Jeffrey Stedfast <fejj@ximian.com> + + * camel-charset-map.c (camel_charset_map_init): Added a hack for + Solaris systems. + +2001-10-10 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-maildir-store.c (scan_dir): oops, we want + get_unread_message_count, not get_message_count! + +2001-10-09 Not Zed <NotZed@Ximian.com> + + * camel-service.c (camel_service_disconnect): Duplicate connect + code that unregisters a cancel op if we created one. + + * camel-operation.c (camel_operation_progress): Another go at + getting the logic right again. Make transients only update after + 5 seconds (CAMEL_OPERATION_TRANSIENT_DELAY) + (camel_operation_end): Likewise. + + * providers/local/camel-spool-folder.c (spool_search_by_uids): + Implement. + + * providers/imap/camel-imap-search.c (imap_body_contains): If + searching a sub-set of the total message count, then use a UID + range to search only specific messages. + + * camel-vee-folder.c (vee_folder_change_match): Removed. + (folder_changed_add_uid): Helper func for changed code. + (folder_changed_remove_uid): " + (folder_changed_change_uid): " + (folder_changed): Rewritten. Supports proper auto-updating of + changes, but not removals till a sync occurs. + (vee_search_by_uids): Implement. + (folder_changed): Changed to call an async threaded function to do + the actual folder updating. + + * camel-folder-summary.c (camel_flag_list_copy): New func to copy + a whole list of flags. + (camel_tag_list_copy): New func to copy a whole list of flags. + + * providers/imap/camel-imap-folder.c (imap_search_by_uids): + Implement. + + * providers/local/camel-local-folder.c (local_search_by_uids): + Implement. + + * camel-folder.c (camel_folder_search_by_uids): New function, + search a subset of uid's. + (search_by_uids): Default impl, return error. + +2001-10-08 Dan Winship <danw@ximian.com> + + * camel-folder.h (struct _CamelFolder): replace the ever-growing + list of gbooleans with a single guint32 for flags. + + * camel-folder.c: Update folder flag setting/checking. + + * providers/pop3/camel-pop3-folder.c (camel_pop3_folder_init): + * providers/nntp/camel-nntp-folder.c (camel_nntp_folder_new): + * providers/local/camel-spool-folder.c (spool_init, + camel_spool_folder_new): + * providers/local/camel-maildir-folder.c (camel_maildir_folder_new): + * providers/local/camel-local-folder.c (local_init): + * providers/imap/camel-imap-folder.c (camel_imap_folder_init, + camel_imap_folder_new): + * camel-vtrash-folder.c (camel_vtrash_folder_init): + * camel-vee-folder.c (camel_vee_folder_init): + * camel-digest-folder.c (camel_digest_folder_init): update folder + flag setting. + +2001-10-07 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-store.c (get_folder_online): Unlock + the store before returning error. (noted by NotZed) + +2001-10-06 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_decode_text): Fix a slight error in + logic. Just because the last word was an encoded word doesn't mean + we ignore the lwsp padding, we only ignore it if the last word and + *this* word are encoded. + +2001-10-06 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-basic.c (filter): Implemented uuencoding and + decoding. + (complete): Implemented uuencoding and decoding. + + * camel-mime-utils.c (uuencode_close): New function to flush the + uu encoder. + (uuencode_step): New function to uuencode a block of data. + +2001-10-05 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c (subscribe_folder): Use a + folder_subscribed event rather than a folder_created one. + (unsubscribe_folder): Similarly for unsubscribed/deleted. + (create_folder): Emit a folder_created event on the folders we + added. Not sure hsould probably check which ones are new and + which ones are just existing ones? + (delete_folder): Emit a folder_deletd event when we've deleted the + folder. Part of fix for #11831. + + * camel-store.c (camel_store_class_init): Added + folder_subscribed/unsubscribed events. + +2001-10-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel-service.c (camel_service_finalize): Turn off warnings. + (get_name): Same. + + * camel-sasl.c (sasl_challenge): Turn off warnings. + + * camel-tcp-stream.c (tcp_connect): Turn off warnings. + (tcp_getsockopt): Same. + (tcp_setsockopt): Here too. + (tcp_get_socket): And here. + + * camel-folder.c (folder_sync): Turn off warnings. + (expunge): Same. + (append_message): Here too. + (get_message): And here. + (search_by_expression): And again here. + (folder_changed): Here too. + + * camel-store.c (get_folder): Set an exception and turn off + debugging g_warnings. + (create_folder): Same. + (delete_folder): Here too. + (rename_folder): And here. + (get_trash): And here. + (get_folder_info): Same. + (free_folder_info): And again here. + (camel_folder_info_build): Here too. + (folder_subscribed): Same. + (subscribe_folder): Here too. + (unsubscribe_folder): And here. + +2001-10-05 Not Zed <NotZed@Ximian.com> + + * camel-mime-utils.c (header_decode_mailbox): Try harder to get + broken names out of addresses. Unencoded ,'s in names will still + break it, but well what can you do eh? + (header_decode_mailbox): Always add .'s into address we've scanned + past a '.', even if we can't decode the next part. Fix for some + annoying bug #. + +2001-10-04 Not Zed <NotZed@Ximian.com> + + * camel-store.c (camel_store_delete_folder): Change the order of + execution slightly. We delete the folder first, then call the + classes delete folder, then cleanup the hashtable afterwards. + This is so deletes of vfolders work, since vee-store uses the + folder hashtable to store all of is vfolders :-/ + +2001-10-04 Jeffrey Stedfast <fejj@ximian.com> + + * camel-service.c (camel_service_connect): Unregister the + operation before unreffing it. + +2001-10-03 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): + Remove now unused 'recents' array/freeing func. + + * camel-object.c (camel_object_trigger_event): Oops, always run + the prep function, even if we have no hooks listening. Causes + incoming imap recents to get ignored bythe camel-folder filter + inbox code. + + * providers/local/camel-local-folder.c (local_sync): Dont + explicitly save metadata, its saved in summary_sync. + + * providers/local/camel-mh-summary.c: Call superclass. + (mh_summary_check): Dont save ibex. + + * providers/local/camel-maildir-summary.c: Call superclass method. + (maildir_summary_check): Dont save ibex explictly. + + * providers/local/camel-mbox-summary.c: Call super-class sync when + done, saves summary/ibex, etc. + (mbox_summary_check): Dont save ibex. + (mbox_summary_sync): Call summary_check rather than trying to + update from our known position. + + * providers/local/camel-local-summary.c + (camel_local_summary_check): Dont save the summary or index here. + (local_summary_sync): Save the summary/index here. + + * camel-search-private.c (camel_search_build_match_regex): Added + MATCH_NEWLINE flag, -> REG_NEWLINE. + + * camel-lock-helper.c: Include <string.h> to kill some warnings. + + * camel-filter-search.c (get_full_header): Put \n's between each + line we generate. + (header_full_regex): Dont drop the first argument to the command + -> empty matches! + (header_full_regex): Set match_newline for building regex. + (body_regex): And here too. These all fix #9877. + +2001-10-03 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (camel_store_delete_folder): Call + camel_folder_delete() on the folder if it's "alive". + + * camel-folder.c (camel_folder_delete): Mark the folder as + deleted, perform any folder specific cleanup and emit the deleted + event. + (camel_folder_sync): Only sync the folder if it hasn't been + deleted. + (camel_folder_expunge): Same. + +2001-10-03 Dan Winship <danw@ximian.com> + + * providers/local/camel-local-provider.c (local_url_equal): + Strange are the ways of alloca. Fixes 11543. + +2001-10-02 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (ssl_bad_cert): Import the certificate if + the user accepts it. + +2001-10-02 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-provider.c (local_url_hash, + local_url_equal): for hashing/comparing local url's, we ignore + trailing /'s in paths (maybe shuld handle multiple /'s too). + (camel_provider_module_init): Use local_url_hash/equal for all + functions. + + * camel-sasl-digest-md5.c (digest_response): Change to + camel_charset_iconv_open/close. + + * camel-pgp-context.c (pgp_verify): Change to + camel_charset_iconv_open/close. + + * camel-mime-part-utils.c (convert_buffer): Change to + camel_charset_iconv_open(). + + * camel-mime-filter-charset.c + (camel_mime_filter_charset_new_convert, finalise): Change to + camel_charset_iconv_open, etc. + + * camel-mime-utils.c: Use the camel_charset_iconv_open/close() + functions to open/close it. + + * camel-charset-map.c (camel_charset_iconv_open): New function, + wrap iconv_open, so we can cache ic's. + (camel_charset_iconv_close): Likewise for close. + (camel_charset_map_init,shutdown): Init/free iconv cache. + +2001-10-02 Jeffrey Stedfast <fejj@ximian.com> + + * camel-charset-map.c (camel_charset_to_iconv): Revert my + x-unknown special-case hack - this may mask other problems. + + * camel-mime-utils.c (rfc2047_decode_word): If the iconv + conversion fails, for whatever reason, retry using the user's + locale charset. + +2001-10-02 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-maildir-store.c (get_folder_info): Go back + to using the store url's path, not the toplevel_dir thing. + + * camel-operation.c (camel_operation_progress): Fix the progress + logic, so we dont update too often. + + * camel-object.c (camel_object_get_hooks): Change the lock to a + recursive e-mutex. + (camel_object_hook_event): Maintain list length of hook list. + (camel_object_unhook_event): " + (camel_object_unhook_event): If we are in an event, just mark the + pair as removed, without removing it. + (camel_object_trigger_event): Before running events, copy the + list, and also ignore 'removed' events. After running events, if + we're all out of events, then free up any pending-removed events. + (camel_object_free_hooks): Add some new assertions on the state of + the hook structure. + Removed the #error if threads not defined. It _should_ actually + work without threads. + (camel_object_free_hooks): Free mutex when done. + +2001-10-01 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (delete_folder): Remove any + cached messages that belonged to the deleted folder. + (subscribe_folder): Don't ever let the info->name be NULL and + don't use the stupid concat kludge to generate the URL, just use a + CamelURL to do it. This way we don't risk breaking stuff by having + a url like imap://fejj@imap//folder + + * camel-charset-map.c (camel_charset_to_iconv): If the charset is + x-unknown, return the locale_charset. + +2001-10-01 Dan Winship <danw@ximian.com> + + * camel-provider.h: Fix up the provider flags to specify things + more completely so we don't have to hardcode provider names in the + mailer. + + * providers/local/camel-local-provider.c: MH, mbox, and Maildir + are LOCAL. MH and mbox are no longer STORAGE by the new + definition. + + * camel-session.c (vee_provider): The vfolder store is a STORAGE. + +2001-10-01 Dan Winship <danw@ximian.com> + + * providers/local/camel-local-store.c (construct): Don't munge the + URL; CamelSession's caching relies on it not changing. Instead, + add a toplevel_dir field to CamelLocalStore, and set that to the + path, but always ending with /. + (camel_local_store_finalize): Free toplevel_dir + (camel_local_store_get_toplevel_dir): Return toplevel_dir rather + than url->path. + + * providers/local/*: Lots of s/url->path/toplevel_dir/ + + * providers/local/camel-spool-store.c (construct): Likewise, don't + try to strip a trailing / from url->path here, but I didn't make + the corresponding toplevel_dir change, because there's no good + reason someone should expect "/var/spool/mail/danw/" to work since + that's not a directory. + + * providers/pop3/camel-pop3-folder.c (pop3_refresh_info): if STAT + returns 0, don't bother sending UIDL. Speeds things up slightly + and also works around a bug in a particular random POP server. + (ximian bug 11369). + +2001-09-29 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (pgp_sign): Add --no-secmem-warning and + --no-greeting to the gpg command-line options. + (pgp_clearsign): Same. + (pgp_verify): Here too. + (pgp_encrypt): And here. + (pgp_decrypt): And finally here. + +2001-09-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-search.c (get_source): Same here. + + * camel-mime-message.c (camel_mime_message_set_source): Don't use + the e_url_shroud hack, use CamelURL functions instead. + +2001-09-28 Jeffrey Stedfast <fejj@ximian.com> + + * providers/nntp/camel-nntp-provider.c + (camel_provider_module_init): Init the nntp url hash and url_equal + functions. + + * providers/sendmail/camel-sendmail-provider.c + (camel_provider_module_init): Init the sendmail url hash and + url_equal functions. + + * providers/smtp/camel-smtp-provider.c + (camel_provider_module_init): Init the smtp url hash and url_equal + functions. + + * providers/pop3/camel-pop3-provider.c + (camel_provider_module_init): Init the pop3 url hash and url_equal + functions. + + * providers/imap/camel-imap-provider.c + (camel_provider_module_init): Init the imap url hash and url_equal + functions. + + * providers/local/camel-local-provider.c + (camel_provider_module_init): Init the local url hash and + url_equal functions. + + * camel-session.c (camel_session_class_init): Init the vfolder url + hash and url_equal functions. + + * camel-provider.h: Added url_hash and url_equal function pointers + to the structure. + + * camel-vtrash-folder.c (vtrash_move_messages_to): Oops, a + CamelFolder is not a CamelFolderClass. + +2001-09-28 Dan Winship <danw@ximian.com> + + * camel-tcp-stream-openssl.c (ssl_error_to_errno): Make this take + an SSL * instead of a CamelTcpStreamSSL *, since it can get called + from open_ssl_connection, when the CamelTcpStreamSSL isn't set up + right yet. Fixes a crash on connection failure. + +2001-09-27 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c + (camel_imap_folder_fetch_data): Grab the store's command_lock + before grabbing the folder's cache_lock to prevent deadlock if + another thread is processing an EXPUNGE response. + + * providers/imap/camel-imap-folder.c + (imap_expunge_uids_resyncing): Fix a compiler warning that might + point out a real bug... + + * providers/imap/camel-imap-folder.c (get_content): and one that + doesn't + +2001-09-27 Not Zed <NotZed@Ximian.com> + + * camel-service.c (camel_service_connect): Dont re-register the + connect_op if we got it by calling 'operation_registered', which + returns an already-registered one. + (camel_service_disconnect): Likewise here. This removes all the + re-registered warnings. + + * camel-object.c (camel_object_unref): Fill the finalised data + with nonsense, rather than 0's - more easily detect bad data. + (camel_object_new): Clear instance data when we retrieve it off + the list. + + * camel-object.h (_CamelObject): Added an event lock pointer for + uh, locking event stuff. Also change the hooklist hashtable into + a list. Changed all the code to handle it. Result: thread-safe + events, event-hooks, and save memory too, and SHOULD FINALLY FIX + THAT UNREAD COUNT PROBLEM. + +2001-09-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-mime.c (camel_pgp_mime_part_decrypt): CRLF decode the + stream before parsing it into a MIME part. This fixes bug #10521. + + * camel-store.c: Remove the old folder from the vTrash folder. + +2001-09-27 Dan Winship <danw@ximian.com> + + * camel-service.c: Change "gboolean connected" to + "CamelServiceConnectionStatus status", which can be disconnected, + connecting, connected, or disconnecting. + (camel_service_init, camel_service_finalize): create/destroy the + connect_op_lock. Refer to service->status rather than + service->connected. + (camel_service_connect): When connecting, note the current + operation (and create a new one if there's none registered) and + mark the connection "connecting" until we succeed or fail. + (camel_service_disconnect): Likewise in reverse. + (camel_service_cancel_connect): New function to cancel a + connection attempt. + (cancel_connect): Default implementation: Call + camel_operation_cancel on the connect_op. + + * camel-disco-store.c (disco_connect): Only call + CamelRemoteStore's connect func if we're online. + (disco_cancel_connect): Fall back to offline if a connection gets + cancelled. + (disco_get_folder_info): Kludge: call connect explicitly before + deciding whether to do the online or offline version, so if the + connect fails, we fall back correctly. + + * camel-session.c (camel_session_get_service_connected): + s/svc->connected/svc->status/ + + * camel-remote-store.c (camel_remote_store_finalise): + Change service->connected check to service->status check. + (remote_connect): Don't set service->connected here: + camel_service_connect() itself does that. + + * camel-operation.c (camel_operation_registered): Deal with the + possibility that there's no registered op. + +2001-09-26 Not Zed <NotZed@Ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_message): If + we get a search error, just abort, dont try and fall back and copy + to inbox. + (camel_filter_driver_filter_message): Make sure we ALWAYS use + exceptions for important things - like moving messages to inbox! + (camel_filter_driver_filter_message): If we have the source + folder, use camel_folder_set_message_flags rather then poking the + info directly, which skips changed events. This means filtering + immediate doesn't lose changed events. + (do_flag): Same here. + (do_colour): Same thing but using set_tag. + (do_score): Same again. + (camel_filter_driver_filter_folder): Use ~0 as the 'set' arg to + set_flags, just saves typing. + (open_folder): We cache folders that we couldn't open as well as + those ones we could. Use magic token FOLDER_INVALID = + (void *)~0 as the marker. + (close_folder): Handle FOLDER_INVALID case properly. + +2001-09-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-message.c + (camel_mime_message_get_part_by_content_id): New function to + convenience Larry ;-) + (check_content_id): Oops, return !found instead of found. This + callback has to return whether or not to keep searching, not + whether or not it found what it's looking for. Do'h! + + * camel-pgp-mime.c (camel_pgp_mime_is_rfc2015_signed): block out + some code if ENABLE_PEDANTIC_PGPMIME is not defined. + +2001-09-26 Not Zed <NotZed@Ximian.com> + + * camel-vee-store.c: Emptied VeeStorePrivate, member wasn't used. + + * camel-vee-folder.c (camel_vee_folder_set_expression): Lock + changed list separately. + (camel_vee_folder_remove_folder): " + (camel_vee_folder_set_folders): Use changed_lock for changed list. + (vee_refresh_info): Use changed_lock, also just grab the list, + reset it in the lock, and do the work unlocked. + (vee_sync): Use changed lock for changed list. + (folder_changed): ". All this kills a deadlock with sync/expunge. + + * camel-private.h (CamelVeeFolderPrivate): Added a new lock for + the folders-changed list. + (CamelVeeStorePrivate): Removed, defined in camel-vee-store.c, + thanks to a pedantic. + +2001-09-26 Jeffrey Stedfast <fejj@ximian.com> + + * Makefile.am: Fix Ettore's fix. + +2001-09-25 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (camel_pgp_context_new): No longer takes a + remember argument. + (pgp_sign): Only uncache the passphrase on failure. + (pgp_clearsign): Same. + (pgp_encrypt): Here too. + (pgp_decrypt): And here. + (pass_free): New function to zero the passphrase before freeing + it. + +2001-09-25 Ettore Perazzoli <ettore@ximian.com> + + [Patch for Automake 1.5 compatibility pointed out by Richard + Boulton <richard@tartarus.org>, as per #9258.] + + * providers/nntp/Makefile.am: Remove some commented parts that + make Automake 1.5 choke. + + * Makefile.am (camel-lock-helper): Add $(EXEEXT) for Automake 1.5 + compatibility. + +2001-09-25 Not Zed <NotZed@Ximian.com> + + * camel-folder.c (get_unread_message_count): Only unref info if we + got it. + + * camel-operation.c (camel_operation_unref): Fix for !threads + enabled not ccompiling. + (camel_operation_ref): Assert refcount > 0. + (struct _CamelOperation): Removed the lock. On further + investigation, I dont think this will always work, the + registration operations assume that a lookup in the + operation_active table will return a ref, that will remain valid + until we ref it, which needn't be the case. So now i'm using a + single global lock, since we'd need to do that for unref anyway, + and every operation is fast & memory-bound. Changed all the code + to handle this. + (camel_operation_progress_count): Since the code is identical, + just call progress() for now. + (camel_operation_register): No longer refcount, use unref to + check/clear the active table. + (camel_operation_unregister): Same here. + (camel_operation_unref): Check if operation is in active table, if + so, warn, remove. + +2001-09-25 Dan Winship <danw@ximian.com> + + * camel-tcp-stream-openssl.c (my_SSL_read, my_SSL_write): call + SSL_read/write, looping on SSL_ERROR_WANT_READ/WRITE. I'm sure + there's a perfectly good reason that the API works this way. No, + really. + (stream_read, stream_write): use my_SSL_read and my_SSL_write. + Fixes at least ximian 8593, and probably 6024 and maybe 10366, + at least for OpenSSL. There may be a parallel NSS bug? + +2001-09-25 Not Zed <NotZed@Ximian.com> + + * camel-stream-buffer.c (stream_write_all): A "safe write" + function that always writes out all data asked of it, till + finished. + (stream_write): Rewritten. What was i on when i wrote that + originally, how did it ever work with tcp streams ... + +2001-09-24 Not Zed <NotZed@Ximian.com> + + * camel-folder.c (append_message): Set the exception to + FOLDER_INVALID rather than making out it worked. A fix for #7025. + (search_by_expression): Here too. + + * providers/imap/camel-imap-folder.c (imap_update_summary): In the + 'lose' case, free messages, not fetch_data twice! + + * camel-filter-search.c (check_header): If the type is encoded, + get the fallback charset from the message content-type. + + * camel-mime-part-utils.c (check_html_charset): Dont check for + charset==null before calling charset_to_iconv. + (simple_data_wrapper_construct_from_parser): " + + * camel-mime-message.c (process_header): Try use content-type + charset param as the fallback charset. + + * camel-charset-map.c (camel_charset_to_iconv): Handle name == + NULL, return NULL. + + * camel-folder-summary.c (camel_folder_summary_format_address): + (camel_folder_summary_format_string): Made private again, removed + #warning about it. Renamed to s/camel_folder//. + (summary_format_string): Take default charset param. + (camel_message_info_new_from_header, message_info_new): Decode + content-type field to get the charset parameter to use as the + default charset for decoding strings. + + * camel-search-private.c (camel_search_header_match): Pass NULL as + the charset, the locale charset is always tried. + (camel_search_header_match): Supply a default_charset parameter to + be used with TYPE_ENCODED params. + + * camel-mime-utils.c + (header_param): get rid of the g_strcasecmp crap. + (header_set_param): Same here. + (header_decode_param_list): And here. + (header_decode_text): Totally rewritten. 30% of its size. If the + word is not rfc2047 encoded, always try default_charset if + supplied, if that fails, try locale charset if it exists, if that + fails then assume latin1/7 bit ascii. + (append_8bit): Changed to return FALSE if we can't convert for + whatever reason, and dont append anything. + + * camel-mime-part.h (struct _CamelMimePart): Move content_type and + headers out of the 'private' section. + + * camel-mime-part.c (get_headers): Dont do any conversion on the + header. + (process_header): Get the content-type charset as the fallback + charset for decode_string. + (construct_from_parser): IF we have a content-type header, process + it before doing anything else, so we have access to a fallback + charset for invalid headers. + +2001-09-23 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-openssl.c (ssl_verify): Don't even try to alert + the user if the session isn't interactive. + (errlib_error_to_errno): Make the default errno EINTR so that we + act just like CamelTcpStreamSSL. + + * camel-pgp-context.c (pgp_sign): When the password is not + provided, set the exception to USER_CANCEL. + (pgp_clearsign): Same. + (pgp_encrypt): And here. + (pgp_decrypt): Here too. + +2001-09-21 Not Zed <NotZed@Ximian.com> + + * camel-store.c (create_folder): Set the exception if + create_folder isn't implemented. + +2001-09-21 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (create_folder): Go back to + not using camel_folder_info_build() here because this seems to + break folder creation (returning nodes from the root path when it + shouldn't be?). + +2001-09-21 Not Zed <NotZed@Ximian.com> + + * camel-vee-store.c (vee_get_folder_info): Force a refresh of + vfolders before storing their count. This essentially makes + 'get_folderinfo' refresh all vfolders, so that get-mail works as + expected. + + * camel-vee-folder.c (camel_vee_folder_finalise): Clear lists. + (folder_changed): If we're not autoupdating the folder, then + add this folder to the list of 'changed' folders for this vfolder. + (camel_vee_folder_set_expression): Reset the folders_changed list. + (camel_vee_folder_remove_folder): Remove the folder from the + folders_changed list. + (camel_vee_folder_set_folders): If we have a folder already, but + its changed, use this opportunity to update it. + (vee_sync): Remove any synced folders from the folders_changed + list. + (vee_refresh_info): Refresh folder, re-run queries on any changed + folders. + +2001-09-20 Not Zed <NotZed@Ximian.com> + + * camel-folder-summary.c (camel_folder_summary_header_load): New + function to just load the summary. Not much use yet, until unread + counts are stored in the summary (which now looks like too much + work!). + + * camel-mime-utils.c (header_decode_mailbox): Crappy fix for + stupid mailers. If we get 'name b. name <foo>' then treat it as + '"name b. name" <foo>'. See 8147. + (header_decode_mailbox): Another fix for really broken mailers + that have things that look like addresses followed by <address> + bits. + (rfc2047_encode_word): Escape ??= to avoid some bizarre warning + about trigraphs. + + * providers/local/camel-local-folder.c + (camel_local_folder_construct): Setup unread count properly, and + also setup the url properly. + + * providers/local/camel-maildir-store.c (camel_folder_info_new): + Build the path on the folderinfo. + (scan_dir): Dont include empty host part in url for folder. + (scan_dir): Lookup folder counts for any folders we currenty have + open. + (scan_dir): If we dont have the folder open, then scan the 'new' + and 'cur' folders for new and unread messages to count instead. + + * providers/local/camel-spool-store.c (get_folder_info): If we + have this folder open, then set unread from the folder itself. + (get_folder_info): Change the INBOX path to not include the + leading /. + + * providers/local/camel-spool-folder.c + (camel_spool_folder_construct): Fix path. + (camel_spool_folder_construct): Properly setup the url field when + we say we've got a new folder created. + + * providers/imap/camel-imap-store.c (unsubscribe_folder): Build + path on folderinfo. + + * camel-store.c (camel_folder_info_build_path): Prepend / to path. + + * camel-vee-folder.c (camel_vee_folder_construct): Use macro for + unmatched folder name. + (camel_vee_folder_new): " + + * camel-vee-store.c (vee_get_folder_info): Use macro for unmatched + folder name. + (vee_delete_folder): " + (vee_rename_folder): " + (vee_get_folder): Prepend / onto path. + (vee_delete_folder): Setup path in folderinfo. + (vee_get_folder_info): Fix path in folderinfo. + + * camel-vee-folder.h (CAMEL_UNMATCHED_NAME): New define for + unmatched (internal) name. + +2001-09-20 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-spool-folder.c + (camel_spool_folder_construct): And finally here. + + * providers/local/camel-local-folder.c + (camel_local_folder_construct): And here. + + * camel-vee-store.c (vee_get_folder): ANd here too. + (vee_get_folder_info): And here. + + * providers/imap/camel-imap-store.c (create_folder): Use + camel_folder_info_build() and do better error checking. + (subscribe_folder): Set the path on the folder info. + + * camel-store.c (camel_folder_info_build): Set the folder-info + path if it hasn't already been set by the caller. + (camel_folder_info_free): Free the path. + + * camel-store.h: Added a path member to the FolderInfo type. + +2001-09-20 Dan Winship <danw@ximian.com> + + * camel-charset-map.c (camel_charset_to_iconv): Nuke debug warning. + +2001-09-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c: Updated exception strings to be more clear. + + * camel-pgp-mime.c (pgp_mime_part_sign_restore_part): Stupid + mistake, fixes bug #9975. + + * camel-tcp-stream-ssl.c (ssl_bad_cert): Oops, don't fail if + `data' isn't a CamelService...cuz it's not supposed to be! It's a + CamelTcpStreamSSL object...doh! + +2001-09-19 Not Zed <NotZed@Ximian.com> + + * General cleanup of camel debug printfs. + + * camel-lock.c (camel_lock_fcntl): Changed to return 'success' if + the error indicates file locking isn't supported on this + filesystem. Still return a warning just incase (if its the first + time). Might fix a lot of reported bugs. + + * providers/local/camel-spool-store.c (get_folder_info): Dont + include the empty // host part in the uri. This 'breaks' the + service lookup. + +2001-09-18 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c: Match mailing-list header List-Owner. + +2001-09-18 Not Zed <NotZed@Ximian.com> + + * camel-vee-store.c (vee_get_folder): Fix the uri genereated for + the folderinfo for the folder_created event. + + * camel-store.h: Added 'total' to CamelFolderInfo. + +2000-09-18 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-maildir-folder.c + (camel_maildir_folder_new): If filter inbox is set on the store, + and we're opening inbox '', then enable filtering on new messages. + + * providers/local/camel-local-folder.c + (camel_local_folder_construct): After loading the summary, check + it, and only abort if that fails. Also maintain the changes + count. + + * providers/local/camel-local-summary.c + (camel_local_summary_load): Remove summary_check code from here. + (camel_local_summary_check): Sync index/summary here, if we were + successful. + + * providers/local/camel-spool-folder.c + (camel_spool_folder_new): If we have filter-new-messages-on-inbox + set and we just opened inbox, turn on filtering on this folder. + (camel_spool_folder_construct): Keep track of changes for the + folder, so that filter-new-messages works right (?) + + * providers/local/camel-spool-store.c (get_folder): Pass 'INBOX' + as the folder name, not the path. + + * camel-folder-search.c (search_not): Modified patch from + <peterw@ximian.com> since the summary is messageinfo's, not + strings. + + ** Ok so the problem with the stuff below is that maildir/spool + 'summary_load' throws away all events, including recents, joy eh? + + * providers/local/camel-maildir-summary.c (maildir_summary_check): + Add new messages to the recent changeinfo. + + * providers/local/camel-spool-summary.c: Mark 'new' message as + recent, for later processing if required (i.e. 'filter new + messages'). + + * camel-store.c (construct): new function, cascade up construct + method and check for 'filter' param, and set accordingly for any + one that might want it. + + * providers/imap/camel-imap-store.c (construct): map the + param_filter_inbox flag to the store->flags as + CAMEL_STORE_FILTER_INBOX. + + * camel-store.h (CAMEL_STORE_FILTER_INBOX): new flag to tell it to + filter inbox. + + * providers/imap/camel-imap-folder.h: Removed do_filtering flag + from CamelImapFolder. + + * providers/imap/camel-imap-folder.c (imap_update_summary): Remove + the 'recents' parameter, use the 'changes' parameter instead to + convey this info. + (camel_imap_folder_changed): Changed for update_summary api + change. Now always just emit the changed event if we have any + changes to report, filtering code removed, handled upstream. + (filter_proc): + (filter_free): Removed old filtering code. + (camel_imap_folder_new): Set the filter_recent flag on the folder + if we're the inbox and filtering of inbox is enabled. + + * camel-folder.c (folder_changed): If we have 'recent' messages, + and are set to filter recents, then freeze the folder and launch a + thread to do the processing (or similar if threading not enabled). + (thaw): Make sure we emit the changed signal outside of owning the + lock and if things have changed. Also, no longer bother + downgrading folder_changed events to message_changed events. + + * camel-folder.h (struct _CamelFolder): Added filter_recent flag + -> signifies all recent messages in folder should be filtered. + + * camel-session.c: (camel_session_thread_msg_new, + camel_session_thread_msg_free, camel_session_thread_queue, + camel_session_thread_wait): code to handle async operations as + part of camel processing. + (camel_session_finalise): free thread_lock, destroy thread, active + hash, etc. + (camel_session_init): init thread, active hash, etc. + (camel_session_class_init): Init virtual functions. + (session_thread_msg_new, session_thread_msg_free, + session_thread_destroy, session_thread_received, + session_thread_queue, session_thread_wait): default implementation + of session threads stuff. + +2001-09-17 Not Zed <NotZed@Ximian.com> + + * camel-folder.c (camel_folder_change_info_recent_uid): New + function to add a 'recent' uid to the change info. + (camel_folder_change_info_clear): Clear recent list. + (camel_folder_change_info_free): Free recent list. + (camel_folder_change_info_new): Setup recent list. + + * camel-folder.h: Added a uid_recent item to the folder_changed + event data. + + * providers/local/camel-maildir-store.c (scan_dir): Free new in + the right block. + + * providers/local/camel-local-provider.c: Add local config entries + to filter on new messages in spool and maildir provider. + + * camel-vee-folder.c (vee_folder_construct): Remove the assertion + which stops ? in names from being allowed. + +2001-09-18 Dan Winship <danw@ximian.com> + + * camel-data-wrapper.c (camel_data_wrapper_is_offline): Virtualize + this. + + * camel-medium.c (is_offline): A medium is offline if its content + object is offline. + + * camel-multipart.c (is_offline): A multipart is offline if any of + its subparts are offline. + +2001-09-18 Jeffrey Stedfast <fejj@ximian.com> + + * camel-charset-map.c: Added korean charset conversion. + +2001-09-17 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (delete_folder): Don't process + the ImapResponse data, we don't want to block forever on data we + don't care about... + (create_folder): Use get_folders_online() instead of + get_folder_info_online(). + + * camel-folder.c: Reverted previous changes. + +2001-09-17 JP Rosevear <jpr@ximian.com> + + * Makefile.am: Helpful install-exec-hook debugging output + +2001-09-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder.c (camel_folder_get_uri): New function to get the + URI of a folder. + (get_uri): Default implementation. + +2001-09-14 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (camel_vee_folder_set_folders): New function, + set the complete list of folders on a vfolder, all at once. + (camel_vee_folder_set_expression): If we set the query to be the + same thing, dont do anything. + + * camel-vee-store.c (camel_vee_store_init): Turn off vtrash for + this store. + + * camel-store.c (camel_store_init): Enable vtrash by default via + flags. + (camel_store_get_trash): REturn NULL if the store doesn't support + vtrash. + (init_trash): Dont init if store doesn't support vtrash. + + * camel-store.h: Add a new flags CAMEL_STORE_VTRASH -> store + supports vtrash. + +2001-09-13 Not Zed <NotZed@Ximian.com> + + * camel-vee-store.c (vee_get_folder_info): Implement. + (build_info): Used to build a folder record from the folders + hashtable. + (vee_delete_folder): Implemented, remove folder from hashtable. + (vee_rename_folder): Implemented, remove old folder from + hashtable, add new one and rename its guts too. + + * camel-store.c (camel_store_rename_folder): Do nothing if we're + not asked to actually change names. Also dont do the renamed + cache check till after we've called the subclass. + (camel_store_delete_folder): Call the subclass delete firs,t then + make sure the cache is right. + + * camel-vee-folder.c (vee_folder_construct): Remove support for + name?query syntax to setup vfolder. Abort if such syntax is used. + (camel_vee_folder_new): Removed code that handles ? syntax, etc. + (vee_folder_build_folder): Handle unset expression, treat it as an + empty search. + (camel_vee_folder_set_expression): Oops, actually set the + expression. + + * camel-vtrash-folder.c (camel_vtrash_folder_new): Dont use + name?query syntax to setup vfolder, but set the expression + directly. Also fixes a small memleak. + +2001-09-12 Not Zed <NotZed@Ximian.com> + + * camel-store.c (camel_store_delete_folder): Fixed warnings with a + cast. + (camel_store_rename_folder): " + +2001-09-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-url.c (camel_url_set_param): Use g_datalist_set_data_full + so that the data will be free'd when we clear the list. + +2001-09-14 Dan Winship <danw@ximian.com> + + * camel-file-utils.c (camel_file_util_encode_string, + camel_file_util_decode_string): Don't claim failure when + reading/writing the empty string. + +2001-09-14 JP Rosevear <jpr@ximian.com> + + * Makefile.am: use install hook instead of install rule to + guarantee we run after installation + +2001-09-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_folder): Don't + reuse the exception if it has already been set. + (camel_filter_driver_filter_message): Same here. Also use the new + return value from camel_filter_search_match(). + + * camel-filter-search.c (camel_filter_search_match): Return an + integer (matched, no-match, or error). + + * providers/local/camel-mbox-folder.c (mbox_append_message): Do + error-checking based on function return values rather than + exceptions as it's possible for them to be NULL. + (mbox_get_message): Same. + + * providers/imap/camel-imap-folder.c (imap_append_offline): Pass + an exception to the cache. + (imap_append_online): Same. + (imap_append_resyncing): Here too. + (imap_copy_offline): And here. + (handle_copyuid): Pass NULL as the exception here... + (parse_fetch_response): And finally here. + + * providers/imap/camel-imap-message-cache.c + (camel_imap_message_cache_insert): + (insert_setup): + (camel_imap_message_cache_insert_stream): + (camel_imap_message_cache_insert_wrapper): + (camel_imap_message_cache_copy): Take an exception argument and + set it on error. + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): Convert the charset + to the iconv-friendly name. + + * camel-charset-map.c (camel_charset_to_iconv): Add code to + convert windows-[cp]#### charsets to their iconv-friendly format + of cp####. + + * camel-pgp-context.c (crypto_exec_with_passwd): Return -1 on + failure. + +2001-09-12 Larry Ewing <lewing@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_mbox): free + the source url in the nonfailure case. + +2001-09-12 Not Zed <NotZed@Ximian.com> + + * camel-folder-search.h: Change the 'not' virtual method from an + immediate e-sexp function to a non-immediate one, which is what it + should be. + + * camel-folder-search.c (search_not): Implement a 'not' function + ourselves. If 'not' on a vector value, then not over all items + in the summary. + (builtings[]): Change the 'not' builtin to be a non-immediate + function. + +2001-09-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_mbox): Unref + the message info. + +2001-09-10 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-maildir-store.c (get_folder_info): Pass in + a hashtalbe used for finding visited nodes. + (inode_hash): + (inode_equal): + (inode_free): Helper functions for visited node checks, hashes on + inode + device number. + (scan_dir): Dont re-visited directories we've already visited, use + inodes + device number. + Also, if the folder doesn't contain cur/tmp/new, mark it as + noselect, but continue to recurse folders, if asked. + + * camel-folder.c (move_messages_to): Progress reporting while + moving messages. + + * camel-store.c (camel_store_delete_folder): Make sure we remove + the folder from our vtrash, if we have it in our opened set, and + also remove it from our hashtable. + (camel_store_rename_folder): Remove the old folder name from the + folder cahce, if it is there. + +2001-09-10 Jeffrey Stedfast <fejj@ximian.com> + + * camel-charset-map.c (camel_charset_to_iconv): Get rid of the + g_warning, we no longer really need that. + +2001-09-10 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-store.c (camel_imap_msg_new): Forgot + to return the newly allocated msg. + +2001-09-08 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-summary.c (spool_summary_sync_full): + Likewise. + + * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): + Fix the wording. + + * camel-tcp-stream-raw.c (stream_read): Save errno around fcntl + call in cancellable read case. Also, loop while we get EINTR. + This might fix some weird reconnect behaviour with pop. + (stream_write): " + +2001-09-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (ssl_bad_cert): #if 0 out the code that + was hopefully going to fix bug #5325 because the functions I used + seem to have been deprecated. *sigh*. + + * camel-remote-store.c (camel_remote_store_finalise): Disconnect + from the service here otherwise the locks will be destroyed and by + the time CamelService finalizes we'll crash or hang. + + * providers/smtp/camel-smtp-transport.c (smtp_data): Make sure to + unref the mime filters when we finish with them. + +2001-09-07 Ettore Perazzoli <ettore@ximian.com> + + * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): + s/Synchronising/Synchronizing/. + (mbox_summary_sync_quick): Likewise. + (summary_rebuild): s/Summarising/Summarizing/. + +2001-09-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-multipart.c (camel_multipart_set_boundary): Take a const + char * instead of a char *. + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Reuse the + original boundary instead of generating our own. + +2001-09-06 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-folder.c (filter_proc): Thread + function to perform filtering. + (filter_free): Free the filter object. + (camel_imap_folder_changed): If we have threads enabled, then + queue up a request to perform filtering. For bug #4422. + + * providers/imap/camel-imap-store.c (camel_imap_msg_new): Create a + new 'imap msg'. + (camel_imap_msg_queue): Queue an 'imap msg'. + (async_received): Handle receiving of imap msg in async thread. + (async_destroy): Handle destroying of imap msg. + (camel_imap_store_finalize): Destroy thread when done. + (camel_imap_store_init): Setup thread. + + * providers/imap/camel-imap-store.h: Added an ethread to the + store, for async processing. + +2001-09-06 Jeffrey Stedfast <fejj@ximian.com> + + * camel-remote-store.c (remote_recv_line): Use + camel_stream_buffer_read_line() instead of duplicationing the + functionality. Also, the previous way was broken anyway. What if a + line was the same length as our buffer? Then we'd go and read a + second line and a third and so on until they weren't the same + length, leaving \r's in the middle of the buffer. + +2001-09-06 Dan Winship <danw@ximian.com> + + * providers/pop3/camel-pop3-store.c (pop3_get_response): Fix this + to always set an exception if it returns POP3_FAIL, as documented. + + * providers/pop3/camel-pop3-folder.c (pop3_get_message_stream): + Revert. + +2001-09-06 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-folder.c (pop3_get_message_stream): + Set an exception on POP3_FAIL as well. + +2001-09-06 Dan Winship <danw@ximian.com> + + * providers/pop3/camel-pop3-provider.c: #ifdef out the "delete + after N days" option in pop3_conf_entries, since it won't be done + for 1.0. + +2001-09-04 Jeffrey Stedfast <fejj@ximian.com> + + * camel-remote-store.c (remote_disconnect): Too late to sync the + folders here... if this is gonna happen at all it should be done + in the provider. + + * camel-service.c (camel_service_finalize): Do a clean disconnect. + +2001-08-30 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-spool-store.c (get_inbox): Return the + default folder (ie. INBOX) rather than saying we don't support an + inbox. + + * camel-tcp-stream-ssl.c: #include pk11func.h. + (ssl_bad_cert): Use CERT_GetDefaultCertDB. + +2001-08-29 Jeffrey Stedfast <fejj@ximian.com> + + * camel-smime-context.c (smime_sign_prepare): Do the same here as + what we did in the pgp code a moment ago. + (smime_sign_restore): And again here. + (smime_sign): And update thise code to pass in the address of the + encodings list when restoring parts. + + * camel-pgp-mime.c (pgp_mime_part_sign_prepare_part): Special-case + message/rfc822 mime parts - don't set an encoding on these, + instead traverse into their subparts and set the encodings for + those. + (pgp_mime_part_sign_restore_part): Reverse any operations done to + message/rfc822 parts in the above prepare_part() function and also + take a pointer to a GSList of encodings instead of just a GSList + so we can properly keep track of which encoding we are on. + (camel_pgp_mime_part_sign): Pass in the address to the encodings + list when restoring parts. + +2001-08-29 Not Zed <NotZed@Ximian.com> + + * providers/pop3/camel-pop3-folder.c (pop3_sync): Add progress + reporting to deleting messages. Dont change the calculation to a + bloody float. Bug #6189. + +2001-08-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (crypto_exec_with_passwd): Initialize buf + and diag_buf to NULL, hopefully this fixes the crash if the + select() times out. + (pgp_encrypt): Argh. What was I thinking? Don't use "-r recipient" + as an argument, instead use "-r" and "recipient" as 2 separate + arguments to pgp. This might fix the "gpg only encrypts to my + private key" bug? + +2001-08-28 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-store.c (create_folder): Whoops. + Double-free and FMR = bad. + + * camel-remote-store.c (remote_send_string): Don't reveal the + user's IMAP password if their server supports LITERALPLUS. Also + add some more dashes to make it line up nicely :-) + +2001-08-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (ssl_bad_cert): If the user accepts the + certificate, add it to the database as a trusted CA. + +2001-08-28 Peter Williams <peterw@ximian.com> + + * camel-object.c (camel_object_unref): Make the locking more + fine-grained on destruction; specifically, don't hold the + type lock while calling the finalize functions. + +2001-08-27 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-local-provider.c: Changed the + description/names of some of the local providers to try and + clarify the meanings. + + * providers/pop3/camel-pop3-provider.c: Simplify the POP + description - we want short but sweet. + + * providers/imap/camel-imap-provider.c: s/IMAPv4/IMAP + +2001-08-27 Not Zed <NotZed@Ximian.com> + + * camel-mime-part-utils.c (convert_buffer): re-read the iconv man + page, and treat the return value properly. It returns the number + of non-reversible conversions performed, not the number of output + characters, sigh. + (check_html_charset): Changed to just take a buffer of data, and + not the mime parser. + (simple_data_wrapper_construct_from_parser): Since we dont need + the charset till we have all the data, search for the charset + after we've read the data, if we have html data with no charset in + the header. + (simple_data_wrapper_construct_from_parser): Remove the + seekable_source stuff. + + * Re-apply patches from before. + +2001-08-25 Not Zed <NotZed@Ximian.com> + + ["Summarising" and "Synchronising" are spelt with a "s" in + ENGLISH] + + * providers/local/camel-mbox-summary.c (mbox_summary_sync_quick): + s/Synchronizing/Synchronising/. + + * providers/local/camel-mbox-summary.c (summary_rebuild): + s/Summarizing/Summarising/ + +2001-08-24 Jeffrey Stedfast <fejj@ximian.com> + + * camel-disco-diary.c (camel_disco_diary_replay): Use fseek + instead of fseeko since we want to be portable and use ftell + rather than ftello for the same reason. + (camel_disco_diary_empty): Same here. + +2001-08-24 Peter Williams <peterw@ximian.com> + + * Revert Not Zed's previous commits as they apparently can cause + serious data loss for POP3 users. + +2001-08-24 Ettore Perazzoli <ettore@ximian.com> + + ["Summarizing" and "Synchronizing" are spelt with a "z" in the + default locale, that happens to be "en_US".] + + * providers/local/camel-mbox-summary.c (mbox_summary_sync_quick): + s/Synchronising/Synchronizing/. + + * providers/local/camel-mbox-summary.c (summary_rebuild): + s/Summarising/Summarizing/ + +2001-08-24 Not Zed <NotZed@Ximian.com> + + * camel-mime-part-utils.c (convert_buffer): Limit the maximum + output buffer size. iconv bugs? returns E2BIG forever on some + (valid) data? + + * providers/local/camel-spool-summary.c (summary_rebuild): + Likewise. + + * providers/local/camel-mbox-summary.c (summary_rebuild): + Summarising is spelt with an s. + +2001-08-23 Not Zed <NotZed@Ximian.com> + + * camel-mime-part.c (write_to_stream): If we have rawtext, then + dont do any charset conversion, only encoding/crlf conversion. + + * camel-data-wrapper.h (struct _CamelDataWrapper): Added 'rawtext' + member, says the character encoding is raw, not utf8. + + * providers/local/camel-spool-summary.c + (spool_summary_sync_quick): Synchronising is spelt with an s, not + a z. + (spool_summary_sync_full): " + + * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): + No, synchronising is spelt with an s. + (mbox_summary_sync_quick): " + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Remove the + warnings which aren't going anywhere fast. + (convert_buffer): Function to convert a bytearray of textual + content from one charset to another. If the charset doesn't exist + or fails, then do no conversion. + (simple_data_wrapper_construct_from_parser): First, read in data, + then try and convert it using the specified charset if supplied. + If that fails, then dont do any conversion, and leave as raw. + Also, if we have any x-* charsets, then dont do any processing. + +2001-08-23 Peter Williams <peterw@ximian.com> + + * providers/local/camel-mbox-summary.c (summary_rebuild): Add a + missing \n to the end of a printf. + + * providers/local/camel-spool-summary.c (summary_rebuild): Same. + +2001-08-22 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-folder.c (pop3_generate_uids): + Oops. Fixed a mis-use of GPtrArray. If we set_size, then using + g_ptr_array_add will assume `size' elements have already been + initialized and will start appending on to the end. + +2001-08-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (pgp_verify): Turn on --batch and reenable + gpg keyserver lookups. + (pgp_decrypt): Disable keyserver lookups if we are disconnected. + +2001-08-21 Dan Winship <danw@ximian.com> + + * camel-folder-thread.c + (camel_folder_thread_messages_new_summary): Fix the duplicate + message check so it doesn't mess up threading when a reply appears + in the folder before the message it's a reply to. Fixes bug #3357. + (camel_folder_thread_messages_new): Likewise, although I don't + think this function is used any more. + +2001-08-20 JP Rosevear <jpr@ximian.com> + + * Makefile.am: build a static camel for the addressbook conduit + +2001-08-20 Ettore Perazzoli <ettore@ximian.com> + + * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): + s/Synchronising/Synchronizing/. + (mbox_summary_sync_quick): Likewise. * + providers/local/camel-spool-summary.c (spool_summary_sync_full): + Likewise. + (spool_summary_sync_quick): Likewise. + +2001-08-20 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (create_folder): Get the + entire directory structure for the folder we just created, meaning + if we created a folder named "test.mailbox" where test didn't + previously exist, get the listing for "test" and "test.mailbox". + + * providers/imap/camel-imap-utils.c (imap_parse_folder_name): New + function. + +2001-08-19 Chris Toshok <toshok@ximian.com> + + * camel-store.h: #include <sys/types.h> for mode_t on freebsd. + +2001-08-19 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-folder.c (pop3_generate_uids): Make + sure the generated UID is non-NULL before appending it to the + array of UIDs. How would this even happen? I have no clue... + +2001-08-17 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_update_summary): Start + scanning new messages at maxuid + 1 rather than uidval + 1? Maybe + I'm missing the logic, but anyways...this might fix bug #5348. + +2001-08-16 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (imap_keepalive): If we are + online and message flags have changed in the current folder, sync + the flags else do a NOOP. This fixes bug #4666. Also lock around + the NOOP command. + + * providers/imap/camel-imap-folder.c (imap_sync_online): Don't + ever send "STORE FLAGS.SILENT ()" since Cyrus imapd doesn't like + this (and maybe others too?) so what we'll do instead is to send + "STORE -FLAGS.SILENT (\Seen \Answered \Deleted \Marked)" to clear + all the flags (since this is in essence what we want to do + anyway). + +2001-08-16 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-store.c (imap_connect_online): Fix + this again. Sigh. Problem of namespace = "" may not yet be + completely solved. + +2001-08-15 Peter Williams <peterw@ximian.com> + + * camel-tcp-stream-openssl.c (ssl_error_to_errno): New + function. Try to approximate the SSL error into errno. + (errlib_error_to_errno): New function, try to approximate + OpenSSl's error library's error (ERR_*) into errno. + (stream_read): Try to set errno using ssl_error_to_errno. + (stream_write): Same. + (open_ssl_connection): Same. + + * providers/imap/camel-imap-store.c (imap_connect_online): Oh + crap, huge killer typo. + +2001-08-14 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-store.c (imap_connect_online): + Canonicalize store->namespace to end in store->dir_sep, once both + values are known. The %F-related code makes this + assumption. Probably fixes a bug reported on the mailing list. + +2001-08-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (camel_store_get_folder): After talking to NotZed, + it turns out I was wrong after all. + (store_sync): Create a copy of the folder-cache that owns a ref on + each of the folders so that if one of the folders get's finalized + inside store_sync(), we don't run into any locking issues. This is + mostly meant to solve a problem in IMAP (#6089). + +2001-08-13 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-store.c (delete_folder): Fix a leak. + + * providers/imap/camel-imap-utils.c (imap_namespace_concat): Bleah, + handle when namespace = NULL (can happen upon initial open of mailbox.) + + * providers/imap/camel-imap-command.c (imap_command_strdup_vprintf): + Don't crash when %F'ing with an empty folder name and NULL namespace. + +2001-08-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (camel_store_get_folder): We need to be ref'ing + the folder if/when we add it to the hash. This may fix bug #6089? + (camel_store_get_folder): Nevermind, reverted the fix. + (camel_store_get_folder): No, I wasn't on crack before after + all...if we don't ref here, then we're open to a race condition + later. + +2001-08-11 Ettore Perazzoli <ettore@ximian.com> + + * providers/local/camel-spool-summary.c (summary_rebuild): + s/summarising/summarizing/. + (summary_rebuild): Likewise. + + * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): + s/summarise/summarize/. + (mbox_summary_sync_quick): Likewise. + (summary_rebuild): Likewise. + (mbox_summary_check): Likewise. + +2001-08-10 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-utils.c (imap_quote_string): Added an + assert - at this point a backtrace would be more useful than a + transaction log for debugging. + + * providers/imap/camel-imap-command.c (imap_command_start): Return + FALSE here, not NULL. + + * providers/imap/camel-imap-folder.c (imap_rescan): Don't + g_strdup() the uid into the trigger_event call. + + * providers/pop3/camel-pop3-folder.c (pop3_get_message_stream): + Set the total bytes expected to 0 if the response is empty too. + (pop3_refresh_info): Return of there was an error generating pop3 + uids. + + * camel-mime-utils.c (header_raw_check_mailing_list): regfree the + pattern before continue'ing. This was showing up quite a bit under + purify. + +2001-08-09 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-utils.c (imap_parse_string_generic): A + quoted string cannot contain \n's so check for those as well. + (imap_atom_specials): Update this to fix bug #6553. + +2001-08-08 Jon Trowbridge <trow@ximian.com> + + * camel-filter-search.c (get_source): Remove trailing stuff from + URLs before returning. (Done in an evil way, not in the good way + suggested by fejj. :)) (Bug #4876) + +2001-08-08 jacob berkman <jacob@ximian.com> + + * camel-search-private.c (camel_search_header_match): check for + NULL name and addr (fixes a bug i was about to report) + +2001-08-08 Not Zed <NotZed@Ximian.com> + + * camel-filter-search.c (check_header): Properly determine match + type to pass to header_match. + (address_matches_exactly): Removed, effectively added to + camel_search_header_match. + + * camel-folder-search.c (check_header): Properly determine the + match type to pass to header_match. + + * camel-search-private.c (camel_search_header_match): Add a new + parameter 'type' which is the type of header we're matching + against. ASIS means utf8 format, ADDRESS means an internet + address ('formatted'), ADDRESS_ENCODED means a raw address header, + ENCODED means rfc 2047 encoded text. + (header_match): Move original logic here, have search_header_match + call it as appropriate for the 'type' of match. + +2001-08-07 Not Zed <NotZed@Ximian.com> + + * camel-session.c (camel_session_class_init): Only init the vee + provider struct once (if we're subclassed this will get called + multiple times). + + * camel-object.c (obj_finalize): Removed a bit of a debug that + crept in with jacob's poolv patch (?). + +2001-08-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-search.c (address_matches_exactly): New function to + do danw's address "is" comparison (as specified in bug #5886. + (check_header): Special-case address-type headers when we are + doing an exact match to use the address_matches_exactly function. + +2001-08-06 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-folder.c (pop3_get_message_stream): + Modify to take a headers_only argument which will then only fetch + message headers. + (pop3_generate_uids): Pass in TRUE for headers_only. + (pop3_get_message): Pass in FALSE for headers_only and move the + camel_operation() stuff out of get_message_stream and in to here + instead. + (pop3_generate_uids): We also need to be using i+ 1 as the id + since we are starting at 0. + +2001-08-06 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-folder.c (pop3_get_message_stream): + New internal function to get a message stream by message sequence + id (so that we can share code between pop3_get_message and + pop3_generate_uids). + (pop3_get_message): Use pop3_get_message_stream. + (pop3_generate_uids): New function to generate UIDs based on the + message - this fixes bug #1256. + (pop3_refresh_info): If the server doesn't support UIDL, call + pop3_generate_uids to get our list of UIDs. + + * providers/imap/camel-imap-store.c (get_folder_info_online): + Don't strstr for noselect=yes, that's just plain broken. + +2001-08-06 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_rescan): Fix off-by-one + error in cleaning up deleted messages at the end of the folder. + Fixes bug #5585 and maybe others. + + * providers/imap/camel-imap-store.c (get_folder_info_online): Do a + refresh_info on the selected folder before looking at its unread + count. Should fix bug #4944. + +2001-08-06 Peter Williams <peterw@ximian.com> + + Completely hide the namespace from everything external to the IMAP + code, which Dan W says is the way it should be. + + * providers/imap/camel-imap-command.c + (imap_command_strdup_vprintf): Add a new %F argument, which is like + %S but will add the namespace (for folder names). + (camel_imap_command): Use %F here. + + * providers/imap/camel-imap-utils.c (imap_parse_list_response): + Changed to strip out the namespec when returning *folder. In order + to do this we need to be passed the CamelImapStore. + (imap_concat): Move to here from camel-imap-store.c, un-static + (imap_namespace_concat): New function, adds the namespace to the + folder name, unless it's INBOX. + + * providers/imap/camel-imap-utils.h: Prototypes. + + * providers/imap/camel-imap-store.c (imap_connect_online): Extra + arg to imap_parse_list_response. + (imap_connect_offline): Here too. + (get_folder_status): Use %F. + (get_folder_online): Here too. + (delete_folder): Here too. + (create_folder): Here too, and arg to imap_parse_list_response. + (parse_list_response_as_folder_info): Arg to i_p_l_r. + (get_subscribed_folders_by_hand): Use %F. + (get_folders_online): Here too. + (get_folder_info_online): Instead of checking for NULL @name, check + for name = NULL or "", and set to "" instead of namespace. Pass "" + instead of namespace to camel_folder_info_build. + (subscribe_folder): Use %F. + (unsubscribe_folder): Here too. + + * providers/imap/camel-imap-folder.c (imap_get_full_name): This + now just returns folder->full_name. + (do_append): Use %F + (do_copy): Here too. + +2001-08-06 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (pgp_verify): Always do --no-auto-key-retrieve. + +2001-08-03 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (pgp_verify): Minor changes to the iconv + code so that it does the check in the return value of iconv() just + like the code in camel-mime-utils.c in case this fixes Bo Rosen's + gpg bugs (but I doubt this will change anything?). + +2001-08-03 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_connect): First + check to make sure that service->url->authmech is non-NULL before + passing it into strcmp to avoid a segfault. + + * camel-pgp-context.c (pgp_decrypt): Sigh, if gpg returns '1' it + means that the key is bad but it did succeede in decrypting the + block so to make users happy (even though I find this a + questionable action) we are going to ignore the error and show it + to the user anyway. This fixes bug #6136. + +2001-08-03 Not Zed <NotZed@Ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_connect): special + case popb4smtp auth before we try and connect, and do the magic + here first. + +2001-08-02 Not Zed <NotZed@Ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_connect): Check for + POPB4SMTP separate to the esmtp auth list. + (smtp_auth): If creating the sasl object means it is + already authenticated, then exit early. Sort of 'clean hack' to + help popb4smtp work. + (smtp_auth): Unref the sasl object, clean up a memleak i think. + + * providers/smtp/camel-smtp-provider.c + (camel_provider_module_init): Added POPB4SMTP auth type. + + * camel-sasl.c (camel_sasl_authtype): Added POPB4SMTP type. + + * camel-sasl-popb4smtp.c: New file for pop before smtp + 'authentication'. + + * Makefile.am (libcamel_la_SOURCES, HEADERS): Add + camel-sasl-popb4smtp.[ch]. + +2001-08-01 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-mbox-folder.c (mbox_lock): If we fail to + get the lock, make sure we close our locking fd, and reset it. + Fixes the crash part of 5095. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): + Slightly re-arranged filter/change notification logic. If we;re + filtering, freeze the folder till we're finished to smooth the ui + for new mail. + +2001-07-31 Not Zed <NotZed@Ximian.com> + + * camel-folder.c (camel_folder_init): Changed mutexes to + e_mutexes, folder lock recursive. This fixes the imap filtering + bug, or at least some cases of it. + (camel_folder_finalize): Free mutexes. + + * camel-private.h (CamelFolderPrivate): Changed mutexes to + e_mutexes. + +2001-07-25 Not Zed <NotZed@Ximian.com> + + * camel-folder.c (camel_folder_change_info_*): Change the + return if fail's into asserts. + (camel_folder_change_info_free): Don't let it accept a NULL + argument. This isn't g_lib so we dont have to. + +2001-07-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_decode_param): Fix the fix that fixes + broken mailer behavior. We want to make sure that the user's + locale charset is non-NULL before we pass it off to + iconv_open(). If it *is* NULL, we want to use iso-8859-1. + +2001-07-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-url.c (camel_url_free): Allow the url to be NULL just like + the libc free convention. + +2001-07-26 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-command.c (camel_imap_command_start): + Send an IMAP command, but don't wait for responses. + (camel_imap_command_response): Read a single line of response from + the server. + (camel_imap_command, etc): Reimplement in terms of the new code. + + * providers/imap/camel-imap-folder.c (imap_rescan): Use + camel_imap_command_start and camel_imap_command_response, and + call camel_operation_progress after each line read from the + server. + (imap_update_summary): Likewise, although with more fudging on the + precentages... Also, fix this so that if none of the new messages + are cached, it only does a single FETCH, and if some of them are + cached, it does two FETCHes (one to get the UIDs, FLAGS, and + SIZEs, and another to get the bodies of all of the messages that + aren't cached now that it knows the relevant UIDs). This should + speed up startup a bunch (especially if you have high bandwidth + but also high latency to the IMAP server). + +2001-07-25 Dan Winship <danw@ximian.com> + + * camel-mime-utils.c (mail_mlist_magic): Add another Sender + pattern. + +2001-07-24 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): + Change the break into a continue, we should process as many as we + can find. + + * camel-folder.c (camel_folder_move_messages_to): If we have no + uid's to copy, exit here before going any further. Some code + internally [imap] assumes there are uids to copy otherwise it can + segfault. + (camel_folder_copy_messages_to): Same. + +2001-07-24 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_decode_param): Handle broken mailers + that send unencoded 8bit header params. And there was much + rejoicing. Rah. + + * camel-url.h (CAMEL_URL_HIDE_ALL): New #define, and there was + much rejoicing. Rah. + +2001-07-24 Not Zed <NotZed@Ximian.com> + + * camel-operation.c (camel_operation_register, unregister): Added + some warnings for bad cases. + +2001-07-23 Not Zed <NotZed@Ximian.com> + + * camel-operation.c (camel_operation_register): Only insert a hash + entry if we haven't already. + (camel_operation_unregister): Only remove the has entry if the id + is a real thread. + +2001-07-23 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (do_move): Slight fix for when source == + destination (we don't want to do this action because on-demand + filtering would then delete the messages it supposedly "moved"). + +2001-07-23 Not Zed <NotZed@Ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_auth, smtp_helo, + send_to): Added some operation progress reporting. Actual data + transfer is 'tricky' because of the layers used. + (smtp_auth): Instead of checking exception_is_set, use + challenge==NULL to test if sasl_challenge_base64 failed. + + * providers/local/camel-mbox-summary.c (mbox_summary_sync): Remove + peters changes below and put in a better fix. These functions + already return -1 on error, just use that, and not worry about + building our own exception redundantly. + + * camel-service.c (camel_get_host_byname): Turn the progress into + a transient event. + +2001-07-20 Peter Williams <peterw@ximian.com> + + * providers/local/camel-mbox-summary.c (mbox_summary_sync): More + usage fixes for CamelException. Check our own exception for + summary_update and xfer it out if an error occurred. + +2001-07-20 JP Rosevear <jpr@ximian.com> + + * Pull up test fixes to get them building again + +2001-07-20 Not Zed <NotZed@Ximian.com> + + * camel-charset-map.c (camel_charset_get_iconv_friendly_name): + renamed to camel_charset_to_iconv() to make it just a little more + consistent and not so long & fixed callers. + +2001-07-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-filter-charset.c + (camel_mime_filter_charset_new_convert): Convert to the + iconv-friendly charset names. + + * providers/imap/camel-imap-store.c (create_folder): Fixed a + compiler warning about returning without a value in a non-void + function. Blah. + + * camel-mime-part.c (process_header): Pass the locale charset as + the default_charset to header_decode_string(). + + * camel-folder-summary.c (camel_folder_summary_format_string): + Pass the locale charset as the default_charset to + header_decode_string(). + (content_info_new): Same. + + * camel-mime-message.c (process_header): Pass the locale charset + as the default_charset to header_decode_string(). + + * camel-mime-utils.c (append_8bit): New helper function who's + purpose is similar to append_latin1() but for 8bit text that we + are assuming is not latin1. + (header_decode_text): Now takes a default_charset parameter and + calls append_8bit when appropriate. + (header_decode_string): Also takes a default_charset parameter + now. + (header_decode_mailbox): Pass NULL as the default_charset to + header_decode_string(). + +2001-07-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (pgp_verify): Modified to treat the return + value from camel_charset_locale_name() as a const char*. + + * camel-sasl-digest-md5.c (digest_response): Modified to treat the + return value from camel_charset_locale_name() as a const char*. + + * camel-charset-map.c (camel_charset_locale_name): Modify to + return const char* by returning the static locale_charset which is + created inside of camel_charset_map_init(). + (camel_charset_map_init): Find the locale charset here and set the + static variable. + +2001-07-19 Peter Williams <peterw@ximian.com> + + Policy change: NULL url's are no longer allowed in + CamelFolderInfos. They used to signify that the folder was, in + IMAP jargon, NoSelect; now the same effect is achieved by adding a + "noselect=yes" parameter to the end of the URL. As far as I know, + IMAP is the only affected provider. + + * providers/imap/camel-imap-store.c (delete_folder): New + function. Implement folder deletion. + (camel_imap_store_class_init): Set the delete_folder class + function here. + (get_folder_status): New function. Utility wrapper around the + STATUS command. + (create_folder): If the parent folder is NoSelect but is empty, + delete it and recreate it as a a subfolder-containing folder. If + it is NoSelect but contains messages, set an exception. + (parse_list_response_as_folder_info): Always set the FolderInfo's + URL, but add a NoSelect parameter if it isn't selectable. + (get_folder_info_online): Change logic of removing the namespace + to reflect URL change. Same for logic of checking unread counts. + (get_folder_info_online): Use get_folder_status to simplify this. + + * camel-store.c (camel_folder_info_build): When creating dummy + parents, copy the child's URL and set the NoSelect parameter. + +2001-07-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): No need for + `acharset' anymore. + (check_html_charset): Return a const char* and also use + camel_charset_get_iconv_friendly_name() internally. + + * camel-mime-utils.c (rfc2047_decode_word): Remove my iso8859-1 -> + iso-8859-1 hack and use camel_charset_get_iconv_friendly_name() + instead. + (rfc2184_decode): Use camel_charset_get_iconv_friendly_name() + + * camel.c (camel_init): Call camel_charset_map_init(). + + * camel-charset-map.c (camel_charset_map_init): New function to + initialize the charset-equivalent lookup table. To be called by + camel_init(). + (camel_charset_get_iconv_friendly_name): New function to try and + convert a charset into something that iconv is more likely to + accept. + +2001-07-19 Peter Williams <peterw@ximian.com> + + * Revert 7/11/2001 patch for IMAP INBOX filtering at NotZed's + request. + +2001-07-17 Peter Williams <peterw@ximian.com> + + Clean up some exception misusage. + + * providers/imap/camel-imap-command.c (camel_imap_command): Use + our own internal exception for sending the string and transfer it + to @ex if anything goes wrong. + (imap_read_response): Use our own internal exception for reading + the untagged responses and blah blah blah. + + * camel-session.c (get_service): Use our own internal exception + when constructing the service and transfer it to @ex if anything + goes wrong. + + * camel-remote-store.c (remote_recv_line): Instead of having + gboolean exception, use our own internal exception and copy + it to @ex if anything goes wrong. + + * camel-store.c (store_sync): Create an internal exception + because sync_folder() checks it for validity. Transfer it to + @ex when done. + + * camel-exception.c (camel_exception_get_description): If @ex is + NULL, complain - passing NULL exceptions to Camel is okay, but + there should be no circumstances under which they're then + examined. + (camel_exception_get_id): Same here, + (camel_exception_xfer): NULL-protect and warn if transferring from + a NULL exception. + +2001-07-17 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (init_trash): Use CAMEL_VTRASH_NAME. + + * camel-vtrash-folder.h: #define CAMEL_VTRASH_NAME + +2001-07-16 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-command.c (camel_imap_response_free): + Given: + * 4 EXISTS + * 1 EXPUNGE + We have to pass 3, not 4 to camel_imap_folder_changed for the + exists count. Fixes ximian bug #2112 (finally!). + +2001-07-14 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): + If the message info for an expunged message is NULL, then just + break out - maybe a message was expunged that we were never + notified even existed? + +2001-07-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (rfc2047_decode_word): Added a hack to + convert charsets in the format iso8859-1 to iso-8859-1 because it + seems to be more iconv friendly. It has been reported that on some + systems, iconv doesn't know about iso8859-1 while it *does* know + about iso-8859-1. See bug #4530. + +2001-07-13 Peter Williams <peterw@ximian.com> + + * Makefile.am (install-exec-local): Let people install as + non-root, but give them a bigass warning so they're not allowed to + complain when it doesn't work right. + + * camel-remote-store.c (sync_remote_folder): New function: hash + table callback. + (remote_disconnect): If cleanly disconnecting, sync our + folders. Fixes deadlocks on exit (folders syncing after store + disconnects) and also makes sense. + +2001-07-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-uid-cache.c (camel_uid_cache_new): We now use a structure + as the bucket data rather than just a cache level so set the save + state to TRUE. + (maybe_write_uid): We only save the uid if the cache levels are + the same *and* if the save state is TRUE. + (free_uid): Free the state value. + (camel_uid_cache_get_new_uids): New uids that get added to the + cache start with a save state of FALSE. + (camel_uid_cache_save_uid): Set the save state of the uid to + TRUE. What should we do if the uid isn't already in the cache? + Currently I make it add the uid, but maybe it shouldn't? + + * providers/imap/camel-imap-folder.c (imap_filter_timeout): Update + to reflect CamelFilterDriver API changes. + + * camel-filter-driver.c (camel_filter_driver_filter_folder): Take + a cache argument so we can tell the cache whether or not the uid + should be saved (meaning we have successfully filtered it). + +2001-07-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_message): + Okay, I've decided that that user is just on crack. We don't want + to allow filtering of deleted messages or we could get some + unexpected behavior. + (do_move): Oops. My last fix needs to be after the if-statement, + not inside it. + (do_copy): And here too. + +2001-07-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (do_move): Only set p->copied and + p->deleted if the messages are copied without an exception. + (do_copy): Same - but obviously we don't set the p->deleted here + at all. + (camel_filter_driver_filter_message): Since users complained that + they couldn't filter deleted messages for "safe keeping" (WTF? + safe keeping? why were they deleted in the first place then??), I + have taken out the code that optimized filtering by not allowing + deleted messages to be filtered. This fixes bug #4473. + + Note: Users have a warped sense of logic. + +2001-07-12 Not Zed <NotZed@Ximian.com> + + * camel-mime-part-utils.c (extract_metatag_charset): Removed. + (check_html_charset): Replaced with this. + (simple_data_wrapper_construct_from_parser): Call + check_html_charset if we dont have a charset on the content-type, + and we have text/html data. + (check_html_charset): We also need to do qp/base64 decoding + ourselves, sigh. + + * camel-mime-utils.c (html_meta_param_list_decode): Removed. This + was very wrong, the rules for mail headers vastly different from + rules for decoding html elements. + (rfc2184_decode): Move the malloc inside the iconv_open worked, + otherwise we have a memleak. + + * camel-mime-filter-html.c (camel_mime_filter_html_finalize, init, + run, reset): Changed to use camelhtmlparser, and fixed a tiny + memleak. + + * camel-html-parser.c: Made the html indexer tokeniser re-usable. + ONLY TO BE USED INTERNAL TO CAMEL HOWEVER. + (tokenise_step): Slight fix to non-quoted values. + + * camel-folder-summary.c + (camel_folder_summary_info_new_from_message): Removed some code i + wasn't supposed to commit. + + * providers/local/camel-local-summary.c (local_summary_add): Only + set info->size if it is not zero. + (local_summary_add): If we dont get a size from the info passed + in, calculate it using a null stream write. Should do #4392. + +2001-07-11 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part-utils.c (extract_metatag_charset): New function + to extract a meta-tag charset value if it exists. + (simple_data_wrapper_construct_from_parser): Along the same lines + as the code I previously ripped out, but this time use the + mime-parser's seek ability to help us along. Currently I read up + to a 2k buffer size - this is probably overkill, 1k is probably + plenty. + + * camel-mime-utils.c (html_meta_param_list_decode): When we get to + an `=', we must skip past it before trying to grab the param + value. duh. + +2001-07-11 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): Ripped out my code + since it was never being used since the mime parser is not using a + seekable stream (ever?) which pretty much means my code needs to + be done someplace else. + +2001-07-11 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): + Run the filter in its own thread to prevent locking issues. + (imap_filter_timeout): New function that does the filtering called + as a CamelSession timeout. + +2001-07-11 Not Zed <NotZed@Ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_mbox): Create + the messageinfo itself, so we can properly set the size. + + * camel-movemail.c (camel_movemail_solaris): Write out the from + line between each message. + +2001-07-10 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-summary.c (local_summary_add): Copy + the size across from the source message info if supplied. + + * camel-stream-null.c: Added a 'written' member which keeps track + of how much has been written to the stream. + + * camel-movemail.c (camel_movemail): If we have BROKEN_SPOOL + defined, then use the solaris movemail to quote from lines that + sendmail didn't. + (camel_movemail_solaris): Compile this in if BROKEN_SPOOL defined. + +2001-07-10 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (html_meta_param_list_decode): New function + to parse an HTML meta-tag. + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): If the Content-Type + did not contain a charset parameter and it's also a text/html + part, we have 1 last place to look - in the META html tags. *sigh* + + * camel-mime-message.c (camel_mime_message_get_source): + s/gint/unsigned since that's what it should be. + +2001-07-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (pgp_sign): Forget the passphrase if the + user has set that option. + (pgp_clearsign): Same. + (pgp_encrypt): And here... + (pgp_decrypt): And finally here. + (camel_pgp_context_new): Take a `remember' argument. + +2001-07-09 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-maildir-summary.c (maildir_summary_sync): + Oops, e_poolv_set free's it for us, so dont double-free here. + +2001-07-06 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (camel_vee_folder_finalise): Changed so we + dont have the list changing under us, just going to the next node + before we call a function that might change the list is + potentially dangerous (slight mod of peters fix). Hmm, i think it + would've double-unref'd it too(?) + +2001-07-08 Chris Toshok <toshok@ximian.com> + + * camel-tcp-stream-openssl.c (camel_tcp_stream_openssl_finalize): + openssl_table is gone. we now store/get the stream from the + SSL_CTX's app_data. + (stream_read): rework the non-blocking case to account for SSL + possibly buffering data (in which case select will block even + though data is ready to be read), and to account for FreeBSD's + strange behavior of returning -1/EAGAIN even though select said + the fd was ready to be read. + (ssl_verify): openssl_table is gone. + (open_ssl_connection): set the SSL_CTX's app_data to be the + stream, remove the openssl_table code. + +2001-07-06 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_encode_param): Don't allow in to be + NULL, so instead of doing if (in == NULL) return;, make it a + g_return_val_if_fail and later we can make it an assert or + something. + + * providers/local/camel-maildir-store.c (get_inbox): Fixes bug + #1138. + + * providers/local/camel-mbox-summary.c + (camel_mbox_summary_build_from): Make the `day-of-month' digit + take up 2 chars by using "%2d". Fixes bug #3989 for lame mailers + like Pine. + + * camel-pgp-context.c (crypto_exec_with_passwd): Set the pipe fd's + to nonblocking. + +2001-07-06 Peter Williams <peterw@ximian.com> + + * camel-object.c (camel_object_unref): Make sure that after the + finalization event has happened and the finalization functions + have been called that the object still has a zero refcount. + +2001-07-06 Joe Shaw <joe@ximian.com> + + * providers/nntp/camel-nntp-grouplist.c: Add locking to + camel_nntp_get_grouplist_from_server(). + + * providers/nntp/camel-nntp-resp-codes.h: Added + NNTP_EXTENSIONS_SUPPORTED (202). + + * providers/nntp/camel-nntp-store.c (camel_nntp_store_get_extensions): + Check for both NNTP_LIST_FOLLOWS and NNTP_EXTENSIONS_SUPPORTED from + a LIST EXTENSIONS request. (Dunno if NNTP_LIST_FOLLOWS ever comes + out of this, but that's what was already there...) Also, put some + locking around it. + (finalize): e_mutex_destroy() the command lock + (camel_nntp_store_init): e_mutex_new() the command lock. + + * providers/nntp/camel-nntp-store.h: Add locking macros. + +2001-07-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-summary.c (camel_message_info_string): Added an + assert to make sure that `mi' isn't NULL. + (camel_message_info_set_string): Same. + + * providers/imap/camel-imap-command.c (camel_imap_response_free): + Create and use a temporary CamelException for use with + camel_imap_folder_changed. + +2001-07-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (pgp_verify): Send the + --no-auto-key-retrieve argument to gpg if we are in offline mode + so that we don't have to worry about gpg hanging if it can't + connect to the key servers, because now it shouldn't even attempt + to. + +2001-07-05 Chris Toshok <toshok@ximian.com> + + * camel-tcp-stream-openssl.c (ssl_verify): use + X509_STORE_CTX_get_ex_data to get at the SSL* - don't use the + X509_STORE_CTX to look up our stream, since it's not what we used + to insert our stream into the hashtable. + (open_ssl_connection): insert the stream into the hashtable before + calling SSL_connect, as this can cause ssl_verify to be called, + and we need to look up the stream there. remove the stream from + the hashtable if there's an error connecting. + (stream_connect): pass the CamelTcpStreamOpenSSL* to + open_ssl_connection since it handles the hashtable stuff. remove + hashtable stuff from here. + +2001-07-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder.c (camel_folder_copy_messages_to): if source == + dest, just no-op. + +2001-07-05 Peter Williams <peterw@ximian.com> + + * camel-vee-folder.c (camel_vee_folder_finalise): Move this before the + camel_vee_folder_remove_folder because that function modifies p->folders + messing up our iteration. + (camel_vee_folder_finalise): Don't unref our summary; camel-folder now + does this. + + * camel-object.h (CamelObject): Add a 'destroying' flag to CamelObject. + + * camel-object.c (obj_init): Clear 'destroying'. + (camel_object_unref): If 'destroying' then do not send the finalize + event and do not call finalize functions. Otherwise, set destroying + so just in case we get refed (eg event code) we don't get doubly + finalized. + +2001-07-05 Not Zed <NotZed@Ximian.com> + + * camel-mime-filter-basic.c (filter): Fix the assertion slightly, + if we have a little bit of input the output size could be larger, + since we store upto 3 chars in the state. + + * camel-folder-summary.c + (camel_folder_summary_info_new_from_message): When indexing a new + record, create a pseudo word 'ibexindexed' so we can always tell + that a message has already been idnexed, even if it contains no + words of its own. Things like maildir use this check to see if + its already been processed, and it matters if it is incorrect in + this case (not just wasted cycles). + (camel_message_info_dup_to): Assign the to->strings from the + e_poolv_cpy() call, since it may allocaote a new poolv if the + lengths do not match. + + (camel_folder_summary_info_new_from_parser): And same here. + + * providers/local/camel-maildir-summary.c (maildir_summary_sync): + Changed the logicfor epoolv code to be different, we dont need to + update hash references or any tricky stuff. + (maildir_summary_check): Samehere. + + * camel-folder-summary.h: Removed include of e-memory.h. + +2001-07-03 Joe Shaw <joe@ximian.com> + + * providers/nntp/camel-nntp-resp-codes.h: Added NNTP_NO_PERMISSION + (502) to the list of response codes. + + * providers/nntp/camel-nntp-store.c (nntp_store_connect): If we + receive a NNTP_NO_PERMISSION, don't get into an infinite loop trying + to reconnect, get extensions, etc. Just give up and return FALSE. + +2001-07-03 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-message-cache.c + (camel_imap_message_cache_clear): Doh. Don't remove things from + the hash table while foreach'ing it. (And can't use foreach_remove + either because we have to remove them in a weird order). Fixes + #3618. + + * providers/imap/camel-imap-folder.c (imap_get_message): If the + server returns OK from the FETCH BODY, but there's no parseable + BODY response, it's probably because there's an UN-parseable BODY + response, implying the message is badly formatted, MIMEwise. In + that case, fall back to fetching the message as a single part. + +2001-07-02 Sam Creasey <sammy@oh.verio.com> + + * providers/nntp/camel-nntp-folder.c: Implemented + nntp_folder_search_by_expression and + nntp_folder_search_free. Basic search functionality e.g. unread + marking now works for NNTP folders. + + * camel_filter_search.c (get_size): Added get-size sexp directive + to get the size of a message for filters. + + * providers/nntp/camel-nntp-folder.c (camel_nntp_folder_new): + Always check with the NNTP server after summary load -- this + function now always expires old summary entries and syncs with + the news server. + + * providers/nntp/camel-nntp-utils.c (camel_nntp_get_headers): + Only fetch headers for articles not already logged in + the summary file. + + * providers/nntp/camel-nntp-grouplist.c + (camel_nntp_get_grouplist_from_*): change from g_list_append() + to g_list_prepend() + g_list_reverse. Traversing 40,000 + element linked lists sucks. + + * providers/nntp/camel-nntp-store.c (camel_nntp_command): + Should the NNTP connection die with + CAMEL_EXCEPTION_SERVICE_NOT_CONNECTED, make a single retry + attempt. Timing out the NNTP link is less painful this way. + +2001-07-02 Peter Williams <peterw@ximian.com> + + * README (Introduction): Add comment noting that Camel actually + exists now :-) + +2001-07-02 Dan Winship <danw@ximian.com> + + * camel-session.c (camel_session_get_filter_driver): new method to + get an application-initialized filter driver. + + * camel-filter-driver.c (camel_filter_driver_new): Remove the + get_folder function and data args from here... + (camel_filter_driver_set_folder_func): ...and add this function to + set/change them. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): If + this folder is INBOX and we're filtering INBOX, set a flag on the + folder for later. + (imap_update_summary): Add another argument (GPtrArray *recents), + and if it's non-NULL, add the uids of any \Recent new messages to + it. + (camel_imap_folder_changed): If doing filtering in this folder, + create a recents array and pass it to imap_update_summary. Then + get a filter driver and use it to filter the recent messages. + + * providers/imap/camel-imap-summary.h: + * providers/imap/camel-imap-utils.c (imap_parse_flag_list): Add + support for the \Recent flag. + + * providers/imap/camel-imap-provider.c (imap_conf_entries): enable + the "filter" option. + + * camel-types.h: add CamelFilterDriver typedef here + +2001-07-02 Not Zed <NotZed@Ximian.com> + + * camel-lock-client.c (camel_lock_helper_init): properly return + error if we can't create pipes. + + * camel-folder-summary.c (summary_build_content_info): re-enable + html indexing. + + * camel-mime-filter-html.c: Completely re-implemented using a + custom parser. + +2001-07-02 Dan Winship <danw@ximian.com> + + * tests/misc/url.c (main): Change a camel_exception_clear to + camel_exception_init to fix a sometimes-crash + +2001-06-29 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c: Added Originator: header as a header to look + for when looking for the mailing list. + + * tests/mime-filter/Makefile.am: Build the test-crlf test program. + + * tests/mime-filter/test-crlf.c: New test suite for the crlf + filter. + + * camel-mime-filter-crlf.c (filter): Fixed to correctly encode and + decode dots. + +2001-06-28 Peter Williams <peterw@ximian.com> + + * camel-mime-filter-stripheader.c: New file. Filter that strips a + header from mime output. + + * camel-mime-filter-stripheader.h: New file. Header for the above. + + * providers/smtp/camel-smtp-transport.c (smtp_data): Use the + stripheader filter to remove the "Bcc" header. + + * Makefile.am: Add the stripheader files. + + * tests/lib/Makefile.am (INCLUDES): Get this to compile again. + + * tests/mime-filter/test-stripheader.c: New file. Test suite for + the CamelMimeFilterStripHeader. + + * tests/mime-filter/Makefile.am: New test section: mime filters. + +2001-06-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_decode_param_list): Fix a memory + leak. Also if the decoded value is NULL, that means it wasn't + encoded so we don't want to toss the old value. + (header_param_list_format_append): Correctly wrap long parameter + values according to rfc2184. + +2001-06-28 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_refresh_info): If the + folder is frozen, don't refresh, just record that we need to do it + later. + (imap_append_online): If the APPEND doesn't trigger an immediate + EXISTS response (because the folder isn't the selected folder, or + because the server doesn't do that until the next command), call + imap_refresh_info on the folder. + (imap_copy_online): Likewise. (Replacing the unconditional NOOP + that was there before, which absolutely killed filter performance + by forcing the IMAP provider to switch back and forth between + folders after every copy or move.) + (imap_thaw): If the folder needs a refresh, do it. + + * camel-folder.c (camel_folder_is_frozen): New method + +2001-06-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-transport.c (camel_transport_init): Initialize the private + send_lock. + (camel_transport_finalize): Free the private send_lock. + (camel_transport_get_type): Set the init and finalize functions. + (camel_transport_send): Lock the transport. + (camel_transport_send_to): Same. + + * camel-private.h: Add CAMEL_TRANSPORT_(UN)LOCK macros. + +2001-06-27 Jeffrey Stedfast <fejj@ximian.com> + + * tests/folder/test9.c (main): Updated to match the current API. + + * tests/folder/test3.c: #include <gtk/gtk.h> since we use + gtk_init(). + + * camel-internet-address.c + (camel_internet_address_encode_address): Use the new + header_address_fold. + + * camel-mime-utils.c: Removed some old #if 0'd code of mine. + (rfc2047_encode_word): If enclen is 0, don't write an encoded word + token (=?iso-8859-7?Q??= would be an invalid token). + (header_address_fold): New function to wrap address headers - + header_fold() was force-wrapping rfc2047 encoded words which was + making the test suite fail. The *real* solution, however, is to + not create rfc2047 encoded words longer than 72 chars. + +2001-06-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (open_folder): Since we want an error + opening a folder to result in the message being copied to Inbox + (assuming no other filters get a chance to `move` it), don't + record any exceptions that may occur in this function. + +2001-06-26 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_selected, + imap_append_offline, imap_append_online, + camel_imap_folder_changed): lock the cache around accesses + + * providers/imap/camel-imap-store.c (get_folder_online): ref the + newly-created folder (as current_folder) before calling + camel_imap_folder_selected, in case that needs to do something + that causes another folder to become current... + + * camel-service.c (camel_service_get_url): D'oh. + s/FALSE/CAMEL_URL_HIDE_PASSWORD/ + +2001-06-25 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-search.c (get_source): g_strdup() the message + source here or we will have problems later when we go to free the + result ;-) + +2001-06-25 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-store.c (try_auth): Fix this: IMAP + doesn't allow an extra argument to AUTHENTICATE to avoid a useless + round trip like some other SASL bindings do. + + * providers/imap/camel-imap-command.c (imap_read_response): Deal + with IMAP servers that (incorrectly) return "+\r\n" rather than + "+ \r\n" for an empty continuation response. + (camel_imap_response_extract_continuation): Likewise. + +2001-06-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (word_types_compatable): New function that + decides if 2 word types are mergeable. An atom and a qstring are + mergeable; 2 qstrings are mergeable; and 2 encoded words are + mergeable. + (header_encode_phrase_merge_words): If 2 words are merged, the new + word type is the MAX of the combined types. This means that if we + merge a qstring and an atom, the resulting word type is a + qstring. + + * camel-internet-address.c (internet_format): + s/g_string_sprintfa/g_string_append since this makes more sense in + this particular case. + (internet_encode): Same here. + +2001-06-21 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_send): Use + camel_address_length() rather than casting and accessing data + members. + +2001-06-20 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_raw_check_mailing_list): If the first + char of the mailing-list name is '<', chop it off to make Ettore + happy. Fixes bug #2153. + +2001-06-19 Not Zed <NotZed@Ximian.com> + + * camel-lock-helper.c (unlock_id): Fixed a bug when not running + setuid it wouldn't unlock. + + * camel-movemail.c (camel_movemail): use new + locking daemon, also return an error code. + +2001-06-18 Jeffrey Stedfast <fejj@ximian.com> + + Note: Except for the info_free(), the NULL checks are + g_return's. I felt that since g_free() handles NULL that our + _free() functions should also. + + * camel-folder.c (camel_folder_change_info_free): Check to make + sure that the info pointer isn't NULL. + (camel_folder_change_info_change_uid): Same. + (camel_folder_change_info_changed): Same. + (camel_folder_change_info_remove_uid): Same. + (camel_folder_change_info_add_uid): Same. + (camel_folder_change_info_build_diff): Same. + (camel_folder_change_info_cat): Same. + (camel_folder_change_info_add_source): Same. + (camel_folder_change_info_add_source_list): Same. + (camel_folder_change_info_add_update): Same. + (camel_folder_change_info_add_update_list): Same. + +2001-06-18 Dan Winship <danw@ximian.com> + + * tests/stream/Makefile.am (LDADD): + * tests/smime/Makefile.am (LDADD): + * tests/misc/Makefile.am (LDADD): + * tests/message/Makefile.am (LDADD): + * tests/folder/Makefile.am (LDADD): Remove DB3_LDADD + + * Makefile.am (install-exec-local): Set camel-lock-help setgid or + setuid as needed + +2001-06-18 Not Zed <NotZed@Ximian.com> + + * camel-folder-summary.c + (camel_folder_summary_info_new_from_parser): Only create a missing + uid if we have indexing turned on. + + * camel-lock-helper.c (setup_process): Function to setup + process/sanity/security checks. Change to the real uid as soon as + we can. + (lock_path): First try to lock as the real uid, if that fails, try + the root uid. + (unlock_id): Unlock as the uid we created the lock as. + + * Makefile.am (INCLUDES): Added -DCAMEL_SBINDIR for lock helper + location. + + * providers/local/camel-spool-folder.c (spool_lock): Implemented, + using lock helper locking. Need to work out if the locking + requires a root created lock? + (spool_unlock): Likewise. + +2001-06-15 Not Zed <NotZed@Ximian.com> + + * camel-lock-helper.c: Setuid Lock helper process. Creates and manages + .locks, keeping them active, removing them, etc. What real perms it + needs is a little system dependent. + +2001-06-14 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-maildir-store.c (get_folder_info): Implement. + (scan_dir): Does the work of scanning for maildir directories. + +2001-06-13 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-store.c (get_folder_info): + Implemented, just returns a hardcoded INBOX folder. + (free_folder_info): implemented, free's the 1 possible level of + folder info. + + * providers/local/camel-spool-folder.c + (camel_spool_folder_construct): Set the real unread message + count on the folder_created thing. + +2001-06-15 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-message-cache.c + (camel_imap_message_cache_max_uid): Return the largest real UID in + the cache (as an integer). Eventually to be used for an + optimization in the new-message fetch code. + (cache_put): Keep track of max_uid. + +2001-06-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c: Added Mailing-List header regex so that we + can do mlist magic on that header. + +2001-05-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_decode_param): Properly handle + correct and incorrect (for the common case, ie Outlook and + Netscape/Mozilla) rfc2184 values. + (header_decode_rfc2184_param): Get the param name and see if we + should expect a rfc2184 parameter value. + (rfc2184_decode): Decode a rfc2184 value. + (hex_decode): hex decode a string. + (header_decode_param_list): Handle rfc2184 encoded parameters (ie + parameters that have been split and perhaps encoded). + (header_param_list_format_append): Encode the value before seeing + if it will fit on the line. If the value does get encoded, be sure + to put a '*' before the equal-sign. + (header_encode_param): New function to rfc2184 encode a parameter + value (maybe it should be renamed?) + +2001-06-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part.c (init_header_name_table): Don't try to format + the Reply-To header - we don't want to wrap the reply-to address. + +2001-06-12 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-spool-*.[ch]: A new provider, for spool + mailboxes. Mostly a cut and paste of the mbox code, but not a + subclass CamelLocal*. Not tested a lot, doesn't lock yet, use + with extreme caution. + + * tests/lib/folders.c (test_folder_message_ops): Added spool arg, + spool folders can't be deleted, renamed, etc. + (test_folder_basic): Same. + + * tests/folder/test2.c (main): Added checks for spool type. + + * tests/[message|stream|folder|misc|smime]/Makefile.am (LDADD): + Added db3 flags, so make check compiles, doesn't run though. + +2001-05-24 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-local-provider.c + (camel_provider_module_init): Added spool provider. + +2001-06-07 Jon Trowbridge <trow@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_folder): Add a + separator between the service url and the folder name, if needed. + + * camel-filter-driver.c (camel_filter_driver_filter_mbox): Added + an argument, so that the original source URI of the mbox can be + passed in. This is needed because this function is called + post-movemail, so we are never reading from the original mbox + anymore. Without the original mbox URI, the X-Evolution-Source + tag gets set incorrectly and filter-on-source will fail to work. + (camel_filter_driver_filter_message): Also take an extra arg + for the original source URI. It is the original URI, not the + source URI, that is used for filtering and for setting the + X-Evolution-Source tag. + +2001-06-05 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_rescan): Don't fetch + the UID and FLAGS of messages we don't know about yet, since + they'll just get discarded. + +2001-06-01 Jeffrey Stedfast <fejj@ximian.com> + + * tests/smime/pgp.c: Fix to not get into a recursive loop in + get_type(). + + * tests/smime/pgp-mime.c: Same. + +2001-05-31 Jeffrey Stedfast <fejj@ximian.com> + + * camel-smime-context.c: Numerous fixes to get it to compile. + + * camel.h: Added camel-cipher-context.h, camel-cms-context.h, + camel-smime-context.h, and camel-smime-utils.h + + * camel-cms-context.[c,h]: New virtual class for manipulating + cryptographic message syntax messages (like S/MIME). + + * camel-smime-context.[c,h]: Modified to inherit from the + CamelCMSContext class rather than the CamelCipherContext class. + + * camel-smime.[c,h]: Removed - just use camel-smime-context + directly. + + * camel-smime-utils.[c,h]: New source files. Moved the 2 useful + functions from camel-smime.[c,h] into here. + +2001-05-30 Dan Winship <danw@ximian.com> + + * camel-charset-map.c: Redo the BUILD_MAP code to not depend on + libunicode. Now it only generates a map of "popular" 8bit + encodings. (It's not worthwhile to support obscure encodings, + because any mailer that supports them will support UTF8 too. And + Chinese and Japanese use mostly the same UTF8 characters so you + need to decide between those encodings based on the locale or + the charset of the message you're replying to or the input + method you used. So this is sufficient for camel_charset_best's + use.) + + * camel-charset-map-private.h: Regenerated. + + * camel.c (camel_shutdown): Move #ifdefs around to prevent a + warning. + +2001-05-29 Dan Winship <danw@ximian.com> + + * camel-disco-diary.c: Code for logging and replaying offline + operations. + + * camel-disco-store.c (disco_construct): Set disco->status here + (where we can base it on the session's offline status) rather than + at init time. + (disco_connect): If we connect online and have a non-empty diary, + switch to RESYNCING mode and replay the diary to the server. + (disco_get_folder, disco_get_folder_info): Add _resyncing + variants. + + * camel-disco-folder.c (disco_sync, disco_expunge_uids, + disco_append_message, disco_copy_messages_to, + disco_move_messages_to): Add _resyncing variants to switches. + (disco_expunge_uids, disco_append_message, disco_copy_messages_to, + disco_move_messages_to): Remove #ifdef'ed out diary code: let the + provider do it. + (disco_append_message): Redo the append methods to no longer + return the UID, since we're no longer doing the logging from here. + + * providers/imap/camel-imap-store.c (imap_connect_online, + imap_connect_offline): Create a CamelDiscoDiary. + (imap_disconnect_offline): And free it. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): + If RESYNCING, don't do any sort of checking that the remote folder + matches the summary, beyond making sure that the UIDVALIDITY is + correct. + (imap_rescan): Add a missing camel_folder_summary_info_free when + removing a UID from the summary. + (imap_expunge_uids_offline): Implement. Fairly simple. + (imap_expunge_uids_resyncing): Implement. If the store supports + UIDPLUS, we can just use imap_expunge_uids_online. If not, we need + to temporarily undelete any messages marked deleted on the server + that aren't supposed to get expunged. + (imap_append_offline): Implement, using cache and summary + operations, and triggering the folder_changed event by hand. + (imap_append_resyncing): Implement. Redo imap_append_online a bit + in the process to make them able to share more code. + (imap_copy_offline): Implement. + (imap_copy_online): Move parts of this out into a helper. + (imap_copy_resyncing): Implement. In most cases this is just like + imap_copy_online, but if you are copying a message that was itself + copied or appended into the folder, and the server doesn't do + UIDPLUS, it will be necessary to replace at least part of the copy + operation with one or more appends. + + * providers/imap/camel-imap-command.c (imap_read_response): Don't + record the current folder in the response when in RESYNCING mode. + (This means that EXISTS and EXPUNGE responses won't be processed, + which is needed because the summary may not match the folder at + this point.) + (imap_read_response): On error, call + camel_imap_response_free_without_processing, not + camel_imap_response_free. + + * providers/imap/camel-imap-utils.c (imap_uid_array_to_set): Make + this work better when operating on UIDs that aren't in the summary. + + * providers/imap/camel-imap-summary.c + (camel_imap_summary_add_offline): New routine used by + imap_append_offline and imap_copy_offline to create new summary + entries. + +2001-05-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_set_param): Use g_strcasecmp() + because some systems don't have strcasecmp(). Also, when removing + a param, make sure to free the param->name too. + +2001-05-27 Dan Winship <danw@ximian.com> + + * tests/lib/messages.c (test_message_read_file): Fix an fd leak + + * tests/lib/session.c, tests/lib/session.h: a CamelSession + subclass for the test programs. + + * tests/lib/Makefile.am: include session.[ch] + + * tests/folder/test*.c: Use a CamelTestSession from libcameltest + instead of cut+pasting everywhere. + + * tests/misc/url.c (main): Update for a camel_url_new change at + some point. + + * tests/*/.cvsignore: Add stuff. + + * camel-mime-utils.c (rfc2047_encode_word): Fix a silly ==/!= + mixup. + +2001-05-26 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c: Add a "need_rescan" flag + saying if we want to rescan the entire folder for flag changes + next time it's selected. + (camel_imap_folder_init): Set need_rescan TRUE. + (camel_imap_folder_selected): If need_rescan is TRUE, call + imap_rescan. + (imap_refresh_info): Only do a full rescan if need_rescan is TRUE. + Otherwise just do a NOOP, making this a MUCH more lightweight + operation. Also, don't call imap_rescan directly if the folder + isn't selected, since that could end up causing the folder to be + scanned *twice* (imap_rescan -> camel_imap_command -> + camel_imap_folder_selected -> imap_rescan). + (imap_rescan): Set need_rescan FALSE. + (imap_sync_online): Don't NOOP if no changes were pushed: the + caller will call refresh_info if it wants to poll for changes. + Fixes evolution-mail doing lots of unnecessary extra work at + quit time. + + * providers/imap/camel-imap-store.c (refresh_folder_info): Set + need_rescan on each folder before calling refresh_info. + +2001-05-25 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_auth): Oops. Use a + strNcmp to make sure the response begins with a 334 code, not a + strcmp. Duh. + + * providers/local/camel-maildir-folder.c (maildir_append_message): + remove the summary info so we are not out-of-sync with the maildir + folder. + + * providers/local/camel-mh-folder.c (mh_append_message): remove + the summary info so we are not out-of-sync with the mh folder. + + * providers/local/camel-mbox-folder.c (mbox_append_message): + remove the summary info so we are not out-of-sync with the mbox. + +2001-05-24 Jeffrey Stedfast <fejj@ximian.com> + + * camel-smime-context.c (camel_smime_context_new): Oops, I spelled + the get-default-db function name wrong. + +2001-05-23 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-local-folder.c + (camel_local_folder_construct): s/folder_deleted/folder_created - + result of a bad copy/paste. + + * providers/imap/camel-imap-search.c (imap_body_contains): + Optimize the match "" case. + +2001-05-21 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (get_folder_info_online): + Store the CamelFolderInfo tree that was returned from + camel_folder_info_build() in a new variable, 'tree', rather than + 'fi' since we later use 'fi' when syncing folders. Not only does + this fix a memory leak, but it also fixes the bug where the user + would only see the last folder in the folder list and/or it's + subfolders. + +2001-05-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-session.c (camel_session_forget_password): The service can + be NULL here too, thanks to Wayne Davis for pointing this out. + + * camel-smime-context.c (camel_smime_context_new): We don't need + to be passed the certdb path anymore. + +2001-05-16 Dan Winship <danw@ximian.com> + + * camel-medium.c (camel_medium_get_headers): New function to + return an array of all headers. + (camel_medium_free_headers): And free them. + + * camel-mime-part.c (get_headers, free_headers): Implement this + for CamelMimePart. (Works for CamelMimeMessage too.) + +2001-05-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-smime-context.c (camel_smime_context_finalise): Don't + close or free (it wasn't allocated) the certdb. + (camel_smime_context_new): If we get a NULL certdb handle, then + don't bother trying to create a new certdb handle since NSS_Init* + should have done that. + +2001-05-15 Jeffrey Stedfast <fejj@ximian.com> + + * Makefile.am: Don't use EXTRA_GNOME_*, use the new CAMEL_* + variables so we don't link in tons of extra cruft that we don't + need. + + * tests/smime/pkcs7.c: Added to the test suite - tests the S/MIME + pkcs7 functions. + +2001-05-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-smime-context.c: Lots of fixes to get this to compile. + + * camel-smime.c (camel_smime_part_verify): Updated to pass in a + hash argument to camel_smime_verify(). + + * camel-pgp-mime.c (camel_pgp_mime_part_verify): Update according + to the changes in the context API. + + * camel-pgp-context.c (pgp_verify): Updated to take a + CamelCipherHash argument. + + * camel-cipher-context.c (camel_cipher_verify): Now takes a hash + argument since the S/MIME code needs this. + + * Makefile.am: Add camel-smime-context.[c,h] and camel-smime.[c,h] + to the build. + + * camel-smime.[c,h]: New source files for manipulating S/MIME + message parts. + +2001-05-14 Jon Trowbridge <trow@ximian.com> + + * camel-search-private.c (utf8_get): Replicate the semantics of + the libunicode utf8 functions by returning NULL in the arg + on invalid utf8. + + * camel-pgp-context.c (pgp_verify): Check for valid utf8, + terminate loop if something looks wrong. + + * camel-mime-utils.c (header_encode_phrase_get_words): Properly + check for invalid utf8. + (header_encode_string): Properly check for invalid utf8. + + * camel-charset-map.c (camel_charset_step): Properly check for + invalid utf8. + +2001-05-14 Jeffrey Stedfast <fejj@ximian.com> + + * tests/folder/test9.c: + * tests/folder/test8.c: + * tests/folder/test7.c: + * tests/folder/test6.c: + * tests/folder/test5.c: + * tests/folder/test4.c: + * tests/folder/test3.c: + * tests/folder/test2.c: + * tests/folder/test1.c: + * tests/smime/pgp-mime.c: + * tests/smime/pgp.c: Subclass CamelSession since we can no longer + specify the passwd callback any other way and update code + accordingly. + +2001-05-11 Dan Winship <danw@ximian.com> + + * camel-mime-utils.c (header_location_decode): Decode + Content-Location, either correctly or Netscape-generated-brokenly. + + * camel-mime-part.c (camel_mime_part_set_content_location, + camel_mime_part_get_content_location, etc): Deal with + Content-Location header. + +2001-05-11 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_auth): Don't check + the initial auth response until we get into the while-loop + otherwise we have problems if the SASL mechanism supported a + client initiated challenge (like PLAIN and LOGIN do). + +2001-05-11 Dan Winship <danw@ximian.com> + + * camel-stream-null.c (camel_stream_null_new): Make this return + CamelStream * (like the other stream new functions) instead of + CamelStreamNull * + +2001-05-10 Chris Toshok <toshok@ximian.com> + + * camel-tcp-stream-ssl.c (stream_connect): call SSL_Enable after + the SSL_ImportFD and before PR_Connect. Otherwise, NSS aborts + during the connect. + +2001-05-10 Jeffrey Stedfast <fejj@ximian.com> + + * camel-session.c (camel_session_get_password): Don't abort if the + Service is NULL, this is perfectly valid for cipher contexts. + +2001-05-09 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_move_messages_to): Pass + appropriate parameters to CF_CLASS and add comment explaining why + my initial attempt at a solution didn't work. + +2001-05-09 Dan Winship <danw@ximian.com> + + * camel-disco-store.c (camel_disco_set_status): Set the + disconnected status. + (camel_disco_store_can_work_offline): Return whether or not a + given CamelDiscoStore can work offline or not. + + * camel-disco-folder.c (camel_disco_folder_cache_message): + Explicitly tell a folder to cache a message. (Better than using + get_message, because for IMAP that doesn't guarantee you'll get + all the message parts.) + (camel_disco_folder_prepare_for_offline): Prepare a folder for + offline use by caching all messages meeting given search criteria + (and doing anything else the particular folder implementation + needs). + + * camel-session.c (camel_session_set_online, + camel_session_is_online): A session-wide online/offline toggle. + (camel_session_init): Set online to TRUE. + + * providers/imap/camel-imap-store.c (can_work_offline): + Implementation of CamelDiscoStore::can_work_offline. (Checks that + the store has been used online at least once.) + (imap_get_folder_online, imap_get_folder_offline): Deal with + request for "inbox" properly. ("Don't you mean... 'INBOX'?"). + + * providers/imap/camel-imap-folder.c (imap_cache_message): + Implementation of CamelDiscoFolder::cache_message. + + * camel.h: Add camel-disco-store.h and camel-disco-folder.h + +2001-05-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-part.c (camel_mime_part_set_content_id): Wrap the + content-id with <>'s. + +2001-05-04 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (connect_to_server): Add + support for using OpenSSL. + + * camel-remote-store.c (remote_connect): Add support for using the + OpenSSL implementation. + + * camel-tcp-stream-ssl.c (ssl_bad_cert): Hmmmm, don't pass in a + NULL as the last argument to alert_user - prototype doesn't take + that argument anymore? + + * camel-tcp-stream-openssl.c (camel_tcp_stream_openssl_finalize): + (ssl_verify): Use a global hash table to try and lookup the + CamelTcpStreamOpenSSL object given the ssl context since OpenSSL + doesn't think one needs to pass data around, we should all be + living in a world of global variables, duh! + +2001-05-06 Dan Winship <danw@ximian.com> + + * Makefile.am (libcamelinclude_HEADERS): Fix another build + problem. (Um, anyone else could have done this...) + +2001-05-04 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-store.c (get_folder_online): Fix up + refcounting on current_folder. + + * camel-disco-folder.c, camel-disco-store.h: Remove + CamelDiscoDiary refs that weren't supposed to escape yet. + +2001-05-03 Dan Winship <danw@ximian.com> + + * camel-disco-store.c: new abstract class for disconnectable + remote stores + + * camel-disco-folder.c: new abstract class for folders on + disconnectable stores. + + * Makefile.am: Add camel-disco-folder.[ch] and + camel-disco-store.[ch]. + + * providers/imap/camel-imap-store.c: Make this a subclass of + CamelDiscoStore, and fix up the offline interfaces for the changes + since they were first written (particularly the fact that some + IMAP stores don't just use subscribed folders). + + * providers/imap/camel-imap-folder.c: Make this a subclass of + CamelDiscoFolder, although most ops still fail in disconnected + mode. + + * camel-store.c (camel_store_get_folder_info): Change gboolean, + gboolean, gboolean to guint32 in the prototype for this function. + + * providers/local/camel-local-store.c (get_folder_info): Update + for prototype change. + +2001-05-02 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-store.h: Clean this up a bit. Add a + "tag_prefix" member. Move "useful_lsub" into capabilities. + + * providers/imap/camel-imap-store.c (camel_imap_store_init): + Initialize the tag_prefix, based on a static variable. + + * providers/imap/camel-imap-command.c (camel_imap_command): Use + the store's tag_prefix character rather than "A" at the start of + the tag. Makes the verbose debug output easier to parse when + connected to multiple IMAP servers. (Well, unless you're connected + to more than 26 servers...) + + * providers/imap/camel-imap-utils.c (imap_uid_array_to_set): Fix + this up... it was losing count in some cases and giving a more + verbose answer than it needed to. + + * providers/pop3/camel-pop3-store.c: Rescue the KPOP code from bit + rot. + +2001-05-01 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-command.c (camel_imap_command): Redo + command locking. Since command_lock is recursive, we can just get + a lock here, and release it either on error, or when the caller + frees the response data. (This simplifies a lot of stuff, and + fixes some problems with camel_imap_folder_changed being called + without the command_lock locked because of the 2001-03-22 change.) + + (camel_imap_response_free): + (camel_imap_response_free_without_processing): + (camel_imap_response_extract): + (camel_imap_response_extract_continuation): These all take a + CamelImapStore now as well, to deal with locking. + + * providers/imap/camel-imap-private.h: Add + CAMEL_IMAP_STORE_ASSERT_LOCKED, which defaults to a noop, but can + be made to call e_mutex_assert_locked. + + * providers/imap/camel-imap-folder.c, camel-imap-search.c, + camel-imap-store.c: Simplify using new locking stuff. Add a few + CAMEL_IMAP_STORE_ASSERT_LOCKED checks. + +2001-05-01 Dan Winship <danw@ximian.com> + + Support the IMAP UIDPLUS extension (RFC 2359), which lets you + resync after disconnected operation more efficiently, but also + makes it possible to do appends and moves/copies more efficiently + now. + + * providers/imap/camel-imap-folder.c (imap_append_message): If the + server supports UIDPLUS, grab the APPENDUID response and cache the + message into the folder's message cache. + (imap_copy_messages_to): Likewise, for COPYUID, copy any message + parts we have cached between the source and destination folder + caches. + (imap_get_message): If the entire message is already in the cache, + just return that rather than building it from parts. + (imap_update_summary): Fetch just the "UID FLAGS RFC822.SIZE" of + the new messages first, then only fetch the headers for messages + where we don't already have the headers cached. + + * providers/imap/camel-imap-message-cache.c: Add gtk-doc comments. + (cache_put): Fix refcounting stuff here. + (camel_imap_message_cache_insert_stream, + camel_imap_message_cache_insert_wrapper): New. + (camel_imap_message_cache_get): Fix a bug here so the memory + caching actually works. + (camel_imap_message_cache_copy): New routine, used by + imap_copy_messages_to. + + * providers/imap/camel-imap-utils.c (imap_uid_set_to_array): + Inverse operation of imap_uid_array_to_set. Used to parse COPYUID + response. + +2001-04-30 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-utils.c (imap_uid_array_to_set): + New-and-improved version of get_uid_set() from + camel-imap-folder.c. Looks at the summary as it goes so that if + you ask for messages 5, 6, 8, and 9, and there is no message 7, + then you get "5:9" instead of "5:6,8:9" + + * providers/imap/camel-imap-folder.c (imap_copy_messages_to): Use + imap_uid_array_to_set() rather than get_uid_set(). + (get_uid_set): Gone + +2001-04-27 Dan Winship <danw@ximian.com> + + * camel-session.c: Redo this a lot so that instead of having a + class full of callbacks, we have a subclassable class. Also, + replace the increasingly horrifying + camel_session_query_authenticator with three new routines, + camel_session_get_password, camel_session_forget_password, and + camel_session_alert_user. + + * camel-pgp-context.c: + * camel-pkcs7-context.c: + * camel-smime-context.c: + * providers/imap/camel-imap-store.c: + * providers/pop3/camel-pop3-store.c: + * providers/smtp/camel-smtp-transport.c: + Use camel_session_get_password / camel_session_forget_password. + + * camel-tcp-stream-ssl.c (ssl_bad_cert): Use + camel_session_alert_user. + +2001-04-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel.c (camel_init): Automagically call camel_shutdown() + atexit() ;-) + (camel_init): Also initialize NSS databases as read/write for + S/MIME and if NSS fails to init, try initializing with volatile + databases. + + * camel-file-utils.h: #include <sys/types.h> for off_t. + +2001-04-26 Dan Winship <danw@ximian.com> + + * camel-file-utils.c: New file, with the int, string, time_t, and + off_t encode/decode routines from camel-folder-summary.c moved + here and renamed, for the enjoyment of non-CamelFolderSummary + subclasses. + + * Makefile.am (libcamel_la_SOURCES): Add camel-file-utils.c + (libcamelinclude_HEADERS): and camel-file-utils.h + + * camel-folder-summary.c: Remove functions that were moved to + camel-file-utils.c, update uses of them for the new names. + (camel_folder_summary_{en,de}code_token are still here.) + + * providers/local/camel-mbox-summary.c: Use camel_file_util_* + names + + * providers/imap/camel-imap-summary.c: Use camel_file_util_* names + + * providers/imap/camel-imap-store.c (imap_store_setup_online, + imap_store_setup_offline): Use camel_file_util_* names, which + makes much more sense since this isn't folder summary stuff. + +2001-04-26 Dan Winship <danw@ximian.com> + + * Makefile.am (INCLUDES): Remove UNICODE_CFLAGS (and some other + stuff that's redundant with EXTRA_GNOME_CFLAGS) + (libcamel_la_LIBADD): Replace UNICODE_LIBS with GAL_LIBS. + + * camel-search-private.c: + * camel-pgp-context.c: + * camel-mime-utils.c: Use gunicode interfaces rather than + libunicode. + + * camel-charset-map.c: Use gunicode rather than libunicode. (The + charmap-regen code still depends on libunicode though.) + + * camel-mime-filter-charset.h: + * tests/message/test2.c (convert): Use iconv rather than + unicode_iconv. + + * providers/smtp/Makefile.am (libcamelsmtp_la_LIBADD): + * providers/pop3/Makefile.am (libcamelpop3_la_LIBADD): + * providers/local/Makefile.am (libcamellocal_la_LIBADD): Remove + UNICODE_LIBS. + + * camel.c (camel_init): Remove call to unicode_init. + + * camel-mime-parser.c: Remove unused unicode.h include. + +2001-04-26 Dan Winship <danw@ximian.com> + + * camel-service.c (get_host): Use e_gethostbyname_r. + (camel_service_gethost): Remove unused var. + +2001-04-26 Not Zed <NotZed@Ximian.com> + + * Applied jacob's patches for e-poolv stuff. + +2001-04-23 Jeffrey Stedfast <fejj@ximian.com> + + * camel.h: Add camel-vee-folder.h and camel-digest-folder.h + + * camel-digest-folder.[c,h]: New class that can be used to browse + a multipart/digest message as if it were a CamelFolder. + +2001-04-22 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (pgp_verify): Oops, don't use the return + value of iconv() as a string length, it only tells us the number + of non-reversable character conversions. This fixes it so we + actually see the gpg output in the message viewer. + +2001-04-23 Mikael Hallendal <micke@codefactory.se> + + * providers/nntp/Makefile.am (INCLUDES): + Changed GTK_INCLUDEDIR to EXTRA_GNOME_CFLAGS. + +2001-04-20 Jeffrey Stedfast <fejj@ximian.com> + + * camel-smime-context.c (smime_sign): Implemented using the + secmime.h convenience functions. + (smime_clearsign): We just error our here, there is no clearsign + for smime. + (smime_verify): Copied code over from the pkcs7 verify - same + state, ugly and unknown :-) + (smime_encrypt): Implemented using the secmime.h convenience + functions. + (smime_decrypt): Same as the code in pkcs7-context. + +2001-04-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pkcs7-context.c (pkcs7_sign): Implemented. + (pkcs7_clearsign): Implemented. + (get_zero_len_passwd): Convenience function to try a 0-length key + on the certificate db - if this works then there is no need to + prompt the user. + (get_password): Callback to get the password. + (camel_cipher_hash_to_nss): Convenience function to convert a + CamelCipherHash to an NSS HASH_HashType. + (nss_hash_to_sec_oid): Converts a HASH_HashType to a SecOidTag. + (pkcs7_digest): Digest function for use with pkcs7_sign(). + (sign_encode_cb): Callback to write the signed data to the output + stream. + (pkcs7_verify): Hacked on a bit more but am still a bit on the + confused side. This might work but I wouldn't hold my breath. The + sign/clearsign should be close if not correct, but this one...god + only knows. + (pkcs7_decrypt): Implemented. + (pkcs7_encrypt): Implemented (mostly, still need to handle when + 'sign' is TRUE). + +2001-04-18 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-store.c (camel_imap_store_finalize): + Free base_url and storage_path. + + * providers/pop3/camel-pop3-store.c (finalize): Free the + implementation string. + (camel_pop3_command): Clarify documentation to mention that + @ex isn't set (and *@ret is) on CAMEL_POP3_ERR. + (connect_to_server): Set @ex properly on CAMEL_POP3_ERR. + + * providers/pop3/camel-pop3-folder.c (pop3_refresh_info, + pop3_get_message): Set @ex properly on CAMEL_POP3_ERR. + +2001-04-17 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pkcs7-context.[c,h]: New source files to handle Pkcs7 + encryption, decryption, signing, and verifying. Not yet + complete. I'm sensing this is going to take a while seeing as how + NSS is just so well documented. + +2001-04-17 Dan Winship <danw@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_message): Fix + a memory leak in the error case. + +2001-04-16 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-mbox-summary.c (summary_rebuild): Don't we + want to tell where we are by using the start of the message? I + think this should be using camel_mime_parser_tell_start_from() + instead. Also divide by the size *before* multiplying by 100 so + that we don't overflow the int which was giving us negative values + for our progress status (oops). + +2001-04-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-operation.c: Added a prototype for stamp(). + + * camel-charset-map.c (camel_charset_locale_name): #include + string.h so we don't get a warning about strchr being undefined + and also init charset to NULL. + + * camel-pgp-context.c (pgp_verify): Go back to doing the utf8 + conversion by hand so that we don't depend on gal. + + * Makefile.am: Remove the EXTRA_GNOME_CFLAGS include. + + * camel-store.c (camel_mkdir_hier): Convenience function that it + seems a number of camel-store implementations used gal for. + + * providers/nntp/camel-nntp-store.c (ensure_news_dir_exists): Lets + not depend on gal for just e_mkdir_hier() - use camel_mkdir_hier() + instead. + + * providers/nntp/camel-imap-store.c: Lets not depend on gal for + just e_mkdir_hier() - use camel_mkdir_hier() instead. + + * camel-session.c (camel_session_get_storage_path): Don't depend + on e_mkdir_heir() anymore, use the CamelStore version. + + * camel-folder-search.h: Removed gal dependency, why was this even + there in the first place? + + * providers/imap/camel-imap-folder.c: Don't need gal/util/e-util.h + here, so remove it. + + * string-utils.c (strstrcase): New function, well more like old + function brought back to life so we don't have to depend on gal. + + * providers/imap/camel-imap-store.c (imap_store_setup_online): Use + strstrcase rather than e_strstrcase so we don't depend on gal. + (get_unread_online): Same here. + + * providers/smtp/camel-smtp-transport.c (smtp_helo): Use + strstrcase. + +2001-04-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_raw_check_mailing_list): regex + doesn't set errno and regcomp returns 0 on success and any other + value for an error (so don't *just* check for -1). + +2001-04-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-cipher-context.c: Check to make sure the context is a + valid context in all the user functions. + +2001-04-13 Jon Trowbridge <trow@ximian.com> + + * providers/imap/camel-imap-store.c (imap_disconnect): + s/imap_store/store/, fixing a typo that was causing the build to + fail. + + * camel-filter-search.c (get_source): Make the (previously unused) + get-source command actually do the right thing, properly shrouding + any passed-in source and falling back to use the source attached + to the mime message. + +2001-04-13 Dan Winship <danw@ximian.com> + + * camel-object.c (camel_object_hook_event): + * camel-uid-cache.c (camel_uid_cache_get_new_uids): + * camel-url.c (camel_url_new_with_base): Plug leaks. + + * camel-remote-store.c (camel_remote_store_init): Don't + re-initialize the folders hash table. + + * providers/imap/camel-imap-store.c (imap_disconnect): Free + authtypes since they'll be re-read on re-connect. + (get_folder_info): Free folderinfos that we're discarding from the + list. + +2001-04-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (camel_pgp_context_get_type): Oops, lets not + get into a recursive call here ;-) + + * tests/smime/pgp.c: Updated to reflect changes to the PGP code. + + * tests/smime/pgp-mime.c: Same. + +2001-04-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-mime.c: Updated to reflect the few changes made to the + CamelPgpContext class. + + * camel-pgp-context.c: Updated to subclass of CamelCipherContext. + + * camel-cipher-context.[c,h]: New base class for + CamelPgpContext. Also contains the replacement for + CamelPgpValidity, CamelCipherValidity. + +2001-04-12 Dan Winship <danw@ximian.com> + + * camel-mime-filter-crlf.c (filter): Fix a pair of array bounds + reads noted by purify + +2001-04-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel.h: #include the pgp stuff. + +2001-04-12 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-message-cache.c + (camel_imap_message_cache_remove): + * camel-url.c (camel_url_to_string): Plug memory leaks. + +2001-04-11 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-utils.c (imap_parse_string_generic): + Simplify peterw's imap_is_atom_char fix. + +2001-04-11 Jeffrey Stedfast <fejj@ximian.com> + + * tests/smime/Makefile.am: Added pgp-mime.c to the tests. + + * tests/smime/pgp-mime.c: Test suite for camel-pgp-mime.c functions. + + * Makefile.am: Add camel-pgp-mime.[c,h] to the build. + + * camel-pgp-mime.c: Made a number of fixes to get it to compile + and also fixed a few logic errors (mostly forgetting to reset + streams) so that it worked (thanks to the pgp-mime test program). + +2001-04-11 JP Rosevear <jpr@ximian.com> + + * providers/imap/Makefile.am: user GNOME_INCLUDEDIR since gnome + files are included in the top level camel headers and the gtk + include dir is now versioned and such + + * providers/local/Makefile.am: ditto + + * providers/pop3/Makefile.am: ditto + + * providers/smtp/Makefile.am: ditto + + * providers/sendmail/Makefile.am: ditto + + * camel-service.c: use five arg version of gethostbyname_r if + appropriate + (camel_get_host_byname): check if msg->herr is non-zero instead of + checking if msg->hp is null since we may not always have msg->hp + +2001-04-11 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-digest-md5.c (digest_response): Use + camel_charset_locale_name() to get the locale charset rather than + checking the CHARSET environment variable. This is a much less + ugly hack. Also: If we fail to be able to convert to UTF8, then + disavow all knowledge of the charset parameter. + + * camel-charset-map.c (camel_charset_locale_name): New function to + return the locale charset (or NULL if US-ASCII). + +2001-04-11 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (camel_pgp_verify): Use + e_utf8_from_locale_string() rather than trying to do it manually + since Lauris's version works much better. + +2001-04-06 Jeffrey Stedfast <fejj@ximian.com> + + * Makefile.am: Added camel-pgp-context.[c,h] to the build. Also + added tests/smime/pgp.c and Makefile.am + + * tests/smime/pgp.c: New test suite for PGP functions. + + * camel-pgp-context.c: Various fixes to get it to build. + +2001-04-07 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-utils.c (imap_parse_string_generic): It + would be a good idea to recognize '\0'. Before, this code was running + off the ends of strings and intermittently coredumping (if it didn't + hit an imap_atom_char first) -- whoops! + +2001-04-05 Not Zed <NotZed@Ximian.com> + + * merge from evolution-0-10-branch to evolution-0-10-merge-0 + +2001-04-03 Jeffrey Stedfast <fejj@ximian.com> + + * Makefile.am: Added tests/ back in + + * camel-mime-utils.c (header_decode_text): Ignore whitespace + between encoded words (there were a few cases where it didn't + before). + (header_encode_string): Preserve whitespace between words that are + to be encoded by encoding them too. + (header_encode_phrase): Same here but with phrases. + +2001-04-03 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_sync): If we don't + change any flags or expunge, send a NOOP to give the server a + chance to send EXISTS, etc, messages. + (imap_get_message): If the server_level < IMAP4rev1, always fetch + messages all-at-once, since they don't support the [#.MIME] + syntax. + (imap_update_summary): When reading message flags, set the + server_flags field as well, and don't overwrite any flags set by + camel_folder_summary_info_new_from_message. Might help with some + of the flag problems... + +2001-04-02 Dan Winship <danw@ximian.com> + + * camel-service.h: Remove the "quick_login" member, which is + unnecessary. + + * providers/smtp/camel-smtp-transport.c (smtp_auth): Remove the + references to quick_login and fix this to use the CamelSasl + interfaces correctly to do the same thing. + (connect_to_server): Split this out of smtp_connect + (smtp_connect): Use connect_to_server. When re-EHLO'ing after + auth, ignore errors. + (query_auth_types): Use connect_to_server rather than + smtp_connect, so it doesn't try to authenticate. Add LOGIN + authtype to the list of authtypes to check for. + + * providers/smtp/camel-smtp-provider.c + (camel_provider_module_init): Add LOGIN authtype to the authtypes + list explicitly. + + * camel-sasl.c (camel_sasl_authtype_list): Don't list LOGIN here: + it's not a real SASL authtype and is only used for SMTP. + + * camel-sasl-plain.c: + * camel-sasl-login.c: + * camel-sasl-kerberos4.c: + * camel-sasl-cram-md5.c: + * camel-sasl-anonymous.c: + * providers/pop3/camel-pop3-provider.c: Remove "quick_login" + argument from authtypes. + +2001-04-02 Gediminas Paulauskas <menesis@delfi.lt> + + * camel-filter-driver.c: marked missing report status' for translation. + +2001-04-02 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.c (camel_pgp_sign): mutex lock & unlock the + context. + (camel_pgp_clearsign): Same. + (camel_pgp_verify): Same. + (camel_pgp_encrypt): Same. + (camel_pgp_decrypt): And finally here... + + * camel-pgp-context.h: Update the function prototypes to match + those found in camel-pgp-context.c. + + * camel-pgp-context.c: Updated. + + * camel-pgp-mime.c (camel_pgp_mime_part_sign): Implemented. + (camel_pgp_mime_part_verify): Implemented. + (camel_pgp_mime_part_encrypt): Implemented. + (camel_pgp_mime_part_decrypt): Implemented. + +2001-04-01 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-login.[c,h]: New files to handle the LOGIN SASL + mechanism. + + * camel-sasl-plain.c: Removed the definition of + camel_sasl_login_authtype. + + * camel-sasl.c (camel_sasl_new): Oops. I thought LOGIN was an + alias to PLAIN. I was wrong. These two SASL objects have to be + separate. + + * providers/smtp/camel-smtp-transport.c (smtp_auth): Updated to + check for and use authmech->quick_login when available. + +2001-04-01 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-provider.c: Updated the authtypes here + too. + + * camel-sasl-plain.c: + * camel-sasl-anonymous.c: + * camel-sasl-digest-md5.c: + * camel-sasl-cram-md5.c: + * camel-sasl-kerberos4.c: Updated the authtype values. + + * camel-service.h: Added another field to CamelServiceAuthType + that specifies whether or not the mechanism supports "quick auth" + which means that the client can send the initial challenge in the + AUTH request. + + * camel-sasl.c (camel_sasl_new): Add support for LOGIN. + (camel_sasl_authtype_list): Here too. + (camel_sasl_authtype): And finally here. + + * camel-sasl-plain.c: Define camel_sasl_login_authtype. + + * providers/smtp/camel-smtp-transport.c (smtp_auth): Only unref + the SASL object if it exists. + +2001-03-30 Dan Winship <danw@ximian.com> + + * providers/pop3/camel-pop3-store.c (connect_to_server, + query_auth_types, pop3_connect): Move things around here to make + this all work right again (so you don't get prompted for a + password when checking the supported authtypes.) + +2001-03-30 Jon Trowbridge <trow@ximian.com> + + * camel-mime-message.c (camel_mime_message_set_source): Shrould + our source URL before putting it into X-Evolution-Source. + +2001-03-29 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (get_folder_info): Don't + blindly append "/INBOX", construct a CamelURL and set the path + that way. + (parse_list_response_as_folder_info): Don't blindly append + "/<foldername>", construct a CamelURL and set the path that way + instead. + (get_folders_offline): And again here. + +2001-03-30 Not Zed <NotZed@Ximian.com> + + * camel-service.c (camel_get_host_byname): Dont overwrite an + exception if we got one already. Added camel_operation status to + it, and comment out some debug. + +2001-03-29 Not Zed <NotZed@Ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_connect): Free host + name info when done ... blah blah. + + * camel-sasl-kerberos4.c (krb4_challenge): Free host name info + after we're done with it. + + * camel-sasl-digest-md5.c (digest_md5_challenge): Free host name + info after we're done with it. + + * camel-remote-store.c (remote_connect): Free the host name info + from get_host after we're finished with it. + + * camel-service.c (camel_get_host_byname): New function to + lookup a name, and still be cancellable. + (camel_free_host): And a function to free the structure + returned. + (camel_service_gethost): Call get_host_byname for this. + +2001-03-29 Jon Trowbridge <trow@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_message): Save + the source URL using camel_mime_message_set_source. + + * camel-mime-message.c (camel_mime_message_set_source): Renamed + camel_mime_message_set_identity to this. Sets the X-Evolution-Source + header. + (camel_mime_message_get_source): Returns the X-Evolution-Source + header. + +2001-03-29 Kjartan Maraas <kmaraas@gnome.org> + + * broken-date-parser.c: #include <stdio.h>, <stdlib.h> and <string.h> + * broken-date-parser.h: Remove all includes but <glib.h> + * camel-address.h: Added #include <glib.h> + * camel-data-wrapper.c: Move system includes to the top. + * camel-data-wrapper.h: #include <glib.h> + * camel-exception.c: #ifdef HAVE_CONFIG_H + * camel-exception.h: Remove #include <glib.h> + * camel-filter-driver.c: #ifdef HAVE_CONFIG_H and move system + headers to top. Mark strings in camel_exception_set*() for i18n. + * camel-filter-driver.h: #include <glib.h> + * camel-filter-search.c: #ifdef HAVE_CONFIG_H + * camel-folder-search.c: #include <config.h> + * camel-folder-search.h: Header shuffling + * camel-folder-summary.h: Same here + * camel-folder-thread.c: #ifdef HAVE_CONFIG_H + * camel-folder.c: Here too. + * camel-folder.h: #include <glib.h> + * camel-internet-address.c: Move system headers up + * camel-lock.c: #ifdef HAVE_CONFIG_H + * camel-medium.c: Same here + * camel-mime-filter-bestenc.c: Move system headers up + * camel-mime-filter-from.c: Same here + * camel-mime-filter-linewrap.c: And here + * camel-mime-filter.c: #include <string.h> to fix warnings from new gcc + * camel-mime-filter.h: System headers moved up + * camel-mime-message.c: Here too. #ifdef HAVE_CONFIG_H added + * camel-mime-part-utils.c: #ifdef HAVE_CONFIG_H added + * camel-mime-part.c: Here too, and shuffle headers + * camel-mime-utils.c: #ifdef HAVE_CONFIG_H. Remove const from two + variables to remove warning. + * camel-mime-utils.h: Shuffle headers + * camel-movemail.c: #ifdef HAVE_CONFIG_H. Mark string in camel_exception_set + * camel-multipart.c: #ifdef HAVE_CONFIG_H. Added includes to remove + warnings from new gcc + * camel-object.c: #ifdef HAVE_CONFIG_H + * camel-object.h: Shuffle headers + * camel-operation.c: #ifdef HAVE_CONFIG_H + * camel-provider.c: #ifdef HAVE_CONFIG_H. Shuffle headers. Mark a string + * camel-remote-store.c: #ifdef HAVE_CONFIG_H + * camel-sasl-anonymous.c: #ifdef HAVE_CONFIG_H. #include <string.h> + * camel-sasl-cram-md5.c: #ifdef HAVE_CONFIG_H. #include <string.h> and + <stdio.h> to remove warnings. + * camel-sasl-digest-md5.c: #ifdef HAVE_CONFIG_H. shuffle headers + * camel-sasl-digest-md5.h: Shuffle headers. + * camel-sasl-kerberos4.c: #ifdef HAVE_CONFIG_H. Shuffle headers. + * camel-sasl-kerberos4.h: Shuffle headers. + * camel-sasl-plain.c: #ifdef HAVE_CONFIG_H. Shuffle + * camel-sasl.c: #ifdef HAVE_CONFIG_H. #include <string.h> + * camel-search-private.c: #include <config.h> + * camel-seekable-stream.c: #ifdef HAVE_CONFIG_H + * camel-seekable-stream.h: Shuffle + * camel-seekable-substream.c: #ifdef HAVE_CONFIG_H + * camel-service.c: Same + * camel-service.h: Shuffle + * camel-session.c: #ifdef HAVE_CONFIG_H + * camel-store.c: Same + * camel-stream-buffer.c: Here too + * camel-stream-buffer.h: Shuffle + * camel-stream-filter.c: #include <string.h> + * camel-stream-fs.c: #ifdef HAVE_CONFIG_H + * camel-stream-fs.h: Shuffle headers + * camel-stream-mem.c: Same as above + * camel-stream-mem.h: Here too + * camel-stream-null.c: #ifdef HAVE_CONFIG_H + * camel-stream.c: Here too + * camel-stream.h: Shuffle + * camel-tcp-stream-openssl.c: #ifdef HAVE_CONFIG_H + * camel-tcp-stream-raw.c: Same here. and move local includes down + * camel-tcp-stream-ssl.c: Same as above + * camel-tcp-stream.c: #ifdef HAVE_CONFIG_H + * camel-tcp-stream.h: move local include down + * camel-transport.c: #ifdef HAVE_CONFIG_H + * camel-transport.h: #include <glib.h> + * camel-uid-cache.c: #ifdef HAVE_CONFIG_H. Shuffle headers + * camel-uid-cache.h: Shuffle + * camel-url.c: #ifdef HAVE_CONFIG_H + * camel-vee-folder.c: #ifdef HAVE_CONFIG_H. Shuffle headers + * camel-vee-folder.h: #include <glib.h> + * camel-vee-store.h: Same here + * camel.c: #ifdef HAVE_CONFIG_H + * gstring-util.c: Here too + * hash-table-utils.c: Remove #include <glib.h> + * hash-table-utils.h: #include it here instead. + * string-utils.c: #ifdef HAVE_CONFIG_H + * providers/cache/camel-cache-map.c: #ifdef HAVE_CONFIG_H, shuffle + headers and mark strings in camel_exception_set*() + * providers/cache/camel-cache-provider.c: #ifdef HAVE_CONFIG_H + * providers/cache/camel-cache-store.c: Same here, and mark a string. + * providers/imap/camel-imap-command.c: #ifdef HAVE_CONFIG_H + * providers/imap/camel-imap-command.h: Shuffle header + * providers/imap/camel-imap-folder.c: #ifdef HAVE_CONFIG_H + * providers/imap/camel-imap-message-cache.c: #ifdef HAVE_CONFIG_H + * providers/imap/camel-imap-provider.c: #ifdef HAVE_CONFIG_H and + #include <string.h> + * providers/imap/camel-imap-search.c: #ifdef HAVE_CONFIG_H + * providers/imap/camel-imap-store.c: #ifdef HAVE_CONFIG_H and mark + a string. + * providers/imap/camel-imap-summary.c: Shuffle headers + * providers/imap/camel-imap-wrapper.c: #ifdef HAVE_CONFIG_H. Shuffle + * providers/local/camel-local-folder.c: #ifdef HAVE_CONFIG_H + * providers/local/camel-local-provider.c: #ifdef HAVE_CONFIG_H + * providers/local/camel-local-store.c: Same here + * providers/local/camel-local-summary.c: Here too, shuffle, mark a string + * providers/local/camel-maildir-folder.c: #ifdef HAVE_CONFIG_H + * providers/local/camel-maildir-store.c: Same + * providers/local/camel-maildir-summary.c: Here too + * providers/local/camel-mbox-summary.c: And here + * providers/local/camel-mbox-store.c: And here + * providers/local/camel-mbox-summary.c: #include <config.h> + * providers/local/camel-mh-folder.c: #ifdef HAVE_CONFIG_H + * providers/local/camel-mh-store.c: same + * providers/local/camel-mh-summary.c: #ifdef HAVE_CONFIG_H, shuffle headers + and mark a string for translation. + * providers/nntp/camel-nntp-auth.c: #include <config.h> + * providers/nntp/camel-nntp-store.c: Remove superfluous arg to + CAMEL_SERVICE_CLASS to make it compile + * providers/pop3/camel-pop3-provider.c: #ifdef HAVE_CONFIG_H + * providers/pop3/camel-pop3-store.c: Same here + * providers/sendmail/camel-sendmail-provider.c: Here too + * providers/sendmail/camel-sendmail-transport.c: Here too + * providers/smtp/camel-smtp-provider.c: Same + * providers/smtp/camel-smtp-transport.c: #ifdef HAVE_CONFIG_H, mark + strings for translations. + +2001-03-29 Dan Winship <danw@ximian.com> + + * camel-url.c (camel_url_to_string): change "gboolean show_passwd" + to "guint32 flags". + + * tests/misc/url.c (main): Update calls to camel_url_to_string + + * providers/imap/camel-imap-store.c (construct): Call + camel_url_to_string with flags to hide password, authtype, and + params to create the base_url. + (etc): Update for the fact that the base_url no longer has the "/" + at the end. + + * camel-service.c (construct): Update calls to camel_url_to_string + (pass CAMEL_URL_HIDE_PASSWORD) + +2001-04-03 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_decode_text): Ignore whitespace + between encoded words (there were a few cases where it didn't + before). + (header_encode_string): Preserve whitespace between words that are + to be encoded by encoding them too. + (header_encode_phrase): Same here but with phrases. + +2001-04-04 Kjartan Maraas <kmaraas@gnome.org> + + * camel-filter-driver.c: Added #include <config.h>. Marked + a bunch of strings for translation. + * camel-folder-search.c: Added #include <config.h>. + * camel-folder-summary.c: Same here. + * camel-movemail.c: Marked strings for translation. + * camel-provider.c: Same here. + * camel-search-private.c: #include <config.h> + * camel-vee-folder.c: Mark string for translation. + * providers/local/camel-mbox-summary.c: #include <config.h> + +2001-04-03 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_sync): If we don't + change any flags or expunge, send a NOOP to give the server a + chance to send EXISTS, etc, messages. + (imap_get_message): If the server_level < IMAP4rev1, always fetch + messages all-at-once, since they don't support the [#.MIME] + syntax. + +2001-04-01 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (get_folder_info): Don't + blindly append "/INBOX", construct a CamelURL and set the path + that way. + (parse_list_response_as_folder_info): Don't blindly append + "/<foldername>", construct a CamelURL and set the path that way + instead. + (get_folders_offline): And again here. + +2001-03-31 Not Zed <NotZed@Ximian.com> + + * camel-operation.c (struct _status_stack): change stamp to + unsigned to avoid overflow. + (camel_operation_end): + (camel_operation_progress_count): + (camel_operation_progress): Double the delay before transient + events start showing their own progress. + +2001-03-30 Not Zed <NotZed@Ximian.com> + + * providers/pop3/camel-pop3-folder.c (pop3_get_message): Change + the pop download into a transient event. + + * camel-operation.c (stamp): Get a timestamp that changes 4x a + second (or rather, arbitrarily more often than 1/second). + (camel_operation_progress): Use stamp() for time updates. + (camel_operation_progress_count): " + (camel_operation_start): Store the status as a struct status_stack + item. + (camel_operation_start_transient): New function to start a + transient event, which is only reported if it runs for too + long/and is reset afterwards. + (camel_operation_progress): + (camel_operation_progress_count): Fix for status_stack changes, + and account for transient updates. + + * camel-filter-driver.c (camel_filter_driver_filter_folder): When + we remove things (set deleted), always set seen too, to mirror + interface behaviour when you delete. + (camel_filter_driver_filter_message): And same here too. + +2001-03-30 Dan Winship <danw@ximian.com> + + * providers/pop3/camel-pop3-store.c (connect_to_server, + query_auth_types, pop3_connect): Move things around here to make + this all work right again (so you don't get prompted for a + password when checking the supported authtypes.) + +2001-03-29 Dan Winship <danw@ximian.com> + + * camel-url.c (camel_url_to_string): change "gboolean show_passwd" + to "guint32 flags". + + * tests/misc/url.c (main): Update calls to camel_url_to_string + + * providers/imap/camel-imap-store.c (construct): Call + camel_url_to_string with flags to hide password, authtype, and + params to create the base_url. + (etc): Update for the fact that the base_url no longer has the "/" + at the end. + + * camel-service.c (construct): Update calls to camel_url_to_string + (pass CAMEL_URL_HIDE_PASSWORD) + +2001-03-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-pgp-context.[c,h]: New class for PGP encrypting, + decrypting, signing and verifying. Next I'll be moving the + contents of mail/mail-crypto into Camel. These files will + basically replace mail/openpgp-utils.[c,h]. + +2001-03-29 Not Zed <NotZed@Ximian.com> + + * camel-folder-search.c (search_body_contains): Optimise the match + "" case, just match everything in the folder (if we have it). + + * camel-vtrash-folder.c (vtrash_move_messages_to): Access the + folder directly from the message info. + (vtrash_move_messages_to): I think we also need to call the real + move_messages_to, and not try and bypass the lock, since we dont + have the lock for that folder. + + * camel-vee-folder.h: Move CamelVeeMessageInfo to public, so + subclasses can get to it. + + * camel-vee-folder.c (camel_vee_folder_add_folder): Dont let you + add a vfolder to itself. + (folder_changed): + (vee_folder_remove_folder): + (vee_folder_build_folder): Copy changes before triggering changed + events, so we can do them outside of locks. + (camel_vee_folder_get_message_folder): Removed function. + (camel_vee_folder_hash_folder): Made public (renamed from + hash_folder), simply for subclasses (probably not needed). + (vee_expunge): Oops, call the class sync, not superclass sync. + (vee_sync): Remove some accidental debug. + +2001-03-27 Jeffrey Stedfast <fejj@ximian.com> + + * camel-service.c (get_path): Add the port (if user defined) to + the path to fix bug #1996. + + Danw: I'm iffy on the "fix" so I'd like you to comment. + +2001-03-27 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-folder.c (pop3_sync): If we aren't + going to even check the resp/free buffer that gets returned from + camel_pop3_command, don't even bother using it. Send in NULL + instead. + (pop3_get_message): Check to make sure that the `result' string is + non-NULL. It's possible that some POP servers may return with + "+OK\r\n<message>..." rather than the expected + "+OK ### octets\r\n<message>..." + +2001-03-27 Not Zed <NotZed@Ximian.com> + + * camel-folder-summary.c (camel_folder_summary_finalize): Unref + the html filter when done. + (summary_build_content_info): Disable using the html parser to + help index html mails until it gets sorted out. + + * camel-vee-folder.c (folder_changed): Fix a cut n paste bug, we + want uid_removed not uid_changed deref, fixes bug #1999. + +2001-03-27 Dan Winship <danw@ximian.com> + + * camel-sasl.c (camel_sasl_authtype_list): add an argument to say + whether or not you want "PLAIN" in the list (so you don't end up + with "Password" twice in the config dialog). + + * providers/imap/camel-imap-provider.c (camel_provider_module_init): + * providers/imap/camel-imap-store.c (query_auth_types): We don't + want PLAIN. + + * providers/smtp/camel-smtp-provider.c (camel_provider_module_init): + * providers/smtp/camel-smtp-transport.c (query_auth_types): But we + do. + +2001-03-27 Dan Winship <danw@ximian.com> + + * camel-provider.h: Add an "extra_conf" field to CamelProvider + with structures and defines and stuff, for providers to specify + additional configuration options that they want. Also add a + "supports ssl" flag to the provider flags. + + * camel-url.c (camel_url_new_with_base): Fix parsing of params. + (output_param): And unparsing... + + * camel-remote-store.c: add a "default_ssl_port" field. + (remote_construct): If the URL has the "use_ssl" parameter, set + the store's use_ssl flag. + (remote_connect): If using SSL and no port specified, use the + default_ssl_port rather than the default_port. + + * providers/smtp/camel-smtp-provider.c (smtp_provider): add + CAMEL_PROVIDER_SUPPORTS_SSL and CAMEL_URL_ALLOW_USER. (The config + gui code knows that the ALLOW_USER and ALLOW_AUTH go together.) + (ssmtp_provider): gone + + * providers/smtp/camel-smtp-transport.c (smtp_construct): Set a + flag if "use_ssl" param is set. + (smtp_connect): Check the CamelSmtpTransport use_ssl flag rather + than checking if this is smtp or ssmtp. + + * providers/imap/camel-imap-provider.c (imap_conf_entries): Add a + bunch of IMAP-specific configuration options, like "check for new + mail in all folders" (default TRUE), "show only subscribed + folders" (default TRUE), "ignore server-supplied namespace", and + "apply filters to INBOX" (not yet implemented). + (imap_provider): We support SSL and we no longer allow a path in + the URL. (namespace is handled via extra_conf) + (simap_provider): Gone + + * providers/imap/camel-imap-store.c (camel_imap_store_init): Set + default_ssl_port, don't set CAMEL_STORE_SUBSCRIPTIONS here + (construct): remove simap stuff, deal with "use_lsub", + "namespace", "check_all", and "filter" parameters. Set base_url + to not include params. + (imap_store_setup_online): Don't ask for the namespace if it was + set explicitly. Don't get subscribed folders if !use_lsub. + (imap_concat): Fix a bug. + (get_folder_info): Support for not checking all folders. + + * providers/imap/camel-imap-folder.c (imap_get_full_name): Rewrite + to use imap_store->namespace, not service->url->path + + * providers/pop3/camel-pop3-provider.c (pop3_conf_entries): "keep + on server" (currently still implemented by the mailer code, not + here), "delete after N days" (not yet implemented). + (pop3_provider): we support SSL + (spop_provider): gone + + * providers/pop3/camel-pop3-store.c (camel_pop3_store_init): Set + default_ssl_port + (pop3_connect): Remove spop code + +2001-03-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-vee-folder.c (vee_folder_construct): Move all of the + camel_vee_folder_construct() internals here. + (camel_vee_folder_construct): This function basically becomes a + wrapper for vee_folder_construct and also checks to make sure that + the UNMATCHED vfodler is constructed otherwise constructs it. + (camel_vee_folder_new): Call vee_folder_construct() instead so + that we don't get into a dead-lock. + +2001-03-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (init_trash): Use camel_vtrash_folder_new() to + create the vtrash folder now. + + * camel-vtrash-folder.[c,h]: New subclass of CamelVeeFolder for + our vTrash folders. + + * camel-folder.c (camel_folder_copy_messages_to): Don't watch for + vtrash folders anymore. + (camel_folder_move_messages_to): Same. + + * camel-vee-folder.c (camel_vee_folder_class_init): Update. + (vee_move_messages_to): Rewrite to use the new move API. + + * camel-filter-driver.c (do_copy): Updated to reflect + copy_message_to changes. Create a temporary uid array and use + that. + (do_move): Same. + (camel_filter_driver_filter_message): And again, here... + + * providers/imap/camel-imap-folder.c (imap_copy_messages_to): + Update to the new API. + (imap_move_messages_to): Same. + (get_uid_set): New function to create a `set' string based on an + array of UIDs for use with imap_copy_messages_to. + + * camel-folder.c (camel_folder_copy_messages_to): Replaces + camel_folder_copy_message_to + (camel_folder_move_message_to): Replaces + camel_folder_move_message_to. + +2001-03-27 Not Zed <NotZed@Ximian.com> + + * camel-vee-store.c (vee_get_folder): Added folder_created event + here. + + * camel-vee-folder.c (unmatched_finalise): Removed, moved into + main finalise code. + (message_changed): Just create a new change entry and promote it + to a folder_changed thing. + (vee_sync): Always rebuild folder on sync, even when not expunge. + (folder_changed): If not autoupdating, make sure we remove any + removed entries. + (vee_folder_build_folder): + (vee_folder_remove_folder): NOP if we're called on + folder_unmatched. + (vee_search_by_expression): Only search each folder once. Should + we also order the result in summary order? + +2001-03-20 Not Zed <NotZed@Ximian.com> + + * camel-store.c (init_trash): Fix calling for vee_folder_new(). + + * camel-folder-summary.c (camel_folder_summary_remove_index): + Optimise slightly, use ptr_array_remove_index rather than have to + search for the index by using summary_remove. + + * camel-vee-folder.h: Removed local member from VeeFolder, since + it was never used. + + * camel-vee-store.c (camel_vee_store_finalise): Setup finalise + function. + + * camel-vee-folder.c (camel_vee_folder_set_expression): New + function to set the query of an existing vfolder. + (camel_vee_folder_construct): New function for + convenience/subclasses. + (camel_vee_folder_new): Removed exception parameter, no longer + needed (since we dont search yet). + (camel_vee_folder_new): Changed to use folder_construct, and no + longer raise the folder created signal. + (vee_folder_build_folder): Make it return error on exception, so + we can work without exceptions. + (vee_folder_remove_folder): Use remove index rather than + remove_uid, this is ok since we have the summary locked for our + own access. + (camel_vee_folder_add_folder): Only add the folder to the + unmatched private if it is not a private folder. + (camel_vee_folder_remove_folder): Only remove the folder from + unmatched if it is not private. + (vee_expunge): Just call sync with expunge set. + (vee_sync): If expunging, also refresh the search. + (vee_folder_build_folder): We do our own locking now, removed from + callers, also trigger changed events here too (within locks), + fixed callers appropriately. + (vee_folder_remove_folder): Do our own locking, and trigger + changed events. + (vee_folder_add_info): Renamed of vee_folder_add, we now take a + hash of the folder name, rather than use the folders address. + (hash_folder): Convert a folder name into an 8 character hash. + (vee_get_message, vee_search_by_expression, vee_set_message_flags, + vee_set_message_user_flag, vee_move_message_to): Changed the uid + to be an 8 byte hash + original uid, with no ':' anymore. + +2001-03-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_decode_text): When writing the last + token (if not rfc2047 encoded), don't use g_string_append_len, use + append_latin1. + + * camel-mime-message.c (write_to_stream): Don't spew a warning if + the message-id wasn't set by the application, not a big deal since + we create one right here. + +2001-03-26 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-command.c (camel_imap_command): keep a + reference on the store's current_folder. + + * providers/imap/camel-imap-store.c (camel_imap_store_finalize): + (imap_disconnect): unref the current_folder before clearing it. + + * camel-url.c (camel_url_get_param): Add missing accessor. + + * camel-session.c (camel_session_get_provider): New. Return + the provider for a URL. + +2001-03-25 Dan Winship <danw@ximian.com> + + * camel-url.c (camel_url_new_with_base): New URL parser with full + RFC1808 relative URL support. Yum. + (camel_url_new): Wrapper around camel_url_new_with_base now. + + * tests/Makefile.am: add misc subdir + + * tests/misc/url.c: relative URL test cases from RFC 1808 + +2001-03-25 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (do_copy): Don't use copy_to if the source + folder doesn't support summary info's. + (do_move): Same. + (camel_filter_driver_filter_message): And again here. I think + this will fix the problem of "colour" tags not staying with the + message when it's copied to a folder during the filter process. + +2001-03-24 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-digest-md5.c (digest_response): Do charset conversion + on the username param here if needed. + (parse_server_challenge): Protect against possibly empty-string + charset values. + +2001-03-23 Jon Trowbridge <trow@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_message): + Don't call camel_mime_message_set_identity. (The call is + commented out, left over from some earlier experimentation that I + want to be able to remember later...) + + * camel-mime-message.c (camel_mime_message_set_identity): Added. + A function to set the X-Evolution-Identity header. + +2001-03-22 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-command.c (imap_read_response): Don't + look at untagged responses other than "* BYE"... + (camel_imap_response_free): ...do it here instead... + (camel_imap_response_free_without_processing): ...but not here. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): + Remove the "EXISTS" line from the response so + camel_imap_response_free won't try to process it. + (camel_imap_folder_selected): If we get an EXISTS response mixed + in with the FETCH responses, record the new EXISTS value. + Use camel_imap_response_free_without_processing so that an EXISTS + response won't cause a loop. + (imap_rescan): Use camel_imap_response_free_without_processing. + (imap_update_summary): Use + camel_imap_response_free_without_processing. If an EXISTS response + shows up, call imap_update_summary again to get the new messages. + (imap_protocol_get_summary_specifier): Use BODY.PEEK[0], not + RFC822.HEADER for prev IMAP4rev1, since the FETCH parser won't + deal with RFC822.HEADER responses. + + * providers/imap/camel-imap-store.c (get_folder_info): Fix an + uninitialized variable + +2001-03-21 Dan Winship <danw@ximian.com> + + * camel-provider.h: (CamelProvider) add a "GList *authtypes", so + you can get the list of authtypes used by a provider without + needing to have an actual CamelService object handy. (Will be + needed by the new config druid.) + (CAMEL_PROVIDER_ALLOWS, CAMEL_PROVIDER_NEEDS): New macros to test + the URL part stuff, since the way it works is too complicated and + everyone always does it wrong. + + * camel-service.c (camel_service_query_auth_types): Remove the + @connected arg again: if you don't want to connect, you can just + get the list of authtypes off the provider. + (camel_service_free_auth_types): Remove this. All existing + implementations do authtypes the same way, so just say the caller + should "g_list_free" the list. (Oh, look, removing this function + doesn't actually cause the mailer to not build. How 'bout that.) + (construct, get_path): Use the new URL part macros. + + * camel-remote-store.c (remote_query_auth_types): Update + (remote_free_auth_types): Nuke + (camel_remote_store_authtype_list): New function for use by + subclasses. + + * providers/imap/camel-imap-provider.c: + * providers/pop3/camel-pop3-provider.c: + * providers/smtp/camel-smtp-provider.c: Update CamelProvider + structures. + (camel_provider_module_init): Put all the SSL parts together so + there's only 1 #ifdef. Set up the provider authtypes field using + the SASL, CamelRemoteStore, and standard authtypes, as + appropriate. Copy that from the normal provider to the SSL + provider. + + * providers/local/camel-local-provider.c: + * providers/sendmail/camel-sendmail-provider.c: + * camel-session.c: Update CamelProvider structures. + + * providers/imap/camel-imap-store.c (query_auth_types): + * providers/pop3/camel-pop3-store.c (query_auth_types): Update + + * providers/smtp/camel-smtp-store.c (query_auth_types): Update. + Remove the no_authtype, because that's what "ALLOW_AUTH" rather + than "NEED_AUTH" means. + (free_auth_types): Nuke. + +2001-03-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_message): + Return -1 on fail. + (camel_filter_driver_filter_folder): Same. + (camel_filter_driver_filter_mbox): Same. + (camel_filter_driver_filter_folder): Return -1 if an exception was + set as well. + +2001-03-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-openssl.c (camel_tcp_stream_openssl_finalize): + Free the expected host. + (camel_tcp_stream_openssl_new): Now takes a Service and an + expected_host. Set them. + +2001-03-20 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-store.c + (camel_imap_store_check_online): Function to check if the store is + online and set an exception if not. Currently controlled by an + environment variable, but eventually there will be both a global + (session-level) setting and a per-store setting. + (construct): Set up storage_path and base_url here rather than at + connect-time. + (imap_auth_loop): Split out from imap_connect. + (imap_setup_online): Split out from imap_connect. Do the + post-authentication connection setup, and cache the results to + disk. + (imap_setup_offline): Set up a CamelImapStore with information + saved from a previous imap_setup_online. + (imap_connect): If online, do connect_to_server(), + imap_auth_loop(), and imap_setup_online(). Otherwise, do + imap_setup_offline(). + (get_folder, get_folder_info): Add offline support. + (create_folder, subscribe_folder, unsubscribe_folder): Disable + these when offline (for now). + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): + Remove the sync'ing-with-server stuff... it's done by + camel_imap_folder_selected now, which only gets called if the + store is online. + (camel_imap_folder_selected): add the code removed from + camel_imap_folder_new. Besides simplifying the folder_new and + summary_new code, this also means now that we'll DTRT if a + folder's UIDVALIDITY changes while we're connected. Also, when + that happens, clear the message cache explicitly. + (imap_refresh_info, imap_sync): These are no-ops when offline. + (imap_expunge, imap_append_message, imap_copy_message_to, + imap_search_by_expression): These don't yet work offline. + (imap_get_message, camel_imap_folder_fetch_data): Return an error + when trying to fetch a non-cached body part when we're offline. + + * providers/imap/camel-imap-summary.c (camel_imap_summary_new): + Rewrite to not check the validity here. (We'll do it from + camel_imap_folder_selected instead.) + + * providers/imap/camel-imap-command.c (camel_imap_command): Call + camel_imap_folder_selected even when the selection is all we're + doing, to match the changes in camel-imap-folder.c. + + * providers/imap/camel-imap-message-cache.c + (camel_imap_message_cache_clear): New function to clear out a + message cache. + +2001-03-19 Christopher James Lahey <clahey@ximian.com> + + * Makefile.am (INCLUDES): Added $(EXTRA_GNOME_CFLAGS) + +2001-03-19 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-store.c (pop3_connect): Set the errbuf + to NULL after freeing it? I don't think this should fix bug #1801 + but I guess it can't hurt. + +2001-03-18 Jeffrey Stedfast <fejj@ximian.com> + + * camel-remote-store.c (remote_recv_line): Protect against a + possibly NULL exception. + + * camel-filter-driver.c (camel_filter_driver_filter_message): + Document and modify to return a boolean value denoting whether or + not errors occured during processing. + (camel_filter_driver_filter_mbox): Same as above and also modified + to check return codes of filter_message rather than relying only + on whether or not the exception was set (as it's possible to pass + in NULL for the exception). + (camel_filter_driver_filter_folder): Same as above. + + * camel-mime-utils.c (header_param_list_format_append): Quote the + param value if it contains whitespace as well. + +2001-03-17 Jeffrey Stedfast <fejj@ximian.com> + + * Makefile.am: Don't include system include dir. + + * camel.c: Use quotes around the nss.h include so it doesn't try + to use the systen nss.h file. + + * camel-tcp-stream-ssl.c: Same here. + +2001-03-17 Not Zed <NotZed@Ximian.com> + + * providers/local/camel-maildir-summary.c (maildir_summary_sync): + Modified patch from Dan Berger <dberger@ix.netcom.com> to re-check + the maildir directory for new/updated messages at sync time. + + * camel-folder.c (camel_folder_ref_message_info): Implemented. + (ref_message_info): And default implementation. + + * camel-folder.h: Added ref_message_info virtual method. + +2001-03-16 Not Zed <NotZed@Ximian.com> + + * camel-folder-thread.c + (camel_folder_thread_messages_new_summary): New function to create + a thread tree from a supplied summary array. + (camel_folder_thread_messages_destroy): Handle thread trees + generated by the above function properly. + +2001-03-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-private.h: Same. + + * camel-remote-store.h: Fixed #include to use <>'s instead of ""'s + +2001-03-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (ssl_bad_cert): Print info about the + issuer of the certificate. + + * providers/smtp/camel-smtp-transport.c (smtp_connect): Use + camel_tcp_stream_get_socket(). + + * camel-tcp-stream-openssl.c (stream_get_socket): Implemented. + + * camel-tcp-stream-ssl.c (stream_get_socket): Implemented. + + * camel-tcp-stream-raw.c (stream_get_socket): Implemented. + + * camel-tcp-stream.c (camel_tcp_stream_get_socket): New function. + +2001-03-16 Kjartan Maraas <kmaraas@gnome.org> + + * providers/pop3/camel-pop3-folder.c: Added #include <config.h> + +2001-03-16 Dan Winship <danw@ximian.com> + + * camel-mime-utils.c (header_msgid_generate): Don't use + getdomainname: it's NIS crap, not DNS. + +2001-03-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel.c (camel_init): Don't use the hardcoded cert db directory, + use the one passed in. + + * camel-tcp-stream-ssl.c (ssl_get_client_auth): Wrote the default + implementation. Not that we'll use this though, since this is the + default implementation provided by NSS anyway. This more or less + serves as a reference in case we want to change anything. + (ssl_auth_cert): Same. + (ssl_bad_cert): Changed the prompt string and free it when we're + done. + +2001-03-15 Dan Winship <danw@ximian.com> + + First batch of disconnected IMAP-related stuff. This adds local + caching of message parts, but NOT any actual disconnected support. + (But it should speed up IMAP use.) + + * providers/imap/camel-imap-message-cache.c: New class for caching + message data to disk, and removing it when it's no longer + relevant. Will eventually also support merging message parts + together to save on files. Or maybe using a db instead of files? + + * providers/imap/camel-imap-private.h: Add a cache_lock to + CamelImapFolderPrivate. This lock must be recursive, so make both + locks EMutexes rather than GMutex. + + * providers/imap/camel-imap-folder.c (parse_fetch_response): "The + only FETCH response parser you need!" Replaces the various + almost-correct bits of code formerly scattered throughout this + file with a single fully-correct function that can handle any + FETCH response at any time, so we don't get confused by seeing a + flags update when we were only expecting a message body, etc. + (camel_imap_folder_fetch_data): FETCH a message body part either + from the cache or the server + (camel_imap_folder_changed): Remove expunged messages from the + message cache. + (camel_imap_folder_new): Change to take a directory instead of a + summary file name. Create a CamelImapMessageCache for the folder. + (imap_finalize): Unref the message cache. + (camel_imap_folder_selected, imap_rescan, get_content, + get_message, imap_get_message, imap_update_summary): Redone a + bunch to use parse_fetch_data, CamelImapMessageCache, etc. + + * providers/imap/camel-imap-store.c (get_folder): Pass directory + name to camel_imap_folder_new, not summary filename. Use + e_path_to_physical to generate a path with /subfolders/ inserted + between directory components. + + * providers/imap/camel-imap-wrapper.c (camel_imap_wrapper_new): + Call camel_imap_folder_fetch_data (with cache_only TRUE) and if + the data is cached, return an online datawrapper rather than an + offline one. + (write_to_stream): Use camel_imap_folder_fetch_data (with + cache_only FALSE) here too + + * providers/imap/camel-imap-utils.c (imap_skip_list): Renamed from + skip_list and made non-static. + +2001-03-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.h: Uninclude prnetdb.h since it's not + needed here. + + * providers/smtp/camel-smtp-transport.c: #include prnetdb.h here + instead of making camel-tcp-stream-ssl.h include it. Prevents some + header bloat. + + * providers/smtp/Makefile.am: Include the NSPR_CFLAGS and + NSS_CFLAGS. + +2001-03-14 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_connect): Update for + using CamelTcpStreams and also for using SSL. + + * providers/smtp/libcamelsmtp.urls: defined "ssmtp" + + * providers/smtp/camel-smtp-provider.c: Defined the Secure SMTP + provider. + (camel_provider_module_init): Register the Secure SMTP provider. + +2001-03-14 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (imap_connect): Check for + "simap" instead of "imaps". + + * providers/pop3/camel-pop3-store.c (pop3_connect): Change the + port to be 995 for spop. + + * providers/pop3/libcamelpop3.urls: Change to "spop". + + * providers/imap/libcamelimap.urls: Change "imaps" to "simap" to + correspond to /etc/services. + +2001-03-14 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-store.c (pop3_connect): Check to see + if we are using "pops" and then set the appropriate SSL settings. + + * providers/pop3/libcamelpop3.urls: Add "pops" + + * providers/pop3/camel-pop3-provider.c: Defined the pops provider. + (camel_provider_module_init): Register the pops provider. + +2001-03-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (camel_tcp_stream_ssl_new): Ya know what? + Lets not ref the service because otherwise we'll start having the + same problems we had back with vtrash. Besides, since the store + owns the stream, it's not like the store is going anywhere without + the stream anyway. + (camel_tcp_stream_ssl_finalize): No need to unref the service. + +2001-03-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-remote-store.c (remote_connect): Pass the service into the + SSL stream, not the session. + + * camel-tcp-stream-ssl.c (camel_tcp_stream_ssl_init): Set the + service to NULL. + (camel_tcp_stream_ssl_finalize): Unref the service. + (camel_tcp_stream_ssl_new): Takes a CamelService arg now rather + than a CamelSession arg. + +2001-03-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel.c (camel_init): So it turns out that NSS_Init *isn't* + idempotent, so we have to protect against initializing it more + than once(contrary to what their design specs suggest). + + * camel-session.c (camel_session_get_service): Use + camel_exception_is_set() - Makes no difference but it's more + consistant with how we normally do it. + + * camel-provider.h (CAMEL_URL_ALLOW_SSL): We don't need this. + + * providers/imap/camel-imap-provider.c: Define the imaps provider. + (camel_provider_module_init): Register the imaps provider. + + * camel-provider.c (camel_provider_init): Only add the protocol to + the hash table if it's non empty. Also, g_strdup() the filename + into the hash table. + + * providers/imap/camel-imap-store.c (camel_imap_store_init): Eek! + So the service's URL isn't set until after this is + initialized. This means we can't check for SSL here. + (imap_connect): Set the SSL options here instead. + +2001-03-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c: Numerous fixes to get it to build + correctly with NSS enabled. + + * camel-remote-store.c (remote_connect): Pass in the session and + expected host args, oops. + + * camel-provider.h (CAMEL_URL_ALLOW_SSL): Defined. + + * providers/imap/camel-imap-store.c (camel_imap_store_init): Check + to see if we are supposed to use SSL and set the options + accordingly. + (imap_connect): Return FALSE here instead of NULL. + + * providers/imap/camel-imap-provider.c: Add CAMEL_URL_ALLOW_SSL. + + * providers/imap/libcamelimap.urls: Add "imaps" which is the + protocol for Secure IMAP. + +2001-03-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-openssl.[c,h]: Added + + * Makefile.am: Added camel-tcp-stream-openssl.[c,h] to the build. + + * camel-types.h: Added CamelTcpStreamSSL and CamelTcpStreamOpenSSL + +2001-03-14 Not Zed <NotZed@Ximian.com> + + * camel-mime-filter-charset.c (filter, complete): re-constify + inbuf, to remove a warning. + + * camel-mime-parser.c (folder_scan_step): When we're out of data, + run the filter_complete. For some reason the logic that was there + was never being run, always try it now, i think it was to work + around a buggy filter, rather than fix it the right way. + + * camel-folder-summary.c (summary_build_content_info): If indexing + html parts, use the html filter to convert it to some indexable + format. + (summary_build_content_info): Reset the filters before adding them + back to the stream, if they get re-used in a given instance + (likely). + + * Makefile.am (libcamelinclude_HEADERS): Added + camel-mime-filter-html.[ch]. + (INCLUDES): Added xml clags + +2001-03-05 Not Zed <NotZed@Ximian.com> + + * camel-folder-search.c (camel_folder_search_class_init): Setup a + new function, "uid" which matches uids. + (search_uid): Implement the "match uid" command. + +2001-03-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c: Check for a new type of mailing list header. + +2001-03-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-raw.c (stream_read): Made cancellable. + (stream_write): Same. + (stream_connect): Removed checks for DIVINE_INTERVENTION as the + code worked fine. + + * camel-tcp-stream-ssl.c (stream_write): get rid of 'w' as it + wasn't really needed. + (set_errno): New function to set errno based on the NSPR error + code. + (stream_read): If an error occured, call set_errno(). + (stream_write): Same. + +2001-03-13 Jeffrey Stedfast <fejj@ximian.com> + + * Makefile.am: Added camel-tcp-stream-ssl to the build. + + * camel-remote-store.h: Add a use_ssl member to the + CamelRemoteStore object. + +2001-03-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (camel_tcp_stream_ssl_get_type): + Oops. Make this a subclass of CamelTcpStream, not CamelStream. + + * camel-types.h: Add the defs for CamelTcpStream and + CamelTcpStreamRaw + + * Makefile.am: Add camel-tcp-stream and camel-tcp-stream-raw to + the build. + + * camel-remote-store.c (remote_connect): Update to use + CamelTcpStreams. + + * camel-tcp-stream-raw.c (stream_connect): Made cancellable by + copying the currently used code in camel-remote-store.c. + (stream_setsockopt): Oops, flags = fcntl (..., GET_FL); + (camel_tcp_stream_raw_get_type): Oops. Make this a subclass of + CamelTcpStream, not CamelStream. + +2001-03-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel.c (camel_init): Since all of the Mozilla libs (including + NSPR and NSS) correctly handle reinitializations, we might as well + init both NSPR and NSS in camel_init so we can be sure of that + these libs have been initialized. + (camel_shutdown): New function to call the NSS cleanup stuff. + +2001-03-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder.c (camel_folder_copy_message_to): Don't allow the + user to copy a message to or from the vtrash folder. Set an + exception if they try. + (camel_folder_move_message_to): This one is a bit more + complicated: 1) If the user tried to move a message from the + vtrash into the original folder, just undelete the message. 2) If + the user tries to move the message to the vtrash folder, then just + mark the message as deleted. 3) If the user tries to move the + message from the vTrash to a folder other than the original, use + the original folder as the source. As another optimization, I've + made it so that if the user tries to move a message to the same + folder, just no-op. + (move_message_to): Unset the deleted flag before moving (assuming + it's there). + (copy_message_to): Same. + + * camel-vee-folder.c (camel_vee_folder_get_message_folder): New + convenience function to get the folder from which the message uid + is derived from. + +2001-03-13 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-store.c (imap_connect): When trying + again after a failed password attempt, check if the connection got + dropped (which Courier will do) and deal accordingly. + + * providers/sendmail/camel-sendmail-transport.c (sendmail_send_to, + sendmail_send): More fixing for exim: It can't deal with "-tif", + you need to say "-t -i -f". + +2001-03-12 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (init_trash): Rename the folder to "Trash" and + i18nify it. + +2001-03-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.h: Comment out everything unless HAVE_NSS + is defined. + + * camel-tcp-stream-ssl.c (stream_read): Don't use errno, use + nspr's error code stuff. + (stream_write): Same. + +2001-03-09 Jeffrey Stedfast <fejj@ximian.com> + + * camel-session.c (camel_session_query_authenticator): Created a + new mode (CAMEL_AUTHENTICATOR_ACCEPT) which is a Yes/No prompt to + the user. This will be needed by the SSL/TLS code to come. Also + changed the return value to a gpointer rather than a char* to + allow the returning of TRUE/FALSE values. + + * camel.c: Wrap stuff with HAVE_NSS + +2001-03-09 Dan Winship <danw@ximian.com> + + * providers/sendmail/camel-sendmail-transport.c (sendmail_send, + sendmail_send_to): Remove the "-U" for now, because it breaks + exim's "sendmail" wrapper. (And it doesn't actually do all that + much to sendmail's behavior, and it was working fine before + anyway.) + + * camel-mime-utils.c (header_fold): Fix a bug that could make this + walk off the end of a string. (The bug has been there since + December... maybe this will fix some unreproduceable crashes?) + +2001-03-08 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (camel_store_get_folder): Changes so that the + folder gets added to the vtrash reguardless of whether or not the + store is holding it's own folder lookup hash. + (init_trash): Oops, lets try locking the cache before we go and + add all the cached folders to the vtrash. + +2001-03-08 Jeffrey Stedfast <fejj@ximian.com> + These fixes make it so that the CamelStore does not actually hold + a ref on it's vTrash folder. The vTrash folder is now created ONLY + when it is requested. This solves the problem of not being able to + unref a Store and have it disconnect/finalize like we expect it to. + + * camel-store.c (init_trash): When we create the vtrash, add all + previously opened folders to it and hook on to the finalize event + so that we can then set the store->vtrash to NULL. + (get_trash): If a vtrash folder for the store doesn't exist, + init_trash() and then try. + (construct): No longer need this. + (camel_store_class_init): Don't override the construct method. + (camel_store_finalize): We no longer hold a ref on the vtrash so + don't unref it. + +2001-03-07 Jeffrey Stedfast <fejj@ximian.com> + + * providers/pop3/camel-pop3-store.c (init_trash): Implement. + (get_trash): Implement. + (camel_pop3_store_class_init): Override the default init_trash and + get_trash virtual functions. Hopefully this should fix the problem + of pop3 sotre's not disconnecting after the send&recv code + finishes downloading mail. + + Wonder if I should override the default implementation for the + mbox, mh, and maildir too? + +2001-03-07 Dan Winship <danw@ximian.com> + + * camel-remote-store.c (camel_remote_store_connected): Return the + return value of camel_service_connect rather than returning + !camel_exception_is_set(), since that will be wrong if ex==NULL... + Fixes a crash in the IMAP keepalive code, but this same problem + probably exists in other places too... + (remote_recv_line): Fix another problem... + + * providers/local/camel-mbox-provider.c: + * providers/vee/.cvsignore: + * providers/vee/libcamelvee.urls: Remove some unused stuff + +2001-03-06 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-digest-md5.c (compute_response): Redone so as to save + on memory allocations and speed. + +2001-03-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-plain.c (plain_challenge): Don't return NULL if the + token is non-NULL. This is why: + + sending : AUTH PLAIN + received: 334 ok. go on. <-- this is why + sending : ZGZPaQpAZ214Lm5ldBBnb29jYXI= + received: 235 {mp005-rz3} go ahead + + * camel-sasl.c (camel_sasl_authtype): Add the PLAIN type here. + (camel_sasl_authtype_list): And here too. + + * camel-sasl-plain.c: Initialize the camel_sasl_plain_authtype. + + * camel-sasl-plain.h: extern the camel_sasl_plain_authtype. + +2001-03-05 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (imap_connect): i18n'd some + strings in here. + + * providers/smtp/camel-smtp-transport.c (smtp_connect): Keep + trying to authenticate until either we succeed or until the user + cancels. + +2001-03-04 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c: Wrote a new version of header_fold() that + takes a 'force' option and uses another new function called + header_fold_next_space() in place of strchr(inptr, ' ') to get the + next whitespace char. The idea of header_fold_next_space() is to + not treat spaces between a set of quotes as a space - this way it + will be possible to fold (for example) the Content-Type MIME + header without worrying about breaking up a boundary string. + Note: This code is #if 0'd out until Zucchi approves of the patch. + Another Note: We will probably still want to use the "don't fold + this header" hash lookup for headers like the Message-Id and + possibly a few others. + +2001-03-04 Jeffrey Stedfast <fejj@ximian.com> + + * camel-internet-address.c + (camel_internet_address_encode_address): Make sure there is a + space between the name and the address tokens. + + * camel-mime-utils.c (rfc2047_decode_word): encoded string + segments need to be at least 8 chars (7 doesn't leave room for an + ecoding value. To be more realistic, even 8 chars isn't enough as + this assumes there is no charset nor any encoded text. If the + encoding value is not 'Q' or 'B', then return NULL. This fixes bug + #1689. + +2001-03-03 Not Zed <NotZed@Ximian.com> + + * camel-vee-folder.c (vee_folder_remove_folder): New function to + remove a folder from a vfolder. + (camel_vee_folder_remove_folder): New public function to remove a + folder from a vfolder. + +2001-03-02 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-provider.c: Doh! Set the + CAMEL_URL_ALLOW_AUTH flag. + + * providers/smtp/camel-smtp-transport.c (get_smtp_error_string): + Updated with the extended AUTH return codes. + +2001-03-02 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-store.c (try_auth): Don't forget to + unref the SASL object. + + * providers/smtp/camel-smtp-transport.c (query_auth_types): + Implemented. + (smtp_auth): Implemented. + (smtp_helo): Don't bother parsing the authtypes if we already have + them. + (smtp_connect): call smtp_auth() here if we found any authtypes. + (smtp_disconnect): Updated as I now use a hash table for the + supported authtypes rather than a linked list. + (esmtp_get_authtypes): modify to use a hash table instead of a + linked list and also use isspace() rather than == ' '. + +2001-03-02 Dan Winship <danw@ximian.com> + + * providers/sendmail/camel-sendmail-transport.c (sendmail_send_to, + sendmail_send): Use "-f" to set the envelope from address so + bounces go to the right place. Also, pass "-U" since the man page + says we're supposed to... + +2001-03-01 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl.c: #include "camel-sasl-digest-md5.h" + (camel_sasl_authtype_list): add DIGEST-MD5 stuff here. + (camel_sasl_authtype): And here too. + (camel_sasl_new): And here... + + * camel-sasl-digest-md5.[c,h]: new SASL class for DIGEST-MD5 (has + been tested and proven to work). + +2001-03-01 Dan Winship <danw@ximian.com> + + * camel-sasl.c (camel_sasl_challenge): Take a GByteArray as input + as well. Comment that you can pass %NULL for @token to get the + initial auth data for mechanisms that are client-initiated. + (camel_sasl_challenge_base64): Convenience function for protocols + that use base64-encoded SASL. + (camel_sasl_authenticated): Implement this... (it was prototyped + already) + (camel_sasl_new): Function to take a service name, a mechanism + name, and a CamelService, and return a CamelSasl for it. + (camel_sasl_authtype, camel_sasl_authtype_list): Functions to + return CamelServiceAuthType information about SASL mechanisms, to + allow providers to deal with them generically. + + * camel-sasl-anonymous.c, camel-sasl-plain.c: Update/simplify for + CamelSasl changes. Both of these are single-round + (client-initiated) mechanisms, so they don't need to keep state. + (camel_sasl_plain_new): Removed; use camel_sasl_new instead. + (Can't get rid of camel_sasl_anonymous_new though...) + + * camel-sasl-cram-md5.c: Update/simplify for CamelSasl changes. + (camel_sasl_cram_md5_new): Removed; use camel_sasl_new instead. + (cram_md5_challenge): Use md5_get_digest where possible, and + various other minor simplifications. CRAM-MD5 only has a single + round, so there's no need to keep track of state. This code is now + tested (against Cyrus IMAPd) and known to work. + + * camel-sasl-kerberos4.h: Update/simplify for CamelSasl changes. + Make only a single #ifdef HAVE_KRB4. Remove stuff from priv that + isn't needed between rounds. + (camel_sasl_kerberos4_new): Removed; use camel_sasl_new instead + (krb4_challenge): Fix up the logic I broke in my previous "at + least make it compile" fixes, update to match other changes, and + remove IMAP-isms that shouldn't be in the generic code. This still + isn't tested, because we're stuck behind a NAT right now... + + * providers/imap/camel-imap-store.c: Add an "authtypes" hash table + to CamelImapStore recording the supported authtypes. + (connect_to_server): Record supported authtypes in the authtypes + hash rather than the capabilities bitmask, since now the IMAP code + is no longer responsible for keeping track of which authtypes we + support. + (query_auth_types): Use camel_sasl_authtype_list to get the + SASL-supported authtypes. + (try_auth): New function to try a SASL auth mechanism. Sort of + formerly imap_try_kerberos_v4_auth. + (imap_connect): Get rid of the krb4-specific bits and genericize + them for any SASL authtype. + + * providers/imap/Makefile.am: Remove camel-imap-auth.[ch] (moved + into camel-imap-store.c since it's now constant size) and the + KRB4_CFLAGS and KRB4_LDFLAGS references. + +2001-03-01 Jeffrey Stedfast <fejj@ximian.com> + + * camel-sasl-anonymous.c (anon_challenge): Don't base64 encode the + data, leave that up to the provider to do if it needs to. Also + save on some memory allocations and stuff. + + * camel-sasl-cram-md5.c (cram_md5_challenge): Same here. Also get + rid of the need for the temp buf as we can just write it to the + GByteArray. + +2001-03-02 Not Zed <NotZed@Ximian.com> + + * camel-mime-utils.c (rfc2047_encode_word, rfc2047_decode_word): + Reconstify variables to match iconv. + + * camel-search-private.c (camel_ustrstrcase): Change some + assertions back into valid returns. + +2001-03-01 Dan Winship <danw@ximian.com> + + * Makefile.am (libcamel_la_LIBADD, INCLUDES): camel depends on + krb4 now (where available), for camel-sasl-kerberos4.c + + * camel-sasl-kerberos4.[ch]: Make this at least compile. Dunno if + it works yet. + +2001-03-01 Peter Williams <peterw@ximian.com> + + * camel-url.c (camel_url_new): Assert url_string != NULL. + +2001-02-28 Jeffrey Stedfast <fejj@ximian.com> + + * Makefile.am: Added camel-sasl-anonymous.[c,h] to the build. + + * camel-sasl-anonymous.[c,h]: new SASL class for ANONYMOUS + + * camel-sasl-plain.c (plain_challenge): Oops, have a state for + setting sasl->authenticated = TRUE; + + * camel-sasl-cram-md5.c (cram_md5_challenge): Same here. + +2001-02-28 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_decode_date): A fix for broken + mailers that send 2-digit years (ie "Wed, 28 Feb 01 + 04:59:41"). Fixes bug #1633. + + * camel-filter-driver.c (camel_filter_driver_filter_folder): Check + to make sure message isn't NULL. + +2001-02-28 Dan Winship <danw@ximian.com> + + * camel-remote-store.c (remote_recv_line): If we get back 0 bytes + from camel_stream_buffer_gets, that means the socket got + disconnected, so set an exception. (Noticed because of a message + that crashes our IMAP server when you try to look at it. :) + +2001-02-28 Jeffrey Stedfast <fejj@ximian.com> + + * Makefile.am: Added camel-sasl*.[c,h] to the build. + + * camel-sasl.[c,h]: new "abstract" SASL class + + * camel-sasl-kerberos4.[c,h]: new SASL class for KERBEROS_V4 + + * camel-sasl-cram-md5.[c,h]: new SASL class for CRAM-MD5 + + * camel-sasl-plain.[c,h]: new SASL class for PLAIN + + * providers/imap/camel-imap-auth.c: Removed the base64 functions. + + * camel-mime-utils.c (base64_encode_simple): Moved here from + camel-imap-auth.c + (base64_decode_simple): Same. + +2001-02-26 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c (imap_sync): Group messages + into sets with the same flags and use the IMAP message set + notation rather than doing a separate STORE FLAGS for each one. + This cuts the network traffic down to just a handful of commands + per sync rather than one per changed message. Removed the progress + notification stuff since it's no longer meaningful and should + hopefully be unnecessary. + (imap_copy_message_to): move the former sync_message function + into here, since it's no longer shared with imap_sync. + +2001-02-26 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c: Made thread-safe and moved to above the test + code. + + * camel-mime-message.c (camel_mime_message_init): Set the + message_id to NULL. + (camel_mime_message_finalize): Free the message_id. + (camel_mime_message_set_message_id): New function to set the + Message-Id. + (camel_mime_message_get_message_id): New function to get the + Message-Id. + (process_header): Decode the message-id. + +2001-02-24 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (construct): init the vTrash folder here instead + of in store_init. + (camel_store_class_init): init service_class->construct. + (camel_store_finalize): We only need to unref the vtrash folder. + (init_trash): don't create a vstore since we don't need it. + +2001-02-23 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (camel_store_class_init): init get_trash and + init_trash. + (camel_store_init): call the virtual init_trash function. + (camel_store_finalize): unref the vtrash folder/store if present. + (camel_store_get_folder): Add the new folder to the vtrash + vfolder. + (init_trash): default implementation of init_trash. + (get_trash): default implementation of get_trash. + + * camel-vee-store.c (vee_init_trash): No-op. + (vee_get_trash): return NULL + +2001-02-23 Not Zed <NotZed@Ximian.com> + + * camel-folder-summary.c (camel_message_info_new_from_header): + Doh, cut and paste problem, use mlist not cc. + + * camel-folder.c (move_message_to): + (copy_message_to): If the source folder doesn't support a + summary, dont try and get the message info from it. + + * camel-filter-search.c (check_header): Implement a pseudo-header + "x-camel-mlist" which just looks up in the message info for a + match. + + * camel-folder-search.c (check_header): Add pseudo-header + "x-camel-mlist" which can be used to match on mailing list. + + * providers/imap/camel-imap-folder.c (imap_sync): Add some + internal progress reporting. + (imap_rescan): Do some progress reporting. + + * camel-mime-part.c (init_header_name_table): Add the message-id + to the formatted table, so we dont try and wrap it, and break it. + +2001-02-22 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder.h: Remove the 'FIXME: remove because this isn't + required...' comment for copy_message_to since we now need and + cherish its existance in the filter-driver code ;-) + + * camel-filter-driver.c (camel_filter_driver_filter_message): Now + takes a UID and CamelFolder arguments (which can be NULL) to allow + for possible optimizations when copying messages between folders + on the same store. + (camel_filter_driver_filter_mbox): Updated (passes NULL for both + since this case can't be optimized anyway). + (camel_filter_driver_filter_folder): Updated to pass in the uid + and folder of the message. + +2001-02-22 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-summary.h (CAMEL_IMAP_SERVER_FLAGS): + #define this as the set of all IMAP system flags + + * providers/imap/camel-imap-folder.c (sync_message): after syncing + flags, set server_flags to (flags & CAMEL_IMAP_SERVER_FLAGS) + rather than just "flags", since any other flags won't have been + synced. Prevents the CAMEL_MESSAGE_ATTACHMENTS flag from getting + lost. + +2001-02-22 Not Zed <NotZed@Ximian.com> + + * providers/vee/*: Removed all files. + + * camel-private.h: Move camel-vee-private.h stuff into here. + + * camel-session.c: Move the vee_provider here, and initialise it + always as part of a session. The vfolder provider is always + available. + + * providers/Makefile.am: Remove "vee" from the build list, now + built as part of the main library. + + * Makefile.am (libcamelinclude_HEADERS): + (libcamel_la_SOURCES): Added camel-vee-store.[ch], + camel-vee-folder.[ch]. + + * providers/vee/camel-vee-folder.c (vee_folder_build): Removed, + not used. + (camel_vee_folder_new): Removed call to build_folder. + (vee_get_message): Dont try and free the mi if we didn't get it. + + * camel-folder.c (camel_folder_change_info_new): Added a hash + table of what we have in the lists, plus moved private things into + private pointer. + (camel_folder_change_info_add_source): Fixed up private accesses. + (camel_folder_change_info_add_uid): Changed to use a hashtable to + see if we already have the uid, etc. + (camel_folder_change_info_remove_uid): Similar. + (change_info_remove): Likewise. + (camel_folder_change_info_clear): Fixes for privatisations. + (camel_folder_change_info_free): " + +2001-02-21 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c (fetch_medium): Fixes for + IMAP4-pre-rev1 from Torsten Schulz. + +2001-02-20 Not Zed <NotZed@Ximian.com> + + * camel-mime-utils.c (mail_list_magic): Take the ^Header: part out + of the expression, since we look that up ourselves. + (header_raw_check_mailing_list): When getting the match, get match + 1, not match 0, we dont want the full string match. + + * camel-folder-summary.c (CAMEL_FOLDER_SUMMARY_VERSION): Bumped + for summary change. + (message_info_new): Extract the mlist info from the headers. + (message_info_load): Load mlist from summary. + (message_info_save): Save mlist to summary. + (message_info_free): Save the mlist entry. + (camel_message_info_new_from_header): Extract mailing list header. + (camel_message_info_dup_to): Copy the mlist entry. + (camel_message_info_free): Free mlist. + (message_info_dump): Dump the mlist. + + * camel-folder-summary.h: Add an mlist (mailing list) string to + the summary. + +2001-02-19 Not Zed <NotZed@Ximian.com> + + * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Added + flags argument. + (message_changed): Add support for the auto-update flag, in which + case we auto-match the content as it changes. + (camel_vee_folder_init): Remoive "DYNAMIC" optionality + (camel_vee_folder_finalise): " + (vee_expunge): As we expunge folders, re-sync their content by + rerunning the query. + + * providers/vee/camel-vee-store.c (vee_get_folder): Pass flags to + folder new. + +2001-02-18 Not Zed <NotZed@Ximian.com> + + * providers/vee/Makefile.am (noinst_HEADERS): Added + camel-vee-private.h. + + * providers/vee/camel-vee-private.h: New file to add locking stuff + for vee folders. + + * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Add + locking around unmatched setup. + (camel_vee_folder_init): Setup lock. + (camel_vee_folder_finalise): Free locks. + (folder_changed): Add locking. + (unmatched_finalise): " + (message_changed): " + (vee_folder_build): " + +2001-02-17 Not Zed <NotZed@Ximian.com> + + * providers/vee/camel-vee-folder.c (vee_folder_add): Check uid + doesn't exist before adding it. + +2001-02-16 Not Zed <NotZed@Ximian.com> + + * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Create + a new virtual virtual folder UNMATCHED, to store all messages that + dont match other vfolders. + (unmatched_folder_changed): When a vfolder issues a changed event, + use its info to update the unmatched folder info. + (unmatched_finalise): When a vfolder is finalised, remove any uids + it has as if we had a removed event for it. + +2001-02-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_finalise): Thaw the + defaultfolder. + (camel_filter_driver_set_default_folder): Thaw the defaultfolder + we're about to replace, and freeze the new defaultfolder. + +2001-02-15 Jeffrey Stedfast <fejj@ximian.com> + + * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Emit + the folder_created signal here. + + * providers/local/camel-local-folder.c + (camel_local_folder_construct): Emit the folder_created signal. + + * providers/local/camel-local-store.c (delete_folder): On error, + free the 'name' string so we don't leak. Also emit the + folder_deleted signal. + + * providers/imap/camel-imap-store.c (subscribe_folder): Emit the + folder_created signal. + (unsubscribe_folder): Emit the folder_deleted signal. + + * camel-store.c (camel_store_class_init): Added folder_created and + folder_deleted signal defs. + +2001-02-15 Dan Winship <danw@ximian.com> + + * camel-folder-thread.c (container_parent_child): Deal with + out-of-order References headers so they don't cause messages to + disappear in threaded view. + + * providers/imap/camel-imap-folder.c (fetch_medium): IMAP4 + (pre-rev1) doesn't allow BODY.PEEK[], so use RFC822.PEEK instead + in that case. + +2001-02-14 Christopher James Lahey <clahey@ximian.com> + + * camel-mime-filter-charset.c (complete, filter), + camel-mime-utils.c (rfc2047_decode_word, rfc2047_encode_word): + Changed this code to match the glibc iconv signature. + +2001-02-14 Dan Winship <danw@ximian.com> + + * camel-store.c (camel_store_create_folder): New method to create + a folder when you don't know its full name. + + * providers/imap/camel-imap-store.c (create_folder): Implement. + (create_folder): Oops, and fix bug involving namespaces + +2001-02-12 Not Zed <NotZed@Ximian.com> + + * camel-mime-part.c (init_header_name_table): Add address headers + to list that we dont fold when writing. The are properly + formatted as we build them. + (write_to_stream): DOH, lookup the header name in the formatted + hash table, not the value, that would never have worked. + + * camel-internet-address.c + (camel_internet_address_encode_address): Changed to take a + parameter saying how much we've printed so far. We now fold the + header as we format it. We dont fold addresses, even if they are + too long, we simply put them on another line by themselves: this + should make the result more parsable by mailers that can't handle + split up addresses (which are legal). + (internet_encode): Fix for changes to above. + +2001-02-12 Jeffrey Stedfast <fejj@ximian.com> + + * providers/local/camel-local-provider.c: mbox, mh, and maildir + camel-url's need absolute paths. + + * camel-provider.h (CAMEL_URL_PATH_IS_ABSOLUTE): New flaggy flag. + +2001-02-08 Dan Winship <danw@ximian.com> + + * camel-store.c: Rewrite a bunch. Replace the existing folder + cache stuff with much simpler code that still handles all the + existing cases. Now the folder hash table is always created by the + base class, using hash and compare functions provided by the class + implementation. (If they are set to NULL, CamelStore won't cache + folders.) lookup_folder, cache_folder, and uncache_folder are no + longer class methods, and get_name is gone completely. + + (camel_store_get_inbox): Renamed from + camel_store_get_default_folder, since that wasn't being used, and + this is what we actually need. + (camel_store_get_root_folder): Removed, since it's not needed for + anything given get_folder_info. + + * camel-remote-store.c: + * providers/local/camel-local-store.c: + * providers/local/camel-mbox-store.c: + * providers/local/camel-mh-store.c: + * providers/local/camel-maildir-store.c: + * providers/nntp/camel-nntp-store.c: + * providers/pop3/camel-pop3-store.c: + * providers/vee/camel-vee-store.c: Minor updates for CamelStore + changes + + * providers/imap/camel-imap-store.c (camel_imap_store_class_init): + Update for CamelStore changes. + (hash_folder_name, compare_folder_name): treat INBOX + case-insensitively, otherwise use g_str_hash and g_str_equal. + + * camel-service.c (camel_service_construct): Remove + camel_service_new and create camel_service_construct (as a class + method) in its place. + + * camel-session.c (camel_session_get_service): Use + camel_object_new and camel_service_construct to replace + camel_service_new. + + * providers/local/camel-local-store.c (construct): Append a '/' to + the URL path if it doesn't end with one + +2001-01-31 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-tcp-stream-ssl.c: Oops, include the camel-tcp-stream-ssl + header instead of the raw one. + +2001-02-07 Not Zed <NotZed@Ximian.com> + + * camel-operation.c (camel_operation_start): Changed to push the + operation into a status stack. + (camel_operation_progress): Changed to only accept % complete. + (camel_operation_reset): Free status stack as well. + + * providers/pop3/camel-pop3-folder.c (pop3_get_message): Get the + octect count from the return line, and pass it to + get_additional_data(). + (pop3_refresh_info): Added status stuff. + + * providers/pop3/camel-pop3-store.c + (camel_pop3_command_get_additional_data): Added a total bytes + expected argument for progress reporting & fixed callers. + (camel_pop3_command_get_additional_data): Added progress + reporting. + + * providers/local/camel-mbox-summary.c (mbox_summary_sync_full): + (mbox_summary_sync_quick): + (summary_rebuild): Added progress reporting stuff. + +2001-02-07 Jeffrey Stedfast <fejj@ximian.com> + + * camel-search-private.c (CAMEL_SEARCH_COMPARE): Macro for making + comparisons easy. + (camel_ustrcasecmp): Use CAMEL_SEARCH_COMPARE and check for + end-of-string before the utf-8 error check. + (camel_ustrncasecmp): Same. + (camel_search_header_match): Strip leading spaces before doing + anything else. Also use vlen and mlen so as to not need to do 500 + strlen()'s. + (camel_ustrcasecmp): Don't get_utf8() for the 2 strings in the + comparison part of the loop because of short-circuit expression + evaluation. (blame JPR if this is the wrong term!) + (camel_ustrncasecmp): Same. + +2001-02-06 Jeffrey Stedfast <fejj@ximian.com> + + * camel-search-private.c (utf8_get): Rewrote using unicode_get_utf8(). + (camel_ustrcasecmp): Use unicode_char_t + (camel_ustrncasecmp): Same. + +2001-02-06 Christopher James Lahey <clahey@ximian.com> + + * camel-mime-filter-charset.c (complete, filter), + camel-mime-utils.c (rfc2047_decode_word, rfc2047_encode_word): + Made these pass char ** as the second parameter to iconv. + +2001-02-06 Not Zed <NotZed@Ximian.com> + + * camel-session.c: Removed all the camel_cancel stuff. + + * camel-stream-fs.c (stream_read): Change to use camel_operation. + (stream_write): " + + * camel-remote-store.c (socket_connect): Change to use + camel_operation rather than camel_cancel stuff. + Removed gal include, WTF is that doing there anyway? + + * Makefile.am (libcamel_la_SOURCES): + (libcamelinclude_HEADERS): Added camel-operation.[ch], stuff to + handle notification and cancellation. + + * camel-search-private.c: Removed unwanted header. It was never + put in for a reason. Stop fixing irrelevant warnings. + + (camel_ustrstrcase): Our own strstrcase impl for utf8 strings. + (camel_ustrcasecmp): Ditto for strcasecmp. + (camel_ustrncasecmp): And strncasecmp. + (utf8_get): Simpler interface to utf8 string processing. + (camel_search_header_match): Use the new things. + +2001-02-05 Not Zed <NotZed@Ximian.com> + + * camel-folder.c (get_summary): Removed some old variables/a small + memleak. + (free_summary): Removed old variables. + + * camel-mime-utils.c (header_raw_check_mailing_list): New utility + function to get the mailing list (if any) that a set of headers + came from. + +2001-02-05 Christopher James Lahey <clahey@helixcode.com> + + * camel-stream-fs.c: Added a missing #include. + + * camel-search-private.c: Added a missing #include. + +2001-02-05 Jeffrey Stedfast <fejj@ximian.com> + + * camel-remote-store.c (remote_query_auth_types): Oops. Change + this too. + + * providers/smtp/camel-smtp-transport.c (query_auth_types): Updated. + + * providers/nntp/camel-nntp-store.c (nntp_store_query_auth_types): + Updated. + + * providers/pop3/camel-pop3-store.c (query_auth_types): Updated. + + * providers/imap/camel-imap-store.c (query_auth_types): Updated. + + * camel-service.c (camel_service_query_auth_types): Now takes a + boolean value to specify whether or not to connect when + constructing a supported authtype list. + +2001-02-05 Not Zed <NotZed@Ximian.com> + + * camel-stream-filter.c (do_write): Revert jeff's earlier change, + the change below is the more-correct fix. All his was doing was + ignoring the return code & looping actually :) + + * camel-stream-fs.c (stream_write): Since we are non-blocking on + the outgoing fd, keep looping if writing out large blocks, so we + can keep checking for cancel, etc. + +2001-02-02 Not Zed <NotZed@Ximian.com> + + * camel-folder-thread.c (camel_folder_thread_messages_new): When + we drop a fake node, dont skip checking the next in the list. + (camel_folder_thread_messages_new): Add an assertion check just to + make sure we dont get any pseudo nodes, and spit a warning if we + do. + +2001-02-04 Jeffrey Stedfast <fejj@ximian.com> + + * camel-stream-filter.c (do_write): Make do_write loop until the + entire buffer is written. + +2001-02-02 Not Zed <NotZed@Ximian.com> + + * camel-stream-fs.c: Add missing header for cancel check stuff. + + * camel-session.c (camel_cancel_cancel): Fix a wrong cast. + + * camel-mime-part.c (init_header_name_table): Setup a new table + header_formatted_table, that lists headers that we dont want to + fold (they've already been folded). + (write_to_stream): Check for already formatted headers, and dont + try and fold them. This is a fix for bug #1097. + +2001-02-01 Not Zed <NotZed@Ximian.com> + + * camel-mime-utils.c (header_fold): If we are folding, drop the + space at the end of the line. + +2001-01-30 Not Zed <NotZed@Ximian.com> + + * camel-remote-store.c (timeout_cb): Remvoe the stream locking + here. I think this was leading to a deadlock when a keepalive is + being sent, in imap. + +2001-01-29 Not Zed <NotZed@Ximian.com> + + * providers/imap/camel-imap-command.c + (imap_command_strdup_vprintf): Include the terminating NUL in the + calculated string length. This hit memcheck. + +2001-01-25 Not Zed <NotZed@Ximian.com> + + * tests/folder/test3.c: Changed the subject search to handle case + sensitive when it is mixed case. + + * Makefile.am (libcamel_la_SOURCES): Added camel-ssearch-private.c + (noinst_HEADERS): Added camel-search-private.h + + * camel-folder-search.c (check_header): New function to do the + work of the various header checks. + (search_header_matches): + (search_header_starts_with): + (search_header_ends_with): + (search_header_contains): Use check_header to do the work. + (build_match_regex): Removed. + + * camel-search-private.c (header_soundex): New + function to match words to phrases using soundex algorithm. + + * camel-filter-search.c (soundexcmp): Removed. + (check_match): Moved to search-private.h + +2001-01-24 Not Zed <NotZed@Ximian.com> + + * camel-search-private.c (camel_search_build_match_regex): Added + extra flags, so the same function can be used for + start/end/whole/partial matches. + (camel_search_header_match): Convenience function to check a + single header against all sorts of different matches. + + * providers/imap/camel-imap-search.c (imap_body_contains): Fix for + e_sexp api changes. + + * camel-folder-search.c: Fix for e_sexp api changes. + (search_header_contains): Free args/quit on unknown header. + (search_header_matches): " + (search_header_starts_with): " + (search_header_ends_with): " + (match_message): Add an exception argument. + (search_body_contains): Free args/quit on fatal error. + (message_body_contains): Removed (moved to + camel-search-private.c), fixed callers. + + * camel-filter-search.c: Fix for e_sexp api changes. + (build_match_regex, message_body_contains): Moved into + camel-filter-private.c Fixed callers. + (check_header): moved guts to camel-search-private, and + changed to use regex's for everything. Just calls that with the + right args. + (check_header): GEts the header, decodes it, and checks for + failure, and whatnot. + (check_match): Removed. + (header_soundex): Changed significantly. Now it soundexes each + word in the header separately, and compares it to the first + argument. + + * tests/folder/test9.c (main): Fix for api changes. + (main): Added tests to see that invalid match and action + rules are properly detected. + + * camel-filter-driver.c (camel_filter_driver_filter_mbox): Remove + the 'finished message' bit. + (camel_filter_driver_filter_message): Remove an accidentally + checked in debug. + (camel_filter_driver_filter_message): Fix for e-sexp api changes. + +2001-01-23 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-wrapper.c: Add a lock around the + delayed loading, so two threads won't try to do it at the same + time. + +2001-01-22 Dan Winship <danw@ximian.com> + + * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Set the + CamelFolder::name to just the base part of the vfolder name (the + non-query part) + +2001-01-23 Not Zed <NotZed@Ximian.com> + + * camel-filter-search.c (camel_filter_search_match): Perform error + checking on parsing/execution. + + * camel-folder-search.c (camel_folder_search_execute_expression): + Perform error handling on search expression. + (CamelFolderSearchPrivate): Add a camelexception for error + returns. + (camel_folder_search_execute_expression): Setup exception pointer. + (search_match_all): Quit on error. + + * providers/imap/camel-imap-summary.c (message_info_load): Removed + some debug 'warnings', as they should now be displayed at the + toplevel loader, and just made the code match similar code + elsewhere. + + * providers/local/camel-mbox-summary.c (message_info_load): Error + handling. + (message_info_save): more error handling. + + * camel-folder-summary.c (message_info_load): Add error handling + and sanity checking. + (camel_folder_summary_load): Add error checks. + (perform_content_info_load): Error + sanity checks. + (content_info_load): error + sanity checks. + + * camel-filter-driver.c (close_folder): avoid /0 by updating after + we've done the sync. + (close_folders): Setup the first progress report to start it off. + (camel_filter_driver_filter_message): Fix a fixme, check errors in + e_sexp parsing, etc. + +2001-01-22 Christopher James Lahey <clahey@helixcode.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): + Initialize the value of the variable exists here. + +2001-01-22 Not Zed <NotZed@Ximian.com> + + * .cvsignore */*/.cvsignore: Added profiling temp + files. + + * camel-folder-thread.c (camel_folder_thread_messages_new): When + removing phantom nodes, check for the end node too. + + * camel-filter-driver.[ch]: Changed status vars to be + CAMEL_FILTER_STATUS_ etc. + +2001-01-21 Jeffrey Stedfast <fejj@ximian.com> + + * camel-mime-utils.c (header_param_list_format_append): Make the + output a little prettier. Okay, so I'm anal... + +2001-01-21 Not Zed <NotZed@Ximian.com> + + * camel-filter-driver.h: Added an exception to + CamelFilterGetFolderFunc. + + * camel-filter-driver.c (camel_filter_driver_filter_message): + Remove source parameter, as it is determined elsewhere now. + (camel_filter_driver_filter_folder): Same here. + (camel_filter_driver_filter_mbox): And here. + (do_move): If we cannot open a folder, quit, rather than ignoring + it. + (do_copy): Here too. + (open_folder): Pass an exception into get_folder callback. + (camel_filter_driver_filter_folder): Report that we're syncing, + when we are. + (camel_filter_driver_filter_mbox): And here too. + (close_folder): And here. + +2001-01-19 Jeffrey Stedfast <fejj@ximian.com> + + * camel-filter-driver.c (camel_filter_driver_filter_message): Set + the deleted bit *before* copying to the default folder, this way + if they are importing mail and have a rule to delete it, it + doesn't get copied to the default folder un-deleted. + +2001-01-19 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-store.c + (get_subscribed_folders_by_hand): If LISTing a subscribed folder + doesn't return a LIST response, just ignore that folder. Yay + RFC2060. + (subscribe_folder): add a missing UNLOCK + +2001-01-19 Kjartan Maraas <kmaraas@gnome.org> + + * providers/smtp/camel-smtp-provider.c: Mark strings for translation. + +2001-01-19 Not Zed <NotZed@Ximian.com> + + * camel-filter-driver.c (report_status): Add a percentage complete + indicator to the status thing. + (camel_filter_driver_filter_mbox): Add percentage complete to + reporting. + (camel_filter_driver_filter_folder): Same. + +2001-01-18 Dan Winship <danw@ximian.com> + + * camel-store.c (camel_folder_info_build): More tweaking... skip + separator characters after the namespace character. (Gets rid of + the shell folder registration warning some people have had with + IMAP) + + * providers/imap/camel-imap-store.c (imap_connect): I'm sure there + was some clever reason I was storing the flags of the folder in + the hash table rather than just "1", but I don't remember what it + was now. Anyway, since we only ever test NULL/non-NULL, store 1, + since flags is sometimes 0. + + * providers/imap/camel-imap-folder.c (imap_update_summary): Oops. + Somewhere in one of the reorgs, the code to add new messages to + the CamelFolderChangeInfo structure got removed. Fix that. + +2001-01-17 Jeffrey Stedfast <fejj@ximian.com> + + * providers/imap/camel-imap-summary.c (message_info_load): Add + some g_warnings() to help debug later if I ever get the segfaults + I was getting earlier. Can't seem to reproduce them after my + previous "fix". + + * camel-folder-summary.c (camel_folder_summary_load): Undid my + change here, NotZed said it was wrong and that if it gets a NULL + mi then it should abort and not continue. + +2001-01-17 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-summary.c (camel_folder_summary_load): Make sure + that the message-info is non-null before we go accessing inner + parts of it and/or adding it to the summary array. I may not have + handled the error correctly, but it does seem to work + correctly. If NotZed could double-check this it'd be great. + + * providers/smtp/camel-smtp-transport.c (get_smtp_error_string): + New smtp error-code to string mapping function. + (smtp_connect): Use the new error->string function for reporting + useful errors. + (smtp_helo): Same. Also use a case-insensitive strstr for 8BITMIME + as it seems Exchange sends back lowercase for that one single SMTP + extension. Everything else is uppercase. I'm seeing a lack of love + for that extension by Microsoft dudes... + (smtp_mail): Use get_smtp_error_string. + (smtp_rcpt): Same. + (smtp_data): Same. + (smtp_quit): Same. + (smtp_rset): Same. + +2001-01-16 Jeffrey Stedfast <fejj@ximian.com> + + * camel-folder-summary.c (camel_folder_summary_array): Add an int + i so this code will compile. Should I be worried about how well + this code will work? ;-) + +2001-01-17 Not Zed <NotZed@Ximian.com> + + * camel-folder.c (free_summary): Call + camel_folder_summary_array_free() to do the work. + (get_summary): Use camel_folder_summary_array() to get the array + atomically. These fixes allow folder/test8 to work again, and fix + a sort of race where the summary size can change while we were + making a copy of it. + + * camel-folder-summary.c (camel_folder_summary_array): Get the + summary array atomically, so it can't contain empty records. + (camel_folder_summary_array_free): And free it. + + * tests/lib/camel-test.c (die): If we are verbose & in threads, + then goto sleep so we can debug. + + * tests/folder/test8.c (worker): Add a missing pull() for + comnparing content. + + * camel-filter-search.c: Fix the symbol table, so match-all is an + immediate function, as it should be. + + * tests/folder/test9.c (main): New test, tests some filtering + things. + + * tests/message/test3.c (main): Dont use a boundary string with + spaces in it. Folding can corrupt it. Maybe the folding isn't + working entirely right, but anyway. + + * camel-session.c: Debug out the debug. + + * camel-filter-driver.c (camel_filter_driver_filter_folder): Plug + a messageinfo leak. + +2001-01-16 Dan Winship <danw@ximian.com> + + Delayed loading of IMAP message parts. + + * camel-types.h: typedef CamelMessageInfo and + CamelMessageContentInfo here + + * camel-folder-summary.h: Add a "size" field to + CamelMessageContentInfo. + + * camel-folder-summary.c (camel_folder_summary_content_info_new, + camel_folder_summary_content_info_free): Renamed and made + non-static for providers that construct their own content info. + (content_info_load, content_info_save): load/save size + + * camel-data-wrapper.c (camel_data_wrapper_is_offline): New + function to return if a data wrapper's contents are "offline". (So + that, for example, we don't make thumbnails of images that haven't + been loaded off the IMAP server yet.) Defaults to FALSE. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): + Fix a bug in re-selecting a folder when messages have been + expunged from it by another client in the meantime. + (imap_get_message): Rewrite. If the message is larger than a + certain size, just create a skeleton message containing + CamelImapWrappers that will read parts as needed. This way, large + attachments only need to be downloaded if the user looks at them, + and multipart/alternative alternatives that aren't used will never + be downloaded at all. + (imap_update_summary): Rewrite this a bunch too to make the + parsing more robust. + + * providers/imap/camel-imap-summary.c + (CAMEL_IMAP_SUMMARY_VERSION): bump. + (camel_imap_summary_new): Set build_content to TRUE. + (content_info_load, content_info_save): Only save/load the content + for messages that have it. (The content info gets created as a + side effect of imap_get_message.) + + * providers/imap/camel-imap-utils.c (imap_parse_body): New routine + (and helpers) to parse an IMAP 'body' FETCH response and fill in a + CamelMessageContentInfo from it. + + * providers/imap/Makefile.am (libcamelimap_la_SOURCES, + libcamelimap_la_HEADERS): add camel-imap-wrapper. + +2001-01-16 Dan Winship <danw@ximian.com> + + * camel-tcp-stream-raw.c (stream_getsockopt, stream_setsockopt): + * camel-stream-fs.c (stream_read, stream_write): + * camel-remote-store.c (socket_connect): fcntl(fd, F_GETFL) + returns the flags as the return value, not via a passed in + pointer. And F_SETFL looks for an int, not a long, and you have to + pass it what it's expecting because it's a va_arg parameter. (Yes, + the man page lies on Linux. But check the UNIX98 spec or the glibc + source.) Also, fix another bug in socket_connect: if we manage to + connect right away, unset O_NONBLOCK so it doesn't mess us up + later. + + Fixes a bunch of problems with non-blocking I/O being done in the + allegedly-blocking case and then returning EWOULDBLOCK. + +2001-01-16 Chris Toshok <toshok@ximian.com> + + * providers/Makefile.am (NNTP_DIR): set to nntp if ENABLE_NNTP + (SUBDIRS): use $(NNTP_DIR) + +2001-01-16 Jeffrey Stedfast <fejj@ximian.com> + + * providers/smtp/camel-smtp-transport.c (smtp_rcpt): Don't check + errno as it's not being set. Fixes bug #1150. + +2001-01-16 Jeffrey Stedfast <fejj@ximian.com> + + Ugh, this design is ugly like my butt. + + * camel-session.c (camel_session_query_cert_authenticator): New + function which will be useful when we integrate SSL. + + * camel-tcp-stream-ssl.c (ssl_auth_cert): Callback to authenticate + a certificate. + (ssl_bad_cert): Callback that gets the reason the certificate is + bad and then calls camel's cert-authenticator callback to notify + the user and to allow the user to override the check. + (stream_connect): Set the URL we expect to connect with and setup + the auth_cert and bad_cert callbacks. + (camel_tcp_stream_ssl_new): Now takes a CamelSession and a + expected_host argument that it will use for certificate + authentication. + (camel_tcp_stream_ssl_finalize): Unref the session and free the + expected_host. + +2001-01-16 Not Zed <NotZed@Ximian.com> + + * camel-filter-search.c (header_exists): Changed to support + multiple args (or'd together). + (header_contains): Cleaned up to match the search code. Why did + fejj change it? I'll never know. + (header_matches): + (header_starts_with): + (header_ends_with): Big cleanup of fejj's "i'm the cut & paste + king" code. Also properly handle or'ing of additional args to + match what the folder-search code should do. + (check_match): New function which does the annoying matching + stuff (for header matches). + (check_header): Similarly, handles or'ing of the matches together. + (header_contains): + (header_matches): + (header_starts_with): + (header_ends_with): Call check_header to do the actual work. + (header_soundex): And here too. + (match_all): Yeah like match-all isn't passed expression results, + its passed expression terms. Fix this so match-all works like it + should, by executing the contained expression. + (message_body_contains): Copied directly from + camel-folder-search.c, a more robust/faster/simpler body search + code. + (mime_part_matches): Removed entirely. + (handle_multipart): Removed entirely. + (build_match_regex): Copied from camel-folder-search. Builds a + set of simple strings into a regex pattern that matches any of + them (for faster & simpler matching). Expanded to accept regex + patterns itself, so it can merge them together. + (body_contains): Use build match/match message to match using a + built regex. + (body_regex): Likewise, this time we tell it we're building a + regex though. + (header_full_regex): Use build_match_regex to take the drudgery + out of it, and expand it to handle multiple regex's at once. + (get_full_header): slightly cleaner (well i dunno, the sprintf + stuff just got to me). + (header_regex): Cleaned up to use build_match_Regex too, and to + properly check types. + (filter_message_search): Just allocate 'fms' on the stack. + + * camel-filter-driver.c (camel_filter_driver_finalise): + (camel_filter_driver_init): + (camel_filter_driver_class_init): + (camel_filter_driver_get_type): Changed from gtk object to camel + object. + (camel_filter_driver_add_rule): New function to add a rule to be + processed in sexp form. + (camel_filter_driver_init): Init the rules list. + (camel_filter_driver_finalise): Clear the rules/rules list. + (camel_filter_driver_filter_message): Scan rules list directly + rather than creating on the fly. + + * Makefile.am (libcamelinclude_HEADERS): Added camel-filter-driver.h + (libcamel_la_SOURCES): Added camel-filter-driver.c, code taken + from filter-driver, which can drive, uh, filters based on sexp's. + (libcamelinclude_HEADERS): + (libcamel_la_SOURCES): Added camel-filter-search.[ch] + + * camel-folder-summary.c (camel_folder_summary_decode_string): + Chganged len back to be unsigned. And do a simple range check on + the string value to try and detect corrupted summary files. + + * providers/imap/camel-imap-command.c (imap_read_untagged): Handle + cancelled stream reads with an appropriate exception. + + * providers/imap/camel-imap-private.h: Fix the include-once + macro. Doh, confliced with camel-private.h. + + * providers/imap/camel-imap-store.c (imap_store_refresh_folders): + A copy of camel_remote_store_refresh_folders. We avoid locking + each folder when we call it though. This should be removed when i + can work out how to remove the folder lock from this function + easily. + + * camel-stream-fs.c (stream_write): Fix n' argument of select. + (stream_read): Likewise. + + * camel-remote-store.c (socket_connect): Bump the connect timeout + upto 4 minutes. + (socket_connect): Oops, fix the 'n' argument of select. + + * camel-session.c (camel_cancel_cancel): If we are given no + cancellation node, then do it for all active ones. + +2001-01-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-stream-fs.c (stream_close): If the close() is successful, + set the fd to -1. + + * camel-tcp-stream-raw.c: Removed the disconnect() method. + (stream_close): If the close() is successful, set the sockfd to + -1. + + * camel-tcp-stream-ssl.c: Removed the disconnect() method. + (stream_close): If the close() is successful, set the sockfd to + NULL. + + * camel-tcp-stream.c (camel_tcp_stream_disconnect): Removed, + easier to just use the close() method as it did the same thing + anyway. + +2001-01-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-raw.c (stream_getsockopt): Updated to be able + to get the CAMEL_SOCKOPT_NONBLOCKING socket opt. + (stream_setsockopt): Updated to be able to set the + CAMEL_SOCKOPT_NONBLOCKING socket opt. + +2001-01-15 Peter Williams <peterw@ximian.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Lock + around the imap_rescan, which needs it. + +2001-01-15 Not Zed <NotZed@Ximian.com> + + * camel-remote-store.c (socket_connect): A cancellable connection + routine. + (remote_send_string): Return cancelled exception if we were. + (remote_send_stream): " + (remote_recv_line): " + + * camel-stream-fs.c (stream_read): First cut at cancellation + stuff. Its looking a bit ugly. + +2001-01-15 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (stream_connect): Uses an SSL socket now + although there's still a few things missing (like certificate + handling and such). + + * camel.c (camel_ssl_init): A replacement function for + camel_init() that also initializes SSL. + +2001-01-14 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream-ssl.c (stream_getsockopt): Implemented. + (stream_setsockopt): Implemented. + + * camel-tcp-stream-raw.c (stream_getsockopt): Implemented. + (stream_setsockopt): Implemented. + + * camel-tcp-stream.c (camel_tcp_stream_getsockopt): New method. + (camel_tcp_stream_setsockopt): Another new method. I think you get + the idea of what these are for so I won't explain them. + +2001-01-14 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-tcp-stream-ssl.[c,h]: New CamelTcpStream class that + implements nspr sockets and eventually will use nss for + SSL/TLS. Currently doesn't do any SSL/TLS but it should still + work. It's functionally equivalent to CamelTcpStreamRaw at the + moment only it uses nspr i/o. + + * camel-tcp-stream-raw.[c,h]: New CamelTcpStream class that + implements native sockets. Should be usable but may have some bugs + yet. + +2001-01-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-tcp-stream.[c,h]: New abstract class for TCP streams. The + next step is to write child classes (CamelTcpStreamBSD and + CamelTcpStreamSSL). The BSD stream will use normal BSD sockets + while SSL will use Mozilla's NSPR and NSS libraries to do Secure + Socket Layers which wille ventually replace CamelStreamSSL which I + just commit'd. Oh well. + +2001-01-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-stream-ssl.[c,h]: New stream for handling SSL/TLS + connections. + +2001-01-12 Not Zed <NotZed@Ximian.com> + + * camel-folder-thread.c (camel_folder_thread_messages_new): + Perform a final pass, removing any pseudo nodes we added earlier. + Quick patch to test the idea. + (camel_folder_thread_messages_new): Added casts to rmeove some + warnings for the analites out there. + +2001-01-11 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): + Fix a bug in previous commit: don't check for deleted messages if + there are no known messages in the folder (because it would end up + sending "FETCH 0 ..."). + (imap_copy_message_to): Fix this up: sync flags to the server + before copying so that they end up correct in the remote folder. + And poke the destination folder after doing the copy so it notices + the new message right away. + (imap_move_message_to): Call imap_copy_message_to for most of the + work rather than duplicating the code (since it's much more + complicated now). + +2001-01-11 Dan Winship <danw@ximian.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_selected): + New function to check for added/deleted messages when re-selecting + a folder. + (imap_refresh_info, imap_rescan, imap_update_summary): Various + locking tweaks that turn out to be irrelevant since command_lock + is recursive, but whatever. + + * providers/imap/camel-imap-command.c (camel_imap_command): When + selecting a new folder, call camel_imap_folder_selected on it. + + * camel-folder.c (camel_folder_copy_message_to): Fix a locking + problem. (One branch of an if statement was returning with the + lock still locked.) Also remove the deprecation comments, to match + move_message_to. + +2001-01-10 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/local/camel-local-provider.c: Changed the descriptions + for mh, mbox, and maildir to be more "user-friendly". + +2001-01-10 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-types.h: New header to prevent + recursive #include problems + + * providers/imap/*.h: Replace some #includes with #include + "camel-imap-types.h", remove typedefs that were moved to + camel-imap-types.h + + * providers/imap/*.c: Add #includes to make up for #includes + removed from .h files + + * providers/imap/Makefile.am (libcamelimapinclude_HEADERS): Add + camel-imap-types.h + +2001-01-10 Dan Winship <danw@helixcode.com> + + * camel-store.c (camel_store_sync): New class function, parallel + to camel_folder_sync. (The default implementation just calls + camel_folder_sync on each cached folder.) + + * providers/imap/camel-imap-store.c (get_folder_info): Call + camel_store_sync before doing anything else so that the IMAP + server and Camel are working from the same data. Don't ask the + server for the unread message count of the current folder, since + UW will return often-incorrect cached data, and we can calculate + it without talking to the server anyway. + +2001-01-09 Dan Winship <danw@helixcode.com> + + Mostly IMAP changes. Use the NAMESPACE extension (where + available). Deal with servers that don't return LIST flags in + response to LSUB (like UW) to get rid of the "not a selectable + folder" error messages in the UI. Take advantage of the \Marked + and \Unmarked flags to try to speed up the folder scan by not + doing STATUS on unmarked folders. Some further tweaks on the shape + of the resulting folder tree in various situations... + + * camel-store.h: Remove the (read) message_count, since nothing + uses it, and we can speed up IMAP a bit this way. + + * camel-store.c (camel_folder_info_build): Redo this a bit to make + it more useful for IMAP since that's the only thing that uses it. + + * camel-remote-store.c (camel_remote_store_connected): Public + function to check if the store is connected, and try to connect it + if it's not. + (remote_send_string, remote_send_stream, remote_recv_line): Use + that. + + * providers/imap/camel-imap-store.c (camel_imap_store_finalize): + fix up for changes. + (camel_imap_store_init): Initialize subscribed_folders to NULL + rather than an empty hash table. + (imap_connect): Get the list of subscribed folders here. If the + server doesn't claim that any of them are either Marked or + Unmarked, then assume that it doesn't do that for LSUB and + remember that for later. If the server supports the NAMESPACE + extension and the user didn't specify a namespace, use the + server-provided one. + (imap_disconnect): Free the list of subscribed folders, and the + namespace. + (get_folder): check camel_remote_store_connected + (get_folder_info): check camel_remote_store_connected. Add a bunch + of new cleverness. If we learned that the server doesn't do LSUB + usefully, do a bunch of LISTs by hand. Then, if we're getting + unread counts, only do it for folders that weren't listed as + Unmarked. Also, deal with namespaces that end with the separator + character, and update for changes to camel_folder_info_build. + (folder_subscribed): Add a g_return_val_if_fail. + (subscribe_folder, unsubscribe_folder): check + camel_remote_store_connected. + + * providers/nntp/camel-nntp-store.c (build_folder_info, + build_folder_info_from_grouplist, nntp_store_get_folder_info): + Don't fill in message_count since it doesn't exist any more. + +2001-01-09 Dan Winship <danw@helixcode.com> + + Kill off a long-hated Camel kludge: "empty" URLs and + query_auth_types_generic. + + * camel-url.c: Remove "empty" from CamelURL. + (camel_url_new): No longer set it. + (camel_url_to_string): Treat "" as equivalent to NULL for + authmech. (Unrelated change, but it simplifies some stuff with the + new config dialog.) + + * camel-service.c (camel_service_new): Remove url->empty check: if + the URL isn't valid, we don't create the service. + (camel_service_query_auth_types): No longer need to switch between + generic and connected variants. + + * providers/smtp/camel-smtp-transport.c (query_auth_types): + * providers/pop3/camel-pop3-store.c (query_auth_types): + * providers/nntp/camel-nntp-store.c (nntp_store_query_auth_types): + * providers/imap/camel-imap-store.c (query_auth_types): + * camel-remote-store.c (remote_query_auth_types): Remove generic + version, rename connected version. + +2001-01-06 Not Zed <NotZed@HelixCode.com> + + * providers/vee/camel-vee-folder.c (vee_folder_build_folder): Dont + try and unref a messageinfo that wasn't there, and use the right + free function too. Modified patch from Iain. + (vee_move_message_to): New method, call the real folders' + move_message_to method. + +2001-01-04 JP Rosevear <jpr@helixcode.com> + + * tests/lib/Makefile.am: fix includes for compilation + + * tests/message/Makefile.am: Build test3 again + + * tests/message/test2.c: Kill warnings with header includes + + * tests/message/test3.c: ditto + + * tests/lib/streams.c: ditto + + * tests/lib/camel-test.c: ditto + + * tests/lib/messages.c: ditto + + * tests/lib/folders.c: ditto + +2001-01-04 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_rescan): Fix two + problems in figuring out server-expunged messages. + +2001-01-04 Not Zed <NotZed@HelixCode.com> + + * camel-folder.c (thaw): If we have a lot of messages changed, + promote it to a folder changed event. + +2000-01-03 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-folder-search.c (search_header_matches): Implemented. + (search_header_exists): Implemented. + (search_header_starts_with): Implemented. + (search_header_ends_with): Implemented. + +2001-01-03 Christopher James Lahey <clahey@helixcode.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): + Initialize the exists variable so that we don't do random things + if the imap server misbehaves. + +2000-12-29 Not Zed <NotZed@HelixCode.com> + + * camel-folder.c (camel_folder_move_message_to): REmove warning, + this isn't really deprecated, sigh. + + * camel-mime-utils.c (header_fold): Comment out some debug. + +2001-01-02 Christopher James Lahey <clahey@helixcode.com> + + * providers/maildir/, providers/mbox/, providers/mh/: Removed + these directories since they're unused. + +2001-01-02 Dan Winship <danw@helixcode.com> + + IMAP randomness. + + * providers/imap/camel-imap-stream.[ch]: Remove. To be replaced. + + * providers/imap/Makefile.am (libcamelimapinclude_HEADERS): Remove + camel-imap-stream.h + + * providers/imap/camel-imap-utils.c (imap_parse_flag_list): Take a + char ** instead of char *, to return the position at the end of + parsing like the string parsing functions. + (imap_parse_string_generic): New function to parse a string, + nstring, or astring. + (imap_parse_nstring, imap_parse_astring): Now macros + (imap_parse_string): Added + + * providers/imap/camel-imap-folder.h: Remove the "exists" field + from CamelImapFolder. + + * providers/imap/camel-imap-folder.c: Remove unused include of + camel-imap-stream.h. + (camel_imap_folder_init): Remove no-longer-relevant summary + initialization. + (camel_imap_folder_new): Update for imap_parse_flag_list change, + exists removal, and imap_rescan. + (imap_rescan): New function that does most of the work of the old + imap_refresh_info, but taking "exists" as an argument instead of + getting it from the folder. Also calls camel_imap_folder_changed + to do the summary updating and signalling, rather than duplicating + that code. + (imap_refresh_info): Just call imap_rescan (using the size of the + folder summary as "exists"). + (imap_update_summary): Update for imap_parse_flag_list change + (camel_imap_folder_changed): Update for "exists" change. + +2001-01-02 Dan Winship <danw@helixcode.com> + + * camel-mime-utils.c (header_content_type_simple): New function to + return just foo/bar with no parameters. + + * camel-data-wrapper.c (get_mime_type): Use + header_content_type_simple rather than header_content_type_format. + +2000-12-28 Dan Winship <danw@helixcode.com> + + * gmime-content-field.[ch]: Remove this. It was only a thin + wrapper around struct _header_content_type anyway, and didn't + match the naming scheme of anything else. + + * Makefile.am: Remove gmime-content-field.[ch] + + * camel.h: Remove gmime-content-field.h + + * camel-types.h: Add CamelContentType as a typedef for struct + _header_content_type (especially for use outside of camel). + + * camel-multipart.c: + * camel-mime-part.c: + * camel-mime-message.c: + * camel-folder-summary.c: + * camel-folder-search.c: + * camel-data-wrapper.[ch]: Use CamelContentType and + header_content_type_* functions rather than the GMime stuff. + + * camel-mime-part-utils.c: + * camel-medium.c: Remove unused gmime-content-field.h include. + +2000-12-27 Dan Winship <danw@helixcode.com> + + * providers/pop3/camel-pop3-store.c (connect_to_server): Fix the + APOP check to not crash on servers that don't return any + information on the +OK greeting line. + +2000-12-24 Not Zed <NotZed@HelixCode.com> + + * providers/imap/camel-imap-search.c (imap_body_contains): Lock + the command channel while searching. + (imap_body_contains): If performing a whole uid search, then add + references to our own summary items, dont look it up in the + folder. This way they can't vanish unexpectedly. + + * providers/imap/camel-imap-folder.h (CamelImapFolder): Added a + private field. + (CamelImapFolder): Removed summary again from here. + + * providers/imap/camel-imap-private.h: Added lock for imap + searches. + + * Merge from camel-mt-branch. + + * providers/imap/camel-imap-folder.c (imap_update_summary): Merge + fix, use the folder->summary. + (imap_get_message_flags, imap_set_message_flags, + imap_get_message_user_flag, imap_set_message_user_flag): Removed + again. + (camel_imap_folder_init): Setup private data/lock. + (imap_finalize): Free private data/search lock. + (imap_search_free): Lock the search_lock. + (imap_search_by_expression): Lock the search lock when using the + search object. Also copy/ref hte summary, rather than getting it + directly. + (imap_refresh_info): Free any info lookups. Use folder->summary + not imap_folder->summary. And lock around commands. + (camel_imap_folder_changed): Use folder->summary again. + (camel_imap_folder_changed): Make sure we unref the summary lookup. + +2000-12-22 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-store.c (get_folder_info): When + getting the top-level folder list, include INBOX even if it's not + subscribed. Don't show subscribed folders outside of the given + namespace. Do a better job of pruning the namespace from the + returned folder tree. + +2000-12-21 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-search.c: New CamelFolderSearch + subclass that just reimplements body_contains (using the IMAP + SEARCH command). All other kinds of searching are done against the + local summary. + + * providers/imap/camel-imap-folder.c (imap_search_by_expression): + Use a CamelImapSearch to do searching. + + * providers/imap/camel-imap-utils.c (imap_translate_sexp, etc): No + longer needed. + + * camel-folder-search.h: Add missing CAMEL_FOLDER_SEARCH_TYPE + #define + +2000-12-21 Dan Winship <danw@helixcode.com> + + * camel-stream-buffer.c (camel_stream_buffer_gets): Update the + doc comment: since it always NUL-terminates the buffer, it reads + at most @max-1 bytes, not @max. + + * camel-remote-store.c (remote_recv_line): Fix the "did + camel_stream_buffer_gets fill the whole buffer" check. Fixes a bug + when reading lines longer than 1024 characters (eg, IMAP SEARCH + responses in very large folders). + +2000-12-19 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_refresh_info): Oops. + Don't do "FETCH 1:0" when the folder is empty. + (imap_protocol_get_summary_specifier): Request RFC822.SIZE too. + (imap_update_summary): Parse RFC822.SIZE and add it to the + summary. + +2000-12-18 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-summary.c: Add "guint32 server_flags" + to CamelImapMessageInfo to keep track of the last known message + flag state on the server. + (message_info_save, message_info_load): Save/load the + server_flags. + + * providers/imap/camel-imap-folder.c: Make this use + CamelFolderChangeInfo and emit folder_changed notifications as it + gets them rather than only on refresh_info. + (imap_refresh_info): Notice flags that get cleared on the server + as well as flags that get set. + (imap_update_summary): Remove a comment that never actually + applied to the committed code. + +2000-12-15 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-command.c (camel_imap_command): Change + the semantics of fmt: Now %S (capital S) means an IMAP "string", + (which can be sent as either a quoted string or a literal). If + the server supports LITERAL+, these will be sent as extended + literals (which don't require any special escaping). Otherwise + they'll be sent as quoted strings (and it now properly deals with + " or \ in the string). + (imap_command_strdup_vprintf): Utility routine that does the real + work for the functionality mentioned above. + + * providers/imap/camel-imap-utils.c (imap_quote_string): Turns a + string into a proper IMAP "quoted string". + + * providers/imap/camel-imap-store.c: + * providers/imap/camel-imap-folder.c: Use %S instead of "%s" where + appropriate. + +2000-12-22 Not Zed <NotZed@HelixCode.com> + + * camel-folder-summary.c (GLOBAL_INFO_UNLOCK): Doh, cut and paste + victim again, call unlock instead of lock! + (summary_assign_uid): Unlock around trying to get a new uid, if we + have a clash. + +2000-12-21 Not Zed <NotZed@HelixCode.com> + + * tests/folder/Makefile.am (TESTS): reenabled the tests here. + + * providers/nntp/camel-nntp-newsrc.c (CamelNNTPNewsrc): Add a + lock. Made completely mt-safe. Sigh, this is all so i can + support snooping of the set_flags stuff inside camel-nntp-folder, + since i've removed the global folder lock from all of the other + folder summary operations. + (camel_nntp_newsrc_read_for_server): Setup lock. + (camel_nntp_newsrc_get_highest_article_read): Lock internal access. + (camel_nntp_newsrc_get_num_articles_read): + (camel_nntp_newsrc_mark_article_read): + (camel_nntp_newsrc_mark_range_read): + (camel_nntp_newsrc_article_is_read): + (camel_nntp_newsrc_group_is_subscribed): + (camel_nntp_newsrc_unsubscribe_group): + (camel_nntp_newsrc_subscribe_group): + (camel_nntp_newsrc_get_subscribed_group_names): + (camel_nntp_newsrc_get_all_group_names): " + (camel_nntp_newsrc_write_to_file): Lock internal accesses. + (camel_nntp_newsrc_write): Lock around diry stuff. + + * providers/local/camel-maildir-summary.c (maildir_summary_check): + Lock around our internal poking of the summary hashtable/array. + (maildir_summary_sync): And the same here too. + + * camel-folder-summary.c: Moved the summaryprivate data into + camel-private.h. Only needed for the locks really. + (camel_folder_summary_init): Setup locks. + (camel_folder_summary_set_filename): Lock. + (camel_folder_summary_index): lock + (camel_folder_summary_uid): Lock + (camel_folder_summary_next_uid): " + (camel_folder_summary_set_uid): " + (camel_folder_summary_load): Lock around whole load. Hrm, + probably not required. + (camel_folder_summary_save): Lock around whole save, this is + reqwuired, unless we ref/copy the whole list first, and i couldn't + be bothreed. + (camel_folder_summary_add): lock + (summary_assign_uid): Lock around internal accesses. + (camel_folder_summary_info_new_from_parser): Lock around filtr stuff. + (camel_folder_summary_info_ref): Add locking. Could probably use + its own lock? + (camel_folder_summary_touch): Add locking, likewise. + (camel_folder_summary_clear): Lock. If the preiovus two are + changed, then so this will need mroe locking. + (camel_folder_summary_info_free): Lock around refcounting. + (camel_folder_summary_remove): Locking. + (camel_folder_summary_remove_uid): Lock ref, unlock, unref. Also + fixed a bug that would have made this never work, freeing the key, + which isn't allocated. + (camel_folder_summary_remove_index): lock, ref, unlock unref also. + (camel_message_info_ref): Lock using a separate global lock, since + we have no context here. + (camel_message_info_free): Here too. + (content_info_alloc): Use an alocation lock here. avoids races + with setting up content_info_chunks, etc. + (camel_folder_summary_info_new): And here too. + (camel_folder_summary_load): Changed to use a differnet lock for + loading/saving. + (camel_folder_summary_init): Doh, i do need a reflock afterall, + set one up. + (camel_folder_summary_finalize): Free it. + (camel_folder_summary_index): Add a reflock. + (camel_folder_summary_uid): And here too. + (camel_folder_summary_info_free): Use reflock instead of + summary_lock. + (camel_folder_summary_info_ref): Likewise. + (camel_folder_summary_remove_uid): Add reflocking. + (camel_folder_summary_remove_index): And here too. + + * providers/vee/camel-vee-folder.c (camel_vee_folder_new): Setup a + summary object. + (vee_folder_build): Build each item into the real summary object. + (vee_folder_add, vee_folder_add_uid, vee_folder_add_change): New + functions to add a single record to the vfolder summary. + (vee_folder_build_folder): Use a real summary. + (vee_get_uids): Removed, use default impl. + (vee_free_message_info): " + (vee_get_message_info): " + (vee_get_summary): " + (vee_get_unread_message_count): " + (vee_get_message_count): " + (vee_sync): Make vee-folder-sync sync all subordinate folders. + Well i dont think this is right, but enough peopl ehave aksed for + it. + (vee_expunge): Same for expunge. + (vee_set_message_flags): Call parent class, then mirror flags to + subfolder. + (vee_get_message_user_flag): Removed, we just use the default + impl, and our flags should always match. + (vee_set_message_user_flag): Snoop the set and set on subfolder. + (vee_get_message_flags): Removed, jsut use parent impl, assume our + copy matches the real ones. + (get_real_message): Removed. We sort ofneed to keep the + summaryitem refed while we use it, so this doesn't make as much + sense as it did once. + (camel_vee_folder_finalise): Unhook listening events as we unref + folders. + (camel_vee_folder_new): Set the summary messageinfo data size + properly. + (vfolder_remove_match): Fixed for summary change. + (folder_changed): ditto. Also stopped changed items from being + re-searched and possibly removed. Might have to resort to the old + whole-search idea again. + (message_changed): Similarly. Might be easier just not to bother + with a whole search. + + * providers/vee/camel-vee-folder.h: Removes summary + hashtable/array, and use a real summary object. Sigh, more work. + + * providers/nntp/camel-nntp-folder.c (nntp_folder_sync): Move + summary to folder object. + (nntp_folder_get_message_count): Removed, use default impl. + (nntp_folder_set_message_flags): Call parent impl to do the work, + but snoop for newsrc. + (nntp_folder_get_uids): Removed, use default impl. + (nntp_folder_get_summary): " + (nntp_folder_get_message_info): " + (nntp_folder_free_message_info): " + (camel_nntp_folder_new): moved summary to folder class + + * providers/imap/camel-imap-folder.c (camel_imap_folder_init): + Move summary to folder object. + (camel_imap_folder_new): " + (imap_finalize): No longer unref the summary (or infact, do + anything else either). + (imap_refresh_info): move summary to folder object. + (imap_sync): " + (imap_get_message_count): Removed, use default impl. + (imap_get_unread_message_count): " + (imap_get_uids): " + (imap_get_summary): " + (imap_free_summary): " + (imap_get_message_info): " + (imap_free_message_info): " + (imap_get_message_flags): " + (imap_set_message_flags): " + (imap_get_message_user_flag): ", this changes functionality, but + only by providing non-permanent flags. + (imap_set_message_user_flag): " + (imap_update_summary): move summary to folder object, and use + camel_folder_summary_info_new_from_header, instead of calling the + virtual function directly. + + * providers/local/camel-maildir-folder.c (maildir_append_message): + move summary to folder object, again. + (maildir_get_message): " + + * providers/local/camel-mh-folder.c (mh_append_message): move + summary to folder object. + (mh_get_message): " + + * providers/local/camel-mbox-folder.c (mbox_append_message): Move + summary to folder object + (mbox_get_message): " + (mbox_set_message_user_flag): We need our own copy of this, sigh, + so we can track if the xev needs a rewrite (probably, its only a + guide anyway). + (mbox_set_message_user_tag): Same same with this one. + (camel_mbox_folder_class_init): Link in these new virtual functions. + + * providers/local/camel-local-folder.h (CamelLocalFolder): removed + summary. + + * providers/local/camel-local-folder.c (local_get_message_count): + (local_get_unread_message_count): + (local_get_uids): + (local_get_summary): + (local_free_summary): + (local_get_message_info): + (local_free_message_info): + (local_get_message_flags): + (local_set_message_flags): + (local_get_message_user_flag): + (local_set_message_user_flag): + (local_get_message_user_tag): + (local_set_message_user_tag): Removed, all now use default + implementation. + (camel_local_folder_class_init): Removed overrides. + (local_init): Clear folder->summary. + (local_finalize): move summary to folder. + (camel_local_folder_construct): " + (local_sync): " + + * camel-folder.c (free_summary): Provide a real impl. + (get_summary): " + (free_uids): " + (get_uids): " + (free_message_info): " + (get_message_info): " + (set_message_user_tag): " + (get_message_user_tag): " + (set_message_user_flag): " + (get_message_user_flag): " Sigh, the last so far. + (get_message_flags): Sigh, 1 more afterall. + (get_unread_message_count): And and this. + (get_message_count): and this! + (set_message_flags): Sigh, and this. + (camel_folder_finalize): Unref the summary if we have it. + (camel_folder_free_uids): Remove locking. + (camel_folder_get_message_flags): Remove locks, since the summary + is now mt-safe. + (camel_folder_set_message_flags): " + (camel_folder_get_message_user_flag): " + (camel_folder_set_message_user_flag): " + (camel_folder_get_message_user_tag): " + (camel_folder_set_message_user_tag): " + (camel_folder_get_message_info): " + (camel_folder_free_message_info): " + (camel_folder_get_uids): " + (camel_folder_free_summary): " + (camel_folder_get_unread_message_count): " + (get_unread_message_count): Check we got info, no big deal, but + the summary might change while we're counting, and upset the count + slightly. + (camel_folder_get_message_count): Remove locks. + + * camel-folder.h (struct _CamelFolder): Added CamelFolderSummary + to the base folder object. Sigh, this is going to be a lot of + work ... + + * camel-service.c (camel_service_init, finalise): changed + connect_lock to be recursive e_mutex. + + * camel-remote-store.c (camel_remote_store_init, finalise): Changed + stream_lock to recursive e_mutex. + + * camel-private.h (RemoteStorePrivate, ServicePrivate): Use + recursive mutexes for connect_lock & stream_lock. Ick. Because + of the imap code. + + * providers/imap/camel-imap-private.h: Change the command_lock to + be an EMutex. + + * providers/imap/camel-imap-store.c (connect_to_server): Removed + the command_lock stuff. If we are just connected again, it should + be safe to assume we have exclusive access at this point without + it (and yes, removes a deadlock). + (imap_create): Remove a lock that wasn't even supposed to be + there. + (camel_imap_store_finalize, init): g_mutex->e_mutex(E_MUTEX_REC). + Use a recursive mutex since the imap code is multiply recursivly + calling some functions (sigh, it would be nice to fix this). + +2000-12-20 Not Zed <NotZed@HelixCode.com> + + * camel-folder.c (folder_changed): Change the locks to inside the + if. Stops a deadloc,k and we dont need a lock to read a value. + (message_changed): Likewise. + + * camel.c (camel_init): Blah, comment out g_thread_init, leave it + to the caller, since it can only ever be done once. + + * camel-folder-thread.c (camel_folder_thread_messages_new): Ref + and save the folder in the thread return. Also get the summary + once, and access that for the messageinfo's. Added bonus that now + threads should come out in a similar order. We need to do this so + that the messageinfo's dont get unref'd under us, and using the + summary directly simplifies memory management. + (camel_folder_thread_messages_destroy): Free the summary/unref the + folder. + + * camel-folder-thread.h: Add a folder to CamelFolderThread struct. + +2000-12-19 Not Zed <NotZed@HelixCode.com> + + * providers/imap/camel-imap-utils.c (imap_translate_sexp): Unref + using e_sexp_unref, since it is no longer an object. + + * tests/lib/camel-test.c: Added a global lock, and made it + thread-aware. + + * camel-exception.c: Add a global lock. Not sure its really + needed here, but it doesn't really hurt. + (camel_exception_clear): Lock around access. + (camel_exception_set): Same. + (camel_exception_setv): " + (camel_exception_xfer): " + + * providers/local/Makefile.am (noinst_HEADERS): Added, for + camel-local-private.h + + * camel-folder.c (camel_folder_search_by_expression): Removed + locking here, now upto the implementing class to lock. + (camel_folder_search_free): Removed the folder lock here too, for + consistency really, and the locking probably wasn't needed. + + * providers/local/camel-local-folder.c (local_get_summary): + Changed to copy/ref the summary items. + (local_free_summary): Unref the summary items/free the array. + (local_get_unread_message_count): Free info lookups. + (local_search_by_expression): Perform more fine-grained locking, + and dont lock the whole folder while searching, just the search + object. Dum de dum, it *would* be possible to not even have to + lock the search, by using our own copy of the search object each + time. Could be investigated. + (local_init): Init priaate data/lock. + (local_finalize): Free private data/lock. + (local_search_free): Also lock around the search object, because + it accesses global data inside. + + * README.mt: Some info about the mt code development. + + * camel-folder-search.c (match_message): Put in a warning, this + plain deadlocks so far, but i'm going to bed now. + (camel_folder_search_finalize): Use e_sexp_unref() since its no + longer an object. + + * camel-session.c (camel_session_init): Init private data/lock. + (camel_session_finalise): Free private data/lock. + (camel_session_register_provider): Lock hash insert. + (service_cache_remove): Lock. + (camel_session_list_providers): " + (camel_session_get_service): Lock the whole function. + + * camel-session.h (struct _CamelSession): Added private data. + + * providers/imap/camel-imap-store.c (camel_imap_store_init): Setup + private data. + (camel_imap_store_finalize): Free private data. + (connect_to_server): Lock around command calls. I dont think its + needed, but it shouldn't hurt either. + (imap_connect): Lock around command calls. Again, I don think it + is needed, but wont hurt. + (imap_disconnect): ditto for this one. + (imap_create): Lock around command. + (get_folder): " + (get_folder_info): " + (subscribe_folder): " + (unsubscribe_folder): " + (imap_keepalive): " + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Lock + around calling a command. + (imap_refresh_info): Likewise. + (imap_sync): " + (imap_append_message): " + (imap_copy_message_to): " + (imap_move_message_to): " + (imap_get_message): " + (imap_update_summary): " + (imap_search_by_expression): ", also minor logic cleanup. + (imap_get_summary): Copy/ref the summary items. + (imap_free_summary): And free it now too. + + * providers/imap/camel-imap-auth.c (imap_try_kerberos_v4_auth): + Lock the command stream for the command session. + + * providers/imap/camel-imap-private.h: Private (locking info) + stuff for imap provider. + (CAMEL_IMAP_STORE_UNLOCK): Fix to call unlock, rather than lock! + + * camel-service.c (camel_service_query_auth_types): Lock also for + the connection here, incase the service needs to connect. + + * camel-remote-store.c (camel_remote_store_init): Init private + data/lock. + (camel_remote_store_finalise): Readded, free private data/lock. + (remote_send_stream): Changed to return the number of bytes + written, like a good little stream function should. + (camel_remote_store_send_string): Lock for stream access. + (camel_remote_store_send_stream): Same here. + (camel_remote_store_recv_line): And here. + (camel_remote_store_refresh_folders): Lock the store for cache + access. + (timeout_cb): Lock for stream access. + +2000-12-18 Not Zed <NotZed@HelixCode.com> + + * camel-service.c (camel_service_init): Init private data. + (camel_service_finalise): Free private data. + (camel_service_connect): Lock around connection access. + (camel_service_disconnect): " + + * camel-service.h (struct _CamelService): Added private field. + + * camel-store.c (camel_store_init): Init private data/lock. + (camel_store_finalize): Free private data/lock. + (camel_store_get_folder): Lock internal calls. + (camel_store_delete_folder): " + (camel_store_rename_folder): " + (camel_store_get_root_folder): " + (camel_store_get_default_folder): " + (camel_store_get_folder_info): " + (camel_store_folder_subscribed): " + (camel_store_subscribe_folder): " + (camel_store_unsubscribe_folder): " + (lookup_folder): Lock accesses to the folder cache. + (cache_folder): " + (uncache_folder): And here too. + + * camel-store.h (struct _CamelStore): Added a private field. + + * Makefile.am (noinst_HEADERS): Add camel-private.h. There is a + comment in that header as to why it ins't installed. + + * camel-private.h: New header for private data, that subclasses + can get to. + + * tests/lib/camel-test.c (camel_test_init): If we do have threads + enabled already, dont call g_thread_init(). + + * tests/lib/folders.c (test_folder_counts): Add free of info. + (test_folder_message): And here too. + + * providers/local/camel-maildir-summary.c (remove_summary): Free + info. + (maildir_summary_check): Free info lookups. + + * providers/local/camel-mh-summary.c (message_info_new): Removed, + didn't add value. + (remove_summary): free info after being used. + (mh_summary_check): Free info lookups. + (mh_summary_sync): and here too. + + * providers/local/camel-mbox-summary.c (summary_update): Free info + lookups. + (mbox_summary_sync_full): Likewise. + (mbox_summary_sync_quick): And here. + (mbox_summary_sync): ... and here. + + * providers/local/camel-maildir-folder.c (maildir_get_message): + Free messageinfo lookups. + + * providers/local/camel-mh-folder.c (mh_get_message): Free + messageinfo lookups. + + * providers/local/camel-mbox-folder.c (mbox_get_message): Free + messageinfo lookups. + + * providers/local/camel-local-summary.c + (message_info_new_from_message): Removed, since it wasn't doing + anything useful. + (message_info_new_from_parser): Same. And some other dead code. + + * providers/local/camel-local-folder.c (local_get_message_info): + deconstify. + (local_free_message_info):new func to free info. + (local_get_uids): + (local_get_message_flags): + (local_set_message_flags): + (local_get_message_user_flag): + (local_set_message_user_flag): + (local_get_message_user_tag): + (local_set_message_user_tag): Free all info lookups. + (local_expunge): Dont call camel_folder_* functions, to avoid a deadlock. + + * providers/nntp/camel-nntp-folder.c + (nntp_folder_get_message_info): deconstify. + (nntp_folder_free_message_info): Free summary item. + (nntp_folder_get_message_flags): Free summary lookup. + (nntp_folder_set_message_flags): and here. + (nntp_folder_get_uids): And here. + + * providers/imap/camel-imap-auth.c: Make base64_*_simple optional + with the HAVE_KRB4 flag. + + * providers/imap/camel-imap-folder.c (imap_free_message_info): + Added a free of the message info. + (imap_refresh_info): + (imap_sync): + (imap_refresh_info): + (imap_get_unread_message_count): + (imap_get_uids): + (imap_get_message_flags): + (imap_set_message_flags): Free any summary lookups. + (imap_get_message_flags): Get the message info directly from the + summary, not via the folder interface. + (imap_move_message_to): Dont call folder functions directly + (delete_message), as it will deadlock since we already have the + lock. + + * providers/vee/camel-vee-folder.c (vee_free_message_info): Free/unref + the messageinfo. + (vee_get_message_info): First ref the internal copy, then return it. + (folder_changed): Free all got message info's. + (message_changed): And here. + (get_real_message): And here. + (vee_folder_build): and here. + (vee_folder_build_folder): ... and here. + + * camel-folder-summary.c (camel_folder_summary_info_new): + Initialise the messageinfo refcount to 1. + (camel_folder_summary_info_free): Down the refcount till we need + to free. + (camel_folder_summary_info_ref): New function to up the refcount. + (camel_message_info_dup_to): Sewt the refcount of the dest to 1. + (camel_message_info_new): Set refcount to 1. + (camel_message_info_new_from_header): Dont allocate the mi + ourselves. + (camel_message_info_free): Handle refcounting. + (camel_message_info_ref): New function. + (camel_folder_summary_index): Ref the messageinfo before returning + it. + (camel_folder_summary_uid): Likewise. + (camel_folder_summary_save): Access the messageinfo array + directly, rather than through accessors (saves ref/unref). + (camel_folder_summary_clear): Likewise. + (camel_folder_summary_remove_index): Likewise. + (main): Free lookups. + + * camel-folder-summary.h (CamelMessageInfo): Added a refcount + value. + + * camel-folder.c (camel_folder_free_message_info): New function to + 'free' a message info. + (camel_folder_get_message_info): Deconstify return. + (camel_folder_lock): New (internal) function to thread-lock the + folder. + (camel_folder_unlock): Likewise for unlocking. + (freeze): + (thaw): Lock around access to folder->frozen/changed_frozen. + (folder_changed): Likewise. + (message_changed): Likewise. + (camel_folder_init): Init private data, locks and moved frozen + info. + (camel_folder_finalize): Free new private data, locks and moved + frozen info. + (copy_message_to): Free the messageinfo after we've used it. + (move_message_to): And here too. + (camel_folder_sync): Lock around virtual method invocation. Just + locking around any virtual method that is known to need it. This + is the first cut at locking. + (camel_folder_refresh_info): " + (camel_folder_expunge): " + (camel_folder_get_message_count): " + (camel_folder_get_unread_message_count): " + (camel_folder_append_message): " + (camel_folder_set_message_flags): " + (camel_folder_get_message_flags): " + (camel_folder_get_message_user_flag): " + (camel_folder_set_message_user_flag): " + (camel_folder_get_message_user_tag): " + (camel_folder_set_message_user_tag): " + (camel_folder_get_message): " + (camel_folder_get_uids): " + (camel_folder_free_uids): " + (camel_folder_get_summary): " + (camel_folder_search_by_expression): " + (camel_folder_free_summary): " + (camel_folder_search_free): " + (camel_folder_move_message_to): " + (camel_folder_copy_message_to): " + (copy_message_to): Dont call any of our own folder functions + directly, otherwise we will deadlock. + (move_message_to): Likewise. + + * camel-folder.h (CamelFolder): Added free_message_info() function + & deconstify get_message_info()'s return. + (CamelFolder): Add a private field (for locks). + (struct _CamelFolder): Moved changed_changed/frozen into private + data, since it really is private and now needs locked access. + +2000-12-15 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-utils.c (header_fold): When checking to see if we + need to fold the header, when we come accross a \n, make sure to + start at p + 1 the next time through the loop or else we get into + an infinite loop. + +2000-12-13 Dan Winship <danw@helixcode.com> + + * Namespace cleanup: change a bunch of IS_CAMEL_* macros to + CAMEL_IS_* + +2000-12-13 Chris Toshok <toshok@helixcode.com> + + * providers/imap/camel-imap-auth.c: add #include <sys/types.h> for + freebsd. + +2000-12-12 Christopher James Lahey <clahey@helixcode.com> + + * camel-folder-summary.c, camel-folder-summary.h: Added #ifndef + NO_WARNINGS around a #warning. Added (void) to the prototype and + declaration of camel_message_info_new. + + * camel-mime-message.h: Added an include for + camel-mime-filter-bestenc.h. Added a prototype for + camel_mime_message_set_best_encoding. Reformatted prototypes to + line up. + + * camel-mime-parser.c: Added #if d(!)0 around the states string + lookup table since it's only used in debugging output. + + * camel-seekable-substream.c (stream_flush): Added a cast. + + * providers/imap/camel-imap-auth.c: Added #include <netinet/in.h>. + + * providers/imap/camel-imap-folder.c (imap_refresh_info): Made uid + and flags const to fix warnings here. + + * providers/imap/camel-imap-store.c (get_folder_info): Made p + const to fix warnings here. + +2000-12-12 Dan Winship <danw@helixcode.com> + + * tests/lib/Makefile.am: Add missing .h file. (From campd.) + +2000-12-11 Not Zed <NotZed@HelixCode.com> + + * providers/smtp/camel-smtp-transport.c (smtp_data): Remove use of + linewrap filter. Headers are now wrapped. encode_8bit already + enforces a 998 octet line limit. + (smtp_data): Also fixed a memleak, we always have to unref our own + copy of the filters. We also dont need to remove them manually, + so dont bother. The type's an int too ... + + * camel-internet-address.c (internet_unformat): When scanning past + quotes, remove them also. + (camel_internet_address_format_address): If the name contains "'s, + or ','s then strip and quotes and wrap the whole lot in one set of + quotes. + + * Makefile.am (noinst_HEADERS): We dont want to install + camel-charset-map-private.h, ever. There are probably other + similar files ..? + + * camel-mime-part.c (write_to_stream): Fold header lines + appropriately as we're writing them out. + + * camel-mime-utils.c (header_fold): Add a new argument, headerlen, + tells it how long the associated header token is. + (header_fold): Also,k check to see if we need to fold first, using + a better algorithm, and also accept already-folded lines, and + re-process accordingly. + (rfc2047_decode_word): Add a little buffer space to iconv output + for shifting overheads? + (rfc2047_decode_word): finish the iconv with a null call, to flush + shift state, etc. + (rfc2047_encode_word): Attempt to break up long words into + appropriately sized, independent, chunks. See rfc2047, section 2. + (header_decode_mailbox): Dont add in extra spaces into the output + if we are decoding adjacent encoded words. We can only guess this + case, as some broken mailers put encoded words inside quoted + words. + (header_encode_phrase): Dont merge words if they are going to end + up too long. Also change back ot only merge consecutive words of + the same type. e.g. 'foo. blah fum.' -> "foo." blah "fum." or + 'iam an. idiot' -> iam "an." idiot + + * camel-medium.c (camel_medium_set_header): Hrm, we actually want + to call set_header, not add_header here, probably explains some + duplicate X-Evolution headers i was trying to track down. Also + changed the api to handle a NULL value == remove the header. + + * providers/local/camel-maildir-summary.c + (maildir_summary_decode_x_evolution): Always return error, we dont + use x-evolution for maildir. + (maildir_summary_encode_x_evolution): Always return a NULL string, + likewise. + (maildir_summary_add): Hook in here, since the _new function + doesn't have access to any flags from the caller. If we have + flags, then update the filename again. Not ideal, but should + work. + +2000-12-08 JP Rosevear <jpr@helixcode.com> + + * tests/message/Makefile.am: Remove test3 from build until the files + show up + +2000-12-09 Not Zed <NotZed@HelixCode.com> + + * camel-mime-message.c (camel_mime_message_set_date): Change the + sign of the default date offset when none is supplied. + (camel_mime_message_set_date): Also do dst if its dst (forward 1 + hour). Fixes #928 + some. + +2000-12-06 Not Zed <NotZed@HelixCode.com> + + * tests/lib/camel-test.h (check): Change line no format so that + emacs can detect it. + +2000-12-06 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_refresh_info): We want + to bitwise-or the server and cached flags here so that we keep the + flags that we have set locally and set any additional flags that a + parallel connection may have set. + +2000-12-05 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c (smtp_data): If the data + wrapper fails to be written to the stream, unref it and the + filters before returning. + +2000-12-05 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_message): use + BODY.PEEK[] rather than RFC822, so the message doesn't get marked + as \Seen. + (imap_refresh_info): Fix a really really really dumb bug. + +2000-12-05 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_set_message_flags): Fix + the check for "flags aren't actually changing". + + * providers/local/camel-local-folder.c (local_set_message_flags, + local_set_message_user_flag, local_set_message_user_tag): Don't + emit message_changed unless the flags actually changed. + + * providers/nntp/camel-nntp-folder.c + (nntp_folder_set_message_flags): Don't emit message_changed unless + the flags actually changed. Fix the check for marked as seen. + +2000-12-05 Not Zed <NotZed@HelixCode.com> + + * camel-seekable-substream.c (stream_flush): stream_flush does + make sense for a substream afterall (if you have a stream_write). + (stream_write): Implement this. + (stream_seek): Change the STREAM_END behaviour to be more sane. + if bounded go from the end of the bound, if unbounded, go from the + end of the parent stream. + + * camel-stream-mem.c (stream_read): Dont return error if reading + past the end of data, just return 0. + + * camel-stream-fs.c (camel_stream_fs_init): Initialise the stream + to be unbound. + (stream_seek): Fix the logic when seeking from the end of an + unbounded stream. + (camel_stream_fs_new_with_fd): If the fd is invalid (-1), then + return NULL immediately. + (stream_seek): Range check a SEEK_END so it fits within + bound_start. + +2000-12-01 Not Zed <NotZed@HelixCode.com> + + * tests/lib/folders.c (test_folder_basic): New test to perform + basic store operations on folders (taken from folders/test1). + (test_folder_message_ops): Tkane the guts out of folders/test2. + +2000-12-04 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c (smtp_connect): i18n-ize + exception strings. + (get_name): And here. + (_send_to): Here too. + (smtp_helo): And here and there... + (smtp_mail): And around the square... + (smtp_rcpt): Saying catch me if you can... + (smtp_data): And here three. + (smtp_rset): And here. + (smtp_quit): And finally here. + +2000-12-01 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-folder-search.h: Added system_flag to CamelFolderSearchClass + + * camel-folder-summary.c (camel_system_flag_get): Convenience + function to return whether or not a flag is set using a string as + the flag name. + (camel_system_flag): Return the integer value of the flag string. + + * camel-folder-search.c (search_system_flag): New ESExp callback + for allowing vfoldering on CamelMessageInfo flags. + +2000-12-01 Dan Winship <danw@helixcode.com> + + * camel-service.c (camel_service_disconnect): Don't + g_return_if_fail if the service is already disconnected. Just + return. + + * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): + Return FALSE (don't try again) if we get CAMEL_POP3_FAIL. + (pop3_connect): If we don't succeed, disconnect. + +2000-11-30 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c + (parse_list_response_as_folder_info): Fix a possible bug where + 'name' could be uninitialized. + + * camel-folder-summary.c (camel_message_info_new): New convenience + function, doesn't do much but it sure makes code cleaner to read. + (camel_message_info_new_from_header): This one makes my life heaven. + +2000-11-30 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-summary.c (camel_imap_summary_new): + Handle the case where the summary failed to load - clear the + summary and then set the dirty bit so that it is sure to save + later. Is this the right fix? + +2000-11-30 Dan Winship <danw@helixcode.com> + + * camel-exception.c (camel_exception_setv): Remove unused + variable. + +2000-11-30 Not Zed <NotZed@HelixCode.com> + + * providers/local/camel-mbox-folder.c (mbox_get_message): Remove + assertion that content is there, when it no longer can be. + + * camel-folder-summary.h: Removed pos/bodypos/endpos from + camelmeessagecontentinfo. + (CamelMessageFlags): Added an attachments flag. + + * providers/local/camel-local-summary.h: Added load virtual + function. + + * tests/lib/folders.c (test_message_info): Accessors. + (test_folder_message): " + + * camel-folder-thread.c (get_root_subject): Fix accessors. + (dump_tree_rec): " + + * camel-folder-search.c (camel_folder_search_execute_expression): + Accessors for messageinfo. + (search_match_all): " + (search_header_contains): " + (search_header_contains): " + (search_body_contains): " + (camel_folder_search_execute_expression): Use mepool_strdup. + + * providers/local/camel-mbox-summary.c (summary_update): Accessors + for messageinfo. + (mbox_summary_sync_full): " + + * providers/local/camel-mh-summary.c (remove_summary): Accessors + for messageinfo. + (mh_summary_check): " + (mh_summary_sync_message): " + (mh_summary_sync): " + + * providers/local/camel-mh-folder.c (mh_append_message): Use + accessor for uid. + + * providers/local/camel-local-summary.c + (local_summary_decode_x_evolution): Use accessor to uid. + (local_summary_encode_x_evolution): Likewise. + (message_info_new): And here. + (camel_local_summary_load): Call virtual load function. + (local_summary_load): Default load function, load summary. + (camel_local_summary_load): Check file exists before trying to + load. + (camel_local_summary_construct): Turn off building content info! + (CAMEL_LOCAL_SUMMARY_VERSION): Bump, since we dont build content + info anymore. + (camel_local_summary_load): After a successful load/check, do a + save too so we dont have to go through it again randomly. + + * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): Use + accessors for messageinfo. + + * providers/nntp/camel-nntp-folder.c (nntp_folder_get_uids): Use + accessors for uid. + + * providers/imap/camel-imap-folder.c (imap_refresh_info): Use + accessor for uid. + (imap_sync): Likewise. + (imap_get_uids): Likewise. + (imap_update_summary): And here. + + * providers/vee/camel-vee-folder.c (vfolder_remove_match): Use + accessor for uid. + (vfolder_add_match): Handle estrv stuff. + (vfolder_change_match): Accessor for uid. + (get_real_message): " + (vee_get_uids): " + (vee_folder_build): " + estrv. + (vee_folder_build_folder): " + + * providers/local/camel-maildir-folder.c (maildir_append_message): + Use acccessors for uid's. + (maildir_get_message): Here too. + + * providers/local/camel-maildir-summary.c + (camel_maildir_summary_init): Setup the string count for us. + (message_info_new): Access the string array directly. + (message_info_free): No need to free string if using array. + (camel_maildir_summary_info_to_name): Use accessor to get to uid. + (remove_summary): And here. + (maildir_summary_check): Likewise. + (maildir_summary_sync): And here. + (maildir_summary_load): Load up a cache of uid->filename mappings + before loading the actual summary file. This saves us having to + waste the diskspace storing the filenames in the summary itself, + and also helps us sync the summary better on load. + (message_info_load): If we have the load_map setup, and the uid + exists, then set the filename cache from it, and update the flags + from the name, incase our summary mismatches it. + + * camel-folder-summary.c (camel_folder_summary_init): Setup string + count for compressed info record. An optional compile mode which + stores all strings for a given messageinfo into a packed array, + which should save 36-50 bytes/record. + (camel_folder_summary_info_new): Init the string array. + (message_info_new): Set the string array items, as required. + (message_info_load): And here too. + (message_info_save): Use accessors to get to strings. + (message_info_free): Free strings as one. + (camel_message_info_dup_to): Handle packed array case. + (camel_folder_summary_add): Use accessors. And pack the strv + before storing it. + (summary_assign_uid): New function to assign a unique uid to a + message, if it doesn't have one. + (camel_folder_summary_add): Call assign_uid instead of doing it + ourselves. + (camel_folder_summary_info_new_from_parser): " + (camel_folder_summary_info_new_from_message): " + (camel_folder_summary_encode_string): constify. + (camel_folder_summary_encode_token): " + (summary_build_content_info_message): Fix accessors to messageinfo. + (CAMEL_FOLDER_SUMMARY_VERSION): Bumped, for removal of + contentinfo->pos data. + (camel_folder_summary_info_new_from_parser): Calculate the size + based on the parser position, not the removed contentinfo stuff. + (camel_folder_summary_info_new_from_message): Remove size stuff. + (camel_folder_summary_offset_content): Removed, no longer means anything. + (content_info_new): + (content_info_load): + (content_info_save): + (summary_build_content_info): Remove stuff for contentinfo->pos*. + (summary_build_content_info): Take a msginfo argument, set + attachments flag if we find any attachments. + (summary_build_content_info_message): set attachments flag if we + find any attachments. + (camel_folder_summary_info_new_from_parser): Always scan the + content info, even if we dont save it. + (camel_folder_summary_info_new_from_message): And here too. + (summary_build_content_info): Only create the contentinfo stuff if + we have it turned on, otherwise just parse and discard. + (summary_build_content_info_message): Likewise. + +2000-11-29 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-store.c (camel_store_get_folder): Updated the gtk-doc + comment. + +2000-11-29 Dan Winship <danw@helixcode.com> + + * camel-mime-utils.c: + * camel-mime-filter-charset.c: Use iconv instead of unicode_iconv. + + * providers/imap/camel-imap-command.c (imap_read_untagged): Fix + some off-by-one-ness. + + * camel-stream-buffer.c (stream_read): Fix another bug found in + previously-unused code here. + +2000-11-29 Ettore Perazzoli <ettore@helixcode.com> + + * tests/lib/Makefile.am (INCLUDES): `$(top_srcdir)' for builddir + != srcdir compilation. + +2000-11-29 Not Zed <NotZed@HelixCode.com> + + * tests/message/test2.c (main): Add a missed unref. + + * camel-stream-mem.c (camel_stream_mem_set_buffer): We must set + ourselves as the owner of the byte-array. + Weird, someone has modified this file (its been reindented), but i + can't see any changelogs ... + + * tests/lib/messages.c (content_finalise): Fix memleak in tester, + free byte array when our content object is deleted. + + * camel-folder-search.c (camel_folder_search_finalize): Yeah + great, so the sexp is a gtk object, not a camel object. Isn't + that going to be fun to fix? + + * camel-session.c (camel_session_finalise): Free the storage path. + + * providers/local/camel-local-store.c (camel_local_store_init): If + store->folders is setup, free it first, then overwrite. Hmm, + this seems a bit crappy to me. + + * camel-store.c (camel_store_init): Dont setup store->folders if + its already setup. + + * camel-exception.c (camel_exception_setv): Removed a memleak. no + need to strdup after a strdup_printf!!! + + * camel-address.c (camel_address_finalize): Free the address + ptrarray, once finished. + + * providers/local/camel-local-folder.c (local_finalize): Make sure + we dont leave the folder locked on close. + (local_finalize): Free summary/search. + + * providers/local/camel-mh-summary.c (mh_summary_next_uid_string): + Small memleak, always free name after using it. + + * camel-mime-part.c (set_content_object): Free txt after setting + the header. + + * providers/local/camel-maildir-summary.c (maildir_summary_check): + Fix a memleak, close the dir after scanning new. + (message_info_free): Added so we can free the filename cached in + the messageinfo. + (camel_maildir_summary_finalise): Free the hostname. + + * tests/folder/test[12].c (main): Clear out camel-test before + starting. + + * providers/local/camel-mbox-summary.c (mbox_summary_sync_quick): + Because encode_x_evolution folds the line (sigh, because + encode_param does, unlike every other function in + camel-mime-utils), unfold the encoded result before comparing. + (mbox_summary_sync_quick): Another small memleak, free xevnew once + finished with it. + + * camel-mime-utils.c (header_decode_quoted_string): Removed a + redundant check for c=0. + (header_unfold): New function to un-fold headers. + + * providers/local/camel-local-summary.c + (local_summary_encode_x_evolution): some problems with encoding + tags, using the wrong output strings. + (local_summary_encode_x_evolution): We dont need to append a ; + either, param_list_format_append() will do it for us. + +2000-11-28 JP Rosevear <jpr@helixcode.com> + + * camel-lock.c: No longer hard code the enabled lock types + +2000-11-28 Dan Winship <danw@helixcode.com> + + * camel-remote-store.c (remote_recv_line): Don't set exception to + g_strerror (errno) when nread == 0, because it won't have been + set. + + * providers/pop3/camel-pop3-folder.c (pop3_finalize): Don't try to + free things if they haven't been set yet. + +2000-11-28 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c (smtp_connect): Clear the + exception if EHLO fails before trying HELO in the cases where the + SMTP provider doesn't announce its ESMTPness. + +2000-11-28 Not Zed <NotZed@HelixCode.com> + + * providers/local/camel-maildir-summary.c + (camel_maildir_summary_init): Set the info size's properly, oops! + + * tests/lib/folders.[ch]: Folder testing helpers. + + * tests/folder/test2.c: Test basic message ops on folders. + + * tests/folder/test1.c (main): Test basic folder ops on (local) + stores. + + * providers/local/camel-local-provider.c + (camel_provider_module_init): Removed some debug. + + * providers/local/camel-maildir-folder.c + (camel_maildir_folder_class_init): fix parent class. + + * providers/local/camel-mh-folder.c (camel_mh_folder_class_init): + Fix parent class (damn cut & paste). + + * providers/local/camel-maildir-store.c (get_folder): Call parent + impl. + (camel_maildir_store_class_init): Fix parent class setup. + (delete_folder): Check the folder exists before trying to delete + it. + (delete_folder): Try and make the delete operation atomic/rollback + failures. e.g. if one directory isn't empty, then create the + other empty ones back. Also clear the tmp directory fully first. + + * providers/local/camel-mbox-store.c (get_folder): Call parent + impl. + (camel_mbox_store_class_init): parent class is camel_local_store, + not camel_folder, oops. + (delete_folder): Return an error if it doesn't exist, rather than + covering it up. + + * providers/local/camel-mh-store.c (get_folder): Call parent impl. + (camel_mh_store_class_init): fix parent class setup. + (delete_folder): Error if it doesn't exist now. + + * camel-folder.c (camel_folder_move_message_to): + (camel_folder_copy_message_to): Added warnings as these functions + are going to be removed later. + + * camel-store.c (camel_store_get_root_folder): Fix for an early + api change. We want CAMEL_STORE_FOLDER_CREATE, not TRUE, since + its a flag. + (camel_store_get_default_folder): And here too. + + * providers/local/camel-local-store.c (xrename): Handle renaming + folders differently to renaming files. + (get_default_folder_name): local stores dont have a default + folder, so make it so. Or at least, it doesn't seem to make sense + to have one. + (get_root_folder_name): Same for root. + (get_folder): Added parent implementation, that makes sure the + service path exists, if we are creating a new folder (but doesn't + create the folder). + +2000-11-27 Not Zed <NotZed@HelixCode.com> + + * providers/local/camel-local-store.c (xrename): Fixed races. Use + link/unlink, rather than rename, to properly detect overwriting + another file. And allow some files to be missing. + +2000-11-28 Radek Doulik <rodo@helixcode.com> + + * providers/local/camel-local-summary.c + (local_summary_decode_x_evolution): add scan = scan->next; to + avoid infinite loop + +2000-11-27 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-command.c (imap_read_untagged): Make + this gratuitously more complicated. No wait, I mean, fix bugs. Now + fully handles NULs in the data stream (which "can't happen" but + do) and also handles responses containing multiple literals. Also + does less copying than the original code. + + * camel-stream-buffer.c (stream_read): Fix a bug that could make + it lose sync and/or overrun buffers. + +2000-11-27 JP Rosevear <jpr@helixcode.com> + + * providers/local/.cvsignore: shush + +2000-11-27 Not Zed <NotZed@HelixCode.com> + + * providers/Makefile.am: Removed mh, mbox, added local, to the default. + +2000-11-24 Not Zed <NotZed@HelixCode.com> + + * tests/data/getaddr.pl: little util to scan mailboxes for any and + every address they contain. + + * tests/message/test2.c (main): Added a bunch of stuff to test + decoding/reencoding/etc of internationalised addresses. + + * tests/message/lib/address-data.h: Copy of some unicode/other + testing data. **Beware** of editing this file in emacs, it'll + probably try and convert all the characters to something + unusable. + + * tests/lib/camel-test.c (camel_test_break): Add a debugger hook + point. + + * camel-mime-utils.c (quoted_encode): Check for space and convert + to _ separately. + (header_decode_mailbox): Fixed the 'check comments for realname' + code, problem was the domain getting code was skipping all + whitespace/comments before we could get a look-in. This is + approximate but fairly robust. + (header_decode_text): Dont use the c-type isspace func here, we + want a specific whitespace only. + (header_decode_text): If we have decoded words next to each other, + do not insert whitespaces between them, which is what rfc2047 requires. + (header_decode_text): Make c unsigned too. + + * tests/README: Added at least some explanation of all this stuff. + + * tests/lib/camel-test.h (check_msg): Added a non-gcc version of + the fail command, we dont get the expression that failed, but no + matter. Should be (more) portable now. + (check, check_msg): Put the file/lineno in the default message. + + * Makefile.am (SUBDIRS): Add tests. + + * camel-mime-filter-basic.c (filter): Well, I'll add the extra + bytes here too, lathough not strictly needed, might save a + re-malloc when we get to complete(). + + * camel-mime-filter-charset.c (filter): Make sure we have room if + we only convert very short data. + (complete): and here too. + + * tests/Makefile.am: Initial test harness & tests. Requires gcc + for this. + + * camel-internet-address.c (d): Turn off debug. + + * camel-charset-map.c (camel_charset_step): Oops, & masks for set + intersection, not | them. Dunno how this got even close to + working. + +2000-11-23 Not Zed <NotZed@HelixCode.com> + + * camel-mime-filter-basic.c (filter): For base64 encoding, the + output size for 0, 1, or 2 bytes of input can exceed input*2, so + make sure we account for that as well. + (complete): And here. + (complete): Similarly for qp encoding, if we have a trailing + space, we need some extra bytes (not needed for 'filter()', as any + such bytes are stored in state/save). + + * camel-mime-utils.c (quoted_decode_step): Removed fixme not required. + (quoted_encode_close): Dont append a trailing afterall. Otherwise + a pass through the encode/decode will grow the message each time. + +2000-11-22 Radek Doulik <rodo@helixcode.com> + + * camel-mime-utils.c (header_msgid_generate): check for return + values + +2000-11-21 Dan Winship <danw@helixcode.com> + + * camel-lock.c: + * camel-movemail.c: add #ifdef HAVE_ALLOCA_H + +2000-11-21 Not Zed <NotZed@HelixCode.com> + + * providers/local/camel-mh-summary.c (mh_summary_sync_message): + Shite, -1 on error, >=0 on success. So i've just been truncating + all the messages I touched, good one zed. + (mh_summary_sync_message): Sigh, and write to the right damn fd as + well. + (mh_summary_sync_message): Argh, and we need to compare the length + of the old xev -1 to the new xev, to check if we can optimise it. + + * camel-folder.c (camel_folder_change_info_new): Init the pool. + (camel_folder_change_info_add_source): Allocate string in the + pool. + (camel_folder_change_info_add_source_list): + (camel_folder_change_info_add_update): No longer free the key, as + it cannot be yet. + (change_info_add_uid): Add a new arg, copy, telling it whether to + copy the uid argument or not, and copy using mempool_strdup. + (change_info_cat): Tell add_uid to copy the string. + (camel_folder_change_info_add_update): Call add_uid directly. + (change_info_remove): Call add_uid directly, with no copy, and + dont free the key. + (change_info_free_update): No longer required since we dont malloc + the keys. + (camel_folder_change_info_add_uid): Fix for add_uid change. + (camel_folder_change_info_remove_uid): + (camel_folder_change_info_change_uid): + (change_info_clear): No longer needed, just set the size to 0 on + the array directly. + (camel_folder_change_info_clear): Empty the arrays directly, and + flush the mempool too, and also clear uid_source, incase anyone + was silly enough to call us in the wrong order. + (camel_folder_change_info_free): Dont bother clearing the array's + contents, just free the pool and throw away all the indexes. + + * camel-folder.h: Added a mempool to CamelFolderChangeInfo to + store the uid's we get. + + * camel-folder-search.c (search_match_all): If we are only + matching a single info, just use that/do the search. + (camel_folder_search_match_expression): New function. Matches a + single message info against an expression. + (camel_folder_search_init): Init a hash table used to map the + returned gptrarrays' to mempools. + (camel_folder_search_execute_expression): Store all of the string + data in a mempool, slightly faster, less wasted space (usually),. + (camel_folder_search_free_result): Check for the mempool that + stores the data for the list, and free that if we have it, + otherwise assume we need to use g_free() (which should only happen + if the list is empty at the moment). + : commented out the debugging prints. Got sick of 'executing + header search' crap. + + * providers/vee/camel-vee-folder.c (camel_vee_folder_init): Init + changes. + (camel_vee_folder_finalise): Free changes. + (vfolder_add_match): Simple helper to add a new matching info + record. + (camel_vee_folder_add_folder): Only trigger a changed event if we + have changes. + (vfolder_change_match): New function, changes our local vfolder + info to match the source. + (vfolder_add_match): Add a new info to the vfolder list. + (vfolder_remove_match): Remove a no-longer matching info from the + vfolder summary. + (message_changed): check if the message still matches, and + remove/etc as required. + (camel_vee_folder_finalise, init): init/free search object. + (vee_folder_build_folder): Build the changes to the folder into + the changes data, as we go. + (folder_changed): If the folder gave us an explicit list of + changes, then process each one separately (unless there's a lot + added/changed). + + * providers/vee/camel-vee-folder.h: Added a changes field to the + folder. + + * Makefile.am (libcamel_la_SOURCES): Added + camel-folder-thread.[ch]. + + * camel-folder-thread.c: message-threading algorithm, taken from + evolutions' mail component, as it is generally more useful than + just for evolution itself. Changed to use e-memchunks as well to + speed it up a little and use less mem. + +2000-11-20 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-remote-store.c (remote_recv_line): Fixed to return the + correct bytecount in all cases which is the real fix to + imap_parse_nstring. + + * providers/imap/camel-imap-command.c (imap_read_untagged): Again, + don't use strlen for the post-data, use 'n'. + + * providers/imap/camel-imap-utils.c (imap_parse_nstring): Undo my + previous temp-fix. + +2000-11-20 Not Zed <NotZed@HelixCode.com> + + * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): Fixes for + the summary messageid changes. Hash the messageid and store it. + (get_XOVER_headers): Use camel_folder_summary_info_new() to create + the summary item before adding it. + + * camel-folder-summary.h (CamelMessageInfo): Changed the + messgae-id to be an 8 byte md5 hash, and the references list to be + an array of these. + + * providers/local/camel-mh-summary.c (mh_summary_sync_message): + New function, sync out the message info stuff. Only updates the + X-Ev header if it can get away with it, otherwise writes out a + whole new message. + (mh_summary_sync): Added more functionality. All summary info is + now written to the X-Ev header, etc, and new messages re-written + if required during the sync process. + + * providers/local/camel-local-folder.c + (local_set_message_user_flag): Set the XEVCHANGE flag. + (local_set_message_user_tag): And here too. + + * providers/local/camel-local-summary.h: New flag + CAMEL_MESSAGE_FOLDER_XEVCHANGE to indicate the XEV header has + probably changed size and needs to be rewritten in whole. + + * camel-folder-summary.c (next_uid_string): Want this static, not + const. + (message_info_new): Store the references and message-id values as + 64 bit, binary hashes. + (message_info_load): fix for message-id/references changes. + (message_info_save): Likewise. + (camel_message_info_dup_to): And here. + (camel_message_info_free): And here too. No longer free + message_id, and simple free for references array. + (CAMEL_FOLDER_SUMMARY_VERSION): Bumped file revision. + (camel_folder_summary_init): Init memchunk allocators to empty. + (camel_folder_summary_finalize): Free memchunk allocators if + there. + (message_info_new): Use the chunk allocator to allocate message + info's. + (camel_folder_summary_info_new): New helper to allocate the + message info, and setup the memchunk if required. + (content_info_alloc): Likewise for content info's. + (message_info_load): Use summary_info_new_empty. + (content_info_new): Use content_info_alloc. + (content_info_load): " + (content_info_free): Free the content info as a memchunk. + (message_info_free): Free everything directly and the base as a + memchunk, rather than calling camel_message_info_free(), which + assumes a malloc'd array. + + * providers/local/camel-local-summary.c: Include ctype.h, kill a + warning. + (local_summary_decode_x_evolution): If we get a NULL message info, + then dont try and set anything, just check for validity. + (camel_local_summary_write_headers): New function to write a set + of headers to an fd. + (camel_local_summary_check): Added some statistic generation + stuff for memory profiling. + + * providers/local/camel-mbox-summary.c (header_write): Changed to + use stdoi functions to write out the header to a buffered stream, + instead of using writev, which is apparently slow (and writing + each line separately is slow anyway). + (mbox_summary_sync_full): New implementation. Does things + differently, doesn't use or require the content info stuff. + (summary_rebuild): Dont return an error if we start scanning at + the end of file. + (mbox_summary_sync_full): If we are not writing out new headers, + make sure we copy the From line as we go, and update frompos + appropriately. + (mbox_summary_sync_full): Always copy the From line from the + existing one, rather than trying to make one up ourselves. + (mbox_summary_sync): If we can get by with a quick-sync, then try + it, if that fails, then try a full sync anyway. + (mbox_summary_sync_quick): Quick sync. Only update system flags, + etc. + (mbox_summary_sync_full): Use the proper local summary encode_xev + function. + (header_evolution_decode): Removed, no longer needed. + (header_evolution_encode): Same. + (copy_block): No longer needed, removed. + (header_write): Removed, replaced with + camel_local_summary_write_headers. + (mbox_summary_sync_full): Fixed for header_write change. + + * camel-mime-parser.c (folder_scan_step): Implement the new + optional parser state HSCAN_PRE_FROM, that returns the (currently + unfiltered) input data. + (folder_scan_drop_step): Do the right thing for the PRE_FROM + state. + (camel_mime_parser_scan_from): Update the doco. + (camel_mime_parser_scan_pre_from): Ok, make this behaviour + optional, it simplifies a lot of loops that dont otherwise need to + know about it. + (folder_scan_step): Made the PRE_FROM state optional. + (struct _header_scan_state): Made the bool vars 1 bit. + (folder_pull_part): Free the from_line buffer if it is there. + (folder_scan_skip_line): Added a new arg, can save the skpped data + to a byte_array, as we go. + (folder_scan_step): Fixed calls to skip_line approrpiately. Now + we save the from line as we parse it. + (camel_mime_parser_read): New function to read from the mime + parser buffer directly. Useful if you use the parser to read the + first/some headers, then need to scan the rest of the data, + without needing to use a seek(), or allocate your own buffers. + + * camel-mime-parser.h (struct _header_state): Added a new parser state, + pre-from which returns any data found before a from line during + parsing (all other data can be retrieved by the caller except + this). + +2000-11-17 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-utils.c (imap_parse_nstring): When + extracting a literal string, capture up until the end of the last + line - this we we don't lose any data if the byte count is off. + + * providers/imap/camel-imap-command.c (imap_read_untagged): Use + the byte-read count to decrement the number of bytes left to read + rather than using strlen. Not only does this protect against a DoS + (embedded NUL chars in the literal string would make strlen + inaccurate) but it also improves performace a little. + + * camel-remote-store.c (remote_recv_line): *Sigh* Return the + number of bytes read on success rather than 0. Also don't use + camel_stream_buffer_read_line since we can't get an accurate octet + count. + +2000-11-17 Not Zed <NotZed@HelixCode.com> + + * providers/local/camel-local-summary.c (local_summary_add): Clear + the NOXEV/FLAGGED bits, since we do have an xev header. um m, + maybe this is right, this assumes a write is following. Maybe + this should be done in folder::append() instead ... + + * camel-stream-buffer.c (camel_stream_buffer_gets): We should + always terminate the string. No need to check outptr is in range, + its already been checked. + + * providers/local/camel-mbox-summary.c (mbox_summary_sync): When + we update the summary, do it from mbox_summary->folder_size, not + the content info endpos (which isn't any good anymore anyway). + + * providers/local/camel-mbox-folder.c (mbox_append_message): Set + the frompos from the current folder size, since summary_add wont + have initialised it to anything useful. + +2000-11-16 Not Zed <NotZed@HelixCode.com> + + * providers/local/camel-local-summary.c + (local_summary_encode_x_evolution): Check the uid string is all + digits before trying to write a 'standard' x-ev header. + + * providers/local/camel-maildir-summary.c + (camel_maildir_summary_info_to_name): Convert an info into a + maildir name:info filename. + (camel_maildir_summary_name_to_info): Convert a name:info filename + into an info, and tell us if it didn't match it. + (message_info_new): When creating a new filename, gets its info + from the flags field. Likewise if creating from an existing file, + extract the flags. + (maildir_summary_sync): Remove a small memleak. Also, if our + flags and that requires a filename change, perform that here. + (message_info_new): Get the received date from the filename. + Also, dont overwirte the uid if we have one. + (maildir_summary_check): Sort the summary in received order before + completion. + (maildir_summary_next_uid_string): Test the name for collusions + before we give it out. Retry, and if that fails, well, I guess we + collide :( + + * providers/local/camel-mbox-folder.c (mbox_lock): Implement mbox + locking. + (mbox_unlock): And unlocking. + (mbox_append_message): Lock the folder for write before doing + anything. + (mbox_get_message): Lock the folder for read before doing + anything. + + * providers/local/camel-local-folder.c (camel_local_folder_lock): + Implement something here. We handle the recursive ability but + pass the locking to the folder itself. + (camel_local_folder_unlock): Likewise for unlocking. + (local_lock): Default - do nothing, return success. + (local_unlock): Same. + (local_sync): Changed slightly for locking api changes, and also, + only lock around the sync process itself. + + * camel-lock.c: New file - utility functions for locking using + different strategies and/or for locking folders safely. + + * Makefile.am (libcamel_la_SOURCES): Adde camel-lock.[ch] + +2000-11-15 Radek Doulik <rodo@helixcode.com> + + * camel-mime-utils.c: mime_guess_type_from_file_name moved back to + composer as it introduced unwanted VFS dependency + removed #include <libgnomevfs/gnome-vfs.h> + +2000-11-15 Not Zed <NotZed@HelixCode.com> + + * providers/Makefile.am: Removed local again, not quite ready. + +2000-11-14 Not Zed <NotZed@HelixCode.com> + + * camel-folder-summary.c (message_info_new_from_message): Use + message_info_new to create the summary from headers, instead of + getting directly from the message. + (format_recipients): No longer required. + + * providers/Makefile.am (SUBDIRS): Added local. + +2000-11-11 Not Zed <NotZed@HelixCode.com> + + * camel-mime-parser.c (folder_push_part): Make sure 'atleast' is + at least 1, always. This is possibly a temporary fix for a + bad failure mode on bad multipart messages. + (folder_scan_content): Go until inend, not inend+1. Changed the + continuation and retry logic to be simpler and more robust. If we + can't find a marker within + the atleast we need, just set it to 1, and try again, rather than + just going to the next smaller limit (boundary check checks the + length anyway). + (header_append): streamline the empty line case. And strip + trailing \r's if there are any (\n's already stripped). + (folder_scan_header): Reordered and cleaned up a lot. Check for + continuation only once, and compress lwsp then. Assume the header + buffer already has end of line's stripped, and simplify some things: + Only check for end of headers once and easier. + Dont check to remove end of line character + Dont bother testing inptr-start if we get a boundary match - it is + always zero. + (folder_scan_header): Removed the unused part variable, and a few + pointless assignments. + (folder_scan_header): Change the end limit to be 1 higher, to make + sure we get all content. + (folder_scan_content): And here too. + (folder_scan_header): Killed a warning. + (folder_push_part): Removed a bad comment. Actually + boundarylenfinal can be zero for a new message not in a + multipart. So we fix that here. + +2000-11-09 Not Zed <NotZed@HelixCode.com> + + * camel-mime-utils.c (header_decode_param_list): Renamed from + header_param_list_decode. + (header_param_list_decode): New external function to decode a + parameter list. + (header_param_list_format_append): Made public. + (header_param_list_format): Another new public helper function for + formatting just a param list. + + * camel-folder-summary.c (next_uid_string): Default implementation + is the same as before. + (camel_folder_summary_class_init): And set it up. + + * camel-folder-summary.h: Make next_uid_string a virtual function. + + * camel-folder.c (camel_folder_change_info_changed): New function + to return true if the changeset contains any changes. + +2000-11-14 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-stream.c (camel_stream_printf): Don't cast an int to a + ssize_t. + +2000-11-10 Dan Winship <danw@helixcode.com> + + * providers/mbox/camel-mbox-summary.c + (camel_mbox_summary_build_from): put a space before a single-digit + day of the month since it seems some mailers are fantastically + picky about this. (bugs.gnome.org #27232) + +2000-11-10 Radek Doulik <rodo@helixcode.com> + + * camel-mime-utils.c (header_msgid_generate): fix ids ending with '.' + +2000-11-09 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-auth.c (imap_try_kerberos_v4_auth): + Fix error handling. (Only send a "*" to bail out of authentication + if the server hasn't already bailed on us.) + +2000-11-08 Radek Doulik <rodo@helixcode.com> + + * camel-mime-utils.c (mime_guess_type_from_file_name): new + function, moved from composer + +2000-11-08 Not Zed <NotZed@HelixCode.com> + + * camel-mime-message.c (find_best_encoding): Keep track of the + caller bestenc flags that make sense. + + * camel-mime-filter-bestenc.c (filter): Added code to detect when + we have "^From " lines in the sequence of text. + (camel_mime_filter_bestenc_get_best_encoding): Added a new flag + CAMEL_BESTENC_NO_FROM: if set, it will not allow any lines + matching "^From " to appear in the output - currently forcing + base64 encoding to achieve this. + + * camel-mime-parser.c (folder_scan_step): Call + camel_mime-filter_complete() once we're done, rather than + filter_filter(). + (folder_scan_content): Some fixes for state changing; so that when + we do find another boundary it is properly flagged. Since we + strip the last \n off all data, we must take that into account + too. Sigh. Fixes a rather nasty set of bugs where multipart + messages could start including following messages as parts, etc. + (struct _header_scan_stack): Added new parameter, + boundarylenfinal, which holds the length of the final boundary, if + it is different (e.g. for From lines, whihc aren't) + (folder_scan_step): Setup teh boundarylenfinal value when creating + a new boundary. + (folder_scan_content): Hmm, if we hit the end-of-buffer sentinal, + reset the scanner back to leave 'atleast' chars in the buffer + still, dump that content, and retry again. Stops us losing a + check for a boundary on some data we haven't really looked at yet! + (folder_scan_content): Use boundarylenfinal to calculate + 'atleast'. + (folder_scan_header): And here too. + (folder_boundary_check): Use the atleast value directly, dont + truncate it. Use the boundarylen/boundarylenfinal values directly + too. + (struct _header_scan_stack): Add an atleast parameter to cache the + atleast info. + (folder_push_part): Determine/set 'atleast', every time we add a + new part. + (folder_scan_header): Get the cached atleast info from the current + part. + (folder_scan_content): And here too. + (folder_scan_header): Fix a problem where a part starting with + " text" would be interpreted as a followon header wrongly. + + * camel-mime-filter-charset.c (complete): Add some assertions to + find a bug. + +2000-11-07 Ettore Perazzoli <ettore@helixcode.com> + + * camel-service.c (get_name): Strdup the "???" string you return, + so that the expected semantics for `::get_name()' is respected. + +2000-11-07 Dan Winship <danw@helixcode.com> + + * camel-stream-filter.c (d): Kill debugging, as it causes lots of + evolution-mail spewage. + +2000-11-07 Not Zed <NotZed@HelixCode.com> + + * camel-mime-filter-bestenc.c (complete): Implement a complete() + function, now we need one. + (filter): Upgraded to match rfrc2045 properly. Checks also for + length of line and valid CRLF sequences. + (camel_mime_filter_bestenc_get_best_encoding): Do the work of + working out what is the best encoding given what we found about + the stream. + + * camel-mime-part.c (camel_mime_part_encoding_to_string): Use a + lookup table to get the encoding naem, and add the binary type. + (camel_mime_part_encoding_from_string): Likewise for the reverse. + + * camel-mime-part.h: Added the binary encoding type, see rfc2045. + + * camel-mime-utils.c (header_param_list_format_append): Dont put a + space before ;'s in parameter lists, makes them more + readable/consistent. + + * camel-mime-message.c (multipart_has_8bit_parts): Cleaned up the + old stuff, well removed it. + (camel_mime_message_set_best_encoding): Added another argument + that lets you select what you want to set the best of. i.e. for + smtp transport we only need 7 bit, and dont need to optimise the + charset (although of course, we should always). + (find_best_encoding): Implement this feature, if we are not + getting the best charset, use the one we have. + (best_encoding): Set the charset on the part appropriately. Sigh, + the interfaces for this are nonexistant. + (find_best_encoding): Tell the bestenc filter that lf should be + treated as crlf for the purposes of determining encodings. + +2000-11-06 Not Zed <NotZed@HelixCode.com> + + * camel-charset-map.c (camel_charset_init): Init function for an + iterative charset determinator. + (camel_charset_step): Iterate another buffer. + (camel_charset_mask): Removed, since it couldn't have worked. + (camel_charset_best): Use the iterative interface to do the work. + (camel_charset_best_name): Get the best name for a charset so far. + + * camel-mime-filter-bestenc.c: New class, a stream + filter that can be used to memory-efficiently determine the best + encoding and/or charset to use for a given stream of bytes. + + * Makefile.am (libcamelinclude_HEADERS): Added stream-null*. + (libcamel_la_SOURCES): Added bestenc* + + * camel-stream-null.c: New class, a null-stream, that always + succeeds, and never has any contents. + + * camel-stream.c: Minor pointless changes. Was going to do + something else but changed my mind. Added trivial default + implementations for all callbacks. + + * camel-mime-message.h: Cleaned up some old cruft. + + * camel-folder-summary.c (camel_folder_summary_format_address): + address_list_format() no longer encodes, so we dont need to decode + it. + + * camel-address.c (camel_address_unformat): New function, attempts + to reverse the formatting process on display addresses. + (camel_address_length): New function to get the number of + addresses, without having to peek the structure. + + * camel-mime-message.c (camel_mime_message_set_from): Fix a typo. + (camel_mime_message_finalize): Only unref from/reply_to if we have + it. + (camel_mime_message_set_recipients): New function - set the + recipients as a CamelInternetAddress. This function effectively + deprecates the older recipient setting functions. + (camel_mime_message_add_recipient): What the hell, i'll bite the + bullet. Terminate this function. The old api was ambiguious and + inefficient and didn't work right anyway. + (camel_mime_message_remove_recipient_address): And this one. + (camel_mime_message_remove_recipient_name): And this one too. + (camel_mime_message_set_recipients): If we set an empty header, + then remove it from the header list. Allow a null receipient + object to clear a header. + (camel_mime_message_set_from): Likewise, if setting an empty from + address. + (camel_mime_message_encode_8bit_parts): Eeek!! + camel_stream_mem_new_with_byte_array owns the byte_array we give + it, so make sure we dont free any of it! + (camel_mime_message_encode_8bit_parts): Infact, i'll just rewrite + the whole lot, its a bit of a mess. Should really rename it and + make it a little more useful too, lets see ... + (best_encoding): This has a string interface? Oh boy. + (camel_mime_message_foreach_part): New experimental function to + iterate over all message parts. Might not remain. + (camel_mime_message_has_8bit_parts): New implementation using + foreach_part. Fixed a couple of problems. + (find_best_encoding): New function, that finds the best encoding + for a given part (will probably be moved to camel-mime-part), and + also the best charset to use if it is a text part. Since one + affects the other it is a two pass process, but uses streams and + not memory to achieve this. + (camel_mime_message_set_best_encoding): Uses the function above to + configure an entire message for the best encoding possible given + transport constraints. + (camel_mime_message_encode_8bit_parts): Reimplemented to use the + function above to perform the work. + + * camel-internet-address.c + (camel_internet_address_format_address): Dont put <> around a lone + address with no real name. + (camel_internet_address_encode_address): Similarly. + (internet_decode): Actually return the count of decoded addresses. + (internet_unformat): Implement the unformatting routine. + +2000-11-05 Not Zed <NotZed@HelixCode.com> + + * providers/smtp/camel-smtp-transport.c (_send_to): Changed to get + the internetaddress directly, rather than having to parse it + itself. + + * camel-address.c (camel_address_format): Added a new function + which will format address, suitable for display. + (camel_address_cat): Concatentate 1 camel address onto another. + It is upto the caller to ensure the addresses are of compatible + types. + (camel_address_new_clone): New function to create a new address by + copying an existing one of the same type. + (camel_address_copy): New helper function to copy an address. + + * camel-mime-message.h (struct _CamelMimeMessage): Removed cached + copy of date string. + (struct _CamelMimeMessage): Added date_received info. + + * camel-mime-message.c (camel_mime_message_get_date_string): + Removed. Nothing uses it anyway, and it is redundant. + (camel_mime_message_finalize): No more date_str. + (camel_mime_message_init): No more date_str, initialise + date_received* + (write_to_stream): Change the check for a date header. + (process_header): No longer track the date_str. + (camel_mime_message_get_received_date): Removed. totally invalid + anyway. + (camel_mime_message_get_sent_date): Removed. Redundant. The only + 'date' is the sent date, the received date is just made up. + (camel_mime_message_get_date): Args changed to be more consistent + with utility functions. + (camel_mime_message_get_date): Dont set the date when we're asked + for it (if its not set by the time its written, it'll be set + then). + (camel_mime_message_get_date_received): Actually do 'the right + thing' here, if we have a received header, use that to determine + the received date. And return the data in the same format as + get_date. + (camel_mime_message_set_from): Changed the api to better match + what we should be doing. Pass a camelinternetaddress, etc. + (camel_mime_message_set_reply_to): Cahnged similarly to take an + internetaddress. + (camel_mime_message_get_reply_to): Likewise. + (camel_mime_message_finalize): Unref the from/reply_to objects. + (format_address): Removed, no longer needed. + (process_header): Changed to store the from/reply_to as + internetaddress's. + (write_to_stream): Set the from header directly to empty, if we + dont have one. Maybe we should just abort, and/or create one + based on the current user. + + * camel-mime-utils.c (header_address_list_format): Renamed to + header_address_list_encode, which is what it is actually doing. + (header_address_list_format_append): Similarly. + (encoding_map[]): Removed, no longer used. + (header_address_list_encode_append): Take another arg, do we + encode the address (for internet), or not (for display - utf8 + only). + (header_address_list_format): Re-added this function, but now it + generates a display version only. Surprise surprise, that is all + anythign needs to generate anyway. Sigh. + + * camel-internet-address.c (camel_internet_address_get): Return + false if we get an invalid index only. + (camel_internet_address_encode_address): Helper function to encode + a single address for mailing. + (internet_encode): Use the above function to format it. + (camel_internet_address_format_address): Format a single address + for display. + (internet_format): Implement the display version. + (camel_internet_address_class_init): Init the internet_format + virtual function. + (internet_cat): Implement virtual function to concatenate + addresses. + + * camel-folder-summary.c + (camel_folder_summary_info_new_from_header): new function, only + build the summary info, dont add it. + (camel_folder_summary_info_new_from_parser): Likewise, for new + info from parser. + (camel_folder_summary_add_from_parser): Cahnged to call function + above to build info. + (camel_folder_summary_add_from_header): Changed to call function + above, to build info. + (camel_folder_summary_info_free): New function to free the summary + message info. + (camel_folder_summary_clear): Changed to clal above to free info. + (camel_folder_summary_remove): Likewise. + (camel_folder_summary_add): Cleaned up the clashing uid + re-assignment logic a little bit. + (camel_folder_summary_decode_uint32): Fixed a typo, 01 != -1. + (camel_folder_summary_decode_time_t): Return -1 on error. + (camel_folder_summary_encode_off_t): New function to encode an + off_t type. + (camel_folder_summary_decode_off_t): And likewise for the reverse. + (CAMEL_FOLDER_SUMMARY_VERSION): Bumped the summary version, since + we're now encoding time/off_t's right. + (summary_header_save): Use time_t encoder to save the timestamp. + (summary_header_load): Likewise for decoding the timestamp. + (content_info_load): Decode off_t types directly, now we can. + (content_info_save): And likewise for encoding. + (camel_folder_summary_add_from_message): New function, create a + summary item from an existing message and add it. + (camel_folder_summary_info_new_from_message): New function, create + a summary item from an existing message. + (summary_build_content_info_message): New function to do the dirty + work of building the conent info/indexing, from a message source. + (format_recipients): Format an internetaddress suitable for the + summary. + (message_info_new_from_message): Build a new summary item from a + mime message. + (content_info_new_from_message): Build a new conent info from a + mime part. + (camel_folder_summary_class_init): Init the new class functions. + (message_info_new_from_message): Fixed for message api change. + + Added documentation to the functions. + +2000-11-03 Radek Doulik <rodo@helixcode.com> + + * camel-mime-utils.c (header_msgid_generate): new function, + generates simple message/content id + +2000-11-04 Not Zed <NotZed@HelixCode.com> + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Set the + preface/postface from the parser into the multipart object. + + * camel-multipart.c (camel_multipart_set_postface): Function to + set the postface text on a multipart. + (camel_multipart_set_preface): Similarly for preface text. + + * camel-mime-parser.c (folder_scan_content): If we scan until a + boundary, then we do not include the \n that starts the boundary + line in the content. + (struct _header_scan_stack): Added a ByteArray to store the + multipart pre/post-text as we're scanning. + (folder_pull_part): Free pre/posttext if they are allocated. + (folder_scan_step): Build into the pre/posttext arrays as we + encounter data. + (camel_mime_parser_preface): REturn the multipart preface text, if + there is any scanned. + (camel_mime_parser_postface): Likewise for postface text. + (byte_array_to_string): helper function for above. + + * providers/mbox/camel-mbox-folder.c (mbox_append_message): Change + the from line to be "\nFrom ..." always, so no need to + check/append a \n to messages. + (mbox_append_message): Open the output stream with append mode + [assuming this is more efficient than seeking to the end] + And dont prepend \n on the From line if its the first in the + mbox. + (mbox_append_message): Pass the offset of the real start of the + "From " line when we perform the update (which may != 'seek') + + * camel-mime-filter-charset.c (complete): Removed the terminating + NUL 'fix'. + + * camel-stream-filter.c (do_read): Added some debug. + (do_flush): And here. + (do_write): And here too. + (do_write): ARGH!!! ARGH! Ok, so the filter stream was writing a + different number of bytes than the requester was asking it to + write (because of filtering, of course!). So instead of returning + the true number of written bytes, we'll return what they asked us + to write - unless there is an error in which case we return -1. + + * camel-mime-utils.c (base64_encode_close): Sigh, forgot to make + it unsigned. I think this is actually a gcc bug as (48 >> 2) + somehow ended up negative, when it obviously should not, even if + the data load was signed. + +2000-11-03 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-url.c: Undo my incorrect fix - I misunderstood danw - + sorry! + +2000-11-03 Dan Winship <danw@helixcode.com> + + * providers/pop3/camel-pop3-store.c (camel_pop3_store_expunge): + Unbreak this. + +2000-11-03 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-url.c (camel_url_to_string): If show_pass, then base64 the + password before writing it to the output string. + (camel_url_new): Assume password has been base64 encoded and + decode accordingly. + +2000-11-03 Dan Winship <danw@helixcode.com> + + * camel-provider.h: Add an "url_flags" field to CamelProvider. + Move the CAMEL_SERVICE_URL_* defines here and remove the SERVICE_ + part of the name. + + * camel-service.h: Remove CAMEL_SERVICE_URL_* flags and + service->url_flags field. + + * camel-service.c (check_url, get_path): Get URL flags from + service->provider, update for changed flag names. + + * providers/*/camel-*-provider.c: Add URL flags to provider + structures. + + * providers/*/camel-*-{store,transport}.c, camel-remote-store.c: + Remove service->url_flags initialization. + +2000-11-02 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (get_folder_info): Quote + foldernames when sending to the IMAP server because the folder + name might contain spaces. + +2000-11-02 Not Zed <NotZed@HelixCode.com> + + * Merged in camel-incremental-branch. + +2000-11-01 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-store.c (get_folder_info): Remove old + subbed folders from hash table after freeing them. + + * providers/imap/camel-imap-folder.c (imap_get_full_name): Deal + correctly with namespace == "" + +2000-11-01 Gediminas Paulauskas <menesis@delfi.lt> + + * camel-charset-map.c, camel-charset-map-private.h: synced all charsets + with ones found in libunicode. Just include more "iso/*.h" and rebuild + ...private.h with this. + +2000-10-31 Dan Winship <danw@helixcode.com> + + * camel-service.c (service_disconnect): Add a new argument, clean, + that says whether or not to try to disconnect cleanly. + + * camel-remote-store.c (remote_send_string, remote_send_stream, + remote_recv_line): disconnect uncleanly on failure to prevent + infinite loops when providers would normally send commands from + disconnect(). Remove some unneeded CamelException goo. + + * providers/smtp/camel-smtp-transport.c (smtp_disconnect): + * providers/pop3/camel-pop3-store.c (pop3_disconnect): + * providers/nntp/camel-nntp-store.c (nntp_store_disconnect): + * providers/imap/camel-imap-store.c (imap_disconnect): Don't send + QUIT/LOGOUT if !clean. + +2000-10-30 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-auth.c: New file with code for IMAP + authentication mechanisms. (Currently just krb4, and without + integrity/privacy protection). + + * providers/imap/Makefile.am: Add camel-imap-auth.[ch] and krb4 + CFLAGS/LDFLAGS + + * providers/imap/camel-imap-store.c (connect_to_server): Split out + from imap_connect. Just does the basic connect and CAPABILITY + check. Redo the CAPABILITY code more robustly. + (query_auth_types_connected): Do this right rather than punting to + query_auth_types_generic. Check for KERBEROS_V4 if compiled with + krb4 support. + (query_auth_types_generic): Mention KERBEROS_V4 if compiled with + krb4 support. + (imap_connect): Use connect_to_server(). + + * camel-mime-utils.c (base64_encode_step, base64_encode_close): + Take an additional argument, "break_lines", saying whether or not + to add '\n's to the output. + + * camel-multipart.c (set_boundary): + * camel-mime-filter-basic.c (filter, complete): Update for base64 + api change. + +2000-10-30 Peter Williams <peterw@helixcode.com> + + * providers/imap/camel-imap-store.c (unsubscribe_folder): Correct + parameters to g_hash_table_lookup_extended. + +2000-10-29 Dan Winship <danw@helixcode.com> + + Improved IMAP namespace handling: leave the namespace in the + folder names rather than constantly prepending it and stripping it + off. Also some subscription fixes. + + * camel-store.c (camel_folder_info_build): Fix for the case where + @top isn't in @folders. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Add + a "short_name" argument rather than figuring it out ourselves. + (imap_get_full_name): Implementation of CamelFolder::get_full_name + that strips off namespace so the user doesn't have to see it. + (imap_append_message, imap_copy_message_to, imap_move_message_to): + Use folder->full_name rather than calling + camel_imap_store_get_folder_path. + + * providers/imap/camel-imap-utils.c (imap_parse_list_response): + Update this: make @flags a bitmask and @sep a char rather than a + string. Make all of the out arguments optional. Handle literals in + the server response. + + * providers/imap/camel-imap-store.c (imap_connect): Do a better + job of getting the correct dir_sep for the namespace we're using. + Construct a base_url here that will be used by get_folder_info. + (camel_imap_store_folder_path): Removed + (imap_folder_exists): Add an argument to return the short name of + the folder (parsed out of the LIST response). Update for + imap_parse_list_response change. + (get_folder): Update for the various other changes. + (get_folder_info): Update for the various other changes. Be more + consistent about the returned layout: put everything underneath + the "namespace" directory, including INBOX, even if it doesn't + belong there. Don't destroy the list of subscribed folders until + we've actually gotten the new list. + (folder_subscribed, subscribe_folder, unsubscribe_folder): Use + folder_name directly rather than camel_imap_store_folder_Path. + + * providers/imap/camel-imap-command.c (camel_imap_command): Update + for folder name changes. + +2000-10-29 Dan Winship <danw@helixcode.com> + + * camel.h: Remove md5-utils.h include since it's not part of Camel + any more. + + * camel-charset-map.c: Kill some warnings. + + * providers/nntp/camel-nntp-grouplist.c + (camel_nntp_get_grouplist_from_file, camel_nntp_grouplist_save): + Clean up warnings about time_t casts. + + * providers/smtp/camel-smtp-transport.c: Remove unused md5-utils.h + include. + + * providers/pop3/camel-pop3-store.c: Undefine the "_" macro + defined by krb4's des.h when compiling with krb support. + Fix md5-utils.h include. + +2000-10-27 Dan Winship <danw@helixcode.com> + + * camel-mime-utils.c (header_param_list_format_append): Only quote + Content-type parameters when the quoting is mandatory, and deal + with embedded quotes/backslashes when quoting. + +2000-10-27 JPR <jpr@helixcode.com> + + * providers/pop3/Makefile.am: Tidy up build + + * providers/smtp/Makefile.am: ditto + + * Makefile.am: Move md5-utils.[hc] to e-util because the + addressbook is going to use md5 hashes for pilot syncing. + Maybe the calendar conduits as well because this is a good idea + Chris had. + +2000-10-26 Kjartan Maraas <kmaraas@gnome.org> + + * camel-exceptions-list.def: Add newline to kill warnings. + +2000-10-25 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-store.c (get_folder_info): Fix folder + listing code infinite loop. + + * camel-store.h: Add a "parent" field to CamelFolderInfo. + + * camel-store.c (camel_folder_info_build): Deal with "parent" + (camel_store_folder_subscribed, camel_store_subscribe_folder, + camel_store_unsubscribe_folder): Add g_return_if_fails checking + that the folder supports subscriptions. + + * providers/imap/camel-imap-store.c (folder_subscribed, + subscribe_folder, unsubscribe_folder): Remove "+ 1"s since the + mail subscribe UI won't prepend / to the folder names now. + (get_folder_info): Clear the "parent" field of the folderinfos + when removing an empty top level. + + * providers/nntp/camel-nntp-store.c (nntp_store_folder_subscribed, + nntp_store_subscribe_folder, nntp_store_unsubscribe_folder): + Remove "+ 1"s since the mail subscribe UI won't prepend / to the + folder names now. + +2000-10-24 Chris Toshok <toshok@helixcode.com> + + * providers/imap/camel-imap-store.h: add subscribed_folders. + + * providers/imap/camel-imap-store.c (camel_imap_store_class_init): + fill in vtable entries for subscription functions. + (camel_imap_store_finalize): new function, so we can free up our + subscribed_folders hashtable. + (camel_imap_store_init): set CAMEL_STORE_SUBSCRIPTIONS in the + CamelStore flags, and create our subscribed_folders hashtable. + (camel_imap_store_get_type): camel_imap_store_finalize is our + finalize function. + (get_folder_info): if we're looking at subscribed_only, clear out + the subscribed_folders hashtable, use LSUB instead of LIST, and + insert folder paths (prepended by their namespace if there is one) + into subscribed_folders. INBOX subscription support needs work, + since we always show it, regardless of it's subscribed state. + (folder_subscribed): new function. just look up the folder_path + in the hashtable. + (subscribe_folder): new function. use the imap SUBSCRIBE command, + and if successful add it to the hashtable. + (unsubscribe_folder): new function. use the imap UNSUBSCRIBE + command, and if successful remove it from the hashtable. + +2000-10-24 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-store.c (get_folder_info): Fill in the + message_count and unread_message_count flags (if !fast). + +2000-10-23 Dan Winship <danw@helixcode.com> + + * camel-object.h: #include gnome-i18n.h (and gnome-defs.h since + the former depends on it.) + + * *: Add lots of _() and N_(). + +2000-10-23 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/Makefile.am (libcamelnntpinclude_HEADERS): add + camel-nntp-types.h. + +2000-10-23 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-command.c (imap_read_untagged): Fix a + "how could this have been working before" memory overrun bug + found by Vlad. + + * camel-op-queue.[ch], camel-thread-proxy.[ch]: These should have + gone away a long time ago. + +2000-10-20 Chris Toshok <toshok@helixcode.com> + + * providers/Makefile.am (SUBDIRS): re-enable the nntp provider. + +2000-10-20 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-store.c (build_folder_info): add + function to build a tree from the nntp group names (using '.' as a + heirarchy separator.) #ifdefed INFO_AS_TREE only. + (build_folder_info_from_grouplist): if INFO_AS_TREE is selected, + call build_folder_info instead of appending a new CamelFolderInfo + to our list. + (ensure_news_dir_exists): use e_mkdir_hier instead of failing if a + parent directory (~/evolution/news generally) isn't there. + +2000-10-19 Chris Toshok <toshok@helixcode.com> + + * camel-folder-search.c: #include <sys/types.h> before <regex.h> + +2000-10-19 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-utils.c (imap_parse_list_response): + Fix a bug with "INBOX" (or anything else with NIL hierarchy + separator) as the namespace. + + * providers/imap/camel-imap-folder.c (imap_refresh_info): Emit + message_changed and folder_changed as appropriate. + +2000-10-19 Dan Winship <danw@helixcode.com> + + * camel-folder.c (camel_folder_refresh_info): Update comment here + so refresh_info isn't just for reconnects any more. Make the + default implementation a no-op rather than an error. + + * providers/nntp/camel-nntp-folder.c: Move refresh_info impl into + camel_nntp_folder_new, since it would have leaked memory and not + done anything useful if it was called later. + + * providers/mbox/camel-mbox-folder.c: Remove no-longer-necessary + refresh_info impl. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): + Update imap_folder->exists, but don't actually load the new + messages. This is a temporary workaround to deal with the IMAP + provider stealing the message list focus at annoying times. + (imap_copy_message_to, imap_move_message_to): Emit a + folder_changed by hand, for now. + +2000-10-19 Ettore Perazzoli <ettore@helixcode.com> + + * providers/imap/Makefile.am (libcamelimapinclude_HEADERS): Add + `camel-imap-stream.h'. + + * Makefile.am (libcamelinclude_HEADERS): Add `camel-charset-map.h' + and `camel-charset-map-private.h'. + +2000-10-18 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-part.c (camel_mime_part_set_description): The correct + fix this time - the description should be encoded here and not in + the camel-medium layer. + +2000-10-30 Not Zed <NotZed@HelixCode.com> + + * camel-folder.c (camel_folder_change_info_add_update): Fixed the + changeset logic, which was completely wrong. + +2000-10-27 Not Zed <NotZed@HelixCode.com> + + * camel-mime-utils.c (quoted_encode_step): Removed is_blank() stuff. + (header_decode_init): When we set the 'space' bit, dont clear all + the others. + (quoted_encode): Put back the safemask. Yes we totally need it, + see rfc 2047 section 5, parts (1) and (3). + (CHARS_PSPECIAL): Remove '=' and '_' from the list of allowed + characters (this is an allowed list, not a not-allowed list, like + the ESPECIAL). + (camel_mime_special_table): Updated for fixes to definitions. + (CHARS_ESPECIAL): Added '_' to list of characters that should be + encoded. + +2000-10-26 Not Zed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_update): + Use the new camel_folder_change_info_* stuff to build the update + diff, rather than doing it ourselves. + + * camel-folder.c (camel_folder_change_info_add_source): Add a + 'source' list, used to create change lists. + (camel_folder_change_info_add_source_list): Add a list of uid's, + convenience function. + (camel_folder_change_info_add_update): Add a uid to the list of + uid's in the new updated list. + (camel_folder_change_info_add_update_list): Add a bunch of uid's + at once for the same purpose. + (camel_folder_change_info_build_diff): Take the source list, the + update list, and find the differences, building on the added or + removed list as appropriate. + +2000-10-20 Not Zed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-summary.c (removed_uids): REnamed from + add_uid. + (camel_mbox_summary_update): Oops, fix the reversed logic for + determining the uid changesets. + + * camel-folder.c (message_changed): Oops, we want to change the + uid, not add it. + +2000-10-19 Not Zed <NotZed@HelixCode.com> + + * providers/mh/camel-mh-summary.c (camel_mh_summary_sync): Added a + change list argument, and add expunged uid's to it. + + * providers/mh/camel-mh-folder.c (mh_init): Setup the change list. + (mh_finalize): And free it. + (mh_sync): Track changes, and send a folder_changed signal as + appropriate. + (mh_expunge): Likewise. + (mh_append_message): Add the new uid to the change list and + trigger a folder_changed event. + + * providers/mbox/camel-mbox-folder.c (camel_mbox_folder_new): + Setup a mbox list of changes structure. + (mbox_finalize): And free it. + (mbox_expunge): Include the change list with the folder_changed + event, and clear it off. + (mbox_sync): And the same for when we are just syncing the folder. + (mbox_append_message): And do the same here, after we've updated + the folder. + + * providers/mbox/camel-mbox-summary.c + (camel_mbox_summary_build_from): Use gmtime_r to get the time + thread-safely. + (camel_mbox_summary_sync): Added a changeinfo argument. Add any + removed or changed messages to the changelists as appropriate. + (camel_mbox_summary_update): Added a changeinfo argument. + Genereate a list of added/removed uid's based on the difference + before and after rebuilding the summary. + + * camel-folder.c (camel_folder_change_info_new): + (camel_folder_change_info_add_uid): + (change_info_add_uid): + (camel_folder_change_info_remove_uid): + (camel_folder_change_info_change_uid): + (change_info_clear): + (camel_folder_change_info_clear): + (camel_folder_change_info_free): + (change_info_cat): + (camel_folder_change_info_cat): Bunch of utility functions for + working with change info lists. + (camel_folder_init): Init the change info list. + (camel_folder_finalize): And free it. + (thaw): Changed to pass through a list of changes, or to get the + changed message uids from the camelfolderchangeinfo struct, and + reset it. + (folder_changed): Add the changed lists to the frozen change list + if we are frozen. + (message_changed): Add the message to the changed list if we are + in the frozen state. + + * camel-folder.h (CamelFolderChangeInfo): New structure to hold + information for the folder_changed event. + +2000-10-18 Ettore Perazzoli <ettore@helixcode.com> + + * camel-mime-filter-charset.c (complete): Put a zero at the start + of the outbuf. + +2000-10-18 Not Zed <NotZed@HelixCode.com> + + * camel-mime-part.c (add_header): No, we must not encode the + headers here. These interfaces ARE raw interfaces as they are + defined in camel_medium. Also removed a bogus/meaningless FIXME. + (set_header): Likewise here, we must not. + (process_header): Removed another bogus comment. + + * camel-object.c (shared_is_of_type): Comment out the spitting of + a big warning when we're trying to determine types from code. + + * providers/mbox/camel-mbox-summary.c + (message_info_new_from_parser): Only call ibex funcitons if we + have an index. + + * providers/mh/camel-mh-summary.c (camel_mh_summary_add): Only + call ibex functions if we have an index. + (remove_summary): Likewise. + (camel_mh_summary_check): Likewise. + + * providers/nntp/camel-nntp-store.c (nntp_store_get_folder): + get_folder -> flags argument. + + * providers/vee/camel-vee-store.c (vee_get_folder): create->flags. + + * providers/pop3/camel-pop3-store.c (get_folder): Changed create + -> flags. + + * providers/imap/camel-imap-store.c (get_folder): Added flags + argument. + + * providers/mh/camel-mh-folder.c (camel_mh_folder_new): Added + flags argument, and fixed code appropriately. + + * providers/mh/camel-mh-store.c (get_folder): Added flags argument. + + * camel-folder-search.c (message_body_contains): Perform a regex + match on the contents of messages. This wont quite work yet as + message contents are encoded when written to a stream. + (build_match_regex): Converts a number of strings into a regex + matching pattern, escaping special chars. + (match_message): match a single message from a folder, by uid. + Slow. + (search_body_contains): Changed to support matching where no index + is supplied. Matches are performed by retrieving message + contents, etc. + () WTF? camel should not be including any widget headers. + + * providers/mbox/camel-mbox-folder.c (camel_mbox_folder_new): + Added flags argument. + (mbox_refresh_info): Changed into a NOP, the refresh info code + moved into the new function. + (camel_mbox_folder_new): If we have an index requested, build one, + otherwise, remove an old one, or just dont do anything. + + * providers/mbox/camel-mbox-store.c (get_folder): Changed create + to flags, changed code to suit. + + * camel-store.c (camel_store_get_folder): Changed create to flags. + (get_folder_internal): And here. + (get_folder): And here too. + + * camel-store.h (camel_store_get_folder): Change the create + argument to be a flags argument. + +2000-10-17 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_refresh_info): Remove + cached info at the end of the summary when the folder shrinks + between sessions. Also remove an untrue comment. + (camel_imap_folder_new): Move the summary creation to after the + folder selection again, since it depends on the uidvalidity + having been set. + + * providers/imap/camel-imap-store.c (get_folder): Fix up + summary_file to not include the namespace twice. + +2000-10-17 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-part.c (set_header): Encode the header value. + (add_header): Same. + +2000-10-17 Not Zed <NotZed@HelixCode.com> + + * camel-mime-filter.c: Added some malloc check debugging stuff. + + * camel-mime-parser.c + (struct _header_scan_state): Removed top_part, top_start, and + pending. I can't even remember why they were there, and they're + not used anymore. + + * camel-mime-filter-basic.c (filter): Forgot to up the space here + too. + +2000-10-14 Not Zed <NotZed@HelixCode.com> + + * camel-mime-filter-basic.c (complete): Ok, so we hit a fixme, 3x + just wasn't enough for some sequences. + +2000-10-16 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-command.c + (imap_read_response): Don't imap_next_word(respbuf + 2), instead + use imap_next_word(respbuf) or else we'll skip over the second + token. + +2000-10-16 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-command.c + (camel_imap_response_extract): Don't free 'resp' as it doesn't + point to the beginning of the allocated data, instead free + response->untagged->pdata[i]. Also, if '*resp' is equal to a space + character, then set resp = imap_next_word (resp) rather than + expecting resp++ to work (there's a list broken IMAP daemons that + like to put extra spaces between tokens). + (imap_read_response): Don't expect 'respbuf+2' to be where the + untagged number response to start (see above fix for an + explanation). + +2000-10-16 Chris Toshok <toshok@helixcode.com> + + * camel-service.c (get_path): when using the construct (flags & + CAMEL_SERVICE_URL_NEED_*) make sure to do ((flags & + CAMEL_SERVICE_URL_NEED_*) == CAMEL_SERVICE_URL_NEED_*) + (check_url): same. + +2000-10-16 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (imap_disconnect): Only send + the LOGOUT command if the store is connected. + (imap_connect): Set the 'connected' state to TRUE when we + successfully connect. + (get_folder_info): if (!topfi), 'topfi' was allocated but then + 'fi' was set. I think Dan meant to set topfi since fi is an + uninitialized value at this point. + + * providers/imap/camel-imap-command.c (imap_read_response): Check + for the untagged BYE response and set the 'connected' state to + FALSE if we receive the BYE response. Return NULL if we get a BYE + response. + +2000-10-16 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-store.c (get_folder_info): Deal with + the possibility of not getting a LIST response back for the top + level. + +2000-10-12 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-summary.c: Simple subclass of + CamelFolderSummary that also keeps a UIDVALIDITY value (and + doesn't, for the moment, build content info). + + * providers/imap/camel-imap-folder.c: + (various): Use a CamelImapSummary to store/fetch summary info. + (camel_imap_folder_new): Take a path to a file to use for the + summary. Set the folder's permanent_flags correctly according to + the server response. Read in the summary (checking the + UIDVALIDITY) and update it if it's out of date. + (imap_refresh_info): Just fetch UIDs and flags. If the UIDs all + match, update the flags as needed and be done with it. Otherwise, + delete messages that have been expunged from the server and fetch + full summary info for any new messages. + (imap_sync): Save the summary to disk. + (imap_update_summary): Renamed from imap_get_summary_internal. Can + now be told to get summary for only a subset of messages. Use + camel-mime-utils functions rather than rolling our own header + parsing. + (imap_get_message_info_internal): Merged into imap_update_summary. + (imap_set_message_flags): Don't marked the message FOLDER_FLAGGED + if we're not actually changing the value of any of the flags. + (camel_imap_folder_changed): Deal with EXISTS rather than RECENT. + + * providers/imap/camel-imap-store.c (imap_connect): Call + camel_session_get_storage_path and save the value. + (get_folder): Create a local directory to store summary + information and pass a summary file name to camel_imap_folder_new. + Don't call camel_folder_refresh_info from here any more since + camel_imap_folder_new does it again. + + * providers/imap/camel-imap-command.c (camel_imap_command): Add a + special case to this to make it possible to get the repsonses from + a SELECT and still have store->current_folder be updated + correctly. + (imap_read_response): parse EXISTS rather than RECENT + + * camel-session.c (camel_session_get_storage_path): Use + e_mkdir_hier. + + * camel-folder-summary.c (camel_folder_summary_remove_index): New + function. + + * camel-mime-utils.c (header_raw_append_parse): fix this. + (camel-mime-parser.c doesn't use this code because of the MEMPOOL + optimization, so nothing was ever actually calling it before.) + +2000-10-11 Not Zed <NotZed@HelixCode.com> + + * camel-mime-part.h (struct _CamelMimePart): Removed + temp_message_buffer, and content_input_stream fields which seem to + have come from nowhere, and are unused. + + * camel-mime-utils.c: Added a note about touching this file. + Nobody is to touch it without asking me first. That goes for you + too Jeff. + (header_decode_text): In what way is this broken? + +2000-10-10 Not Zed <NotZed@HelixCode.com> + + * providers/imap/camel-imap-folder.c (imap_get_summary_internal): + Fix camel_summary_* function rename + (imap_get_message_info_internal): Likewise. + + * camel-mime-parser.c (camel_mime_parser_finalise): Fixed a spelling mistake. + + * camel-folder-summary.c (camel_summary_format_address): Uh, why + do we encode and then decode here ... sigh. This is not the way + to fix this. + (camel_folder_summary_format_address): Renamed to a proper name, + this was only supposed to be a private function. + (camel_folder_summary_format_string): Likewise. Oh i see why it + was made public, code reuse by cut & paste. Joy. + +2000-10-11 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-store.c (nntp_store_unsubscribe_folder): remove the leading '/'. + (nntp_store_subscribe_folder): same. + (nntp_store_folder_subscribed): same. + +2000-10-11 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_move_message_to): Quote + the mailbox name as it may contain spaces. + (imap_copy_message_to): Same. + +2000-10-10 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-store.c + (build_folder_info_from_grouplist): fill in message_count and + unread_message_count properly. + + * providers/nntp/camel-nntp-newsrc.h: reformat. + + * providers/nntp/camel-nntp-grouplist.c + (camel_nntp_get_grouplist_from_file): remove spew. + + * providers/nntp/camel-nntp-newsrc.c + (camel_nntp_newsrc_group_get_num_articles_read): new function. + (camel_nntp_newsrc_group_get_highest_article_read): robustification. + +2000-10-10 Joe Shaw <joe@helixcode.com> + + * providers/imap/camel-imap-store.c + (parse_list_response_as_folder_info): Check before dereferencing the + sep pointer. + +2000-10-10 Jacob "Ulysses" Berkman <jacob@helixcode.com> + + * camel-*.c: teach camel about "its" vs. "it's" + +2000-10-09 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-store.c (finalize): write out the + newsrc. + (nntp_store_get_name): if @brief, just return host. + + * providers/nntp/camel-nntp-newsrc.c: robustification and bug + fixes. + +2000-10-06 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-folder-summary.c (camel_summary_format_address): Decode + the resulting string. + +2000-10-06 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-grouplist.c: new file. + + * providers/nntp/camel-nntp-grouplist.h: new file. + + * providers/nntp/camel-nntp-types.h: new file. + +2000-10-06 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-utils.c (quoted_encode): Fix so that we don't encode + every single char in the word. Also, do we need a safemask? I + don't see why we would. + (header_encode_string): Don't strip off the last char!! + +2000-10-06 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/Makefile.am (libcamelnntpinclude_HEADERS): add + camel-nntp-grouplist.h + (libcamelnntp_la_SOURCES): add camel-nntp-grouplist.c + + * providers/nntp/camel-nntp-provider.c: add our own hash functions + for nntp urls. + + * providers/nntp/camel-nntp-newsrc.c + (camel_nntp_newsrc_group_is_subscribed): new function. + (camel_nntp_newsrc_subscribe_group): new function. + (camel_nntp_newsrc_unsubscribe_group): new function. + + * providers/nntp/camel-nntp-newsrc.h: add prototypes for + _group_is_subscribed, _subscribe_group, and _unsubscribe_group. + + * providers/nntp/camel-nntp-store.c + (build_folder_info_from_grouplist): new function. + (nntp_store_get_folder_info): add subscribed_only_parameter. if + it's FALSE, load the grouplist and call + build_folder_info_from_grouplist. + (nntp_store_folder_subscribed): implement. + (nntp_store_subscribe_folder): implement. + (nntp_store_unsubscribe_folder): implement. + (camel_nntp_store_init): add CAMEL_STORE_SUBSCRIPTIONS to the + store's flags. + + * providers/mh/camel-mh-store.c (get_folder_info): add + subscribed_only parameter. + + * providers/mbox/camel-mbox-store.c (get_folder_info): add + subscribed_only parameter. + + * providers/imap/camel-imap-store.c (get_folder_info): add + subscribed_only parameter. + + * camel-store.c (camel_store_supports_subscriptions): new function. + (camel_store_folder_subscribed): new function. + (camel_store_subscribe_folder): new function. + (camel_store_unsubscribe_folder): new function. + + * camel-store.h: add prototypes and virtual functions for the + subscribe implementation. also, add a subscribed_only argument to + camel_store_get_folder_info. + +2000-10-05 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-utils.c (header_address_list_format_append): Encode + the name part of the address and don't quote the name. + (header_decode_text): Rewrote from scratch, the old code was badly + broken. + +2000-10-05 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-message.c (camel_mime_message_set_reply_to): Use the + camel_address_encode function again. + (camel_mime_message_set_from): Same. + +2000-10-05 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-utils.c (quoted_encode_step): Modified to not encode + space chars in the middle of a line. + (isblank): New macro if we're not on a system with the GNU isblank + extension. + + * camel-mime-message.c (camel_mime_message_set_from): Reversed my + changes, don't header_encode_phrase - it generates broken headers. + (camel_mime_message_set_reply_to): Same. + +2000-10-04 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-utils.c (camel_nntp_get_headers): + revert to old method (only use XOVER if OVER is supported.) + + * providers/nntp/camel-nntp-store.c + (camel_nntp_store_get_overview_fmt): handle the case where the + OVER extension isn't listed but LIST OVERVIEW.FMT works (again, + INN 2.2). enable the OVER extension in this case. + +2000-10-04 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): return a + gboolean so we can tell if this command worked. we can't key off + the OVER extension being present because at least one server (INN + 2.2) doesn't report the OVER extension but implements the XOVER + command. This could of course just be because I'm a loser for + thinking they were related in the first place. + (camel_nntp_get_headers): always try XOVER first, and if it fails + revert to the slow method. + +2000-10-04 Dan Winship <danw@helixcode.com> + + * providers/mbox/camel-mbox-store.c (get_folder): Fix a case where + a variable was free'd and then possibly used in an error message. + +2000-10-04 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-provider.c + (camel_provider_module_init): news: -> nntp:. + +2000-10-04 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-store.c (nntp_store_get_folder_info): + use "nntp:" instead of "news:" since "news:" urls aren't supposed + to have host/user/port info in them. also, if there's a user + defined in the url, put it in the urls for our folders. + +2000-10-04 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-auth.c (camel_nntp_auth_authenticate): + borrow some code from the imap provider to query the user for + their password, and pass the user/passwd to nntp. be extra + paranoid and zero out the password before freeing it. + + * providers/nntp/camel-nntp-store.c (camel_nntp_store_init): add + ALLOW_USER/ALLOW_PASSWORD/ALLOW_AUTH to the url flags. + (nntp_store_query_auth_types_generic): return our list of + auth_types. + (nntp_store_query_auth_types_connected): broken, return same as in + query_auth_types_generic. + +2000-10-04 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-store.c (imap_connect): IMAP4 + (pre-rev1) doesn't support the 'LIST "" ""' idiom, so don't use + it. Just assume the dir_sep is '/'. Shrug. + +2000-10-04 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-message.c (camel_mime_message_set_reply_to): Use + header_encode_phrase instead. + (camel_mime_message_set_from): Same. + +2000-10-04 Not Zed <NotZed@HelixCode.com> + + * camel-mime-utils.c (header_content_type_is): Handle the case + where ct != NULL, but type and subtype are, and also match that + against text/plain. + + * camel-folder-summary.c: Bump summary file version. + (message_info_save): Save the size from the messageinfo. + (message_info_load): Load the size from the summary file. + (message_info_load): Fixed up the time_t saving/loading. There + was a reason the warning was left there ... obviously nobody could + read the comment "/* warnings, leave them here */", why do i even + bother. + (camel_folder_summary_decode_time_t): Decode a time_t value from + the summary file. + (camel_folder_summary_encode_time_t): Encode a time_t value to the + summary file. + +2000-10-03 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-command.c (camel_imap_command): Quote + the mailbox name when sending a SELECT request otherwise mailboxes + with spaces in their names will cause problems. + + * camel-mime-message.c (camel_mime_message_set_reply_to): encode + before setting. + (camel_mime_message_set_from): Same. + +2000-10-03 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-command.c: New file containing + camel_imap_command and friends. Major camel_imap_command rewrite + to remove duplicated code, make the parsing of literals be + more safe/correct, deal with RECENT/EXPUNGE responses more + consistently, and make it possible to implement the AUTHENTICATE + command. + + * providers/imap/camel-imap-utils.c (imap_parse_nstring): New + function, to parse an IMAP "nstring". + + * providers/imap/camel-imap-store.c: Move command stuff to + camel-imap-command.c. Update for camel_imap_command changes. + + * providers/imap/camel-imap-folder.c: Update for + camel_imap_command changes. + (imap_append_message): CRLF filter the message before sending it. + + * providers/imap/Makefile.am: Add camel-imap-command.[ch], remove + camel-imap-stream.[ch] for now. + +2000-10-02 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-message.c (camel_mime_message_has_8bit_parts): New + convenience function to determine if there are any 8bit mime parts + in a mime message. + (camel_mime_message_encode_8bit_parts): New convenience function + to recursively reencode all 8bit mime parts to either + quoted-printable or base64 depending on which would be the best + encoding for that part. + + * providers/smtp/camel-smtp-transport.c (smtp_data): If the mime + message contains 8bit parts and the server doesn't support 8bit + transfers, reencode those parts before proceding with the send. + (smtp_mail): If the mime message contains 8bit parts and the + server supports the 8BITMIME extension to SMTP, notify the server + that we'll be sending it 8bit mime parts. + (_send_to): Find out if the message contains 8bit parts. + +2000-10-02 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c (_send_to): Use the + CamelInternetAddress parser. + (smtp_get_email_addr_from_text): deprecated. + +2000-10-02 Dan Winship <danw@helixcode.com> + + * camel-provider.h: Remove default_ports. + + * camel-remote-store.c (remote_connect): Get default_port from + CamelRemoteStore rather than CamelProvider. + + * providers/{imap,nntp,pop3}/camel-*-store.c: Initialize + CamelRemoteStore::default_port + + * providers/*/camel-*-provider.c: Remove default_ports. + +2000-10-02 Dan Winship <danw@helixcode.com> + + * camel-folder.[ch]: Remove + camel_folder_{get,free}_subfolder_info, as we want to be able to + scan the whole subfolder tree without having to open any folders, + so this needs to be in CamelStore. Remove can_hold_folders and + can_hold_messages flags; things that don't hold messages are no + longer considered CamelFolders. + + * camel-folder-summary.[ch]: Remove CamelFolderInfo stuff. + + * camel-store.[ch]: Add camel_store_{get,free}_folder_info, as + well as camel_store_free_folder_info_full and ..._nop for default + implementations, and camel_folder_info_free and + camel_folder_info_build as convenience functions. Turn + CamelFolderInfo into a tree structure and also add an "url" + member. + + * providers/*/camel-*-folder.c: Remove subfolder_info and can_hold + stuff. + * providers/*/camel-*-store.c: Add folder_info stuff. + + * providers/imap/camel-imap-folder.c (imap_summary_free): Free the + summary elements with camel_message_info_free, not + camel_folder_info_free. Oops. + + * providers/imap/camel-imap-utils.c: const poison + +2000-09-28 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c: Fixed some memory leaks. + (camel_smtp_transport_init): Initialize supports_8bit to FALSE. + (smtp_helo): If server supports 8bit, set supports_8bit to TRUE. + + * camel-transport.h (struct _CamelTransport): Added variable + gboolean supports_8bit (we'll need this eventually? - see bugzilla + bug #53) + + * providers/smtp/camel-smtp-transport.c + (smtp_get_email_addr_from_text): Ugh, no wonder people were + getting illegal seek warnings *sigh*. I guess I can only blame + myself for this one though :-( + +2000-09-28 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c (_send_to): Don't send the + recipient data through smtp_get_email_addr_from_text - this is a + complete waste. In fact, we don't want to have to use that + function ever. + + * camel-internet-address.c, camel-address.c: Added some gtk-doc + comments. + +2000-09-28 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-utils.c (header_encode_string): Make sure to add the + space char after an encoded word when the encoding is iso-8859-1. + +2000-09-28 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_message): When + getting a literal string response, don't include the \r\n after + the closing } (as in: "... {798}\r\n...") + + * providers/imap/camel-imap-stream.c (stream_read): Same. + +2000-09-28 Not Zed <NotZed@HelixCode.com> + + * camel-mime-utils.c (header_fold): New function to fold headers. + +2000-09-27 Not Zed <NotZed@HelixCode.com> + + * camel-mime-parser.c (folder_scan_header): If we had an empty + header, then it must be end of the headers too. + (folder_scan_init): No we dont need to init the outbuf with a nul + terminator. + + * camel-folder-summary.c (camel_folder_summary_set_uid): New + function to reset the uid to a higher value. + + * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync): + "something failed (yo!)" what sort of crap is this? Fixed all the + indenting again, what wanker keeps running stuff through indent? + (message_info_new): Check the uid we loaded off the disk, if it + existed already, assign a new one. If it didn't then make sure + the nextuid is higher. + + * camel-charset-map.c: New file, used to build a large unicode + decoding mapping table, and use it to determine what is the + lowest charset a given word can be encoded with. Uses tables from + libunicode's source. + + * camel-internet-address.c (internet_encode): Use + header_phrase_encode to properly encode the fullname, as required. + refixed indenting. Who keeps doing that? + (camel_internet_address_find_address): Changed fatal return/warnings + into assertions. + + * camel-mime-utils.c (header_raw_append_parse): Check : explicitly + (removed from is_fieldname() macro). + (camel_mime_special_table): Changed to short, so we can represent + more bit types. + (quoted_encode): Take a mask of the safe chars for this encoding. + (header_address_decode): Removed a #warning that makes no sense + anymore. + (header_decode_date): Fixed the 'broken date' parser code, if it + ever decoded it it just threw away the result. + (header_encode_string): Use better charset matching for encoding + strings as well. + +2000-08-31 Not Zed <NotZed@HelixCode.com> + + * providers/mh/camel-mh-summary.c (camel_mh_summary_sync): Save + the index if we do a sync. + (camel_mh_summary_check): Save the index here too. Probably. + +2000-09-27 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-store.c (camel_imap_command_extended): + Return untagged data in a GPtrArray rather than a string, since it + saves processing time and is much easier to deal with for several + commands. Update for camel_imap_folder_changed change. + (camel_imap_fetch_command): Update for camel_imap_folder_changed + change. + (imap_connect, imap_folder_exists): Update for + camel_imap_command_extended change. + + * providers/imap/camel-imap-folder.c + (imap_get_message_count_internal, + imap_get_subfolder_info_internal, imap_search_by_expression): + Update for camel_imap_command_extended change. + + (imap_get_summary_internal, imap_get_message_info_internal): Use + camel_imap_fetch_command here now to get around the + camel_imap_command_extended change. + + (camel_imap_folder_changed): turn expunged into a GArray of ints + rather than a GPtrArray of strings representing ints. + +2000-09-26 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c + (imap_get_message_count_internal): Quote the folder name as it may + contain spaces. + (imap_get_subfolder_info_internal): Same. + + * providers/imap/camel-imap-utils.c (imap_parse_list_response): Do + proper unquoting for folder names. + (func_get_current_date): Implemented. + + * providers/imap/camel-imap-store.c + (imap_folder_exists): Quote the folder name as it may have spaces. + (imap_create): Same. + (check_current_folder): Same. + +2000-09-22 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-folder.c + (imap_get_subfolder_info_internal): The root folder's name is "", + not the namespace. + (camel_imap_folder_new): constify folder_name. + + * providers/imap/camel-imap-store.c (get_folder): Create the + folder with folder_name, not folder_path. + (camel_imap_command_preliminary): Don't free cmdid here. + +2000-09-21 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-utils.c (imap_create_flag_list): New + function to convert Camel flags to an IMAP flag_list. + (imap_parse_flag_list): Contrariwise. + + * providers/imap/camel-imap-store.c (camel_imap_command_*): Make + the @ret arg actually optional, as (mostly) documented. + (various): Don't pass "&result" to camel_imap_command_* if we're + just going to immediately free it. Don't record status if we're + not going to look at it. + + * providers/imap/camel-imap-folder.c: Likewise. + (imap_summary_free): Use camel_folder_info_free. + (imap_sync): Use imap_create_flag_list. Clear + CAMEL_MESSAGE_FOLDER_FLAGGED after syncing so we don't keep + re-syncing. + (imap_append_message): Use imap_create_flag_list. Don't leak the + memstream if the append fails. + (imap_move_message_to): Use camel_folder_delete_message rather + than doing it by hand. + (imap_get_summary_internal, imap_get_message_info_internal): Use + imap_parse_flag_list and header_raw_clear. + (camel_imap_folder_changed): Use camel_message_info_free. + +2000-09-21 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-store.c (get_folder_name): INBOX is + case-insensitive. + (get_root_folder_name): Make the root folder "" rather than "/". + (get_folder): Update for root folder name change. + (camel_imap_store_get_toplevel_dir): Removed. (Unused, unneeded.) + (camel_imap_store_folder_path): New function to turn a Camel + folder name into the corresponding namespaced IMAP path. + (imap_folder_exists): Make this take a store and a path rather + than a folder. + (imap_create): Likewise + (get_folder): Update for camel_imap_store_folder_path and other + changes. + (check_current_folder): Likewise. + + * providers/imap/camel-imap-folder.c: Change a bunch of CamelStore + variables to CamelImapStore (and add a few more) to prevent excess + gratuitous casting. Use camel_imap_store_folder_path where + appropriate. + (camel_imap_folder_new): Update for root folder name change. + +2000-09-19 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c (smtp_data): Use the + linewrap filter to achieve full RFC0821 compliance. + + * camel-mime-filter-linewrap.[c,h]: New mime-filter to word-wrap. + +2000-09-19 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-internet-address.c (internet_encode): When encoding the + internet address, quote the name as the name may have commas or + any other token which may later confuse our address parser. + +2000-09-19 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-folder.c + (imap_get_subfolder_info_internal): Fix the case where INBOX + isn't returned in the folder listing. + +2000-09-19 Dan Winship <danw@helixcode.com> + + * camel-folder.c: (init): Removed + (camel_folder_init, camel_folder_construct): New object init + function and public object constructor to replace the old init + method in a more Gtk-like fashion. + + (get_parent_folder, camel_folder_get_parent_folder): Removed. No + CamelFolder subclass was ever setting the parent_folder member, no + code has ever needed to look at it, and fixing it would actually + be pretty hard. + + (get_subfolder_info, camel_folder_get_subfolder_info): Renamed + from ..._names. Deals in CamelFolderInfo now. + (free_subfolder_info, camel_folder_free_subfolder_info): Likewise. + + (get_subfolder, camel_folder_get_subfolder): Removed. + CamelFolderInfo contains the subfolder's full name, so this is + unnecessary now, and removing it lets us get rid of the + CamelFolder separator member, which is needed for the default + implementation of this function, but not otherwise needed for most + providers. + + Also, lots of code style fixes. + + * providers/*: Update CamelFolder subclasses for changes, although + none of them fill in the message counts in the CamelFolderInfo + yet. + +2000-09-18 Christopher James Lahey <clahey@helixcode.com> + + * camel-folder-search.c, camel-folder-search.h, + camel-remote-store.c, providers/imap/camel-imap-folder.c, + providers/imap/camel-imap-store.c: Fixed the #include lines to + deal properly with gal. + +2000-09-17 Dan Winship <danw@helixcode.com> + + * camel-folder-summary.h: update CamelFolderInfo + * camel-folder-summary.c (camel_folder_info_free): New function to + free the contents of a CamelFolderInfo + +2000-09-15 Dan Winship <danw@helixcode.com> + + * camel.c (camel_init): Set camel_verbose_debug to TRUE if + CAMEL_VERBOSE_DEBUG is set in the environment. + + * camel-remote-store.c (remote_send_line, remote_recv_line): only + log if camel_verbose_debug is TRUE. + +2000-09-14 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (get_folder): Don't use + dir_sep as top-level directory, use "/". + + * providers/imap/camel-imap-folder.c (imap_expunge): Get rid of + unused variable. + +2000-09-13 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_expunge): Don't look at + the response of the command. camel_imap_command_extended() + processes EXPUNGE responses itself, so if we do it here too we + remove twice as many summary items as we should. + +2000-09-13 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (imap_folder_exists): Rewrote + to take a third argument (gboolean *selectable) so that we can + find out if the folder is selectable or not as we look to see if + it exists. Also, don't use EXAMINE because that will not work on + non-selectable folders, so use LIST instead. + (get_folder): Check to see if the folder exists even vefore + calling imap_create as this will save time. If the folder does + exist, find out if it's selectable. Moved the call to refresh_info + here. + + * providers/imap/camel-imap-folder.c (imap_get_uids): Check for a + NULL summary. + (camel_imap_folder_new): Don't call refresh_info here - call it in + get_folder() because we don't know if this folder even exists on + the server yet! And even if it does, we don't know if it can hold + messages or not yet. + +2000-09-12 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-parser.c (folder_scan_step): Make sure *datalength is + > 0 before calling camel_mime_filter_filter otherwise we will get + a segfault if the filter calls iconv(). + +2000-09-08 Christopher James Lahey <clahey@helixcode.com> + + * providers/nntp/camel-nntp-auth.c, + providers/nntp/camel-nntp-auth.h: Fixed a warning. + +2000-09-07 Dan Winship <danw@helixcode.com> + + * camel-session.c (camel_session_get_storage_path): Make this not + leak. + +2000-09-07 Dan Winship <danw@helixcode.com> + + * camel-session.c (camel_session_new): Make this take a path to a + directory that Camel can use for its own nefarious purposes. + (camel_session_get_storage_path): New function to return a path + that a service can use for its own nefarious sub-purposes. + + * camel-service.c (camel_service_get_path): New method (and + useful default implementation) to get a (relative) pathname + corresponding to the service. + +2000-09-06 Dan Winship <danw@helixcode.com> + + * providers/pop3/camel-pop3-store.c (connect_to_server): Make KPOP + work again. + +2000-09-06 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-message.c (camel_mime_message_get_received_date): + Implemented (someone added these to camel-mime-message.h but never + implemented them!!) - though it may not be right. + (camel_mime_message_get_sent_date): Same. + +2000-09-05 Dan Winship <danw@helixcode.com> + + * camel-mime-part.c (camel_mime_part_get_filename): If a MIME part + has no Content-Disposition, but does have a "name" on the + Content-Type, return that as the filename. + (process_header): strstrip the Content-Description + +2000-09-05 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-utils.c (get_OVER_headers): care about + response code. + (get_HEAD_headers): same. + (camel_nntp_get_headers): same. + + * providers/nntp/camel-nntp-store.h: get rid of + CAMEL_NNTP_OK/ERR/FAIL. + + * providers/nntp/camel-nntp-store.c + (camel_nntp_store_get_extensions): take CamelException arg and + pass along to camel_nntp_command. + (camel_nntp_store_get_overview_fmt): same. + (nntp_store_connect): convert to using constants in + camel-nntp-resp-codes.h + (nntp_store_get_folder): make use of camel_nntp_folder_new. + (camel_nntp_command_send_recv): new function to deal with auth + challenge. + (camel_nntp_command): split out most of this function into + camel_nntp_command_send_recv. also, return the actual response + code instead of CAMEL_NNTP_OK/ERR/FAIL. + + * providers/nntp/camel-nntp-resp-codes.h: new file. + + * providers/nntp/camel-nntp-folder.h: prototype for + camel_nntp_folder_new. + + * providers/nntp/camel-nntp-folder.c (camel_nntp_folder_new): new + convenience function. + (nntp_folder_get_message): care more about the actual response + code. + + * providers/nntp/Makefile.am (libcamelnntp_la_SOURCES): add + camel-nntp-auth.c. + (libcamelnntpinclude_HEADERS): add camel-nntp-auth.h. + + * providers/nntp/camel-nntp-auth.h: new file. + + * providers/nntp/camel-nntp-auth.c: new file. + +2000-09-05 Peter Williams <peterw@helixcode.com> + + * providers/imap/camel-imap-store.c (imap_folder_exists): Don't free the + result on error; the exception will have the relevant info. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Check for + exceptions here. + + * providers/imap/camel-imap-store.c (imap_connect): Check the exception + on the refresh_folders call. + + * providers/imap/camel-imap-store.h: Clean up some now-unused fields. + + * camel.c (camel_init): Call unicode_init again, now that libunicode + will not initialize itself twice. + +2000-09-02 Lauris Kaplinski <lauris@helixcode.com> + + * camel-folder-search (search_header_contains): Use e_utf8_strstrcase + +2000-09-01 Christopher James Lahey <clahey@helixcode.com> + + * providers/imap/camel-imap-utils.c: Removed some unused + functions. + +2000-09-01 Peter Williams <peterw@helixcode.com> + + * providers/nntp/camel-nntp-store.c (camel_nntp_command): Initialize + the statically-allocated CamelException so that it doesn't contain + junk data that camel_exception_set() may try to free. + (camel_nntp_store_get_extensions): Same. + (camel_nntp_store_get_overview_fmt): Same. + + * providers/pop3/camel-pop3-store.c (camel_pop3_command): Typo + fix (if (*ret) -> if (ret)). + + * providers/pop3/camel-pop3-store.c (pop3_connect): Set the + port # back to what was specified ASAP, so that the hash of + the URL doesn't change (which causes a failure in + service_cache_remove that leads to a segfault). + + * providers/imap/camel-imap-store.c (imap_connect): Clear the + exception after a failed LOGIN so that it doesn't pass through + to the upper level and make mail think that the login failed. + + * providers/pop3/camel-pop3-store.c (pop3_connect): As above. + +2000-08-31 Peter Williams <peterw@helixcode.com> + + * providers/pop3/camel-pop3-store.c (camel_pop3_store_get_type): + Implement POP3 with the CamelRemoteStore now. + (connect_to_server): Hack this a bit to get KPOP to work. Obey + the new connection semantics of the remote store (implicitly). + (query_auth_types_connected): Clear exceptions after attempts + to connect; the code at the bottom will catch hard errors. + Use camel_service_connect. + (camel_pop3_command): Take a CamelException; now, when an error + occurs, ret is set to NULL and the exception passes back the + appropriate information. + (pop3_get_response): Same as above. + (pop3_try_authenticate): Give camel_pop3_command its exception + and handle it properly. + (pop3_connect): Call the parent classfuncs. Don't disconnect + on error (done for us). + + * providers/pop3/camel-pop3-folder.c: Obey the camel_pop3_command + semantics. + + * camel-remote-store.c (remote_query_auth_types_connected): Don't + warn; just return NULL. + (remote_query_auth_types_generic): Same. + (remote_send_string): Filter out passwords in debugging output. + + * providers/pop3/camel-pop3-store.c (camel_pop3_store_init): Also + set the ALLOW_AUTH flag. + + * providers/imap/camel-imap-store.c (camel_imap_store_init): Same. + +2000-08-31 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-store.c (camel_nntp_store_class_init): + remove get_folder_name. + (nntp_store_get_folder_name): remove. + +2000-08-31 Lauris Kaplinski <lauris@helixcode.com> + + * camel-mime-part.c (write_to-stream): Use filter only if we have one + +2000-08-31 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-utils.c (get_OVER_headers): use + camel_remote_store_recv_line. + + * providers/nntp/camel-nntp-folder.c (nntp_folder_get_message): + use camel_remote_store_recv_line to build message. also, free our + buffer so we don't leak like mad. + + * providers/nntp/camel-nntp-store.c: + (camel_nntp_store_get_additional_data) remove. + (camel_nntp_store_get_extensions): use + camel_remote_store_recv_line. + (camel_nntp_store_get_overview_fmt): same. also, don't rely on + _get_additional_data anymore since it's easier to parse without. + (camel_nntp_command): use camel_remote_store_send_string and + camel_remote_store_recv_line. + + * providers/nntp/camel-nntp-store.h: CamelRemoteStore is the + parent class now. remove istream/ostream since CamelRemoteStore + takes care of that for us. also remove the prototype for + camel_nntp_store_get_additional_data. + + * providers/nntp/camel-nntp-newsrc.c (camel_nntp_newsrc_write): + make sure to clear dirty bit. + (camel_nntp_newsrc_read_for_server): don't worry about continually + trying to open the file - if it fails we just return an + unpopulated .newsrc file. + +2000-08-31 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-newsrc.c + (camel_nntp_newsrc_read_for_server): make this a bit more robust. + try to create an empty .newsrc file for the server if we can't + open it for reading. also, don't allocate everything until we've + opened the file. + + * providers/nntp/camel-nntp-utils.c (get_OVER_headers): make use + of our overview field indices. + (camel_nntp_get_headers): only call get_OVER_headers if the + extension is present. warn if it's not - since get_HEAD_headers + needs work before it works. + + * providers/nntp/camel-nntp-store.c + (camel_nntp_store_get_extensions): new function - query the server + for it's extensions. + (camel_nntp_store_get_overview_fmt): new function - query the + server for the overview format and build our table of the indices + we care about. support the "full" suffix on fields. + (nntp_store_connect): call camel_nntp_store_get_extensions and + camel_nntp_store_get_overview_fmt. + + * providers/nntp/camel-nntp-store.h: add codes for extensions + found on news.mozilla.org. only one that we care about is OVER. + also, add CamelNNTPOverField and an enum of the overview fields + that we care about. + +2000-08-31 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-utils.c (imap_translate_sexp): + Reimplemented. It should now work correctly for most possible + VFolder rules. + +2000-08-31 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (camel_imap_command_extended): + Don't save any exceptions caused by camel_imap_folder_changed + (camel_imap_fetch_command): Same. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): + Using a new way of calculating the first recent message that seems + more accurate. Also added code to make sure we don't accidently + add a duplicate summary. + +2000-08-31 Not Zed <NotZed@HelixCode.com> + + * camel-mime-part.c (write_to_stream): Use the proper type + checking function to check for text types. + (write_to_stream): If we have a charset on a text type that + isn't us-ascii or utf-8, then we need to reencode it, so add a + filter to do that too. + (write_to_stream): Fix some warnings/use the right constructor, + oops. + (write_to_stream): Rearrange the logic so it always does charset + conversion, and not just if we have a qp/base64 block. + + * camel-mime-utils.c (append_latin1): New function - even though + its broken, we'll assume mailers send latin1 headers instead of + us-ascii. We just have to encode high chars into utf-8. + (header_decode_text): Call append_latin1 for appending unencoded + text segments. + (append_latin1): Do an additional mask for account for c's + undefined behaviour for sign extension whilst shifting right. + +2000-08-30 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (camel_imap_fetch_command): + Rewrote to ignore strings that look like server responses until it + is sure that it has finished reading the literal string response. + +2000-08-30 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-remote-store.c (remote_send_string): Don't wrap printed + strings in quotes, makes things messy + + * providers/imap/camel-imap-folder.c (imap_get_message): Updated + to use the camel_imap_fetch_command + + * providers/imap/camel-imap-stream.c (stream_read): Updated to use + camel_imap_fetch_command + + * providers/imap/camel-imap-store.c (camel_imap_command_extended): + No longer handles FETCH requests so no longer needs to be + concerned with checking to make sure that server responses are + valid (they have to be). + (camel_imap_fetch_command): New convenience function that handles + all FETCH requests + +2000-08-30 Peter Williams <peterw@helixcode.com> + + * camel-remote-store.c (remote_connect): Unify with remote_post_connect. + (remote_disconnect): Unify with remote_pre_disconnect. + (camel_remote_store_class_init): Don't use the post_connect and + pre_disconnect classfuncs anymore ; they weren't especially useful. + + * providers/imap/camel-imap-store.c (imap_connect): Use this again + instead of implementing post_connect. + (imap_disconnect): Analogous to above. + + * camel-session.c (camel_session_get_service_connected): New function. + Like camel_session_get_service() but also connects to the service + if needed. camel_session_get_{store,transport} (defined in the header) + used this now, preventing annoying when-to-connect problems. + + * camel-service.c (camel_service_new): Revert to the old behavior + of not connecting until told to do so. Otherwise doing auth + testing correctly is really hard. + (camel_service_connect): Fix behavior here (set the connected + flag). + (camel_service_disconnect): Unset the connected flag. + +2000-08-30 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c: General cleanup / moving + stuff around to make things easier to follow. + +2000-08-30 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-remote-store.c: Prevent exceptions from being overwritten + + * providers/imap/camel-imap-folder.c (imap_expunge): Beautified + (imap_get_subfolder_names_internal): Removed old code as the + replacement code has now been tested and proven to work + +2000-08-29 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-utils.c: Removed old code that will + never be needed again + + * providers/imap/camel-imap-store.c: Removed old code for + try_connect - will never need this code + (slurp_response): Update to make sure we aren't falsely detecting + EXPUNGE flags + +2000-08-29 Peter Williams <peterw@helixcode.com> + + * camel-service.c (camel_service_connect): Uncomment this. + (camel_service_disconnect): Same. + + * camel-remote-store.[ch]: New files. Abstract remote storages + (IMAP, POP3, NNTP) and hides the lower-level networky stuff. + + * camel-service.c (camel_service_new): Take an extra argument, the + provider that created us, cause it's useful. + (camel_service_finalize): Unref our new provider member. + + * camel-session.c (camel_session_get_service): Pass the proper number of + arguments to camel_service_new(). + + * camel-imap-store.c: Massive update: 1) use the CamelRemoteService to + make our life Very Easy (TM). 2) Change the semantics of all + camel_imap_command* functions to take exceptions, centralize tons of + duplicate code, and use the handy RemoteStore utility functions + + * camel-imap-folder.c: Use the new semantics of camel_imap_command* + + * camel-imap-stream.c: Same. + +2000-08-29 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (camel_imap_command_extended): + Updated to check for EXPUNGE notifications + + * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): + Updated to account for messages which have been expunged (now + takes a new arg, a GPtrArray of message id's that have been + expunged) + (imap_expunge): Updated (we may want to just use the code in + folder_changed now instead of doing our own summary + expunging...but that can be fixed later) + (imap_append_message): Updated. + (imap_copy_message_to): Updated. + (imap_move_message_to): Updated. + +2000-08-28 Peter Williams <peterw@helixcode.com> + + * camel-folder.c (camel_folder_refresh_info): New member function, + refresh_info, used for rereading folder state after its state has + somehow become unknown. Tries to preserve last-known status of + messages. + + * providers/mbox/camel-mbox-folder.c (mbox_refresh_info): Implement + ::refresh_info (split up ::init) + + * providers/mbox/camel-mbox-store.c (get_folder): Call ::refresh_info. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Call + ::refresh_info once initialized. + (imap_refresh_info): New member function; reads the summary from + the server (used to be in camel_imap_folder_new; split out). + + * providers/imap/camel-imap-store.c (imap_connect): Set + CamelService::connected a little early so that + camel_imap_command won't try to connect while already + connnecting. + (camel_imap_command*): Try to connect if not connected already. + + * providers/pop3/camel-pop3-folder.c (pop3_refresh_info): Same as above. + + * providers/pop3/camel-pop3-folder.c (camel_pop3_folder_new): Same + as above. + + * providers/pop3/camel-pop3-store.c (pop3_connect): Set + CamelService::connected a little early so that + camel_pop3_command won't try to connect while already + connecting + (connect_to_server): Same. + + * providers/nntp/camel-nntp-folder.c (nntp_folder_refresh_info): Same + as above. + +2000-08-28 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_message): Fixed the + hack around quoted string responses - should now handle them + according to the specifications in the RFC + + * providers/imap/camel-imap-stream.c (stream_read): Updated to + match the code currently used in camel-imap-folder.c + +2000-08-28 Ettore Perazzoli <ettore@helixcode.com> + + * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync): + Never ever free `tmpname' as it comes from `alloca()'! + +2000-08-26 Ettore Perazzoli <ettore@helixcode.com> + + * camel-mime-utils.c (header_decode_text): Use `g_free()', not + `free()', to free `decword'. + +2000-08-25 Peter Williams <peterw@helixcode.com> + + * camel.c (camel_init): Don't call unicode_init; code in e-util + will do it, and if unicode_init is called twice, you get an + infinite loop when looking up nonexistant encodings (patch + has been submitted to libunicode's maintainer). + + * camel-provider.h: Add a new field, default_ports, which + helps the configuration code guess about how to make CamelURL's + from providers. + + * providers/*/camel-*-provider.c: Specify default ports. + +2000-08-25 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c + (imap_get_subfolder_names_internal): If the url path is "/" and + the folder path is "/", just LIST "" "*" (this should fix some + cyrus imapd problems). Also, INBOX is case insensitive so use + g_strcasecmp + +2000-08-24 Lauris Kaplinski <lauris@helixcode.com> + + * camel-folder-summary.c (summary_build_content_info): + Use UTF-8 as default + * camel-mime-part-utils.c (simple_data_wrapper_construct_from_parser): + Use UTF-8 as default + * camel-mime-utils.c (rfc2047_decode_word): Use UTF-8 + +2000-08-17 Not Zed <NotZed@HelixCode.com> + + * providers/mh/camel-mh-folder.c (mh_finalize): And here too. + + * providers/mbox/camel-mbox-folder.c (mbox_finalize): Close index + on exit. + +2000-08-23 Dan Winship <danw@helixcode.com> + + * camel-mime-utils.c (header_address_list_format_append): put + commas between addresses. + +2000-08-22 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-folder.c + (imap_protocol_get_summary_specifier): use BODY.PEEK, not BODY, so + we don't set the message \Seen. + +2000-08-22 Christopher James Lahey <clahey@helixcode.com> + + * providers/pop3/camel-pop3-store.c: Fixed a small warning. + +2000-08-22 Peter Williams <peterw@helixcode.com> + + * camel-service.c (camel_service_new): Connect automatically if the + URL is not empty. + (finalize): Disconnect automatically if connected. + (camel_service_query_auth_types): Split into two functions; one to + be called if we're connected to an actual server (_connected), one + to be called if we're just gauging the general authtypes supported + (_generic). + (is_connected): Remove. + + * camel-store.c (camel_store_get_folder): Don't connect explicitly to + the service. + + * providers/nntp/camel-nntp-store.c (query_auth_types_generic): Split + the query_auth_types function. Hook it up in _new. + (finalize): Don't try to disconnect here. + + * providers/pop3/camel-pop3-store.c (query_auth_types_generic): Same. + (finalize): Don't try to disconnect here. + + * providers/imap/camel-imap-store.c (query_auth_types_generic): Same. + (finalize): Don't try to disconnect here. + + * providers/smtp/camel-smtp-transport.c (query_auth_types_generic): Split + the query_auth_types (dummy, in this case) function. Hook it up in _new. + (finalize): Don't try to disconnect here. + +2000-08-21 JP Rosevear <jpr@helixcode.com> + + * providers/nntp/camel-nntp-folder.c (nntp_folder_get_subfolder_names): + Make sure newsrc is not null + (nntp_folder_get_subfolder_names): ditto + + * providers/nntp/camel-nntp-newsrc.c + (camel_nntp_newsrc_get_subscribed_group_names): Programming check + for newsrc == NULL + (camel_nntp_newsrc_get_all_group_names): ditto + (camel_nntp_newsrc_write_to_file): ditto + (camel_nntp_newsrc_write): ditto + +2000-08-21 JP Rosevear <jpr@helixcode.com> + + * providers/nntp/camel-nntp-store.c (camel_nntp_command): + Make sure respbuffer is not null before manipulating it. + If it is null, return CAMEL_NNTP_FAIL and a decent error + message. + +2000-08-18 Peter Williams <peterw@helixcode.com> + + * camel-internet-address.c (internet_encode): If the name is "" we + weren't outputting anything; output the address at least. + +2000-08-16 Peter Williams <peterw@helixcode.com> + + * camel-internet-address.c (internet_encode): Fix a leak when + name = "". It's a single-byte leak, but it's the little things + that count. + + * camel-object.c (camel_type_lock_up): Don't leave the type + system locked when a bad unlock happens. + + * providers/mbox/camel-mbox-store.c (get_folder): Fix a leak. + +2000-08-15 Peter Williams <peterw@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_copy_message_to): Typo fix. + +2000-08-14 Peter Williams <peterw@helixcode.com> + + * camel-folder-search.c (search_get_sent_date): New search function; + returns the time_t when the message was sent. + (search_get_receive_date): Same for when it was received. + (search_get_current_date): Gets the current time for use with the + above two. Is this in the right place? + + * camel-folder-search.h: Add the new functions above to the class. + +2000-08-13 Dan Winship <danw@helixcode.com> + + * providers/nntp/Makefile.am (libcamelnntpinclude_HEADERS): Add + camel-nntp-utils.h + + * providers/imap/camel-imap-folder.c + (imap_get_subfolder_names_internal): do a strcasecmp rather than + just a strcmp when checking if a folder is "INBOX", since it is + a case-insensitive name. + +2000-08-12 Dan Winship <danw@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_summary_internal): + Don't assume the FETCH results will come back in the order they + were requested. + (imap_get_subfolder_names_internal): Add "INBOX" to the list as + g_malloc'ed memory, not a static string. + +2000-08-12 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c + (camel_imap_command_continuation): Now takes a char * parameter + rather than a stream + (camel_imap_command_continuation_with_stream): Same function as + above but takes a stream parameter instead + + * providers/imap/camel-imap-folder.c (imap_append_message): Use + camel_imap_command_continuation_with_stream + +2000-08-12 Dan Winship <danw@helixcode.com> + + * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): New + function to do one round of attempted authentication. + (pop3_connect): Move a bunch of code out into + pop3_try_authenticate and fix some bugs in the edge cases. + +2000-08-12 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (query_auth_types): No longer + calls try_connect() to get authtypes + +2000-08-11 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c + (camel_imap_command_continuation): Changed param order a bit and + fixed some logic + + * providers/imap/camel-imap-folder.c (imap_append_message): Use + the new multi-transactional convenience functions + +2000-08-11 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c + (camel_imap_command_preliminary): New convenience function for + multi-transactional commands (opening request) + (camel_imap_command_continuation): New convenience function for + multi-transactional commands (followup data) + +2000-08-11 Christopher James Lahey <clahey@helixcode.com> + + * providers/mh/camel-mh-folder.c: Fixed a warning. + +2000-08-11 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-folder.c + (camel_nntp_folder_class_init): remove get_name and get_full_name + assignments, since the camel-folder.c implementation does what we + need. + +2000-08-11 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-store.c + (camel_nntp_store_get_toplevel_dir): use g_get_home_dir, since + evolution_dir isn't available in the providers. + +2000-08-11 Peter Williams <peterw@helixcode.com> + + * camel-folder.c (thaw): Fix a bug where the message_changed + signal wasn't being emitted. + +2000-08-11 Not Zed <NotZed@HelixCode.com> + + * providers/mh/camel-mh-folder.c (mh_set_message_user_tag): + Implement. + (mh_get_message_user_tag): Implement. + + * providers/mbox/camel-mbox-folder.c (mbox_get_message_user_tag): + (mbox_set_message_user_tag): Implement. + + * camel-folder.c (move_message_to): Yay so lets fix an already + fixed fix, again. + (copy_message_to): and here too ... update for api change to append(). + And removed another warning. + (camel_folder_set_message_user_tag): Routine to set message tags. + (camel_folder_get_message_user_tag): And accessor. + +2000-08-10 Christopher James Lahey <clahey@helixcode.com> + + * camel-folder-search.c, camel-folder-summary.c, camel-medium.c, + camel-mime-filter-charset.c, camel-mime-filter.c, + camel-mime-filter.h, camel-mime-message.c, camel-mime-parser.c, + camel-mime-part-utils.c, camel-mime-part.c, camel-mime-utils.c, + camel-movemail.c, camel-multipart.c, camel-object.c, + camel-stream-mem.c, providers/mbox/camel-mbox-folder.c, + providers/mbox/camel-mbox-summary.c, + providers/mh/camel-mh-folder.c, + providers/smtp/camel-smtp-transport.c: Fixed some warnings. + +2000-08-11 Not Zed <NotZed@HelixCode.com> + + * providers/vee/camel-vee-folder.c (vee_folder_build_folder): Free + the search properly. + (vee_folder_build): And here too. + +2000-08-10 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): + If we go over the max number of messages, don't keep requesting + new message summaries, just break. + +2000-08-11 Not Zed <NotZed@HelixCode.com> + + * camel-mime-parser.c (folder_scan_header): A better way to + compress leading whitespace. The code is probably invalid anyway, + I dont think it will work across buffer boundaries. + + * providers/mbox/camel-mbox-folder.c (mbox_append_message): And + write out proper format From lines here too. + + * providers/mbox/camel-mbox-summary.c + (camel_mbox_summary_build_from): New function to build a more + compatible mbox "From " line. + (camel_mbox_summary_sync): Write From lines in the proper format. + +2000-08-10 Not Zed <NotZed@HelixCode.com> + + * providers/mh/camel-mh-store.c (get_folder): Remove warnin g. + + * providers/mbox/camel-mbox-store.c (xrename): Kill some warnings + with constification. + + * providers/imap/camel-imap-folder.c (imap_append_message): Fixed + for append api change. Eek this routine seriously wastes memory. + + * providers/mh/camel-mh-folder.c (mh_search_free): Impelemnt. + (mh_append_message): Fix for api change, and include user flags + and tags in new message. + + * providers/vee/camel-vee-folder.c (vee_search_by_expression): Fix + for search api change. + + * camel-folder.c (camel_folder_search_free): New function for + freeing search results. + (search_free): Changed my mind, implement a default that actually + does something. Free as to the old interface. + (camel_folder_append_message): Changed to accept a + camelmessageinfo rather than flags, which just doesn't have enough + info in it. + (copy_message_to): Change for append_message api change. + (move_message_to): Likewise. + + * providers/mbox/camel-mbox-folder.c (mbox_search_free): + Implement. + (mbox_append_message): Fix for api change, and also copy user + flags/tags across to new summary. + + * camel-folder-search.c (search_user_tag): A search expression + that returns the current use flag by name. + (camel_folder_search_free_result): New function to free the result + of a search. + + * camel-folder-summary.c: Bump summary version. + (message_info_new): + (message_info_load): + (message_info_save): + (camel_message_info_dup_to): + (camel_message_info_free): Added support for arbitrary tag/value + pairs (CamelTag's). + (camel_tag_get): + (camel_tag_set): + (camel_tag_list_size): + (camel_tag_list_free): Operations for working with CamelTags. + +2000-08-09 Peter Williams <peterw@helixcode.com> + + * camel-store.c (camel_store_get_folder): Connect beforehand, if + necessary. + + * providers/imap/camel-imap-store.c (camel_imap_store_init): Default + the dir_sep to "/" so that certain functions can safely assume that + dir_sep is valid (at least, nonnull). + +2000-08-09 Ettore Perazzoli <ettore@helixcode.com> + + * providers/nntp/camel-nntp-folder.c + (nntp_folder_set_message_flags): Get rid of an unused variable. + + * providers/nntp/Makefile.am (INCLUDES): Fix includes so that we + don't use installed headers anymore. [I copied this over from the + IMAP provider, that does not seem to have this problem.] + +2000-08-09 Not Zed <NotZed@HelixCode.com> + + * camel-folder-search.c (camel_folder_search_execute_expression): + Reorder search result in summary order if we searched with a + summary. + +2000-08-08 Dan Winship <danw@helixcode.com> + + * camel-uid-cache.c: New code to keep an on-disk cache of what + UIDs have been seen in a folder. + + * camel-provider.h: Add new flags CAMEL_PROVIDER_IS_SOURCE (mail + can arrive in it by non-Camel means) and CAMEL_PROVIDER_IS_STORAGE + (you can work with mail directly without needing to copy it local). + + * providers/*/camel-*-provider.c: Add flags as needed: imap and + mbox are SOURCE and STORAGE. mh and nntp are just STORAGE, pop3 is + just SOURCE. + + * camel-mime-message.c (process_header): Add another subject + g_strstrip that fejj's earlier commit missed. + +2000-08-08 Peter Williams <peterw@helixcode.com> + + * camel-provider.h: Remove some GTK stuff that I missed. + + * providers/imap/camel-imap-store.c (imap_noop): Turn this + back on with the new timeout interface in CamelSession. + + * camel-session.[ch] (camel_session_register_timeout): New + interface for Camel to register timeouts. Basically the + GTK timeout interface is copied. We do this because Camel isn't + allowed to use GTK anymore. + +2000-08-07 Not Zed <NotZed@HelixCode.com> + + * providers/mh/camel-mh-folder.c (mh_append_message): Only retry + another uid if we had a name clash, otherwise fail. + +2000-08-07 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c + (imap_get_subfolder_names_internal): If we are trying to get a + subfolder listing of the root folder, always make sure INBOX is + there... + + * providers/imap/camel-imap-utils.c (imap_parse_list_response): + Check for NIL as a directory separator. + +2000-08-07 Peter Williams <peterw@helixcode.com> + + * providers/nntp/Makefile.am: Reorder the INCLUDES to pull + in the camel headers from the local source tree before + the ones in $(includedir). This was causing compile problems + because the installed, Gtk-based camel-object.h was included + before the uninstall Camel-based one. + +2000-08-07 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-utils.c (imap_translate_sexp): Strip + all \n's from the expression + + * string-utils.c (strip): New convenience function to strip + occurences of a single char from a string + + * camel-mime-message.c (camel_mime_message_set_subject): Do a + g_strstrip on the subject so we can stop getting those annoying + leading spaces + +2000-08-07 Dan Winship <danw@helixcode.com> + + * camel-folder.c (camel_folder_free_deep): Fix this to not require + NULL-termination of the array. + +2000-08-04 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (imap_connect): If we fail to + get a dir_sep, then supply the default of "/". + (get_folder): Undo changes by Peter + +2000-08-04 Peter Williams <peterw@helixcode.com> + + * providers/imap/camel-imap-store.c (get_folder): Prevent a coredump + when get_folder()ing from a store with dir_sep = NULL. + +2000-08-04 Peter Williams <peterw@helixcode.com> + + * camel-store.h: Include camel-object.h. Ettore said this wasn't + compiling. + +2000-08-04 Not Zed <NotZed@HelixCode.com> + + * camel-url.c (camel_url_set_protocol): + (camel_url_set_host): + (camel_url_set_path): + (camel_url_set_port): Url editing functions. + +2000-08-04 Dan Winship <danw@helixcode.com> + + * providers/pop3/camel-pop3-folder.c (pop3_set_message_flags): + (pop3_sync): Indexes into the flags array are message_number minus + 1, not just message_number. + + * providers/pop3/camel-pop3-store.c: add a debugging macro for + doing protocol tracing. + +2000-08-03 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Only + call imap_get_summary_internal if the folder can hold messages + + * providers/nntp/camel-nntp-provider.c (camel_provider_module_init): + Initialize the service_cache for the news/nntp providers + +2000-08-03 Peter Williams <peterw@helixcode.com> + + * providers/nntp/Makefile.am (INCLUDES): Add -I$(top_srcdir) to + pull in libibex/ibex.h + +2000-08-02 Not Zed <NotZed@HelixCode.com> + + * providers/mh/camel-mh-summary.c (camel_mh_summary_sync): Expunge + from the end, so the index isn't messed up when you remove a + message. + + * providers/mh/camel-mh-folder.c (mh_append_message): Fix a bug + where it would never open an output file/uid. + + * providers/mbox/camel-mbox-store.c (rename_folder): + Implementation for mbox as well. + + * camel-store.c (camel_store_rename_folder): New method to rename folders. + (rename_folder): Default implementation. + + * providers/mh/camel-mh-store.c (delete_folder): Implement this. + (rename_folder): Implement a rename operation. + +2000-08-02 Dan Winship <danw@helixcode.com> + + * providers/MH: Kill this. It doesn't have any code to do anything + the new mh provider doesn't do better. + + * providers/Makefile.am: Remove reference to MH subdir, and + promote nntp to fully-supported status, since it does compile and + all. + + * camel-mime-message.c (camel_mime_message_set_subject): Trim + trailing space from the subject. I've now seen replies from two + different people that tricked the threading code by (a) not having + References/In-Reply-To, and (b) adding an extra space to the end + of the subject line so the subject-based threading fails too. Who + writes these broken mailers anyway? + +2000-08-01 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c (smtp_helo): When forced + to use the IP, place it in square brackets. + + * providers/imap/camel-imap-utils.c (imap_translate_sexp): New and + improved sexp parser. An honest try at using e-sexp is wrapped in + a #ifdef at the bottom of the file but is currently not used + + * providers/imap/camel-imap-folder.c (imap_search_by_expression): + We want to do a UID SEARCH so we get UIDs back instead of sequence + numbers + +2000-08-01 Not Zed <NotZed@HelixCode.com> + + * providers/mh: New mh provider implementation. + + * providers/Makefile.am (SUBDIRS): Added mh provider. + +2000-07-31 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_message_info_internal): + Some IMAP servers don't wrap the UID in ()'s so don't depend on that + (imap_get_summary_internal): Same + + * providers/imap/camel-imap-utils.c (free_sexp_node): Oops, forgot to + free node->function - not good. + +2000-07-31 Peter Williams <peterw@helixcode.com> + + * providers/vee/camel-vee-folder.c (vee_search_by_expression): Add + a NULL to the matches pointer array so that g_strfreev knows where + the end is. + +2000-07-31 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-utils.c (imap_translate_sexp): New + convenience function to translate a Camel sexp into the equivalent + IMAP sexp. + + * providers/imap/camel-imap-store.c: More places now use + imap_next_word + + * providers/imap/camel-imap-folder.c (imap_search_by_expression): + Implemented initial version (this may or may not work quite right) + +2000-07-28 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_expunge): Make sure + the third word/token (whatever) is "EXPUNGE" and not something + else like "EXISTS" or "RECENT". When removing the message from + the summary also make sure to free that data to avoid leakage. + Also make sure to subtract 1 from the 'id' since IMAP starts + at 1 and our summary starts at 0 :-) + +2000-07-28 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (camel_imap_status): Cleaned + up a bit, now uses imap_next_word() + (camel_imap_command_extended): Now uses imap_next_word(). When + checking for RECENT, allow the first digit of the recent-count + be between 0 and 9 inclusive instead of exclusive. + + * providers/imap/camel-imap-folder.c (imap_expunge): Optimized. + No longer will it need to reload the summary as it now instead + removes the appropriate message summaries from the cache. + (camel_imap_folder_changed): If recent == 0 then return. If + recent < 0 then just emit the folder_changed signal, don't reload + summaries. + +2000-07-28 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c + (imap_get_message_count_internal): Get message count when STATUS + is not available. + (imap_init): folder->has_search_capability is required for IMAP so + should always be set to TRUE (is currently being set to FALSE as + I've not yet implemented SEARCH support). + (camel_imap_folder_changed): Seem to have fixed my optimization + hack + +2000-07-28 Jon K Hellan <hellan@acm.org> + + * providers/imap/camel-imap-store.h (CamelImapServerLevel): New + enum. + (CamelImapStore): Added server_level and has_status_capability + members. + + * providers/imap/camel-imap-store.c (imap_connect): Detect + IMAP4REV1, IMAP4 and STATUS in capability response. + + * providers/imap/camel-imap-folder.c + (imap_get_message_count_internal): Use STATUS only if server + supports it. TODO: Get message count when STATUS not supported. + (imap_get_message, imap_get_summary_internal, + imap_get_message_info_internal): Handle IMAP4 as well. + (imap_protocol_get_summary_specifier): New function: Make a data + item specifier for the header lines we need, appropriate to the + server level. + +2000-07-27 Peter Williams <peterw@helixcode.com> + + * camel-mime-utils.c (header_decode_lwsp): More + checks for end of string. + + * providers/imap/camel-imap-store.c: + (imap_command_extended): Free the elements of our + array (huge mem leak) + + * providers/imap/camel-imap-folder.c: + (summary_get_internal): Same as above. + +2000-07-27 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): + Fixed my routine to only fetch new headers, my IDs were off by 1 + on the high end, so when it would fetch the last newly arrived + message it would fail and end up fetching all of the summaries + because of the corruption. + +2000-07-27 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-url.c (camel_url_to_string): If the path doesn't begin + with a / and there is a host, prepend a / to the path. + +2000-07-27 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/Makefile.am: Added camel-imap-utils.[c,h] + + * providers/imap/camel-imap-utils.[c,h]: Utilities for parsing + server responses for use in both camel-imap-store.c and + camel-imap-folder.c + + * providers/imap/camel-imap-folder.c (imap_get_summary_internal): + Free all the pointers in the headers array. + (imap_get_subfolder_names_internal): Updated to use + imap_parse_list_response + (imap_parse_subfolder_list): Removed in favor of + imap_parse_list_response + + * providers/imap/camel-imap-store.c (camel_imap_command_extended): + Free all the pointers in the data array. + (imap_connect): Updated to use imap_parse_list_response and fixed + a leak + (folder_is_selectable): Updated. + +2000-07-27 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_message_info): Now + uses a hash table for looking up message info rather than a linear + search :) + +2000-07-27 Peter Williams <peterw@helixcode.com> + + * providers/*/Makefile.am: Don't specify SUBDIRS = + [nothing]. Messes up distcheck. + +2000-07-26 Peter Williams <peterw@helixcode.com> + + * camel-mime-parser.c (folder_scan_init): Initialize + outbuf to be "" -- it's not guaranteed to be zeroed. + + * camel-mime-utils.c (header_references_decode): Return + if the header is NULL -> or "" <-. Don't do our stupid + mailer trick if we point to \0. + (header_decode_quoted_string): Don't rip past end of + string! + +2000-07-26 Dan Winship <danw@helixcode.com> + + * camel-movemail.c (movemail_external): routine to call an + external movemail program. + (camel_movemail): Nuke return value, use movemail_external when + available and useful, and don't delete "dest" on errors, since + it might have started non-empty. + +2000-07-26 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-url.c (camel_url_to_string): Should now always prepend a '/' + before the path if it doesn't already exist. + + * providers/imap/camel-imap-folder.c: Fixed a few compiler warnings + +2000-07-25 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_summary_free): Fixed the + real problem that Peter was running into. + +2000-07-25 Dan Winship <danw@helixcode.com> + + * camel-mime-message.c (write_to_stream): Don't add a Mime-Version + header to a message that already has one. + + * camel-internet-address.c (internet_encode): Don't put <>s around + addresses with no name part. + +2000-07-25 Peter Williams <peterw@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_expunge): Set + imap_folder->summary to NULL after calling imap_summary_free, + so we don't get stuck with a junk summary pointer. Should + we free it at all? + +2000-07-25 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): + Optimized to try and get the new message headers without reloading + the entire summary from scratch. + (imap_get_summary_internal): Will now sync() before attempting to + reload the summary so that flags are set in the reloaded summary + as well. + +2000-07-24 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (get_folder): Updated to give + special attention to the root folder. + + * providers/imap/camel-imap-folder.c + (imap_get_subfolder_names_internal): Updated to handle the root + folder + (imap_get_message_count_internal): return 0 if folder can't hold + messages + (camel_imap_folder_new): Change so that root folder gets special + attention and always gets can_hold_messages set to FALSE + +2000-07-24 Dan Winship <danw@helixcode.com> + + * camel-folder.c: Remove exceptions from a number of methods that + work on what ought to be static data: get_parent_folder, + get_parent_store, get_message_count, get_unread_message_count, + get_permanent_flags, get_message_flags, set_message_flags, + get_message_user_flag, set_message_user_flag, get_uids, + get_summary, get_subfolder_names. Turn camel_folder_delete_message + into a macro. (Mostly a pull-up from the camel-async branch.) + + * providers/{imap,mbox,nntp,pop3,vee}: Update for CamelFolder + changes + +2000-07-24 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_message_info): Updated + to port easily to the new Camel API + (imap_init): Don't SELECT INBOX, we don't need to do that + +2000-07-24 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): + Initialize the summary and subfolder listing. + (imap_summary_free): Now takes a GPtrArray arg rather than a + CamelImapFolder as it increases it's usefullness for free()'ing + temporary summaries. + (imap_get_message_count_internal): A new convenience function for + getting the actual message count on a server to be used by + imap_get_summary_internal) + (imap_get_message_count): Since the Camel API is on the move again, + the future version of this function will not be able to make a + call to the store, it must only access previously fetched data (thus + the creation of the _internal function) + (imap_get_subfolder_names_internal): Again, because the future version + of imap_get_subfolder_names will not take an exception, we must rename + this function which will be called by camel_imap_folder_new() + (imap_get_subfolder_names): We now return the previously collected + subfolder listing that the _internal function fetched previously + (imap_get_summary_internal): Again, same idea as the previous _internal + functions... + (imap_get_summary): Again... now returns a previously aquired summary + + * providers/imap/camel-imap-store.c (imap_noop): This will hopefully + prevent the imap store from disconnecting. + (imap_connect): Modified to add a gtk timeout event that will call + imap_noop() every 10 minutes (we may want to change this time value) + (imap_disconnect): Modified to remove the NOOP timeout event from the + store. + (camel_imap_command_extended): Commented out the code that would try + and detect if the store was disconnected and then reconnect if it was + needed. + +2000-07-24 Dan Winship <danw@helixcode.com> + + * camel-folder.[ch]: Remove camel_folder_get_message_uid, which + was not used, and not implemented by any provider. + + * providers/nntp/camel-nntp-folder.c: Remove get_message_uid + non-implementation. + + * camel-folder-pt-proxy.[ch], camel-arg-collector.c, + camel-marshal-utils.[ch]: Bye bye bye. + + * Makefile.am: remove reference to camel-arg-collector.c + +2000-07-23 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (imap_disconnect): Made it a + little more forgiving. Also set current_folder to NULL as there is + no selected folder after a disconnect. + (stream_is_alive): Detects whether or not a socket is "alive" + (camel_imap_command_extended): Use stream_is_alive() to aid in the + detection of a disconnected state. + +2000-07-22 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (get_folder): Clear + CamelExceptions when appropriate (eg when folder is marked as + \NoSelect). Still needs some cleanup and perhaps Dan will have a + better way of doing this as this seems like a messy way of + handling this. + + * providers/imap/camel-imap-folder.c (imap_get_uids): Took out + some debug statements as they are no longer needed. + +2000-07-21 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_subfolder_names): + Updated to not strip out subfolders that are marked as \NoSelect + because this will be correctly handled in store->get_folder from + now on. + + * providers/imap/camel-imap-store.c (folder_is_selectable): New + convenience function for use in get_folder(). + (parse_list_response): Now takes a char **flags argument which is + needed by folder_is_selectable(). + (imap_connect): Updated to reflect changes to + parse_list_response(). + +2000-07-21 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-stream.c (stream_read): Updated with + some of the same fixes I've made to camel-imap-folder.c like + recalculating message part lengths. + + * providers/imap/camel-imap-store.c (camel_imap_command_extended): + Rewrote the code to check for "* %d RECENT". Still needs to be + modified, but should no longer cause an infinite loop by detecting + mis-detecting RECENT messages. + +2000-07-20 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_summary): + (imap_get_message_info): Oops. Fix UID parser to allow 0 and 9 to + be in the range of valid UID chars. + +2000-07-20 Peter Williams <peterw@helixcode.com> + + * camel-object.c (camel_object_unref): Add a new global mutex + 'refcount' held when refcounting operations occur. + +2000-07-19 Peter Williams <peterw@helixcode.com> + + * camel-object.c (camel_type_lock_up): Correct the recursiveness; + the locklevel is stored as a private, so each thread has its own + idea of the locklevel. Thus one thread can relock, but a different + one will think that it's a level 0 and try to lock the type_system + mutex. + +2000-07-19 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c: General cleanup working + towards getting Actions->Expunge working correctly. + + * providers/imap/camel-imap-store.c + (cammel_imap_command_extended): Added code to look for "* %d + RECENT" and to emit the folder_changed signal if there are any + recent messages. Note: this is a hack and needs to be rewritten + badly. + +2000-07-19 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_summary): If the + folder's message count is not the same as the number of summaries, + free the old summary and create a new summary. + +2000-07-18 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c + (camel_imap_folder_class_init): Added in + imap_[g,s]et_message_user_flag() methods + (imap_get_message_info): Rewrote to use the more efficient way of + downloading summary information and also added a UID comparison so + that if the UID requested doesn't match the UID received, it + returns NULL. FIXME: When the mailer gets NULL when it requested + message info, it seems that it displays a row for that message and + when you try and select the blank row, it segfaults. + + * providers/imap/camel-imap-store.c (get_folder): Oops, this + should not be checking against "/", it should be checking against + dir_sep. + + * providers/imap/camel-imap-folder.c (imap_parse_subfolder_line): + Updated to trim out the leading namespace. + (imap_get_subfolder_names): Let the subfolder parser trim the + namespace off the folder name. + +2000-07-17 Peter Williams <peterw@helixcode.com> + + * camel-object.c (camel_type_lock_up): New function; the + Camel type_system lock is now fakey-recursive, being controlled + by a semaphore that goes up and down and is protected by another + lock. Theoretically all we need is the lock on the semaphore, + but this we catch exceptions "better" (by deadlocking). + (camel_type_lock_down): Corresponding to above. + (all functions): s,G_LOCK,camel_type_lock_up, etc. + +2000-07-17 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (imap_disconnect): Send a + "LOGOUT" command. + + * providers/imap/camel-imap-folder.c (imap_get_message): Hacks to + get IMAP code to work with CommunigatePro and MS Exchange (and any + other servers that send back a UID at the end of each FETCH inside + of the main body of the message part). + (imap_sync): Un-#if 0 the code that sets the flags on the IMAP + server for messages that have changed. Oops, don't mask with + DELETED to find out if the message has been answered ;-) + (imap_expunge): sync before expunging. + +2000-07-16 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c: All SELECT calls now pass + a NULL folder argument to camel_imap_command_extended() since it's + not needed. + (imap_connect): Moved service_class->connect() to the point right + after a connection is established with the server rather than + waiting until the end of the function. + (camel_imap_command): Updated the documentation comment + (camel_imap_command_extended): Before sending a command, first + check to make sure we are connected; if we aren't, then reconnect. + Don't strncmp() command with "SELECT" as it's redundant. + + * providers/imap/camel-imap-folder.c: All SELECT calls now pass + a NULL folder argument to camel_imap_command_extended() since it's + not needed. Also s/camel_imap_command/camel_imap_command_extended as + I will probably be doing away with camel_imap_command() or at least + only using it for LOGIN and similar commands where the server won't + notify us of any recent messages. + +2000-07-15 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): + One last fix to get rid of hard-coded "/" directory separators + +2000-07-14 Peter Williams <peterw@helixcode.com> + + * camel-object.c : Implement 'events', which are suspiciously + like signals except without all the marshalling baggage, and + with quasi-thread-safety. + (camel_object_class_declare_event): New func. + (camel_object_hook_event): Ditto. + (camel_object_trigger_event): Ditto. + (obj_class_init): Declare the "finalize" event. + (obj_class_finalize): Free the hashtable of events->preps + (obj_finalize): Free the hashtable of events->hooklists + (camel_object_unref): Trigger the finalize event (ourselves, + to prevent massively unpleasant looping things.) + +2000-07-14 Peter Williams <peterw@helixcode.com> + + * camel-object.c (make_global_classfuncs): Change to return + a CamelObjectClass. Change parents to a GSList and free it + when done. + (camel_object_new): Don't allocate a classfuncs for every object; + merely give it a reference to the global_classfuncs. Convert + parents to a GSList and free it when done. + (camel_object_unref): Don't free the classfuncs. Free the parents + list, which is changed to a GSList. + +2000-07-14 Jeffrey Stedfast <fejj@helixcode.com> + + * string-utils.c (string_unquote): New convenience function + to unquote a string if it's encapsulated by "'s + + * providers/imap/camel-imap-folder.c: + * providers/imap/camel-imap-store.c: Made the necessary changes + to stop using hard coded directory separators. + +2000-07-13 Dan Winship <danw@helixcode.com> + + * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load): + If the summary is for a smaller mbox, and rebuilding from the + last-known end position fails, try rebuilding from the beginning. + Deals with the case where the user edits the mbox and makes it + bigger, without adding new messages. + +2000-07-13 Peter Williams <peterw@helixcode.com> + + * camel-object.c: Rewritten to not be based on GtkObject, + but a tiny threadsafe ripoff thereof. Objects still cannot + be shared across threads, but ref/unref/destroy/new/etc + will work. Signals are not implemented because doing it + robustly would be a major pain in the butt, but class + functions are. There's a small demonstration that it doesn't + crash in ./temp-test.c: build it with ./make-test.sh. + * camel-stream.c, camel-seekable-stream.c, camel-stream-mem.c: + moved over to CamelObject. Proof of concept: two levels of + subclass and class functions, all working without coredumps. + To port to CamelObject: + - s,GTK_,CAMEL_,g in the cast checks + - s,gtk_type_new,camel_object_new,g + - s,GtkType,CamelType,g + - Change get_type function over to camel_type_declare + - instead of hooking to finalize function, it goes into the + type declaration. + - remove signals. + - instead of GTK_OBJECT(so)->klass, CAMEL_OBJECT_GET_CLASS(so) + - s,gtk_type_class,camel_type_get_global_classfuncs,g + - don't chain finalize handlers; it will be done for you + +2000-07-13 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c: + * providers/imap/camel-imap-store.c: If a SELECT fails, set + imap_store->current_folder to NULL so a SELECT is forced before + any message/folder operations are requested. Also, because some + users don't use a namespace, make sure that if the url->path is + "/" we don't use it when creating the folder_path. + (camel_imap_command[_extended]): Since we allow the passing of + a NULL folder which we can use to bypass a forced SELECT, no need + to check for the individual commands that don't require a folder + to be selected. + +2000-07-13 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c: + * providers/imap/camel-imap-store.c: Updated to use CAMEL_IMAP_OK, + CAMEL_IMAP_NO, CAMEL_IMAP_BAD, and CAMEL_IMAP_FAIL rather than the + ones copied from the POP3 provider. + +2000-07-13 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_summary): Oops. + If the number of messages in the folder is 0, don't fetch + summaries 1 thru 0, just return an empty summary. + (imap_copy_message_to): Fixed to use message UID and also send + the source folder as an arg to camel_imap_command rather than NULL. + (imap_move_message_to): Same. + (imap_init): If SELECT is successful, we need to set the current + folder to the one selected, this was causing problems with move/copy + +2000-07-13 Dan Winship <danw@helixcode.com> + + * camel-service.h: define a set of CAMEL_SERVICE_URL_ALLOW_* flags + parallel to the _NEED_* flags, and make the _NEED_* flags imply + the _ALLOW_* ones. + + * providers/imap/camel-imap-store.c (camel_imap_store_init): imap + urls ALLOW_PATH + +2000-07-13 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_summary): New + and improved approach to fetching an entire folder summary + that should be much much faster than the old way as it gets + the entire folder summary in 1 shot rather than requesting + message by message. As with the last update, this version + also only fetches the minimum number of header fields. + (imap_get_summary): Oops, forgot to free the temp + GPtrArray *headers + +2000-07-13 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_summary): Don't + fetch the entire RFC822 header, just fetch the fields we want. + (imap_get_message_info): Same. + +2000-07-13 Not Zed <NotZed@HelixCode.com> + + * camel-mime-filter-basic.c (camel_mime_filter_basic_new_type): + Reset filter on setup. + (reset): When resetting qp encoding, set the state to -1, instead + of 0. + + * camel-mime-utils.c (quoted_encode_step): Actually count the + characters output sofar (it never counted any). Bunch of other + fixes. + (quoted_encode_close): Also flush out final character, if there's + one. + +2000-07-12 Jeffrey Stedfast <fejj@helixcode.com> + + Chris forgot to add #include <e-util/e-util.h> to the source files + + * providers/imap/camel-imap-store.c (imap_connect): Fixed Peter's + fix, we don't want to send a string to a %d. + +2000-07-12 Christopher James Lahey <clahey@helixcode.com> + + * camel-folder-search.c, providers/imap/camel-imap-store.c: + Changed from strstrcase to e_strstrcase. + + * string-utils.c, string-utils.h: Removed strstrcase (in favor of + e_strstrcase in e-util/e-util.c.) + +2000-07-12 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-folder.c + (nntp_folder_set_message_flags): get the article num out of our + uid and mark it read in the newsrc. + (nntp_folder_get_message): get the message id out of the uid to + fetch the article. + + * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): the uid + is now <article-num>,<messageid> + (get_HEAD_headers): same. + + * camel-mime-parser.c (folder_scan_step): go to HSCAN_MESSAGE + state when ct->subtype is "news" as well as "rfc822". this makes + attachments of type "message/news" display properly. + +2000-07-12 Dan Winship <danw@helixcode.com> + + * camel-folder.c (camel_folder_free_deep, + camel_folder_free_shallow, camel_folder_free_nop): Useful default + implementations for free_{uids,subfolder_names,summary}. + (free_subfolder_names, free_uids): Make these g_warning-ing + default implementations. + + * providers/*/camel-*-folder.c: Use the new functions where + appropriate, remove duplicated code. + +2000-07-12 Peter Williams <peterw@helixcode.com> + + * providers/imap/camel-imap-store.c (query_auth_types): Check for + NULL parameters when setting the exception so as to not crash on + Solaris (can't handle a %s passed NULL). + (imap_connect): Same. + +2000-07-12 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/mbox/camel-mbox-folder.c (mbox_delete_message): Use + mbox_set_message_flags () instead of setting the flags by hand. This + fixes the problem of the "message_changed" signal not being emitted + at the correct time. + + * providers/imap/camel-imap-folder.c: "folder_changed" signals should + pass a third argument (which is ignored). + + * camel-folder.c: Undo gtk signal emits done in set_flags and + expunge. + (move_message_to): + (copy_message_to): Create info as a const CamelMessageInfo + +2000-07-12 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/Makefile.am: don't add test-newsrc to the build + since it needs libcamel (which isn't built at the time test-newsrc + needs linking.) + + * providers/nntp/camel-nntp-utils.c (get_HEAD_headers): fill in + MessageInfo->message_id. + (get_XOVER_headers): same. + + * providers/nntp/camel-nntp-folder.c (nntp_folder_init): move + summary loading here. + (nntp_folder_sync): summary/newsrc changes should be stored here. + put a comment to that effect. + (nntp_folder_set_message_flags): don't save the newsrc here. + (nntp_folder_get_uids): use g_ptr_array_index instead of the + cast/addition. + (nntp_folder_get_summary): no need to check if we should generate + the summary here. already done. + (nntp_folder_get_message_info): implement. + + * providers/nntp/camel-nntp-store.c + (camel_nntp_store_get_toplevel_dir): use evolution_dir instead of + computing it ourselves. + (nntp_store_disconnect): call camel_nntp_newsrc_write. + (ensure_news_dir_exists): new function to create the news/<news + server> subdir. + (camel_nntp_store_class_init): hook up connect/disconnect and + finalize. + (nntp_store_connect): if ensure_news_dir_exists fails throw an + exception. + +2000-07-12 Peter Williams <peterw@helixcode.com> + + * camel-folder.c (camel_folder_set_message_flags): Emit a message_changed + signal once the flags are set on the message. + (camel_folder_set_user_flag): Ditto. + (camel_folder_expunge): Emit a folder_changed if no exception. + +2000-07-12 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-stream.c: Use size_t and ssize_t for read/write methods + + * providers/imap/camel-imap-folder.c (imap_set_message_flags): + Updated to emit the message_changed signal. + (imap_delete_message): Updated to use imap_set_message_flags (). + (imap_move_message_to): Updated to use imap_set_message_flags () + and to emit the folder_changed signal on the destination folder. + (imap_copy_message_to): Updated to emit the folder_changed signal + on the destination folder. + (imap_append_message): Updated to emit the folder_changed signal + on the destination folder. + +2000-07-11 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-folder.c (camel_folder_append_message): Now takes a + flags argument to specify the flags to be set on the message + since we might not necessarily want the flags to be wiped clean. + (move_message_to): + (copy_message_to): Updated to send a flags argument to + append_message (); currently sends the original message's flags. + + * providers/mbox/camel-mbox-folder.c (mbox_append_message): + * providers/imap/camel-imap-folder.c (imap_append_message): + Updated. + +2000-07-11 Dan Winship <danw@helixcode.com> + + * camel-folder.c: Remove exceptions from a number of methods + that work on what ought to be static data: get_parent_folder, + get_parent_store, get_message_count, get_unread_message_count, + get_permanent_flags, get_message_flags, set_message_flags, + get_message_user_flag, set_message_user_flag, get_message_uid, + get_uids, get_summary, get_subfolder_names. Turn + camel_folder_delete_message into a macro. + + * providers/{mbox,pop3,vee}: Update for CamelFolder changes + + * providers/Makefile.am: Disable imap and nntp for now + +2000-07-11 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_search_by_expression): + This shouldn't return NULL, it should return g_ptr_array_new () + so the mailer gets what it expects. + +2000-07-10 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-folder-summary.c (camel_folder_summary_decode_string): + Oops, an unsigned integer can never be < 0 + +2000-07-10 Dan Winship <danw@helixcode.com> + + * providers/vee/camel-vee-folder.c (vee_search_by_expression): + Initialize a variable to make this not crash again. And fix a bug + so it actually does something. + +2000-07-10 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-folder-summary.c: Cleaned up a bunch of compile warnings + +2000-07-10 Dan Winship <danw@helixcode.com> + + * providers/vee: kill more debugging messages + +2000-07-10 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/mbox/camel-mbox-folder.c (mbox_get_unread_message_count): + * providers/vee/camel-vee-folder.c (vee_get_unread_message_count): + * providers/imap/camel-imap-folder.c (imap_get_unread_message_count): + Implemented. + + * camel-folder.c (camel_folder_get_unread_message_count): New + convenience function to allow the mailer to query the number + of unread messages in a folder (for displaying message stats + in a folder tree?). + +2000-07-09 Dan Winship <danw@helixcode.com> + + * camel-mime-utils.c (header_references_dup): New function to copy + a header_references structure. + + * camel-folder-summary.c (camel_message_info_dup_to): New function + to (deep) copy the data from one CamelMessageInfo into another. + (camel_message_info_free): And free the data. + + * providers/vee/camel-vee-folder.c (vee_sync): Implement. (empty). + (vee_search_by_expression): belatedly update for + camel_folder_search change. + (vee_folder_build): belatedly update for camel_folder_search + change. Use camel_message_info_dup_to and camel_message_info_free + (in particular, so that we get message_id and references info so + vfolders can be threaded). + (vee_folder_build_folder): Ditto. + +2000-07-08 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/nntp/camel-nntp-folder.c: + * providers/nntp/camel-nntp-utils.c: + * providers/nntp/camel-nntp-store.c: Update to reflect past changes + in the Camel API. Use gtk macro casts wherever possible and use glib's + memory functions instead of standard c's (since they are not + compatable) + + * providers/smtp/camel-smtp-transport.c: + * providers/imap/camel-imap-store.c: Wrap debug print statements + in a macro + + * providers/imap/camel-imap-stream.c (stream_read): Make sure + that we get up to and including the last \n of the mime part. + + * providers/imap/camel-imap-folder.c (imap_get_message): Make sure + that we get up to and including the last \n of the mime part. + Wrap debug print statements in a macro. + + * providers/imap/camel-imap-stream.c (stream_read): Only cache + the important data (aka the mime part requested and no extra + server response stuff) + +2000-07-07 Dan Winship <danw@helixcode.com> + + * camel-mime-utils.c (header_references_decode): Work around + In-Reply-To's with unquoted punctuation. So many broken mailers. + + * camel-folder.c (camel_folder_search_by_expression): Make this + return a GPtrArray rather than a GList. + + * camel-folder-search.c (camel_folder_search_execute_expression): + * providers/imap/camel-imap-folder.c (imap_search_by_expression): + * providers/mbox/camel-mbox-folder.c (mbox_search_by_expression): + * providers/nntp/camel-nntp-folder.c (nntp_search_by_expression): + Update to return a GPtrArray rather than a GList. + +2000-07-07 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c (esmtp_get_authtypes): + Fixed the parser to actually work + +2000-07-06 Dan Winship <danw@helixcode.com> + + * camel-mime-utils.c (header_references_decode): Make this deal + with the full RFC822 References/In-Reply-To format rather than + just the more-nicely-behaved RFC1036 version. (Needed to parse + In-Reply-To headers with extra junk in them.) + +2000-07-06 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_summary): Parse for + more header information to allow message threading in IMAP. + (imap_get_message_info): Same. + + * camel-folder-summary.c: Renamed summary_format_* to + camel_summary_format_* and moved them into public scope. + + * providers/smtp/camel-smtp-transport.c (smtp_connect): Oops. Don't + pass port # as a string in the error code (if it fails to connect). + + * providers/imap/camel-imap-folder.c (imap_append_message): Changed + over to camel_imap_command_extended as that was the source of the + problems - apparently appending replies with more than just 1 line. + +2000-07-05 Dan Winship <danw@helixcode.com> + + * camel-folder-search.c (search_header_contains): make header + matching case-insensitive + + * camel-folder-summary.c: + * camel-session.c: + * providers/mbox/camel-mbox-folder.c: + * providers/mbox/camel-mbox-summary.c: Remove some non-error case + debugging-type messages. + +2000-07-05 Ettore Perazzoli <ettore@helixcode.com> + + * providers/mbox/camel-mbox-summary.c (d): Define to empty so that + we get rid of a ton of debugging messages. + +2000-07-05 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-utils.h: Added prototype for uudecode_step + + * camel-mime-utils.c (uudecode_step): Cleaned up some junk that + should have been cleaned up when debugging printf's were taken out. + +2000-07-05 Ettore Perazzoli <ettore@helixcode.com> + + * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync): + Update the X-Evolution: header even if the in-memory UID and the + saved UID are not the same. Otherwise mboxes with clashing UIDs + can never be fixed. + + * camel-folder-summary.c + (camel_folder_summary_add_from_parser): Add the message to the + summary before doing any ibex stuff. In fact, this might also + have the side effect of reassigning the UID so it needs to be done + before we start using the UID. + + * providers/mbox/camel-mbox-folder.c (mbox_append_message): Add + debugging message to keep track of the UIDs we add. + +2000-07-05 Dan Winship <danw@helixcode.com> + + * camel-folder-summary.c: Add "Cc" to summary and bump summary + version number. + + * camel-folder-search.c (search_header_contains): make "Cc" a + searchable header. + +2000-07-03 Ettore Perazzoli <ettore@helixcode.com> + + * camel-folder-summary.c (camel_folder_summary_next_uid_string): + New. + (camel_folder_summary_add): Use + `camel_folder_summary_next_uid_string()' instead of recomputing + the UID manually here. + (camel_folder_summary_add_from_parser): Likewise. + +2000-07-03 Ettore Perazzoli <ettore@helixcode.com> + + * camel-folder-summary.c (camel_folder_summary_set_uid): Removed. + +2000-07-03 Dan Winship <danw@helixcode.com> + + * camel-folder-summary.c (message_info_new): Parse In-Reply-To + with header_references_decode, not header_msgid_decode. + + * camel-mime-message.c (camel_mime_message_class_init): message + headers are case-insensitive. + + * providers/pop3/camel-pop3-store.c (camel_pop3_command): Fix a + bug in error-setting code. + (pop3_connect): Don't re-prompt for password in the KPOP case. + (pop3_get_response): New function, split out from + camel_pop3_command. + (connect_to_server): Use pop3_get_response to parse the greeting + message, and error out appropriately if it's -ERR. + +2000-07-02 Dan Winship <danw@helixcode.com> + + * camel-folder.c (camel_folder_freeze, camel_folder_thaw): New + functions to freeze and thaw a folder (to prevent message/folder + changed signals in the middle of a long series of operations). + (camel_folder_class_init): Change signals to GTK_RUN_FIRST. + (message_changed, folder_changed): Add default implementations + that stop the emission and record info for later if the folder is + frozen. + + * providers/mbox/camel-mbox-folder.c (mbox_sync): leftover fixes + from the close->sync change: don't destroy the ibex, summary, and + search when syncing. + (append_message): emit "folder_changed" on a successful append. + +2000-07-02 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-utils.c (uudecode_step): A rather complex uudecoder + written in the spirit of Zucchi-ness, is it up to par? Only the + Z-man can tell us :-) + +2000-07-01 Dan Winship <danw@helixcode.com> + + * camel-service.c (camel_service_get_name): New method, to return + an end-user-friendly name corresponding to a service. (eg, "POP + service for danw on trna.helixcode.com"). + + * providers/imap/camel-imap-store.c, + providers/mbox/camel-mbox-store.c, + providers/nntp/camel-nntp-store.c, + providers/pop3/camel-pop3-store.c, + providers/sendmail/camel-sendmail-transport.c, + providers/smtp/camel-smtp-transport.c: Implement. + + * providers/imap/Makefile.am: remove unneeded + libcamelimap_la_LDADD. + + * providers/pop3/camel-pop3-store.c (connect_to_server): fix the + CAPA-parsing code to not get into an infinite loop. + +2000-07-01 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_message): Fixed + the bug that would sometimes leave part of the server response + tacked on to the end of the message. + + * camel-folder.c: Renamed _by_uid methods. Since we no longer + have get-by-number methods, no need to have the _by_uid + extensions. + (get_message_by_uid): Renamed to get_message + (delete_message_by_uid): Renamed to delete_message + (summary_get_by_uid): Renamed to get_message_info + + * providers/mbox/camel-mbox-folder.c: + * providers/pop3/camel-pop3-folder.c: + * providers/imap/camel-imap-folder.c: + * providers/vee/camel-vee-folder.c: Updated to reflect + camel-folder changes. + +2000-06-30 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-folder.c (camel_folder_copy_message_to): New function, to + copy a message from one folder to another. The default + implementation just uses append_message, but providers can + implement more efficient versions for use when both folders are on + the same store. + + * broken-date-parser.[c,h]: Utilities for parsing broken + date strings. + + * providers/imap/camel-imap-folder.c (imap_move_message_to): + (imap_copy_message_to): Implemented. + + * camel-mime-utils.c (header_decode_date): Wrote some code to try + and un-mangle broken date formats and then parse that new string + instead. + +2000-06-30 Dan Winship <danw@helixcode.com> + + * camel-folder.c (camel_folder_move_message_to): New function, to + move a message from one folder to another. The default + implementation just uses append_message and delete_message, but + providers can implement more efficient versions for use when both + folders are on the same store. + +2000-06-29 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_expunge): Should now + print a meaningful error message when it doesn't succeed + +2000-06-28 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (imap_connect): Changed to + keep prompting user for a valid password until it either + authenticates or until Canceled by the user. + (camel_imap_command_extended): Improved speed (replaced the + g_strjoinv call with a faster implementation) + + * providers/pop3/camel-pop3-store.c + (camel_pop3_command_get_additional_data): Fixed. + (pop3_connect): Changed to keep prompting the user for a + password until it either works or until Canceled by the user. + + * providers/mbox/camel-mbox-summary.c: General cleanup + (camel_mbox_summary_sync): Fixed a memory leak and added + CamelException handling. + + * providers/mbox/camel-mbox-store.c (delete_folder): Fixed a + memory leak + + * providers/mbox/camel-mbox-folder.c (mbox_append_message): + Default 'off_t seek' to -1 so as to make sure it's initialized + before it's used in the case of a bad stat() call. + (mbox_sync): Updated + (mbox_expunge): Updated + +2000-06-27 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (imap_connect): Move the + CAPABILITY command here so we don't have to keep checking + each time we open a folder. + (camel_imap_command_extended): If we are doing an EXAMINE, + don't bother doing a SELECT first. + + * providers/imap/camel-imap-folder.c (imap_init): Update so + folder->has_search_capability depends on the parent IMAP store + (since this is really dependant on the IMAP implementation and + not the folder) + +2000-06-27 Christopher James Lahey <clahey@helixcode.com> + + * providers/smtp/camel-smtp-transport.c: Don't close the filter + stream when done with it (this causes the source stream to close); + Instead, just flush it when done. + +2000-06-27 Michael Zucchi <zucchi@zedzone.mmc.com.au> + + * camel-folder-search.c (search_header_contains): Make header + search 'to' match 'to', and not 'from', small typo, fixes #317. + +2000-06-26 Christopher James Lahey <clahey@helixcode.com> + + * providers/mbox/camel-mbox-summary.c: Added debugging + information. + +2000-06-23 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c: + * providers/imap/camel-imap-folder.c: Improved folder parsing. + Not specifying a namespace should no longer list the entire + filesystem. + +2000-06-22 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/.cvsignore: ignore test-newsrc + + * providers/nntp/camel-nntp-store.c, + providers/nntp/camel-nntp-store.h, + providers/nntp/camel-nntp-folder.c, + providers/nntp/camel-nntp-folder.h, + providers/nntp/camel-nntp-utils.c: Bring the nntp provider up to a + state where it builds and is usable with the current camel. there + are still warts (semi-broken .newsrc file handling, and a lack of + a subscribe ui -- in fact no way to add a new server, really), but + it'll display news messages. + + * providers/nntp/Makefile.am (libcamelnntp_la_SOURCES): add + camel-nntp-newsrc.c + (libcamelnntpinclude_HEADERS): add camel-nntp-newsrc.h + also, add test-newsrc stuff. + + * providers/nntp/test-newsrc.c: new file that tests the newsrc + stuff by parsing and regurgitating a .newsrc file for a particular + server. + + * providers/nntp/camel-nntp-newsrc.c, + providers/nntp/camel-nntp-newsrc.h: new files, initial support for .newsrc files. + +2000-06-22 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_message_count): + Oops. Now appends the namespace to the folder before querying + for the number of messages. + + * providers/imap/camel-imap-store.c (imap_folder_exists): New + convenience function for use by imap_create(). + (get_folder): If folder is specified as "/", we really want + "INBOX". + + * providers/sendmail/camel-sendmail-provider.c: + * providers/vee/camel-vee-provider.c: + * providers/smtp/camel-smtp-provider.c: + * providers/mbox/camel-mbox-provider.c: + * providers/pop3/camel-pop3-provider.c: + * providers/imap/camel-imap-provider.c: Updated + + * camel-session.c: Moved service_cache hash table into the + providers. + (service_cache_remove): Updated. + (camel_session_get_service): Updated. + + * camel-url.c (camel_url_hash): Took out the hashing of + url->passwd. We don't want this anymore. + + * providers/imap/camel-imap-folder.c (imap_init): Took out + references to 'namespace' + (camel_imap_folder_init): Same + + * providers/imap/camel-imap-folder.h: No more namespace. We are + instead going to use url->path as the namespace. + +2000-06-21 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (imap_create): Modified to + use the "namespace" (url->path) if it exists. + + * providers/imap/camel-imap-folder.c (imap_delete_message_by_uid): + Now just sets the deleted flag on the summary rather than speaking + directly to the IMAP server. This is both faster and cleaner. + +2000-06-21 Dan Winship <danw@helixcode.com> + + * providers/pop3/camel-pop3-store.c (query_auth_types): Fix dumb + bug. + +2000-06-21 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_message_by_uid): + We are getting mail in IMAP now!! whoo-hoo!. Stripped out the + filtering so messages may have some dot-stuffing, but the + filtering can always be added back in later when we know it + works and isn't the problem. + +2000-06-21 Peter Williams <peterw@curious-george.helixcode.com> + + * providers/mbox/camel-mbox-folder.c (mbox_init): Use the basename + of the mailbox so we don't get pathnames like ~/evolution/inbox///movemail.ibex + +2000-06-21 Dan Winship <danw@helixcode.com> + + * camel-folder-summary.c (message_info_new): Set date_received + based on the first (most recent) "Received" header. + +2000-06-20 Dan Winship <danw@helixcode.com> + + * camel-mime-part.c (write_to_stream): flush the filter stream + before unreffing it, so it will camel_mime_filter_complete. + + * camel-stream-filter.c (camel_stream_filter_class_init): Fix a + braino so camel_stream_flush works here. + + * camel-stream-mem.c (stream_seek): Fix a bug that resulted in + large attachments being silently dropped. + + * providers/pop3/camel-pop3-store.c + (camel_pop3_command_get_additional_data): Don't use g_strjoinv + here, since it is O(n^2) on the length of the output string, and + we can do O(n). + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): add a CRLF decoder + after the QP/B64 decoder if it's text. + +2000-06-20 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_summary): Only + fetch the summary if the folder summary doesn't already exist. + When the summary *does* exist, start fetching from 1, not 0. + (imap_free_summary): Don't do anything here. + (imap_finalize): Free the summary here instead of in + imap_free_summary(). + (imap_set_message_flags): Implemented + (imap_sync): Added code to set flags on messages that have had + their flags changed (however I #if'd it out until we are more + confidant in the IMAP code :) + (imap_summary_get_by_uid): Now parese flags correctly. + (imap_get_summary): Now parese flags correctly. Also correctly + parses the UID correctly. + + * camel-url.c (check_equal): No need to check s1 if s2 is NULL + (camel_url_equal): Don't check the passwd component of the url. + +2000-06-20 Dan Winship <danw@helixcode.com> + + * camel-folder-summary.c (camel_folder_summary_add): mark the + message info with CAMEL_MESSAGE_FOLDER_FLAGGED if we change the + uid, so the folder will know that it's dirty. + +2000-06-20 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (camel_imap_command_extended): + Now returns the last line of data that the server sends back as + well. This is needed for commands like SELECT (like Peter pointed + out). + (camel_imap_command): No longer checks for SELECT (no need) + + * providers/imap/camel-imap-folder.c: Added namespace stuff + which we will need later on... + (imap_parse_subfolder_line): Convenience function for use in + get_subfolder_names() + (imap_get_subfolder_names): Updated. Also changed it to use LIST + instead of LSUB (temporary change). + +2000-06-19 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (camel_imap_folder_init): Set + summary equal to NULL. + (imap_get_summary): Store the summary in the ImapFolder + (imap_summary_get_by_uid): If we have a summary cache in the + ImapFolder, first check to see if that message info is in the + cached summary first, if not fetch it directly from the IMAP + server and append it to the summary cache. + (imap_get_message_flags): Don't free the message info that we get + back from summary_get_by_uid as we don't want to be corrupting our + cached summary. + +2000-06-19 Peter Williams <peterw@curious-george.helixcode.com> + + * providers/imap/camel-imap-store.c (camel_imap_command{,_extended}): When + SELECT'ing a folder for an IMAP command, use _extended to grab the entire + response (before we just used camel_imap_command and missed the OK codes) + +2000-06-18 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_summary_get_by_uid): + Now gets the message flags as it should. + (imap_get_summary): Same as imap_summary_get_by_uid + (imap_get_permanent_flags): Return the permanent flags stored + on the folder. + (imap_get_message_flags): Return message flags associated with + given uid. Note: we may want to somehow cache summary info so + that we don't have to keep querying the IMAP provider in + imap_summary_get_by_uid(). + +2000-06-17 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_free_summary): We were + leaking memory - but not anymore! + (imap_get_summary): We now get the UIDs and the beginnings of the + code to get the message flags as well. + +2000-06-17 Dan Winship <danw@helixcode.com> + + * camel-mime-parser.c (folder_scan_header): Don't copy newlines + into the parsed header text, and turn any number of tabs and + spaces after a newline into a single space. + +2000-06-17 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_init): Should now + correctly do CAPABILITY. + +2000-06-17 Dan Winship <danw@helixcode.com> + + * providers/mbox/camel-mbox-summary.c: Add some debugging printfs + when rebulding summary to help figure out why people's summaries + are always being rebuilt. + +2000-06-17 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_search_by_expression): + Began to implement, need to get information on how to + deconstruct @expression into an IMAP search expression and + parse the results. + (imap_init): Now queries the IMAP provider for CAPABILITY to + determine if SEARCH is implemented or not. + + * providers/imap/imap.c: Removed - no longer a need to have + this as an example for anyone interesting to help mecode IMAP + support. + +2000-06-16 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_sync): Added code + to expunge if called for (still need to finish coding this). + (imap_get_uids): Implemented. + (imap_get_summary): Found a way to get the date + (imap_summary_get_by_uid): Same. + (imap_free_summary): Implemented. + + * string-utils.c (strstrcase): Fixed a compile warning + + * providers/imap/camel-imap-summary.c: Removed - we don't + need a CamelImapSummary structure. + +2000-06-16 Dan Winship <danw@helixcode.com> + + Move flag handling from CamelMimeMessage to CamelFolder. This + simplifies several flag-handling pieces of code in the mailer, and + lets you change a message's flags without having to fetch the + message body. It also means that fully-constructed + CamelMimeMessages are now essentially constant, which will help + simplify locking issues later since it means two threads + interested in the same message can just work with separate copies + of it. + + * camel-mime-message.h (struct _CamelMimeMessage): Removed flags + and user_flags (moved to summary). Removed expunged and + message_number which were unused. Removed message_uid and folder + which are no longer needed in the new scheme. + (struct CamelMimeMessageClass): Removed message_changed signal and + get/set_message_number methods. + + * camel-mime-message.c: Updates for CamelMimeMessage changes. + (camel_mime_message_get/set_flags, + camel_mime_message_get/set_user_flag): Replaced with methods in + CamelFolder. + (camel_flag_get, camel_flag_set, camel_flag_list_size, + camel_flag_list_free): Moved verbatim to camel-folder-summary.c + + * camel-folder.c (camel_folder_get/set_message_flags, + camel_folder_get/set_message_user_flag): New methods (and + corresponding useless default implementations) + (camel_folder_class_init): add a message_changed signal + + * camel-folder-summary.c (camel_flag_get, camel_flag_set, + camel_flag_list_size, camel_flag_list_free): Moved here from + camel-mime-message.c + + * providers/mbox/camel-mbox-folder.c (message_changed): Removed. + (mbox_get_message_flags, mbox_set_message_flags, + mbox_get_message_user_flag, mbox_set_message_user_flag): Tweak + summary bits as appropriate. (Functionality moved here from + message_changed.) + (mbox_get_message_by_uid): Update for CamelMimeMessage changes + (less stuff to initialize). + + * providers/imap/camel-imap-folder.c (message_changed): Remove + this. It was just copied from the mbox provider and doesn't deal + with the real IMAP flag stuff anyway. (So there's currently no + flag support in the IMAP provider.) + (imap_get_message_by_uid): Update for CamelMimeMessage changes. + + * providers/vee/camel-vee-folder.c: (message_changed): Remove old + one. Add a new one to listen for message_changed on each folder + and re-emit message_changed signals that correspond to messages in + the vfolder. + (vee_get/set_message_flags, vee_get/set_message_user_flag): Proxy + flag setting to the underlying real messages. + (vee_append_message): Removed for now; there's no way to translate + this into the new CamelMimeMessage/CamelFolder scheme, but (a) + there's also no code which would ever call it and (b) we're + probably going want a better interface than append_message for + message drag and drop to work anyway. To be revisited. + +2000-06-16 Dan Winship <danw@helixcode.com> + + * camel-mime-utils.c (rfc2047_decode_word): + * camel-mime-part-utils.c (simple_data_wrapper_construct_from_parser): + * camel-folder-summary.c (summary_build_content_info): + KLUDGE! Since neither ETable nor GtkHTML supports UTF-8 yet, + output ISO-8859-1 instead, so Ettore can read his Italian mail. :) + This will be reverted later. + +2000-06-15 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_summary): Started to + implement - may want to use ENVELOPE instead of BODY.PEEK[HEADER] + (imap_summary_get_by_uid): Started to code, I've got to find a way to + get the date in time_t format and also get the flags + + * string-utils.c (strstrcase): Added this convenience function - I + know about strcasestr() but it's not portable. + +2000-06-15 Dan Winship <danw@helixcode.com> + + * camel-service.c: Remove camel_service_connect_with_url. (URLs + must be specified when the service is requested from the session, + so that there can only ever be one service for any URL.) + + * camel-folder.c: (camel_folder_open, camel_folder_is_open, + camel_folder_get_mode): Kill. Folders are now always open, and + handle "closing" sorts of operations at sync or finalize time. + (camel_folder_sync): renamed from camel_folder_close. Syncs state + to the store but doesn't necessarily close/disconnect. + + * providers/*/camel-*-folder.c: Merge "open" methods into "init" + methods. Rename close to sync and update appropriately. + + * providers/imap/camel-imap-store.c: Remove camel_imap_store_open + and camel_imap_store_close, which should not have been copied from + the POP provider (where the exist to work around limitations of + the POP protocol). + + * providers/mbox/camel-mbox-summary.c: fix a bug. (don't expunge + deleted messages if called with expunge == FALSE) + + * providers/pop3/camel-pop3-store.c (connect_to_server): Check + server for various interesting extensions. + + * providers/pop3/camel-pop3-folder.c (get_uids): If the server + supports UIDL, use real UIDs rather than fake ones. + (etc): Map uids back to numbers appropriately + + * providers/mbox/camel-mbox-folder.c (mbox_append_message): Fix to + previous change: make sure the "seek" variable ends up with the + value it should. + + * providers/mbox/camel-mbox-summary.c (summary_rebuild): Update + summary mtime as well as size. + +2000-06-14 Dan Winship <danw@helixcode.com> + + * providers/mbox/camel-mbox-folder.c (mbox_append_message): if the + mbox doesn't end with a '\n', write one before appending the new + message. + +2000-06-14 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-filter-crlf.c (filter): Updated the encoder to allocate + more memory (since we are also now adding dots). Also updated the + decoder as we have found that it sometimes passes the end of the + buffer. + + * providers/pop3/camel-pop3-folder.c (get_message_by_uid): Took out the + filter code (we already filter in + camel_pop3_command_get_additional_data) + + * camel-folder.c (init): Updated: a separator is now a char* rather + than a single char because IMAP can have a string for a directory + separator. Also, since IMAP does not begin with a directory separator, + there is a new argument (path_begins_with_sep) which decides if a + directory should begin with a directory separator. + + * providers/imap/camel-imap-store.c (imap_create): Since, on connect, + Camel tries to create INBOX (which already exists on every IMAP + provider) we can return TRUE when the folder name is "INBOX". + + * providers/vee/camel-vee-folder.c (vee_init): Updated. + + * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Updated. + + * providers/mbox/camel-mbox-store.c (get_folder): Updated. + + * providers/mbox/camel-mbox-folder.c (mbox_init): Updated. + + * providers/pop3/camel-pop3-folder.c (camel_pop3_folder_new): Updated. + +2000-06-14 Dan Winship <danw@helixcode.com> + + * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync): + Renamed from camel_mbox_summary_expunge. Takes a gboolean saying + whether to expunge or just sync the mbox file. Change some + g_errors to g_warning so we don't abort. Make the quick + X-Evolution updating code lseek around correctly. Update the + mbox mtime in the summary file even in the quick case. + + * providers/mbox/camel-mbox-summary.h: make + CAMEL_MESSAGE_FOLDER_NOXEV not conflict with + CAMEL_MESSAGE_FOLDER_FLAGGED defined in camel-mime-message.h + + * providers/mbox/camel-mbox-folder.c (mbox_close): call + camel_mbox_summary_sync to save flag state if not expunging. + (mbox_expunge): Update for camel_mbox_summary_expunge rename. + +2000-06-13 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (camel_imap_store_open): + (camel_imap_store_close): Added. + (camel_imap_command_extended): Fixed a segfault and updated + to use camel_imap_status() + (camel_imap_command): Updated to use camel_imap_status() + (camel_imap_status): New convenience function for parsing + the return status of an IMAP command + +2000-06-12 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_message_by_uid): + Works like the POP fetch code, should work temporarily until + we get around to coding it the way it "Should Be". + + * providers/pop3/camel-pop3-folder.c (get_message_by_uid): Now uses + the camel-mime-filter-crlf decoder when retrieving messages. + + * camel-mime-filter-smtp.c: Deprecated. + + * providers/smtp/camel-smtp-transport.c (smtp_data): Updated to use + camel-mime-filter-crlf with my 'dot' extension in place of + camel-mime-filter-smtp + + * camel-mime-part.c (write_to_stream): Updated to reflect changes + made to camel-mime-filter-crlf.c + + * camel-mime-filter-crlf.c (filter): Modified to be able to + encode/decode dots ("\n.\n"<->"\n..\n"). Also fixed the decoder + so that it should no longer get caught in an infinite loop. + +2000-06-12 Dan Winship <danw@helixcode.com> + + * providers/*/Makefile.am: don't pass a second (incorrect) -rpath + in addition to the (correct) one automatically provided by + automake. + + * camel-mime-filter-crlf.c: New filter to do CRLF<->LF conversion. + (Currently only tested in the LF->CRLF direction.) + + * camel-mime-part.c (write_to_stream): if content-type is text, + and it's QP or B64 encoded, pass through the CRLF filter before + the other filter to satisfy the "canonical encoding" rules in the + MIME spec. + +2000-06-09 Dan Winship <danw@helixcode.com> + + * camel-session.c (camel_session_query_authenticator): Add another + argument, "mode", which can be CAMEL_AUTHENTICATOR_ASK or + CAMEL_AUTHENTICATOR_TELL, so callers can get the app to un-cache + bad info. + + * providers/pop3/camel-pop3-store.c (pop3_connect): uncache the + password if it doesn't work. + +2000-06-09 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-stream.c (stream_read): Updated to reflect + changes made in camel-imap-store.c + + * providers/imap/camel-imap-store.c (imap_create): No longer checks to + make sure a folder doesn't already exists (as this is no longer needed) + (camel_imap_command): Now takes a CamelFolder argument so it can detect + whether or not it needs to SELECT a folder or not + (camel_imap_command_extended): Same. + + * providers/smtp/camel-smtp-transport.c (smtp_connect): Will now always + send EHLO first, if that fails it will fall back on HELO. + (esmtp_get_authtypes): Should now correctly parse authtypes. + +2000-06-07 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-summary.c: Now builds (not that it's worth + much yet). + + * providers/imap/camel-imap-folder.c (imap_get_uids): Now uses the + correct cast to a CamelImapMessageInfo structure (should get rid of + compile warnings). + + * providers/imap/Makefile.am: Added rules to build + camel-imap-stream + + * providers/imap/camel-imap-store.c (get_folder): Update. + Moved imap_create here. + + * providers/imap/camel-imap-folder.c (delete_messages): Remove. + (imap_create): Removed. + (imap_delete): Removed. + (imap_exists): Removed. + + * providers/imap/camel-imap-stream.h: Added typedef's for the stream + + * providers/imap/camel-imap-stream.c: Modified to build cleanly + +2000-06-07 Not Zed <NotZed@HelixCode.com> + + * camel-mime-utils.c (header_msgid_decode_internal): Properly + dereference warning/debug messages. + (header_references_decode): Check we actually have msgid stuff + before trying to decode it ... + +2000-06-06 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-imap-stream.[c,h]: Removed + + * providers/imap/camel-imap-stream.[c,h]: Relocated to this + location + + * providers/imap/camel-imap-summary.c: Added + +2000-06-06 Dan Winship <danw@helixcode.com> + + * camel-folder.c: Remove exists, create, delete. A CamelFolder + now always references an existing folder. Remove delete_messages + too since it wasn't being used. Add a "create" flag to + get_subfolder saying whether or not to create the subfolder if it + doesn't yet exist. + + * camel-store.c (camel_store_get_folder): Add a "create" flag to + say whether or not to create the folder if it doesn't yet exist. + (camel_store_delete_folder): New method, moved from CamelFolder. + (cache_folder, uncache_folder): Fix up a bit. + (get_folder_name): Explain what this is for. + + * providers/mbox/camel-mbox-folder.c: + * providers/mbox/camel-mbox-store.c: Update. Remove support for + hierarchical folders to simplify this for now, since we're not + using it, and it's not completely clear how they should work in an + ELocalStorage world. Needs to be revisited. + + * providers/pop3/camel-pop3-folder.c (delete_messages): Remove. + * providers/pop3/camel-pop3-store.c (get_folder): Update. + + * providers/vee/camel-vee-folder.c (exists): Remove. + * providers/vee/camel-vee-store.c (vee_get_folder): Update. + +2000-06-06 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-*.[c,h]: Started on getting + imap to build cleanly (tho some work has not been completed + so it still won't build until camel-imap-summary is finished + along with a few methods in camel-imap-folder) + + * camel-stream.[c,h]: Changed the read and write method prototypes + to return an ssize_t type rather than an int and also changed + the 'number of bytes' to read or write to a size_t type + + * camel-stream-fs.c: same as above + + * camel-stream-mem.c: again, same as above + + * camel-stream-buffer.c: same + + * camel-imap-stream.[c,h]: Added this new stream, cache's previously + read data so each successive call will instead read from the cache + +2000-06-05 Dan Winship <danw@helixcode.com> + + * camel-mime-part.c (camel_mime_part_set_disposition): fix + typo/braino (set "Content-Disposition", not "Content-Description") + (camel_mime_part_set_filename): const poison + +2000-06-02 Not Zed <NotZed@HelixCode.com> + + * camel-mime-utils.c (base64_encode_step): Ick, damn signs! Fix a + bug with sign extended bytes. + + * camel-mime-filter-smtp.c (filter): Changed layout/logic slightly + (to match From filter) + +2000-06-02 Jeffrey Stedfast <fejj@helixcode.com> + + * camel-mime-filter-smtp.c (filter): Fixed the filter so that it + wouldn't insert garbage under certain conditions. + +2000-06-02 Christopher James Lahey <clahey@helixcode.com> + + * camel-session.c: Don't ref the services in the cache. + +2000-06-02 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c: Rearanged where debug + fprintf statements we placed so that any data the server sends + back is printed out before an exception is set and the function + returns. + +2000-06-02 Not Zed <NotZed@HelixCode.com> + + * camel-mime-utils.c (header_decode_date): If we get a funny + result, just throw it out. Basically a fix for the one true + broken TradeClient. + +2000-06-01 Not Zed <NotZed@HelixCode.com> + + * camel-folder-summary.c (message_info_free): Free + references/messsage id. + (message_info_save): Save them. + (message_info_load): Load them. + (message_info_new): And get them from the new message. + (CAMEL_FOLDER_SUMMARY_VERSION): Bumped for new changes. + + * camel-folder-summary.h: Added references and messageid to + summary. + +2000-06-02 Christopher James Lahey <clahey@helixcode.com> + + * camel-session.c: Ref and unref objects in the service cache + properly. + + * camel-store.c: Ref the folder when returning it using + lookup_folder. Used the folder's full name for the key for the + folder cache since that's used to uncache it. + +2000-06-02 Dan Winship <danw@helixcode.com> + + Fun with purify. + + * providers/pop3/camel-pop3-store.c (pop3_connect): free msg on + success as well as failure. + (camel_pop3_command_get_additional_data): free buf after reading + the last line ("."). + + * providers/pop3/camel-pop3-folder.c (get_message_by_uid): free + body data after creating the memstream from it (which will copy + the data). + + * providers/mbox/camel-mbox-folder.c (mbox_finalize): free summary + and index paths. + + * camel-data-wrapper.c (finalize): unref the stream, if it exists. + +2000-06-01 Not Zed <NotZed@HelixCode.com> + + * camel-mime-part.c (construct_from_parser): For a message part, + set the default content-type to message/rfc822. Maybe needs to be + done for multiparts too? + +2000-05-31 Not Zed <NotZed@HelixCode.com> + + * camel-mime-message.c (construct_from_parser): Typo in assersion. + + * camel-mime-parser.c (folder_scan_step): Use a default type of + message/rfc822 for multipart/digest. Bug Z192. + (folder_scan_drop_step): Remove warning. + +2000-05-30 Not Zed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-folder.c (mbox_append_message): Init + filter_from to NULL, for exception case. + (mbox_get_message_by_uid): Cast off_t to long int for diagnostics. + + * camel-url.c (camel_url_hash): Hash funciton for using camel + url's as hash keys. + (camel_url_equal): equal function for same. + + * camel-session.c (camel_session_finalise): Free cached services. + (camel_session_init): Init service cache. + (service_cache_remove): destroy callback to remove a service from + the cache. + + * camel-store.c (get_folder_internal): Remove the extra ref of the + folder. That seems the right behaviour ...? + (camel_store_get_type): Doh, actually call store init, so the + cache works. + (cache_folder): strdup the folder name! no wonder it never found + it again. + +2000-05-30 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c: Implemented a few more + methods like imap_append and 1 or 2 others + +2000-05-29 Not Zed <NotZed@HelixCode.com> + + * camel-store.c (camel_store_init): Move it to here. If this + level is going to maintain it, it should set it up. Lets see what + caching folders breaks :( + + * providers/pop3/camel-pop3-store.c (camel_pop3_store_init): Dont + init folder cache here. + + * providers/mbox/camel-mbox-summary.c + (camel_mbox_summary_expunge): Make sure we copy messages which are + still intact to the new folder. + (camel_mbox_summary_expunge): Update the frompos as well when + moving the content. + (camel_mbox_summary_expunge): Remove some debug, and dont offset + frompos? + + * providers/vee/camel-vee-folder.c (vee_folder_build): Check the + searched folder is open before trying to search it. + (message_changed): Track changes to the source message in the + summary. + (folder_changed): Track folder changes, re-query the folder that + changed, and cascade the changed event as well. + (camel_vee_folder_finalise): Free subfolder and subfolder summary. + +2000-05-29 Dan Winship <danw@helixcode.com> + + * camel-service.c (camel_service_new): Fix up some glib + precondition stuff. Try to set the URL in camel_service_new before + checking whether or not it's "empty" so that you can successfully + set "sendmail:" as a URL. + +2000-05-28 Dan Winship <danw@helixcode.com> + + * camel-provider.h: Add a domain field to CamelProvider, to say + what kind of data it provides. + + * providers/imap/camel-imap-provider.c: + * providers/mbox/camel-mbox-provider.c: + * providers/pop3/camel-pop3-provider.c: + * providers/sendmail/camel-sendmail-provider.c: + * providers/smtp/camel-smtp-provider.c: Set domain to "mail". + + * providers/nntp/camel-nntp-provider.c: Set domain to "news". + + * providers/vee/camel-vee-provider.c: Set domain to "vfolder". (So + it doesn't end up being listed as a potential mail source in the + mail config wizard.) + + * providers/pop3/camel-pop3-store.c: Split apart password and APOP + auth, since some servers seem to do both, but don't really. + (connect_to_server): Renamed from try_connect. Now actually does + the connection up to the point of checking the greeting for APOP + support. + (query_auth_types): Return APOP, if appropriate. Call + pop3_disconnect after connect_to_server since we don't really want + to be connected. + (pop3_connect): Use connect_to_server rather than duplicating + code. Fix a one-byte buffer overrun in the APOP code. + (pop3_disconnect): Make this able to clean up after a partial + connect. + (connect_to_server): Remove port number from error message since + it's not terribly useful and we were getting it from the wrong + place anyway. + + * camel-mime-utils.c (header_address_list_format_append): Use + `foo@bar' rather than `"" <foo@bar>' for email addresses with no + name component. + +2000-05-27 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c: Removed + camel_imap_command_get_additional_data() as it was + completely useless, replaced with + camel_imap_command_extended() which may eventually replace + camel_imap_command() as well. + + * providers/imap/camel-imap-store.h: Modified to reflect + changes made to camel-imap-store.c + + * providers/imap/camel-imap-folder.c: Wrote the first of many + methods: camel_imap_init(), imap_open(), imap_expunge(), + imap_get_message_count(), and imap_get_subfolder_names() + +2000-05-26 Dan Winship <danw@helixcode.com> + + * camel-multipart.c (camel_multipart_init): Don't set a default + boundary. Require the caller to do that. + (set_boundary): if boundary is NULL, generate a "random" boundary. + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Add a call to + camel_multipart_set_boundary after creating a new multipart. + +2000-05-25 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-store.c (try_connect): Removed + Exception code - Pop doesn't seem to set exceptions + + * providers/imap/camel-imap-folder.c: Initial code, mostly + just a template for future code + + * providers/imap/imap.[c,h]: Source code from my personal + mailer - for reference only! + +2000-05-25 NotZed <NotZed@HelixCode.com> + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Replace simple + data wrapper here too, oops. + + * Makefile.am (libcamel_la_SOURCES): Removed + camel-simple-data-wrapper again. Less code to maintain == better + code. + + * camel-data-wrapper.c (construct_from_stream): Fixes for bug + where text attachments dont work. Made data-wrapper concrete for + the second time. + +2000-05-23 NotZed <NotZed@HelixCode.com> + + * providers/vee/camel-vee-folder.c (vee_folder_build_folder): + Update the vfolder details for a single folder. + +2000-05-25 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c (_send_to): Took out code + that had been there to reconnect to the server if it was not + already connected - Mailer code was fixed so that this should not + be needed. + + * providers/imap/camel-imap-store.[c,h]: Initial code. + +2000-05-24 Dan Winship <danw@helixcode.com> + + * camel.h: Re-add camel-simple-data-wrapper.h, which was removed + for some reason. + +2000-05-24 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.[c,h]: Moved global + variables into struct CamelSmtpTransport to make SMTP + thread-safe + + * providers/imap/camel-imap-*.h: Stolen from Mbox. Rough structure + for Imap. + +2000-05-23 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap: Added some initial code to the camel tree + for IMAPv4 + + * providers/imap/.cvsignore: Added to repository + + * providers/smtp/camel-smtp-transport.c: Added debug fprintf's + so that testers can provide more information. Tested with simple + messages and a reply to the hello@helixcode.com default message + but should really be tested more. + (smtp_data): Fixed to use data_wrapper_write_to_stream. + + * camel-mime-filter-smtp.c (filter): Modified to escape all lines + beginning with a '.' and to place a \r before each \n if one did + not previously exist. Removed code to escape "From " as it was + found to not be needed for SMTP. + +2000-05-22 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/smtp/camel-smtp-transport.c (smtp_data): Fixed the + filtered stream. Fixes for stream changes, updated to use + camel-mime-filter-smtp. + + * Makefile.am: Added camel-mime-filter-smtp.c + + * camel-mime-filter-smtp.[c,h]: Added to camel tree + Smtp filter used to change \n into \r\n, escape lone dots, + and escape "From "'s. + +2000-05-19 NotZed <NotZed@HelixCode.com> + + * camel-simple-data-wrapper.c (construct_from_stream): If we + already have been constructed, unref our content. + (write_to_stream): Check we've been constructued, and change for + stream api changes. + + * camel-mime-parser.c: Removed exception stuff. + + * md5-utils.c (md5_get_digest_from_stream): repaired. + + * camel-mime-message.c: Remove exception from write_to_stream, and + fix, and fix formatting. + + * providers/sendmail/camel-sendmail-transport.c (_send_internal): + Fix for stream changes. + + * providers/pop3/camel-pop3-store.c (camel_pop3_command): Fixes + for stream changes. + + * providers/mbox/camel-mbox-folder.c, and elsewhere, fix all + stream api changes. + (mbox_append_message): Use stream_close() now its back. + (mbox_append_message): unref the from filter. + + * camel-stream-mem.c: And here. + + * camel-stream-fs.[ch]: Here too. + + * camel-stream-filter.c: Likewise. This is getting tedious. + + * camel-stream-buffer.c (stream_write): Fix a few little problems. + (stream_close): Reimplement. + (camel_stream_buffer_read_line): Slightly more efficient version, + that also only allocates the right amount of memory for strings. + + * camel-seekable-substream.c: Likewise. + + * camel-seekable-stream.[ch]: Remove exceptions, fix formatting, + changes for stream (re)fixes. set_bounds returns an error. + + * camel-stream.[ch]: Remove exceptions. Make flush and reset return + an error code, repair all the screwed up formatting, and put back + close. + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): And here. + + * camel-mime-part.c (camel_mime_part_set_content): And this too. + (write_to_stream): Fixed for stream changes. + + * camel.h: Fixed. + + * providers/vee/camel-vee-folder.c (vee_search_by_expression): + Implement. Performs an intersection of the two searches. + (camel_vee_folder_finalise): Unref search folders. + (vee_append_message): Implement append. + +2000-05-18 Dan Winship <danw@helixcode.com> + + * camel-folder.c: remove message_number_capability and require uid + capatibility. + (camel_folder_list_subfolders, camel_folder_get_uid_list, + camel_folder_get_subfolder_info, camel_folder_get_message_info): + removed + (camel_folder_get_subfolder_names, + camel_folder_free_subfolder_names): new subfolder interfaces. + (camel_folder_get_uids, camel_folder_free_uids): new uid + interfaces + (camel_folder_get_summary, camel_folder_free_summary): new summary + interfaces + + * providers/mbox/camel-mbox-folder.c, + * providers/nntp/camel-nntp-folder.c: + * providers/vee/camel-vee-folder.c: Update for changes + + * providers/pop3/camel-pop3-folder.c: Implement get_uids, update + for other changes. + +2000-05-18 NotZed <NotZed@HelixCode.com> + + * providers/vee/camel-vee-folder.c: Guess! + + * camel-folder-search.c (search_user_flag): Implement user_flag + search term. + + * camel-folder-search.h: Added user_flag search capability + (user-flag "blah") + + * providers/mbox/camel-mbox-folder.c (mbox_init): Set USER flag in + permanent flags for the folder. + +2000-05-17 Dan Winship <danw@helixcode.com> + + * camel-folder.c: Remove unused async open/close and + copy_message_to functions. + Rename functions without initial _. Fix glib preconditions and + gtk-doc comments. + +2000-05-17 Dan Winship <danw@helixcode.com> + + * camel-data-wrapper.c: remove get/set_output_stream operations. + They're redundant with write_to_stream, and CamelMimePart and + CamelMimeMessage only implement the latter, meaning that trying to + get_output_stream on a CamelMimeMessage that was built from pieces + rather than being parsed from a stream doesn't work. Anything that + uses get_output_stream can be rewritten to use write_to_stream, so + we'll standardize on that. + (camel_data_wrapper_new): remove this: CamelDataWrapper is + supposed to be an abstract class. + (write_to_stream): remove default implementation. (Moved to + CamelSimpleDataWrapper) + + * camel-simple-data-wrapper.c: resurrect, although it's not really + the same thing it was before. A simple data wrapper, which is + backed by a CamelStream. + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): Use + construct_from_stream rather than set_output_stream. + (camel_mime_part_construct_content_from_parser): Change + camel_data_wrapper_new to camel_simple_data_wrapper_new. + + * camel-mime-part.c (camel_mime_part_set_content): Change + camel_data_wrapper_new to camel_simple_data_wrapper_new. + +2000-05-17 Darin Adler <darin@eazel.com> + + * camel-folder-summary.c: (message_info_load): + Quick fix to get it to compile. I hope I don't get into trouble. + +2000-05-17 Dan Winship <danw@helixcode.com> + + * camel.h: Don't include the no-longer-distributed + possibly-to-be-removed headers. + + * providers/smtp/camel-smtp-transport.c + (smtp_get_email_addr_from_text): fix an off-by-one error in + address parsing + (smtp_data): use camel_data_wrapper_get_output_stream rather than + data_wrapper->output_stream + +2000-05-17 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-folder.c (message_changed): Snoop + changes to user flags on the message into the summary as well. + + * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_init): + Changed version init to include the parent class version info + (i.e. add it not overwrite it). + + * camel-folder-summary.c (message_info_new): Initialise user_flags + to empty. + (message_info_load): And load user flags. + (message_info_save): And save user flags. + (message_info_free): And free them. + (CAMEL_FOLDER_SUMMARY_VERSION): Bumped file revision. + + * camel-folder-summary.h: Added user-flags to summary. + + * camel-mime-message.c (camel_mime_message_set_user_flag): Dont + use a hashtable for user flags. + (camel_mime_message_get_user_flag): And changed here too. + (camel_flag_get): New interface to get a flag from a flag + list. Flag lists are easier to work with than hash tables, and + save memory too. + (camel_flag_set): And set. + (camel_flag_list_free): And free. + (free_key_only): Discard. + (finalize): Remove the flag list. + +2000-05-17 Jeffrey Stedfast <fejj@stampede.org> + + * providers/smtp/camel-smtp-transport.c: (smtp_helo): Error + checking on gethostbyaddr() eliminating a possible segfault. + +2000-05-16 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-folder.c (mbox_delete_message_by_uid): + Implement. + +2000-05-12 NotZed <NotZed@HelixCode.com> + + * camel-movemail.c (camel_movemail): Open the destination with + O_APPEND, so we dont blow away a partially transferred mbox. + (camel_movemail): Loop if we get errno=INTR, and not fail. + +2000-05-11 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-summary.c (summary_rebuild): Update + the summarised file size, if everything went ok. + (camel_mbox_summary_expunge): Clear header flags after updating. + +2000-05-16 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-folder.c: + * providers/nntp/camel-nntp-folder.h: + * providers/nntp/camel-nntp-provider.c: + * providers/nntp/camel-nntp-store.c: + * providers/nntp/camel-nntp-utils.c: + * providers/nntp/camel-nntp-utils.h: + get things working with new camel summary stuff. + + * providers/nntp/camel-nntp-summary.c: + * providers/nntp/camel-nntp-summary.h: + removed files since camel-folder-summary does all we need. + +2000-05-15 Jeffrey Stedfast <fejj@stampede.org> + + * providers/smtp/camel-smtp-transport.c: Added some preliminary + AUTH support. + +2000-05-15 Dan Winship <danw@helixcode.com> + + * camel-folder.h: Remove camel_folder_get_summary, which no longer + exists. + +2000-05-11 Dan Winship <danw@helixcode.com> + + * Makefile.am: remove some cruft that we're not currently using. + + * camel-stream-mem.c (camel_stream_mem_new_with_buffer): Change + to match prototype (size_t vs unsigned int) so it works on 64-bit + machines. Noted by msw. + +2000-05-11 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-folder.c (message_changed): Indicate + the summary changed also. + +2000-05-11 Jeffrey Stedfast <fejj@stampede.org> + + * providers/smtp/camel-smtp-transport.c: (smtp_helo): + Updated to more closely comply with RFC 821 standards + +2000-05-11 NotZed <NotZed@HelixCode.com> + + * camel-mime-part.c (write_to_stream): Unref the filter after + adding it to the filtering stream. + + * providers/mbox/camel-mbox-summary.c + (camel_mbox_summary_finalise): Free the folder path. + (camel_mbox_summary_update): Also save summary when done. + (camel_mbox_summary_expunge): Unindex items when deleting them. + (camel_mbox_summary_expunge): Save the index as well as the + summary. + + * camel-folder-summary.c (camel_folder_summary_finalise): Free the + summary path. + (camel_folder_summary_touch): New function, indicate the summary + info changed. + (camel_folder_summary_remove): Dirty here. + + * camel-internet-address.c (internet_decode): Free multiple entry + addresses properly. + + * camel-mime-utils.c (header_decode_mailbox): Plugged another + memleak, free text after converting it. + (header_decode_addrspec): More leaks plugged. + + * camel-mime-message.c (finalize): Free message_uid. + (finalize): Free the recipients hashtable. + +2000-05-11 NotZed <notzed@helixcode.com> + + * camel-folder-summary.c (camel_folder_summary_finalise): Free + summary items and charset filters. + +2000-05-10 NotZed <notzed@helixcode.com> + + * camel-folder-summary.c (camel_folder_summary_finalise): Don't + free stuff in p, after we've free'd p. + + * providers/mbox/camel-mbox-folder.c (mbox_append_message): Unref + the stream we created for appending. + +2000-05-10 Jeffrey Stedfast <fejj@stampede.org> + + * providers/smtp/camel-smtp-transport.c: (camel_smtp_transport_class_init): + Added initialization for service_class + +2000-05-10 Dan Winship <danw@helixcode.com> + + * camel-multipart.c (write_to_stream): fix a stupid typo. Thank + you, C. + + * camel-mime-part.c (write_to_stream): don't ref the stream before + wrapper a filter around it, since nothing will ever unref it. + +2000-05-10 Christopher James Lahey <clahey@helixcode.com> + + * Makefile.am: Added camel-types.h, camel-folder-pt-proxy.h, and + camel-thread-proxy.h. + +2000-05-09 Dan Winship <danw@helixcode.com> + + * providers/sendmail/camel-sendmail-transport.c (_send_internal): + Bleah. Can't fsync a pipe. As a quick kludge, just don't + stream_flush it. The right fix will require bringing back + stream_close though. + +2000-05-09 Jeffrey Stedfast <fejj@stampede.org> + * camel-internet-address.[c,h]: Undid my changes (moved + struct _address back into came-internet-address.c) + * providers/smtp/camel-smtp-transport.c: (_send): changed + from using it's own address manipulation (using struct _address) + to using camel_internet_address_get(). Also some format changes + to keep consistant with the rest of Camel + +2000-05-09 Jeffrey Stedfast <fejj@stampede.org> + + * camel-internet-address.[c,h]: Moved struct _address from + camel-internet-address.c to camel-internet-address.h + (hopefully this doesn't break anything...) + * providers/smtp/camel-smtp-transport.c: (_send): now + populates the recipient list with To, Cc, and Bcc addresses. + Should now be able to use this module. + +2000-05-09 Dan Winship <danw@helixcode.com> + + * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid): + one more refcounting fix I missed before. + +2000-05-08 Jeffrey Stedfast <fejj@stampede.org> + + * providers/smtp/camel-smtp-transport.c: no longer frees memory it + shouldn't, updated to reflect camel-stream changes involving + CamelException (perhaps it should use a different CamelException + variable than is passed to the camel smtp module?) + +2000-05-08 Dan Winship <danw@helixcode.com> + + * camel-stream.c (camel_stream_read, camel_stream_write, + camel_stream_flush, camel_stream_reset, camel_stream_printf, + camel_stream_write_to_stream): Use CamelException to signal + failure. + (camel_stream_write_strings): Remove. camel_stream_printf is more + useful in most of the places that used this. + (camel_stream_write_string): Change from macro to function to + prevent problems with double-evaluation. + + * camel-seekable-stream.c (camel_seekable_stream_seek, + camel_seekable_stream_set_bounds): Use CamelException. + (reset): Update. + + * camel-seekable-substream.c, camel-stream-buffer.c, + camel-stream-filter.c, camel-stream-fs.c, camel-stream-mem.c: + Update. + + * camel-stream-fs.c: Remove the virtual init functions and move + the code into the creator functions. Add CamelExceptions to + creation functions that could fail. + + * camel-data-wrapper.c (camel_data_wrapper_write_to_stream): Use + CamelException. + * camel-mime-message.c, camel-mime-part.c, camel-multipart.c + (write_to_stream): Update. + + * camel-mime-parser.c: add an exception to the mime parser private + data and pass that to stream functions as needed. + + * gmime-content-field.c, md5-utils.c: Update (badly) for stream + changes. + + * camel-exception.h (camel_exception_is_set): convenience macro. + + * providers/Makefile.am: disable SMTP for now + + * providers/mbox/camel-mbox-folder.c (mbox_append_message): Pass + CamelException to the functions that now need it. Check the + exception after calling camel_stream_flush, and fail if it fails. + (mbox_get_message_by_uid): More updates. + + * providers/pop/camel-pop3-folder.c, + providers/pop/camel-pop3-store.c, + providers/sendmail/camel-sendmail/transport.c: Update. + + +2000-05-08 NotZed <NotZed@HelixCode.com> + + * camel-mime-message.c (process_header): Format From and Reply-To + to at least a decoded string. Should probably store them as an + camelinternetaddress. + + * Merged NEW_SUMMARY branch back to trunk, and resolved conflicts. + + * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_update): + Return status. + (camel_mbox_summary_expunge): Force an update of the summary + before we do anything. + (camel_mbox_summary_expunge): Build new xev line in xevnew, and + free that, and consify xev. + (camel_mbox_summary_load): If we are rebuilding from scratch, make + sure we clear the summary content. + + * camel-stream-filter.c (do_close): We NEED a stream close. + +2000-05-07 Dan Winship <danw@helixcode.com> + + Make camel not leak like a sieve. + + * camel-object.c: New subclass of GtkObject which is now the base + of the Camel object hierarchy. Currently the only difference + between CamelObject and GtkObject is that CamelObjects don't start + out floating. + + * *.h: Move a bunch of typedefs to camel-types.h. Standardize on + using <camel/foo.h> in header files rather than <foo.h>, "foo.h", + or "camel/foo.h". Remove some unneeded includes. + + * camel-address.c, camel-data-wrapper.c, camel-folder-search.c, + camel-folder-summary.c, camel-folder.c, camel-mime-filter.c, + camel-mime-parser.c, camel-service.c, camel-session.c, + camel-stream.c: These are now subclasses of CamelObject. + + * camel-data-wrapper.c (set_output_stream): + * camel-medium.c (set_content_object): + * camel-seekable-substream.c + (init_with_seekable_stream_and_bounds): + * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid): + remove gtk_object_sink calls. + + * camel-stream-buffer.c (init_vbuf): + * camel-stream-filter.c (camel_stream_filter_new_with_stream): + ref the original stream. + + * camel-folder-summary.c (camel_folder_summary_finalise): unref + the filters when finalizing. + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser, + camel_mime_part_construct_content_from_parser): + * camel-mime-part.c (camel_mime_part_set_content): Unref objects + that are created only to be handed off to other objects. If + they're going to be needed later, they will have been additionally + ref'ed by the object that needs them. + + * providers/pop3/camel-pop3-folder.c (get_message_by_number): + unref the message stream after creating the data from it. + + * camel-stream.c, camel-stream-buffer.c, camel-stream-filter.c, + camel-stream-fs.c, camel-stream-mem.c: Remove camel_stream_close, + since its semantics are dubious (what happens when you close a + stream other people still have references on?). + + * providers/nntp/camel-nntp-store.c: + * providers/smtp/camel-smtp-transport.c: + * providers/pop3/camel-pop3-store.c: + replace camel_stream_close calls with gtk_object_unref. + + * providers/mbox/camel-mbox-folder.c: + * providers/nntp/camel-nntp-folder.c: + * providers/sendmail/camel-sendmail-transport.c: + replace camel_stream_close with camel_stream_flush + + gtk_object_unref + +2000-05-06 Dan Winship <danw@helixcode.com> + + * providers/pop3/camel-pop3-store.c (query_auth_types): A machine + which serves neither POP nor KPOP is not a POP server. + + * providers/smtp/camel-smtp-provider.c: Note in the description + that this provider is not yet tested. + +2000-05-08 NotZed <notzed@helixcode.com> + + * camel-mime-part.c (write_to_stream): Free the filter stream when + done. + + * camel-mime-parser.c (folder_seek): Make sure we add the \n + terminal when we seek as well (frob!). + + * camel-mime-utils.c (header_decode_addrspec): Plug minor memleak. + + * camel-mime-part.c (finalize): Free header tables once finished. + + * camel-folder-summary.c (camel_folder_summary_remove): Dont try + to access info after its free'd. + +2000-05-07 NotZed <NotZed@HelixCode.com> + + * camel-mime-part.c (write_to_stream): Apply encoding to content + part, when writing to a stream *sigh*. + + * camel-stream-filter.c (do_write): implement write for the + filtering stream. Writes shouldn't be mixed with reads. + (do_flush): Implemented flush. Again write/flush shouldn't be + mixed with reads. Only flushes if the last op was write. + (do_close): Force flush on close. + + * camel-mime-filter.c (filter_run): Oops, make sure we include the + backlen in the total length before passing onto the filter. + + * camel-mime-filter-from.c: New filter, munges 'From ' lines into + '>From ', for mbox. + + * camel-mime-parser.c (camel_mime_parser_header_remove): New + function to remove the parser's raw header, rather than + manipulating the header directly (wich doesn't work with + mempools). + + * camel-mime-utils.c (header_address_list_clear): Fixed some + broken(tm) logic, which would leak entries on multivalued lists. + + * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load): + Use ibex_save() to save the ibex. Makes a big difference to + startup times for very large mailboxes. + (camel_mbox_summary_expunge): Dum de dum, reimplemented. Designed + to be much more robust, and to stop immediately if anything awry + happens. + (copy_block): Utility function to copy n bytes from one fd to + another. + (header_write): Utility function to write out raw headers to an + fd. + (camel_mbox_summary_update): Incremental summary updater. + + * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid): + Dont unref the stream, because of the broken(tm) ref model of gtk + widget that for some odd reason is being perpetuated in camel. + (mbox_expunge): Reenable expunge again. + (mbox_append_message): Removed the optimised mbox append. If its + an issue, it can go back later. Cleaned up a lot, checks error + returns, and automagically translates 'From ' into '>From' as + necessary. + +2000-05-07 NotZed <notzed@helixcode.com> + + * camel-mime-filter.c (filter_run): Oops, forgot to add the + backlen to the pre-buffer (*poof*). + +2000-05-07 NotZed <NotZed@HelixCode.com> + + * camel-mime-message.c (construct_from_parser): Allow + HSCAN_FROM_END to terminate the processing of a message. + + * camel-folder-summary.c (perform_content_info_load): Ick, dont + try and append a node onto its own list. + (camel_folder_summary_clear): Actually clear the indexes after + we've removed the messages. + (camel_folder_summary_clear): Set dirty if it changes. + (camel_folder_summary_load): Clear dirty. + (camel_folder_summary_save): Only save if dirty. + + * providers/mbox/camel-mbox-summary.c (summary_header_load): Oops, + remember to call that parent class first ... + (summary_header_save): Here too. + (camel_mbox_summary_load): Do more checking to verify the index + contents as well as teh summary contents, against the mbox + contents. + (camel_mbox_summary_load): Removed some fo that checking, it needs + more code to work reliably. + +2000-05-07 NotZed <notzed@helixcode.com> + + * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load): + Set the size and mtime of the mbox we indexed once done. + + * camel-folder-summary.c (camel_folder_summary_set_index): Dont + write the index if it changes - let the claler fix it (uh, kind of + impacts performance). + (camel_folder_summary_load): close in. + + * camel-folder-summary.c (summary_format_string): Check header + exists before trying to strip its leading spaces. + +2000-05-06 NotZed <NotZed@HelixCode.com> + + * camel-folder.h: Removed summary info from here, and include + camel-folder-summary.h as well. + + * camel-mime-parser.c (camel_mime_parser_step): Allow it to accept + a NULL databuffer. + + * providers/mbox/camel-mbox-summary.c: Totally new file, now + subclasses camel-folder-summary. + + * camel-folder-summary.c (message_info_load): Load the uid as a + string. + (message_info_save): And save too. + (camel_folder_summary_clear): New function, clears the contents of + the summary. + + * providers/mbox/camel-mbox-folder.c: Fixes for summary changes. + (mbox_get_message_by_uid): Completely redone. Now cross-checks + the summary information to make sure we get a real message. + (mbox_append_message): Disabled the copy version of append for + now. + (mbox_expunge): Temporarily disabled the expunge function, until + it is put back in camel-mbox-summary.c + +2000-05-05 NotZed <NotZed@HelixCode.com> + + * camel-folder-summary.c: And same here ... + (camel_folder_summary_encode_fixed_int32): Ugh, fwrite doesn't + return -1 on error .. + (camel_folder_summary_decode_fixed_int32): Neither deos fread. + (camel_folder_summary_encode_token): Fix here too. + (summary_build_content_info): Use start-headers to get the pos of + the message, not parser_tell(), which might not be what we + expected because of parser_unstep(). + (camel_folder_summary_encode_token): Use bserch() to tokenise the + values, rather than a linear search. + + * camel-mime-utils.c: Defined out some memory profiling stuff I + left there by mistake. + (header_decode_mailbox): Dont try to append the word part of a + local address if we ran out of words. + + * camel-mime-parser.c (folder_scan_content): Apply the fix from + the header scanner to here too. + (folder_scan_header): Only check for end of header if we have + space for it (didn't end the read with a newline) + (folder_scan_header): inptr is the only real thing we need + registerised for performance. Try to help the compiler be smart + about it .. + (folder_scan_header): Simplified the save header case a tad. + + Commented out some memory profiling stuff. + +2000-05-05 NotZed <notzed@helixcode.com> + + * camel-mime-utils.c (header_decode_mailbox): Plug a memory leak. + (header_decode_text): Fixed memory leaks with g_string_append(). + (header_encode_string): And here too, and a few other places. The + glib api is so awful ... + (header_content_type_decode): More memory leaks. + +2000-05-05 NotZed <notzed@helixcode.com> + + * camel-mime-parser.c (folder_scan_init_with_fd): Make sure we + init the end of buffer sentinal! + (folder_scan_init_with_stream): And here too ... + +2000-05-04 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-folder.c (summary_get_message_info): + Maxcount is minimum of the max and the requested count, not the + maximum :) + + * camel-mime-parser.c (folder_scan_content): Properly set midline, + so we dont falsely catch offset boundary markers (i.e. From inside + content). + (folder_read): Set a sentinal on the end of the read data (\n) so + we dont have to check the buffer boundary in the inner loop. + (mempool_*): New experimental memory management routines, speed + up simple structure parsing by about 25% ... not compiled in by + default. Something similar may be needed for camel-mime-utils to + address performance issues with g_malloc and friends. + + * camel-mime-utils.c: Added a macro w(x) used to wrap all warnings + about mime/rfc violations, so they can be turned off. + + * camel-folder-summary.c (summary_build_content_info): Step after + the end of a message ... + Turn into a stand-alone program for testing and profiling. + +2000-05-04 Dan Winship <danw@helixcode.com> + + * providers/pop3/camel-pop3-store.c (pop3_connect): Don't fall + back to plaintext passwords if APOP fails, since it should also + fail. + +2000-05-04 Dan Winship <danw@helixcode.com> + + * camel-session.c (camel_session_list_providers): New function to + replace camel_provider_scan. Returns a list of either (a) all + currently-loaded providers, or (b) all available providers. + + * camel-url.[ch]: Add an "empty" flag to CamelURL (indicating that + it contains only a protocol). + + * camel-service.c (camel_service_query_auth_types): Make this take + a CamelException (since it may have to try to connect to the + server, and it might not able to.) + + * providers/pop3/camel-pop3-store.c: add KPOP (Kerberized POP) + support. This is mostly so I have two kinds of authmech to play + with instead of just one. (But it does actually work.) + + * providers/smtp/camel-smtp-transport.c (query_auth_types): update + for prototype change, but disable the functionality, since it + doesn't really support any auth types yet. + (camel_smtp_transport_get_type): add an object init function to + set the service url_flags. + +2000-05-04 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-summary.c: Yes, and anotherone. + + * camel-mime-utils.c: And another one. + + * camel-mime-part.c: And another one. + + * camel-mime-part-utils.c: And another one. + + * camel-folder-search.c: And another one. + + * camel-mime-parser.c: Reverted a change wihtout a ChangeLog entry. + +2000-05-04 NotZed <NotZed@HelixCode.com> + + * camel-folder-summary.[hc]: Yes, CamelFolderSummary is back ... + ... re-usable class to summarise and index any stream or message + and to manage/load/save the created summaries. + + * camel-folder.c: Include string.h to kill a warning. + +2000-05-03 Jason Leach <leach@wam.umd.edu> + + * Makefile.am (INCLUDES): add $(UNICODE_CFLAGS) to the INCLUDES, + people who installed libunicde in non-standard include paths need + this. + +2000-05-03 NotZed <NotZed@HelixCode.com> + + * camel-folder.h: Added pos/bodypos/endpos to the basic message + content info object. Size to be removed? Moved the + messageconentinfo and messageinfo back to camel-folder-summary.h. + + * camel-mime-filter-index.c (camel_mime_filter_index_set_ibex): + New function to (re)set the index to use on a filter. + + * camel-mime-parser.c (camel_mime_parser_scan_from): Whole bunch + of inline docs. + (camel_mime_parser_drop_step): New function to drop a state from + the parser. Needs more testing. + + * camel-mime-utils.c (rfc2047_decode_word): If the iconv handle is + -1, then dont try and convert (crashes unicode_iconv?). + (rfc2047_decode_word): Use alloca for variables instead of + g_malloc - by the rfc they should always be short. + (rfc2047_decode_word): If we can't do the charset conversion, undo + the quoted-printable/base64 at least? Should probably convert + unknown characters to the utf-8 unknown character. + +2000-05-02 Larry Ewing <lewing@helixcode.com> + + * camel-mime-utils.c (header_decode_date): fix typo when + dereferencing saveoffset. + +2000-05-02 NotZed <NotZed@HelixCode.com> + + * camel-folder-search.c: Added some header doco. + + * camel.h: REmove gmime-utils.h from here. + + * providers/mbox/camel-mbox-search.[ch]: Removed. Functionally + redundant. + + * providers/mbox/camel-mbox-folder.c (mbox_search_by_expression): + Use the new CamelFolderSearch class to do the actual searching, + just setup the search here. + + * camel-folder-search.[ch]: A helper class that providers may + subclass to provide their own search functionality, or they can + simply use as is, it supports body searches if an ibex is + supplied, and header searches if a summary is supplied. + +2000-05-02 Matt Loper <matt@helixcode.com> + + * Makefile.am: set G_LOG_DOMAIN. + * providers/MH/Makefile.am: same. + * providers/maildir/Makefile.am: same. + * providers/mbox/Makefile.am: same. + * providers/nntp/Makefile.am: same. + * providers/pop3/Makefile.am: same. + * providers/sendmail/Makefile.am: same. + * providers/smtp/Makefile.am: same. + +2000-05-02 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-search.c + (camel_mbox_folder_search_by_expression): Dont store/remove + current search from the search list. + + * providers/mbox/camel-mbox-folder.h: Removed searches list, + searches are all sync now. + + * gmime-utils.[ch]: What the hell, remove it. This will break the + nntp provider. The mime parser can be used instead though. + Removed from all code including it (but none were using it). + + * gmime-utils.c (_store_header_pair_from_string): Removed bizarre + string_dichotomy version of this. This code is somewhat redundant + now, and is headed for death anyway. + + * gstring-util.c (g_string_dichotomy): Same with this one. + (g_string_clone): Removed a memory leak, g_string_new() allocates + its own memory. + (g_string_append_g_string): Allow to append an empty gstring onto + another gstring, dont abort()! + + * string-utils.c (string_dichotomy): Removed this incredibly weird + function. + + * camel-folder.c (_create): Replaced the rather obtuse use of + "string_dichotomy" function with a simple strrchr(). Still not + sure it'll work. + + * camel-folder-summary.c: cvs removed a long-removed file. + + * camel-mime-parser.c (folder_scan_header): Fix the previous + overflow problem properly (can happen in 2 places). + (header_append): A new macro to include the code changed above, so + it only appears in one place. + (folder_scan_step): Change the content type to text/plain if the + multipart is broken. Doesn't actually change the header though. + (header_append): Also move the header-start tracking stuff here. + Could be a static function to save code. + +2000-05-02 NotZed <notzed@helixcode.com> + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): Dont use autofill on + these fucking long function anmes!!!!!! + +2000-05-02 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-summary.c + (camel_mbox_summary_expunge): Fix the offset for the summary when + an item is expunged to take account of the From line. + +2000-05-01 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-folder.h (CamelMboxFolder): Removed + search_id. + + * providers/mbox/camel-mbox-search.c + (camel_mbox_folder_search_cancel): Remove.d + (camel_mbox_folder_search_complete): Removed. + (camel_mbox_folder_search_by_expression): Changed back to sync + api. + (struct _searchcontext): Removed cancelled flag. + (find_context): Removed. + (func_header_contains): Debug out some search stuff. + + * providers/mbox/camel-mbox-search.h + (camel_mbox_folder_search_by_expression): Moved back to sync api. + + * providers/mbox/camel-mbox-summary.c + (camel_mbox_summary_set_flags_by_uid): New function to update the + flags in the summary. + (camel_mbox_summary_expunge): Expunge messages from a folder. + (offset_content): Re-align offsets of summary when messages + added/removed to an existing summary. + (camel_mbox_summary_remove_uid): Remove a message summary entry by + uid. + (index_folder): Restore flags from X-Evolution header, if they are set. + (index_folder): Make sure we index using a decimal uid, since + thats what everything else indexes off (oops). + Upped SUMMARY_VERSION as a result. + (camel_mbox_summary_expunge): Oops, my wrong, use the string uid + to unindex on. + + * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): + Connect to the message_changed signal. + (_init): Set permanent flags to something reasonable. No user + flags yet ... + (message_changed): If the flags of the message change, update the + flags in the summary. + (mbox_expunge): Implement the expunge. + (camel_mbox_folder_class_init): Renamed all leading _'s to mbox_'s + (mbox_expunge): Emit a folder_changed signal on expunge (uh, even + if it didn't ...) + + * camel-folder.c (_finalize): Uh, dont free permanent_flags + anymore (this wouldn't failed anyway, it was a GList !!!) + (camel_folder_search_complete): Removed. + (camel_folder_search_cancel): Removed. + (camel_folder_expunge): Changed to only allow expunge on an open + folder. It doesn't make sense for mbox, otherwise (?) + (camel_folder_class_init): Added a folder_changed signal. + + * camel-folder.h (struct _CamelFolder): Change permanent_flags to + a bitfield. + (list_permanent_flags): Renamed to get_permanent_flags, and + returns a bitfield. + (camel_folder_expunge): Changed expunge to a void type. The + messages would no longer be useful after they have been removed + ... + (CamelFolderClass): New function summary_get_by_uid() to get a single + summary. + (*search*): Moved back to synchronous search api ... *sigh* + + * camel-folder.h: Removed CamelSearchFunc. + + * camel-mime-message.c (set_flag): Removed. + (camel_mime_message_set_flag): Removed. + (get_flag): Removed. + (camel_mime_message_get_flag): Removed. + (add_flag_to_list): Removed. + (get_flag_list): Removed. + (camel_mime_message_get_flag_list): Removed. + (camel_mime_message_get_flags): New interface to get system flags. + (camel_mime_message_set_flags): " to set ". + (camel_mime_message_get_user_flag): To get a user flag. + (camel_mime_message_set_user_flag): To set a user flag. + (finalize): Hmm, the old one free'd the key and data, not good + when the data is a boolean ... + +2000-04-30 Dan Winship <danw@helixcode.com> + + * camel-provider.h: Tweak the definition of CamelProvider. Among + other things, a provider may now be both a store and a transport. + + * camel-provider.c: Remove a lot of code we had no intention of + using. This now only contains two functions: camel_provider_init + to read the installed .urls files, and camel_provider_load to + load and register a new provider. + + * camel-session.c: Remove more unused code and simplify some of + the remaining code. The list of available provider modules is now + stored in the session, and it handles calling camel_provider_load + to load them as needed. Provider registration is now done by + calling back from the module init routine, which allows a single + module to register providers for multiple URL types. + + * providers/*: Update provider structures and init routines for + the new stuff. Add a .urls file to each provider specifying what + urls it handles, and install that with the library. + + * providers/nntp/camel-nntp-provider.c: Add hints towards + supporting both news: and nntp: URLs, and using nntp as both a + store and a transport. + +2000-04-29 Dan Winship <danw@helixcode.com> + + * camel-internet-address.c (camel_internet_address_get): const + poison + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): + camel_mime_parser_tell() returns an offset from where it started + parsing, not necessarily from the start of data. Since we're + parsing a bounded seekable_stream, we need to add the stream's + starting bound to camel_mime_parser_tell's return value to + create the substream in the right place. + + * camel-seekable-substream.c + (camel_seekable_substream_new_with_seekable_stream_and_bounds): + say CAMEL_STREAM_UNBOUND rather than -1 in doc. + + * camel-seekable-stream.c (camel_seekable_stream_seek): Add more + info to docs. + +2000-04-28 Dan Winship <danw@helixcode.com> + + * camel-mime-parser.c (folder_scan_header): fix a bug that would + cause corruption with very long headers. + +2000-04-27 Ettore Perazzoli <ettore@helixcode.com> + + * providers/pop3/Makefile.am (INCLUDES): Add `-I$(srcdir)/../../..' + to pick the Camel includes. + * providers/sendmail/Makefile.am (INCLUDES): Likewise. + + * camel.h: Don't #include <camel/data-wrapper-repository.h> anymore. + +2000-04-27 NotZed <NotZed@HelixCode.com> + + * camel-mime-utils.c (check_header): Dont try and check a NULL + header. + + * camel-recipient.[ch]: Dead. Its not pining. + + * camel-mime-message.h: Dont include recipients.h anymore. + + * camel-mime-message.c (camel_mime_message_add_recipient): Accept + name/address separately, and store in an CamelInternetAddress. + (add_recipient): Removed. + (remove_recipient): Removed. + (remove_recipient_address): Renamed from remove_receipient, works + via address. + (camel_mime_message_remove_recipient_name): New function to remove + by name. + (get_recipients): Removed. + (camel_mime_message_get_recipients): Return a camel-internet-address. + (write_to_stream): No longer write receipients directly. + (write_recipients_to_stream): Removed. + (write_one_recipient_to_stream): Removed. + (camel_mime_message_init): Setup recipients hashtable, rather than + usign the recipients stuff. + (set_recipient_list_from_string): Killed, a violent and lengthy + death. + (process_header): Simplified recipient handling code a lot. + (received_date_str, sent_date_str, reply_to_str, subject_str, + from_str): Removed some oddly-defined global statics. + (camel_mime_message_class_init): Dont initialise above variables + anymore. + (init_header_name_table): Removed, use a table to init this, and + do it in class init (2 lines of code ...). + + * camel-news-address.c: Class to represent news addresses - + currently empty, and not built. + + * camel-internet-address.h: Class to represent internet (email) + addresses. + + * camel-address.h: Abstract class to represent (lists of) + addresses. + +2000-04-27 Dan Winship <danw@helixcode.com> + + * camel-mime-part.c (write_to_stream): Revert previous change. I + was confused. + + * camel-url.[ch] (camel_url_encode, camel_url_decode): expose + these routines. + +2000-04-26 Dan Winship <danw@helixcode.com> + + * camel-mime-part.c (write_to_stream): Only write a newline + between the headers and the content object if the content object + is not a CamelMedium. (If the content is a medium, it may have its + own headers, which then need to go before the blank line.) + + * camel-mime-body-part.[ch]: Remove. We weren't using the fields + that made this different from camel-mime-part, so it basically + just forced us to do lots of gratuitous typecasting. + + * camel-multipart.[ch]: Use CamelMimePart. Remove the multipart + parent stuff, since we weren't using that either. + + * etc: update for CamelMimeBodyPart -> CamelMimePart + +2000-04-26 Dan Winship <danw@helixcode.com> + + * camel-medium.c (set_content_object): sink the content object + after referencing it. + + * camel-mime-part.c: fix various little things in the handling + of CamelMedium methods. Change camel_mime_part_set_text to the + more generic camel_mime_part_set_content. + + * camel.h: sync to current reality + + * camel-folder-utils.[ch]: removed + + * camel-mime-utils.c (header_format_date): fix format specifier + for time zone. Fix typo in month names array. + +2000-04-26 NotZed <NotZed@HelixCode.com> + + * camel-seekable-substream.c (stream_seek): Changed to have + absolute seek semantics, not relative to the bounds. + + * camel-seekable-stream.c (reset): When we reset, seek to the + start of the bound, if there is one. + (stream_tell): Make tell virtual. + + * camel-stream-filter.c (do_available): Removed. + + * camel-stream-buffer.c: Remove leading _'s from static functions. + (stream_read): Renamed from read(). Fancy that conflicting! (my + boo!) Others too. + + * providers/pop3/camel-pop3-folder.c (get_message_by_number): + Changed to stream_mem interface. + + * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): Fixed + for streamfs interface changes, and implement a failure case. + (_append_message): Changed for fs stream interface change. + + * camel-multipart.c (print_part): Iterate rahter than callback. I + hate glists's interface (hence, move this to write_to_stream). + (write_to_stream): Return an error (yuck, this is a royal PITA to + do with the stream write interface). + + * camel-mime-message.c: Removed leading _ from static names. + + * camel-mime-part.h: construct_from_parser() now returns an error + code. + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Changed to use a + camel-data-wrapper instead of a camel-simple-data-wrapper (no + change needed elsewhere?). + (simple_data_wrapper_construct_from_parser): Fixes for stream-mem + interface changes. + + * camel-simple-data-wrapper.[ch], + camel-simple-data-wrapper-stream.[ch], + camel-stream-data-wrapper.[ch], removed. Fixed including of these + files. + + * camel-mime-part.c (camel_mime_part_set_text): Remove the use of + the camel-simple-data-wrapper-stream, just use a mem stream. + (write_to_stream): Renamed from my_* + (construct_from_stream): Return an error on error. + + * camel-stream-mem.c (camel_stream_mem_new*): Remove mode + parameter. + + * camel-stream-mem.h (enum CamelStreamMemMode): Removed. It + wasn't used at all. + + * camel-data-wrapper.h: Add camel_data_wrapper_new() to create + these. + (write_to_stream, construct_from_stream): Return an error + indicator for success. Fixed all methods to match (ICK). + + * Makefile.am (libcamel_la_SOURCES): Remove + camel-simple-data-wrapper.c, camel-simple-data-wrapper-stream.c, + camel-stream-data-wrapper.c. Obsoleted by code re-use! + + * camel-data-wrapper.c (construct_from_stream): Change the default + implementation to just set the output stream == construction + stream. Well, this lets me get rid of both simple-data-wrapper + and stream-data-wrapper (unused anyway), and + simple-data-wrapper-stream in one hit. CamelDataWrapper is now + also a concrete class. + (write_to_stream): Use camel_stream_write_to_stream() to + calculate/return values (and save code). + Include <errno.h> for obvious reasons. + + * camel-stream.c (eos): Provide a default implementation of .eos(). + (camel_stream_write_to_stream): Make it return an error code on + error. + (camel_stream_printf): Changed to return the number of bytes + written/error. + (camel_stream_available): Removed. + + * camel-stream-fs.h (enum CamelStreamFsMode): Removed. Changed to + use unix modes and so forth (wasn't used for anything but new file + creation and didn't work well either). + + * camel-stream-fs.c: Removed leading _'s for names. And removed + some virtual method 'documentation'. + (destroy): Dont try and close a closed/error fd. Only report + error if close returns -1. Moved all the code to finalise(), and + killed this function. + (init_with_fd): Properly setup the seek offset, if it is a + valid and seekable file descriptor. + (init_with_fd_and_bounds): Use off_t for bounds, set bounds on the + seekable stream. + (init_with_name): Return error codes. + (init_with_name_and_bounds): Ditto. + (camel_stream_fs_new_with_name): REturn NULL object if it failed. + (camel_stream_fs_new_with_name_and_bounds): Return NULL object on + failure. Changed with_name* api's to take unix open style args + and flags. + (read): The bounded stream bounds checking seemed off, simplified + code a bit. + (write): Implement bounds checking for writing, the comment was + wrong, it could make sense to bound writing. Cleaned up a little. + (available): Gone. + (eos): Removed. Use CamelStream's implementation now. + (close): Reset the fd to -1, provide a warning for bad usage. + (seek): Cleaned up. Changed the behaviour a little, the returned + offset is the absolute position in the file, even in bounded + streams. + (seek): Seek from end mirrors lseek() behaviour (reverse seeking). + +2000-04-25 NotZed <NotZed@HelixCode.com> + + * camel-stream-fs.h (struct _CamelStreamFs): Moved bounds and eof + indicator to other parent classes. + + * camel-stream.c (camel_stream_printf): New utility + function. Obvious use. + + * camel-stream-mem.c: Removed leading _'s from static func's. + (camel_stream_mem_new_with_byte_array): Fixed for api changes, set + the owner for the byte array to us. + : Removed A bunch of gtk doc stuff for static (implementation) functions. + (available): Removed. + (write): Fixed the write implementation so that seek() works on a + seekable memory stream, as expected. Seeking past the end of the + buffer has unix semantics (filling with 0). + (available): Removed. + (write): Implement seekable stream bounded stream. + (read): Implement seekable stream bounded stream. + (close): Dont free the stream_mem if we're not the owner. + (seek): Allow to seek beyond the end of memory area, + implement bounds checking. + (seek): Set errno on bad policy. + + * camel-stream-mem.h (struct _CamelStreamMem): Changed position to off_t. + (new_with_buffer): Changed len to be a size_t. + (set_buffer, set_byte_array): New interface functions. + (struct _CamelStreamMem): Removed position, it is stored in the + superclass. + + * camel-stream.h: Removed some of the seemingly random + whitespace. Removed the available method (its not + impelemented/useful enough). + + * camel-seekable-substream.c + (init_with_seekable_stream_and_bounds): Remove the data_available + stuff, it hasn't been properly implemented/finished, and may never + work (unfortunately *sigh). + (reemit_parent_signal): Removed part of the above change. + (set_bounds): Removed (moved to seekable-stream). + : Fixed up some of the generally unreadable indenting (sorry, + wrapping at 80 characters with + camels_really_long_function_names() + just_doesnt_work_very_well_does_it(). + (available): Removed. + (stream_seek): Fixup for object changes. Make sure we return -1 + if the parent stream can't seek. + + * camel-seekable-stream.c (ccamel_seekable_stream_set_bounds): New + function to bound any seekable stream. + : Removed _'s. + (camel_seekable_stream_class_init): Implement an init function, to + setup the stream bounds to unbound. + + * camel-seekable-stream.h (CamelSeekableStreamClass): New virtual + method set_bounds for seekable streams. + (CAMEL_STREAM_UNBOUND): New define for no bound. + + * camel-seekable-substream.h (struct _CamelSeekableSubstream): + Removed sup_bound and inf_bound, moved to CamelSeekableStream (and + renamed, and changed to off_t's). + (new_with_seekable_stream_and_bounds): Use off_t as the bounds. + (CamelSeekableSubstreamClass): Uh, why was the intialiser virtual? + Removed. + + * camel-seekable-stream.[ch] (CamelSeekableStreamClass): Changed seek + to accept an off_t as the offset. + (struct _CamelSeekableStream): Renamed cur_pos to position and + changed it to an off_t type. + (enum CamelStreamSeekPolicy): Set to match the SEEK_* constants + from lseek(). + (get_current_position): Renamed to tell(). + + * camel-stream-buffer.h: Commented out set_vbuf - never implemented. + +2000-04-25 Dan Winship <danw@helixcode.com> + + * camel-stream-buffer.c (_eos): only return TRUE if the parent is + at eos AND the buffer has been exhausted + + * camel-mime-message.c: fix some incorrect macro usage that + resulted in bogus casts + +2000-04-24 Dan Winship <danw@helixcode.com> + + * camel-mime-part-utils.c + (simple_data_wrapper_construct_from_parser): fix a cut-and-pasto. + + * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): ref + (and sink) the message stream if we're going to unref it later. + Otherwise it could get destroyed while there are still substreams + attached to it. This needs a cleaner solution. + + * camel.h: remove data-wrapper-repository.h include(s) + +2000-04-24 NotZed <NotZed@HelixCode.com> + + * camel-mime-message.c (construct_from_parser): Allow MESSAGE_END + _or_ EOF as valid termination conditions. + + * providers/mbox/camel-mbox-summary.c (message_struct_new): Decode + and then re-encode the addresses, so they are consistently + formatted. + + * camel-mime-utils.c (header_decode_mailbox): Store the address in + a _header_address. And try to get a comment-stored name if there + is one. + (header_decode_address): Actually return an address. + (header_to_decode): Renamed to header_address_decode() + (header_mailbox_decode): New function to get a single mailbox. + (header_mime_decode): Return the major/minor value, as + appropriate. + (header_address_new, and friends): Whole bunch of utility + functions for working with the address thingies. + (header_decode_domain): Free the string header, and dont expand + '.' into ' . '. + + * camel.c (camel_init): No longer call + data_wrapper_repository_init. + + * camel-medium.c (write_to_stream): Moved (back) to + camel-mime-part. + (add_header): + (set_header): + (remove_header): + (get_header): Make all these abstract, and spit warnings if + called. I guess it could manage the list, but well, it doesn't. + + * camel-medium.h (struct _CamelMedium): Dont store headers here, + the implementor is the only one who knows their format. + (CamelMediumClass): Changed header values to be void *'s. They + need not be strings? + + * camel-simple-data-wrapper.c (construct_from_stream): And we're + back. Set the output stream. + (construct_from_parser): Moved to camel-mime-part-utils. + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Create the + contents of multipart and simple messages. + (camel_mime_part_construct_content_from_parser): Oops, this was + totally screwed up, try creating the right cotnent on the right + object. + + * camel-multipart.c (construct_from_parser): Moved to + camel-mime-part-utils. + (separate_part): Removed. + + * camel-mime-part.c (construct_from_stream): Back again! This now + switches over to using a mime parser for any mime parts, only. + (my_write_to_stream): Write our headers and so forth here. + (add_header): Add header directly, parent class is abstract. + (remove_header): Ditto. + (set_header): Ditto. + + * camel-data-wrapper.c (camel_data_wrapper_construct_from_stream): + Remade abstract. + (camel_data_wrapper_construct_from_parser): Moved to + camel_mime_part. + + * camel-data-wrapper.h: Put back construct_from_stream. + + * camel-mime-part.h: Put construct_from_parser in here, the + data-wrapper shouldn't know about mime. Ok, so now to undo half + of the last hours changes ... duh. + +2000-04-23 Dan Winship <danw@helixcode.com> + + * camel-mime-utils.c (header_to_decode, header_mime_decode): fix + some obvious minor bugs noted by -Wall. + +2000-04-23 NotZed <NotZed@HelixCode.com> + + * providers/pop3/camel-pop3-folder.c (get_message_by_number): Use + construct_from_stream instead of set_input_stream(). + + * camel-simple-data-wrapper-stream.c + (camel_simple_data_wrapper_stream_construct): REmoved the destroy + callback code. + (wrapper_destroy_cb): Removed. + + * camel-simple-data-wrapper.h: Add prototype for _construct() + method. + + * camel.c: Include unicode.h to kill a warning. + + * camel-data-wrapper.h (CameldataWrapperClass): Removed + construct_from_stream virtual method. + Removed get/set input stream. + + * data-wrapper-repository.[ch]: Removed&from build. Obsoleted? + The justification as is follows: It is mixing storage + protocol/format with message architecture. It really just doesn't + serve any purpose, as each medium implementor will have to have its + own type->handler mapping, and the only current implementor, + mimepart has a very simple structure and no need for this. + + * camel-medium.c (write_to_stream): Moved here from most of the + stuff in camel-mime-part. Well, the MEDIUM is the one that knows + what the headers are, and the content is, let it write it out. + + * camel-mime-part-utils.c (camel_mime_part_construct_content): + Copied from camel-mime-part.c, removed handling of message + followon state (moved to camel-mime-message). + (camel_mime_part_construct_content_from_parser): Renamed from + construct_content. + (camel_mime_part_construct_headers_from_stream): + (camel_mime_part_construct_content_from_stream): + (camel_mime_part_store_stream_in_buffer): Removed. Replaced by + the new construct from parser stuff. + + * camel-mime-message.c (construct_from_parser): Do + construct_from_parser for mime-message. + (_write_to_stream): Set the mime-version header for medium to + write out, rather than writing it out ourselves. + + * camel-data-wrapper.c (set_mime_type_field): Ref the + content_field when we get it? + (construct_from_stream): Removed. + (camel_data_wrapper_construct_from_stream): Changed to a helper + function, creates a mime_parser, and constructs from that. + (set_input_stream): Removed. + (camel_data_wrapper_set_input_stream): Removed. + (get_input_stream): Removed. + (camel_data_wrapper_get_input_stream): Removed. + + * camel-mime-parser.c (camel_mime_parser_unstep): New function. + Cause a subsequent call to mime_parser_step() to return the same + state over again. + + * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): + Initial test code using the mime parser to construct the message. + (_get_message_by_uid): Use construct_from_stream() instead of + creating our own parser. + + * camel-mime-part.c (construct_from_parser): part constructor. + (camel_mime_part_construct_content): Basically a simpler + replacement for the datawrapper repository. + (camel_mime_part_init): Set the default type to text/plain. + (camel_mime_part_construct_content): Removed to + camel-mime-part-utils.c + (my_get_output_stream): Removed. The streeam is in the + data-wrapper. + (my_get_content_object): Removed. The content object is stored in + the medium. If none is there, the object wasn't created properly. + (my_write_content_to_stream): Removed. The content object is the + one that knows how to write itself out!!!!!!!! + (my_write_to_stream): Remove the base header writing stuff - has + been moved to camel-medium, where it belongs. This can just be + used to check for mandatory headers. + (my_construct_from_stream): Removed. + (my_set_input_stream): What the hell, i'll remove this too. + Nobody seems to understand how it differs from create from stream, + and they both seem to serve the same purpose ... + + * camel-simple-data-wrapper.c (construct_from_parser): Initial + implementation of a content constructor. + (construct_from_stream): Removed! Job taken over by + construct_from_parser. + + * camel-multipart.c (construct_from_parser): Multipart + construction routine. + (camel_multipart_init): Set the default multipart type to + multipart/mixed. Duh, no subtype is not allowed anyway. + (set_input_stream): REmoved. Replaced by construct_from_parser. + +2000-04-22 Dan Winship <danw@helixcode.com> + + * camel-multipart.[ch]: clean, document, etc. + (camel_multipart_init): pick a prettier default boundary. Still + need to deal with the larger problem + +2000-04-22 NotZed <NotZed@HelixCode.com> + + * camel-mime-message.h (struct _CamelMimeMessage): Removed + send_date, and received_date, and replaced it with a time_t + 'date' (this is what the header is called), and date_offset to + store the GMT offset of the date. + + * camel-mime-message.c (camel_mime_message_set_from): Update raw + header as we go. + (_set_from): Removed. + (_get_from): Removed. + (camel_mime_message_get_from): Moved implementation here. + (camel_mime_message_get_subject): Move implementation here. + (_get_subject): Nuked. + (camel_mime_message_set_subject): Handle utf-8 input, and also + update raw header when changed. + (_set_subject): Removed. + (_set_received_date): Removed. + (camel_mime_message_set_received_date): Removed. + (_get_received_date): Removed. + (camel_mime_message_get_received_date): Removed. + (_get_sent_date): Removed. + (camel_mime_message_get_sent_date): Removed. + (camel_mime_message_get_date): New function to get the date as a + time_t/offset. + (camel_mime_message_set_date): Set the date as a time_t/offset. + (camel_mime_message_get_date_string): Get the date as a string. + (camel_mime_message_init): Initialise the current date as + 'CMAEL_MESSAGE_DATE_CURRENT'. + (_set_reply_to): Removed. + (camel_mime_message_set_reply_to): Moved implementation here. + This is still broken, reply-to can have multiple addresses. + (_get_reply_to): Removed. + (_set_field): Removed, no longer used anywhere. + (_get_field): Also removed. + (_init_header_name_table): Add the Date header. + (process_header): Also handle snooping of Date header here. + + * camel-stream-filter.c (finalise): Unref the source stream on + finalise, and also call the parent class (oops). + + * camel-mime-parser.c (camel_mime_parser_state): New function to + get the current parser state. + (camel_mime_parser_stream): Allow you to get the stream back from + the mime_parser. + (camel_mime_parser_fd): Alternative to allow you to get the fd + back from the mime_parser. + (folder_scan_init_with_stream): Properly ref/unref the stream. + (folder_scan_close): Properly unref the stream/close the fd on + exit. + (folder_scan_init_with_fd): Close the old fd if there is one. + + * camel-data-wrapper.c (camel_data_wrapper_construct_from_parser): + New method, construct a data wrapper from an initialised parser. + (construct_from_parser): Empty implementation. + + * providers/mbox/camel-mbox-summary.c (message_struct_new): + Convert subject line to unicode, before storing in the summary. + (strdup_trim): Removed, no longer needed. + + * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): Ref + the folder after setting it in the new message. + + * camel-mime-part.c (my_set_content_object): Have the headers + follow the content-type change here too. + (my_write_to_stream): Dont write content-type here, automatically + stored in the headers ... + (my_write_to_stream): Use header_disposition_format() to format + the content-disposition header. + (my_write_to_stream): Removed old code, all headers are now stored + in the camel-medium level, always. Need to do the same with + camel-mime-message i suppose ... + (my_write_to_stream): Write the content using the parent class, + not some weird function. + (camel_mime_part_class_init): Dont override get_output_stream. + (camel_mime_part_encoding_from_string): Bleh, make it + case-insensitive. + + * camel-mime-utils.c (header_content_type_is): Handle empty types. + (header_encode_string): Start of an implementation of the rfc2047 + encoder. It does iso-8859-1, and us-ascii, and utf-8 (others get + tricky *sigh*) + (rfc2047_encode_word): Convert a single word/string into rfc2047 + encoding. + (quoted_encode): Different quoted-printable encoding for rfc2047 + encoding of headers. + + * gmime-content-field.c (gmime_content_field_write_to_stream): Use + header_content_type_format() to format it. + +2000-04-21 NotZed <NotZed@HelixCode.com> + + * camel-mime-utils.h: Add prototype for header_param_list_free. + + * camel-recipient.c: New function to remove all the types of a + recipient list. I think this whole object needs a major review. + + * camel-mime-message.c (camel_mime_message_class_init): Removed + parse_header_pair override, override add_header instead. + (_parse_header_pair): Renamed to add_header. + (remove_header): Add this method, to make sure we keep upto date + with removed headers too. + (_set_field): If given a NULL value, clear it out. + (_set_recipient_list_from_string): Constify. + (set_header): Override set_header from camel_medium. + (process_header): Local function to handle set/add/remove of each + header we know about. + + * camel-mime-part.c (camel_mime_part_class_init): Removed + parse_header_pair setup. + (my_parse_header_pair): Moved into add_header(), removed. + (my_set_disposition): Allow a NULL disposition to clear it. + (my_set_content_id): Allow NULL content id to clear it. + (remove_header): Track removed headers. + (my_set_description): Allow NULL description to clear it. + (my_set_content_MD5): Make sure we copy the md5 value, and allow a + NULL value to reset it. + (my_set_filename): Copy the filename. + (my_set_header_lines): Removed. Nothing uses it, it doesn't + actually serve any purpose. + (camel_mime_part_set_header_lines): Ditto. + (my_get_header_lines): Ditto. + (camel_mime_part_get_header_lines): Ditto. + (camel_mime_part_class_init): Remove *_header_lines setup. + (camel_mime_part_init): Remove header_lines init. + (my_finalize): Remove header_lines finalise. + (my_write_to_stream): Write the headers here. This is just WRONG, + camel_medium should be doing this. + (my_get_output_stream): Kill a warning. + (camel_mime_part_encoding_to_string): Ditto. + (camel_mime_part_set_description): Unvirtualiase, use add_header() + to do the processing. + (my_set_description): Removed. + (set_disposition): Renamed from my_set_disposition. + (camel_mime_part_get_description): Get the descriptionf rom the + get_header method. + (my_get_description): Removed. + (my_set_filename): Removed. + (camel_mime_part_get_filename): Get the parameter from the + disposition. + (camel_mime_part_encoding_from_string): Handle NULL string. + (camel_mime_part_init): Remove reference to filename. + (my_finalize): Dont free filename. + + * camel-mime-part.h (CamelMimePartClass): Removed + parse_header_pair() method, it doesn't add anything that + add_header() can't be used for. + (CamelMimePartClass): Remove *_header_lines methods. + (struct _CamelMimePart): Remove header_lines list. + (struct _CamelMimePart): Removed filename attribute. + + * camel-medium.c (camel_medium_init): Init headers to null, not a + hashtable. + (add_header): Append the headers as a list. + (remove_header): Remove headers as a list. + (get_header): Likewise for lookup. + (free_header): Removed, no longer needed. + (finalize): Free headers using header_raw_clear(). + (camel_medium_set_header): New function, to reset and override all + values of a header with a new value. + + * camel-medium.h (struct _CamelMedium): Changed to use a + header_raw struct rather than a hash table, to store headers + (many headers can occur multiple times). + + * camel-mime-utils.c (header_raw_find_next): New function, allows + you to find multi-valued header fields. + (header_disposition_format): New function to format/create + content-disposition header string. + (header_param_list_format_append): Function to format parameter + lists into a GString. + (header_content_type_format): Function to format content-type into + a usable format. + (header_set_param): allow NULL value to remove the parameter. + (decode_token): Renamed from header_decode_token. + (header_decode_token): New interface for external use. + (quoted_decode): Made static to kill annoying warnings. + (g_strdup_len): Killed, replaced with calls to g_strndup(). + (rfc2047_decode_word): Made static to kill warnings. + (decode_coded_string): Terminated. + (g_string_append_len): Made static to kill warnings. + (header_decode_text): Made static to kill warnings. + (header_decode_text): Constify. + (rfc2047_decode_word): Constify. + (header_param): Constify. + (header_content_type_new): Copy the type/subtype strings. + (header_param_list_decode): Made static. + (header_param_list_format_append): Made static. + (quoted_decode): Constify. + (g_string_append_len): Constify. + (header_token_decode): New function to decode a single token. + + * providers/mbox/camel-mbox-summary.c (header_write): Append a + trailing \n when writing headers. + (strdup_trim): Killed a warning. + (camel_mbox_summary_set_uid): Make sure the next uid is at least 1 + higher than any existing one. + (header_evolution_decode): Use header_token_decode to get the + token. + + * camel-mime-parser.c (folder_scan_header): Strip the trailing \n + of the end of all header lines. + +2000-04-20 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-utils.[ch]: Removed. + + * providers/mbox/camel-mbox-parser.[ch]: Removed. Removed + references to it. + +2000-04-20 Dan Winship <danw@helixcode.com> + + * camel-mime-utils.c (rfc2047_decode_word): use libunicode iconv + functions rather than libc ones (since libc might not have them). + (header_decode_date): add autoconfiscation on timezone code + + * camel.c (camel_init): call unicode_init () + +2000-04-20 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-summary.c (message_struct_new): Trim + leading/trailing spaces off the raw headers. + + * MERGE NEW_PARSER branch into HEAD, fixed conflicts. + + * gmime-content-field.c (_print_parameter): Duh, removed again + (@@#$@ cvs merge). + + * camel-mime-utils.c (header_content_type_is): Constify. + (header_content_type_unref): Killed a couple warnings. + + * camel-folder.c (_init): Removed more log crap. + + * providers/Makefile.am (SUBDIRS): Removed nntp, pending fixes for + summary changes. + + * providers/mbox/camel-mbox-folder.c (_get_message_by_number): + Fixed for new summary interface. Added a warning for using this + broken api. + (_get_message_by_uid): Fixed for message new with session + vanishing. + +2000-04-19 Dan Winship <danw@helixcode.com> + + * camel-simple-data-wrapper-stream.c + (camel_simple_data_wrapper_stream_get_type): This is a subtype of + CamelSeekableStream, not CamelStream. + + * camel-seekable-substream.c: clean up a lot. + (eos): When testing for end-of-stream, reset the parent position + before testing if it is at end-of-stream, since either (a) it may + have been seek'ed to eos by someone else, or (b) we may have been + seek'ed away from eos and it hasn't been synced yet. + + * camel-medium.[ch] (camel_medium_add_header): const poison. + (Belatedly goes with my change of 2000-02-23.) + (camel_medium_init): Use g_strcase_{hash,equal} on the header + array. + +2000-04-18 Dan Winship <danw@helixcode.com> + + * camel-mime-part.c (my_set_input_stream): + * camel-data-wrapper.c (set_input_stream, set_output_stream): do + better reference counting of streams so they actually go away + when they should. + + * camel-log.[ch], *: Nuke camel log stuff. Replace calls to + CAMEL_LOG_WARNING with calls to g_warning. + + * camel-data-wrapper.[ch]: + * camel-simple-data-wrapper.[ch]: + * camel-medium.[ch]: Clean, polish, document. Most of the gtk-doc + comments added to camel-data-wrapper.c note serious problems that + need to be fixed. + +2000-04-17 Dan Winship <danw@helixcode.com> + + * camel-mime-message.[ch]: Remove the "session" field from + CamelMimeMessage. Nothing uses it, about half of the existing + calls to camel_mime_message_new_with_session pass NULL, and + there's no obvious reason for it to be there. + + * providers/MH/camel-mh-folder.c: + * providers/maildir/camel-maildir-folder.c: + * providers/mbox/camel-mbox-folder.c: + * providers/mbox/camel-mbox-utils.c: + * providers/nntp/camel-nntp-folder.c: + * providers/pop3/camel-pop3-folder.c: Use camel_mime_message_new + instead of camel_mime_message_new_with_session. + + * camel-session.c (get_store_for_protocol_with_url): Set the + exception if no provider is found. + + * camel-url.c: Add code to encode and decode %-escapes in URLs, + and do some additional correctness-checking on URL syntax. From + Tiago Antào with modifications by me. + +2000-04-14 Chris Toshok <toshok@helixcode.com> + + * providers/Makefile.am (SUBDIRS): add nntp + +2000-04-14 Christopher James Lahey <clahey@helixcode.com> + + * providers/mbox/camel-mbox-folder.c: Fix switch statement. + +2000-04-14 Chris Toshok <toshok@helixcode.com> + + * providers/nntp/camel-nntp-folder.c (_exists): always return TRUE + for now. we need to check the server response to make sure the + group exists. + (_get_message_by_uid): make sure to account for the \n we add to + the string after every line. + + * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): function + to get the headers using the XOVER command. + (get_HEAD_headers): function to get the headers using the HEAD + command on each message. slooooooow. + (camel_nntp_get_headers): make this function use either XOVER or HEAD + versions depending on whether or not the server extension is present. + +2000-04-14 Dan Winship <danw@helixcode.com> + + * camel-formatter.[ch]: This didn't belong in Camel. Move to mail/ + + * Makefile.am, camel-types.h: remove references to + camel-formatter. + +2000-04-12 Matt Loper <matt@helixcode.com> + + * camel-folder-pt-proxy.c (_folder_open_cb): Print warning message + for broken function. + (_folder_close_cb): Same. + +2000-04-12 Miguel de Icaza <miguel@gnu.org> + + * Makefile.am (pthread_SRC): Use correct names for the pthread + source variables. + +2000-04-10 Dan Winship <danw@helixcode.com> + + * providers/pop3/camel-pop3-store.c (pop3_connect): fix various + bugs in APOP code (still untested) and some of the error cases. + + * camel-provider.h: Clarify what provider.protocol, provider.name, + and provider.description should be. + + * providers/mbox/camel-mbox-provider.c: + * providers/pop3/camel-pop3-provider.c: + * providers/sendmail/camel-sendmail-provider.c: + * providers/smtp/camel-smtp-provider.c: update protocols, names, + and descriptions + + * providers/mbox/camel-mbox-folder.c (_get_message_by_number): + implement get_message_by_number for the mail fetch code. + +2000-04-09 Jeffrey Stedfast <fejj@stampede.org> + + * providers/smtp/camel-smtp-transport.c: reformatted to fit + the standard indent format used by helix code + +2000-04-09 Dan Winship <danw@helixcode.com> + + * camel-movemail.c: New file with new function to dot-lock an mbox + file and copy it to a safe private directory. + +2000-04-08 Christopher James Lahey <clahey@helixcode.com> + + * providers/smtp/.cvsignore: Added a .cvsignore file. + +2000-04-08 Dan Winship <danw@helixcode.com> + + * providers/sendmail/camel-sendmail-transport.c (_send_internal): + actually record the pid returned by fork(). Noticed by clahey. + + * providers/smtp/camel-smtp-transport.c: #include <sys/param.h> + for MAXHOSTNAMELEN. (This is a stopgap: some of the uses of + MAXHOSTNAMELEN are wrong anyway...) + +2000-04-07 Jeffrey Stedfast <fejj@stampede.org> + + * providers/smtp/camel-smtp-transport.c: fixes to numerous bugs; + should now build fine. + * providers/Makefile.am: Readded smtp now that smtp builds without + error. + +2000-04-20 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-summary.c + (camel_mbox_summary_next_uid): Public function to get the next + uid, makes sure its saved to disk too. + + * camel-mime-part.c (my_finalize): Fix disposition crap with a + real disposition. + (my_set_disposition): Likewise. + (my_get_disposition): And here. + (my_write_to_stream): And here, needs more cleanup. + + * providers/mbox/camel-mbox-folder.c (_append_message): Assign a + new uid at this point. + + * gmime-content-field.c (gmime_content_field_write_to_stream): + Make something up if we have an invalid/missing content type + (i.e. text/plain). + +2000-04-19 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-folder.c (_delete): Fixed completely + broken switch() syntax, only compiled because errno is a macro on + some systems. + (_list_subfolders): Likewise. + +2000-04-18 NotZed <NotZed@HelixCode.com> + + * camel-mime-parser.c (folder_scan_init): init stream to null. + + * providers/mbox/camel-mbox-summary.c + (CAMEL_MBOX_SUMMARY_VERSION): Moved to .c file, incremented. + (index_folder): Changed to have index passed via the summary. + (decode_string): Do a sanity check on the string size, so we dont + visit g_malloc()'s friendly abort(). + + * camel-folder-pt-proxy.c (camel_folder_pt_proxy_class_init): + Removed reference to set_name. + (_set_name): Removed. + + * providers/mbox/camel-mbox-utils.c + (parsed_information_to_mbox_summary): Removed. Most of this file + is about to be binned. + + * providers/mbox/camel-mbox-search.c (func_header_contains): Fixes + for changes to summary interface. + (struct _searchcontext): Remove pointer to message info, get it + straight from the mboxsummary. + (camel_mbox_folder_search_by_expression): New summary interface. + (camel_mbox_folder_search_by_expression): Uh, the summary is not + an object anymore (well not yet). + + * providers/mbox/camel-mbox-folder.c + (camel_mbox_folder_class_init): Removed set_name init. + (_set_name): Removed. + (_open): Call new summary interface. + (_close): Use new summary interface. + (_create): Removed a summary object leak. + (_get_message_count): New summary interface. + (_get_uid_list): Use new summary interface. FIXME: this is leaky. + (_get_message_by_uid): Use the new summary interface, some + cleanup. + (_append_message): Totally changed, basically just appends the + message directly, ignores the summary (for now), the summary will + fix itself up if it needs to. + (_check_get_or_maybe_generate_summary_file): Bye bye old code. + (summary_get_message_info): Implement get_message_info again, for + folder. + + * camel-folder.c (camel_folder_class_init): Removed set_name + setup. + (_set_name): Moved contents into _init. + (_init): Perform the old functions of set_name here. + + * camel-folder.h: Removed the set_name internal interface. + +2000-04-14 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-summary.[ch]: Completely replaced with + new code. + + * Makefile.am (libcamel_la_SOURCES): Removed + camel-folder-summary.[ch]. + + * camel-folder.h (struct _CamelFolder): Removed summary. + (struct _CamelFolder): Changed flags to be 1 bit bitfields. + + * camel-folder-summary.[ch]: Class removed entirely. + + * camel-folder.c (camel_folder_get_summary): Removed. + (camel_folder_summary_get_message_info): Moved from + camel-folder-summary.c + (camel_folder_summary_get_subfolder_info): Moved from + camel-folder-summary.c + + * camel-mime-parser.c (folder_scan_step): Store the start of + headers and start of from in the scan state. + (camel_mime_parser_tell_start_headers): Query the start of the + headers. + (camel_mime_parser_tell_start_from): Query the cached start of + from marker. + +2000-04-13 NotZed <NotZed@HelixCode.com> + + * gmime-content-field.c (gmime_content_field_free): Removed this + function. If its too dangerous to use, it shouldn't be here. + (gmime_content_field_ref): Also ref the embedded content-type. + (gmime_content_field_unref): Ditto to unref it. + + * camel-mime-utils.h: Add a refcount for content-type header. + + * camel-mime-utils.c (header_content_type_unref): Implement unref + for content-type. + (header_content_type_ref): Implement ref for header content type. + +2000-04-12 NotZed <NotZed@HelixCode.com> + + * gmime-content-field.h: Changed to use a _header_content_type. + Added type/subtype back for compatability with clients. + + * gmime-content-field.c: Basically a total rewrite, and now just a + thin wrapper ontop of header_content_type. + (_free_parameter): Got rid of it. + (gmime_content_field_new): Use header_content_type_* functions. + (gmime_content_field_set_parameter): Likewise. + (_print_parameter): Blow away. + (gmime_content_field_write_to_stream): Get details from the + content_type field. Should check if it needs to escape chars in + the paramter value. + (gmime_content_field_get_mime_type): Likewise. + (___debug_print_parameter): Get rid of this rather annoyingly + named function. + (gmime_content_field_get_parameter): Simplified function. + (gmime_content_field_construct_from_string): Fixed this to use a + real parser. + (gmime_content_field_is_type): New function to test if a type matches. + (gmime_content_field_construct_from_string): Track type/subtype + from subordinate content_type header struct. + + * gmime-rfc2047.[ch]: Removed. Unused. + + * camel-stream-b64.[ch]: Blown away more duplicated code. + + * Makefile.am: Removed camel-stream-b64.[ch], and + gmime-base64.[ch]. + + * camel-mime-part.c (my_get_content_object): Replaced + camel-stream-b64 with camel-stream-filter/camel-mime-filter-basic. + (my_write_content_to_stream): Replaced camel-stream-b64 with the + camel-stream-filter with an encoder. + (my_get_content_object): Also implement quoted-printable decoding. + (my_write_content_to_stream): Also implement quoted-printable + encoding. + (my_get_output_stream): Took out stream-b64 code (nothing's being + executed yet anyway). + + * gmime-base64.[ch]: Blown away. Not used, dont need it. + + * camel-mime-utils.h: Added offset for this header. Records where + it is in the source. + + * camel-mime-utils.c (header_raw_append_parse): Add offset + parameter, to store where the header is stored in the stream. + (header_raw_append): Added offset param. + (header_raw_find): Return offset, if a pointer supplied for it. + (header_raw_replace): Add offset param. + (header_content_type_new): New function, to create an empty + content type. + (header_content_type_set_param): Set a parameter in the + content-type. + (header_set_param): Generic header parameter setting function. + (header_decode_string): Handle NULL input. + + * camel-mime-parser.c (camel_mime_parser_headers_raw): New + function to get access to all the raw headers. + (folder_scan_header): Keep track of the header start position, and + store it when saving the header. + +2000-04-11 NotZed <NotZed@HelixCode.com> + + * camel-mime-utils.c: Moved a bunch of printf's to debug. + + * camel-mime-parser.c: Moved a bunch of printf's to debug. + (folder_scan_header): Detect end of each header line using the + last scanned char, and not the last scanned position. + + * camel-mime-filter-index.[ch]: Indexing filter. Indexes unicode + sequences into ibex files. + +2000-04-09 NotZed <NotZed@HelixCode.com> + + * camel-mime-part.c: Dont include gmime-base64.h + + * camel-mime-filter-charset.c (complete): Implement the completion + function. + + * camel-mime-parser.c (folder_scan_step): If we get to the end of + the body data, check any filters for outstanding completion data. + (camel_mime_parser_scan_from): Set whether we scan for "From " + headers or not. + + * camel-stream-filter.c (do_read): If we get to end of stream on + the source, then call the filtering completion function to see if + we have any more data to return. + + * camel-mime-filter-basic.c (filter): Implement quoted printable + encoding and decoding filters. + (complete): And the complete function as well. + + * camel-mime-utils.c (base64_encode_close): Also take an input + buffer, allow closing of filters. + (quoted_encode_step): First cut, simple quoted-printable encoder. + Doesn't handle trailing spaces/tabs on end of line properly yet. + (quoted_encode_close): Complete a quoted-encoding. + (is_qpsafe): New type check, for quoted-printable safe characters + (that do not need encoding). Thats all bits used in the type + table! Rebuilt the types table. + (header_content_type_is): Checks a content type against at + type/subtype match. + (header_content_type_param): Handle NULL content type pointer. + +2000-04-08 NotZed <NotZed@HelixCode.com> + + * camel-mime-filter-basic.c (filter): Implement the base64 + encoder. Problem is, there is no way to know when to close it. + Close/Reset will have to provide the same args as filter, so it can + flush remaining data *sigh* + + * camel-mime-utils.c (base64_encode_step): A rather complex base64 + encoder, fast? + (base64_step_close): Companion function to finish off the base64 + sequence. + + * camel-mime-part.c (my_write_content_to_stream): Changed to use + camel_stream_write_to_stream(). + + * camel-stream.[ch] (camel_stream_write_to_stream): From + camel_stream_b64_write_to_stream(). Fixed some infinite loop + bugs with error conditions. + + * camel-stream-b64.[ch] (camel_stream_b64_write_to_stream): Removed. + This has nothing to do with stream-b64, so i've moved it to + CamelStream. + + * camel-mime-utils.h: Add a comment about refcounting + header_content_type struct. + + * Makefile.am: Added camel-stream-filter*.[ch]. + + * camel-stream-filter.[ch]: Class to implement a generic + (multipass) filter ontop of a stream. Only implements a read-only + stream. + + * camel-mime-parser.c (camel_mime_parser_filter_add): Ref the + filter we just added. + + * Makefile.am: Added camel-mime-filter*.[ch]. + + * camel-mime-filter-charset.[ch]: A filter to preform character set + conversion (uses unicode_iconv). + + * camel-mime-filter-save.[ch]: A simple filter which will save all + data directly to a file or file descriptor. + + * camel-mime-filter-basic.[ch]: Implements the basic mime filters, + base64 and quoted-printable decoding (encoding not implemented yet). + + * camel-mime-filter.[ch]: A filtering class, which can filter streams + of data without having to copy them. Simpler than stream classes, + and can be plugged into a single stream class (when i write it). + +2000-04-07 Dan Winship <danw@helixcode.com> + + * providers/pop3/camel-pop3-store.c (pop3_connect): Clarify error + messages. + (finalize): fix a bug in camel_exception usage + (pop3_connect): Remember the password after asking for it the + first time. + +2000-04-07 NotZed <NotZed@HelixCode.com> + + * Makefile.am: Added camel-mime-parser/camel-mime-utils. + + * camel-mime-parser.c: Fast mime parser. + + * camel-mime-utils.c: Mime utility functions, and email header + parsers. + +2000-04-07 NotZed <NotZed@HelixCode.com> + + * providers/Makefile.am: Removed smtp for now, its a long way from + building. + * providers/smtp/Makefile.in: Removed file that shouldn't have been + checked in. + +2000-04-06 Matt Loper <matt@helixcode.com> + + * camel-folder-pt-proxy.c (_get_full_name): Remove exception param + from get_full_name() called, since get_full_name() was changed to + not have an exception in the last param (see dan's notes below). + (_get_name): same. + +2000-04-06 Dan Winship <danw@helixcode.com> + + * camel-store.[ch]: Reorganize the folder-fetching methods and + implement a folder cache so that multiple requests for the same + folder will yield the same CamelFolder object (as long as it + remains active). Includes some code to remove no-longer-active + folders from the cache, but it doesn't get used since nothing is + ever unref'ed in Camel right now... + + * providers/mbox/camel-mbox-store.c: + * providers/pop3/camel-pop3-store.c: update for CamelStore + changes. + + * camel-folder.[ch]: Remove the (unused) CamelException argument + from camel_folder_get_name and camel_folder_get_full_name. + (camel_folder_set_name): make this go away since changing a + folder's name after it has been created could result in it + conflicting with a separately-issued folder. + +2000-04-05 Dan Winship <danw@helixcode.com> + + * g_url_new really wanted to take a CamelException. So, rename + Gurl to CamelURL, g_url_* to camel_url_* (with camel_url_new + taking an exception), and url-util.[ch] to camel-url.[ch]. Also + force url->port to be numeric and remove camel_service_getport. (I + was confused before: the URL RFC says the port must be numeric, so + we don't want to do getportbyname.) + +2000-04-01 Dan Winship <danw@helixcode.com> + + * providers/mbox/camel-mbox-folder.c + (_check_get_or_maybe_generate_summary_file): Compare + mbox_file_size and mbox_modtime to the results of stat()ing the + mbox file, not the summary file. Duh. + (_close): Update the summary's mbox_file_size and mbox_modtime + before writing it to disk. + + * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_save, + camel_mbox_summary_load): Wow. I must have been tired when I wrote + this code. First, the comparison bug above. Second, it was using + ntohs and htons instead of ntohl and htonl. Third, I was reading + the status flag byte in two different places and thus getting out + of sync. Fourth, it was writing out field_length bytes of each + header field after having converted field_length to network byte + order, resulting in lots of random crap being appended, and the + summary files being huge. (Fortunately, since the size/modtime + comparison was biffed, the garbage summary read from disk was + always immediately discarded.) + + * providers/mbox/camel-mbox-parser.c (camel_mbox_parse_file): fix + an off-by-one error that caused the last-used UID to be reused if + the summary file was regenerated. (That one wasn't my fault. :-) + +2000-03-31 Dan Winship <danw@helixcode.com> + + * camel-stream-mem.c: implement unimplemented methods + + * gmime-content-field.c + (gmime_content_field_construct_from_string): + * data-wrapper-repository.c + (data_wrapper_repository_get_data_wrapper_type): + * camel-simple-data-wrapper.c (my_write_to_stream): + * camel-mime-part.c (my_set_input_stream): + remove debugging printf()s that no longer seem useful. + +2000-03-31 Matt Loper <matt@helixcode.com> + + * camel-formatter.c (text_to_html): Added "convert_newlines_to_br" + boolean param, to give the option of not converting '\n's to <br> + tags. This way, when we stick stuff in a <pre> tag, newlines stay + newlines. + +2000-03-30 Matt Loper <matt@helixcode.com> + + * camel-formatter.c (handle_text_plain): Use <pre> tag to force + the use of monospaced fonts. + +2000-03-30 Dan Winship <danw@helixcode.com> + + * camel-service.c (camel_service_getport): Add a htons in the + default_number case, and document the fact that the function + returns the port in network byte order. + + * providers/pop3/camel-pop3-store.c (pop3_connect): Revert + Miguel's change. The port number bug was actually somewhere + else, and the IP address copying code was fine already. + +2000-03-29 Miguel de Icaza <miguel@gnu.org> + + * providers/pop3/camel-pop3-store.c (pop3_connect): Add htons + (port), and only copy 4 bytes for the IP address to prevent a DNS + attack. + +2000-03-28 Dan Winship <danw@helixcode.com> + + * camel-seekable-substream.c + (camel_seekable_substream_new_with_seekable_stream_and_bounds): + make this return a CamelStream rather than a + CamelSeekableSubstream, because that's the way Gtk objects tend to + work. + + * camel-service.c (camel_service_gethost, + camel_service_getport): convenience functions to canonicalize + the host and port values of a service's URL. + * providers/pop3/camel-pop3-store.c: use them + + * providers/mbox/camel-mbox-folder.c + (_check_get_or_maybe_generate_summary_file): Make this work when + the inbox file doesn't yet exist. + +2000-03-27 Dan Winship <danw@helixcode.com> + + * providers/mbox/camel-mbox-folder.c (_append_message): uncomment + the call to unlink the temp file: there's no way to tell + camel_stream_fs to truncate a file, so reusing the same file was + resulting in junk at the ends of messages. + + * camel-folder.[ch]: add delete_message_by_{number,uid}. + + * providers/pop3/camel-pop3-folder.[ch]: implement + delete_message_by_uid. Add a close method to do expunging + of deleted messages if requested. + + * providers/pop3/camel-pop3-store.[ch]: support for + CamelPop3Folder::close. (You have to close the connection + in order to expunge the folder, thus the store may be + connected in the CamelService::is_connected sense when it + is not actually connected to the server.) Also some bugfixes. + +2000-03-27 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-folder.c (_append_message): Unref the + output_stream when done, close doesn't do it. + (_append_message): Clear all uid's from the appending messages, so + they are reassigned proper unique id's. + + * gmime-utils.c (get_header_array_from_stream): Actually free the + header, it is copied elsewhere. + +2000-03-26 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): Added + folder parameter to function. Fixed callers. + (index_message): Index a message as it is assigned a unique id. + + * camel-mime-part.c (my_set_content_id): Make sure we malloc and + copy the content_id, otherwise *poof* + +2000-03-25 NotZed <NotZed@HelixCode.com> + + * camel-medium.c (_finalize): Another leak, unref the content if + finished with it. + + * camel-recipient.c (camel_recipient_table_free): Plug another + memory leak - actually free the recipient table. + + * camel-mime-message.c (_finalize): Plugged a memory leak with the + flags table. + + * gmime-utils.c (_store_header_pair_from_string): A simpler, more + debuggable and functionally identical header extraction function. + +2000-03-24 NotZed <NotZed@HelixCode.com> + + * gmime-content-field.c (gmime_content_field_set_parameter): + Remove the hash table entry before freeing its key and data. + +2000-03-27 Dan Winship <danw@helixcode.com> + + * providers/Makefile.am (SUBDIRS): Add pop3. + + * providers/pop3/camel-pop3-store.c: keep separate input and + output streams so the output doesn't end up being buffered. + + * providers/pop3/camel-pop3-folder.c (get_message_by_number): + finish implementing this. + +2000-03-27 Michael Meeks <michael@helixcode.com> + + * camel-mime-part.c (my_set_disposition): fix so less broken. + (my_finalize): remove dodgy disposition free. + + * camel-data-wrapper.c (my_set_mime_type_field): unref instead of + free on mime_type. + +2000-03-27 Dan Winship <danw@helixcode.com> + + * camel-service.c (camel_service_free_auth_types): new routine to + free the data allocated by camel_service_query_auth_types. + + * providers/pop3/camel-pop3-store.c (free_auth_types): implement + + * camel-stream-mem.c (camel_stream_mem_new_with_buffer): rename + camel_stream_mem_new_with_buffer to ..._with_byte_array and add a + new ..._with_buffer that takes a char * rather than a GByteArray. + + * Remove CamelStreamBufferedFs, since CamelStreamBuffer makes it + redundant. + +2000-03-25 Dan Winship <danw@helixcode.com> + + * camel-folder-summary.[ch]: change the CamelFolderSummary + interfaces to allow partial summary queries (for dealing + with very large folders). Remove the "extended_fields" from + CamelFolderInfo and CamelMessageInfo: this is better dealt + with by subtyping. + + * providers/mbox/camel-mbox-summary.[ch]: Make CamelMboxSummary a + subclass of CamelFolderSummary. Update interfaces for that. Remove + the internal/external summary distinction. Remove the (unused) md5 + checksum in the folder summary. Change the summary file format + (primarily to make it no longer byte-order dependent) and add a + version number to it so it will be easier to change in the future. + + * providers/mbox/camel-mbox-folder.[ch] + * providers/mbox/camel-mbox-search.c + * providers/mbox/camel-mbox-utils.c: update for summary changes + + * camel-exception-list.def: add + CAMEL_EXCEPTION_FOLDER_SUMMARY_INVALID + +2000-03-23 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-provider.c: Added flag to provider + initialisation, to match changed structure. + +2000-03-22 NotZed <NotZed@HelixCode.com> + + * camel-folder.[ch]: Added async search api. + + * providers/mbox/camel-mbox-search.c + (camel_mbox_folder_search_by_expression): Changed to use an + asynchronous interface. + (camel_mbox_folder_search_cancel): Cancel function for async + interface. + +2000-03-23 Dan Winship <danw@helixcode.com> + + * camel-stream-buffer.c (camel_stream_buffer_read_line): Function + to read one line of any size from a stream and return it in + allocated memory. + +2000-03-22 Dan Winship <danw@helixcode.com> + + * camel-service.c (camel_service_query_auth_types): New function + to query a service for the authentication protocols it supports. + * providers/pop3/camel-pop3-store.c (query_auth_types): implement + + * camel-provider.c (camel_provider_scan): New function to + scan the provider dir and return a list of all providers. + + * providers/pop3/camel-pop3-folder.c: fill this in partially + * providers/pop3/camel-pop3-store.c: make camel_pop3_command + return the text after "+OK"/"-ERR" and add a separate + camel_pop3_get_additional_data to get the message body or + whatever. Also make them take a CamelPop3Store rather than + a CamelStreamBuffer. + +2000-03-22 Matt Loper <matt@helixcode.com> + + * camel-formatter.c (debug): Disabled some useless debug + messaging. + +2000-03-21 Dan Winship <danw@helixcode.com> + + * providers/pop3: some initial bits of the POP3 provider, to + make Matt happy. Incomplete, untested, etc. + +2000-03-21 bertrand <bertrand@helixcode.com> + + * providers/mbox/camel-mbox-summary.c + (camel_mbox_summary_append_internal_to_external): copy the size field + + * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): initialize + message_info to NULL + + * camel-folder-summary.h: added the size field. + + * providers/mbox/camel-mbox-summary.h: + added the received_date field. + + * providers/mbox/camel-mbox-summary.c: + documented all functions. + + * camel-folder-summary.h: name change and + new fields. + + * providers/mbox/camel-mbox-search.c: update to + conform to name change in the summary fields. + +2000-03-10 bertrand <bertrand@helixcode.com> + + * camel-service.h: cosmetic changes. + +2000-03-09 Dan Winship <danw@helixcode.com> + + * s/HelixCode/Helix Code, Inc./ in the copyrights + +2000-03-07 bertrand <bertrand@helixcode.com> + + * camel-formatter.c (handle_mime_part): + plug mem leaks due to bad documentation + of camel_content_field_get_mime_type + (print_camel_body_part): idem + (handle_multipart_alternative): idem + + * gmime-content-field.c (gmime_content_field_get_mime_type): + documentation fix. + + + * camel-mime-part.c (my_finalize): unref the + content_input_stream if any. + +2000-03-06 bertrand <bertrand@helixcode.com> + + * camel-stream-fs.c (_seek): fix a bogus calculation + in the return position. + +2000-03-05 bertrand <bertrand@helixcode.com> + + * camel-session.h: cosmetic fixes. + + * camel-stream-fs.c (_read): + (_seek): fixed the current position so that it refers + to the current position in the stream, not in its parent. + +2000-03-04 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-search.c + (camel_mbox_folder_search_by_expression): Ref the summary + after we have got it. + +2000-03-04 bertrand <bertrand@helixcode.com> + + * camel-mime-part.c (my_write_content_to_stream): + stream the raw content instead of nothing if the encoding + is not supported. + + * camel-stream-fs.c (_seek): handle eos more + properly. + + * camel-formatter.c (get_bonobo_tag_for_object): + bonobo-goad-id is the good key to look for. + (get_bonobo_tag_for_object): close the <object> tag. + (get_bonobo_tag_for_object): the correct syntax for the + to set a parameter inside an <object> tag is : + <object classid="..."> <param name="uid" value="..."> <param ...> + </object> + +2000-03-03 bertrand <bertrand@helixcode.com> + + * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): + use set_input_stream instead of construct_from_stream + to feed the message object. + + * camel-data-wrapper.c (my_write_to_stream): reset output stream. + (my_set_input_stream): unref the previous input stream. + use the set_output_stream for default behaviour. + (my_set_output_stream): unref previous output stream. + + * camel-mime-part.c (my_write_content_to_stream): reset content + object output stream. + +2000-03-03 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): Make + sure we open with create with a creation mask. + +2000-03-01 NotZed <NotZed@HelixCode.com> + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_stream): DO NOT assert on + content type, we have fallback code 4 lines below it ... *sigh* + +2000-02-29 NotZed <NotZed@HelixCode.com> + + * Makefile.am (libcamelinclude_HEADERS): Added camel-stream-buffer + to build. + + * camel-stream-buffer.[ch]: Generic buffer which can be applied to + any stream. + +2000-03-03 bertrand <bertrand@helixcode.com> + + * camel-formatter.c (handle_image): in the case + of images, put the content object output stream + in the url. This allows the message browser + to show inline images. + + * camel-stream-b64.c (my_read_encode): fixed state + 0 keep value. + +2000-03-02 bertrand <bertrand@helixcode.com> + + * camel-stream-b64.c (my_read_encode): don't forget to + set the state to 0 after 3. + (my_read_encode): don't forget to encode, even in state 3. + + * camel-simple-data-wrapper.c: static functions are prefixed + with my_ instead of _ + * camel-multipart.c: static functions are prefixed + with my_ instead of _ + (my_write_to_stream): commented. + (my_write_to_stream): warning in case the boudary is set + but is a zero length string. + + * camel-mime-part.c (camel_mime_part_encoding_from_string): + remove debug trace. + + * camel-mime-part.c: Replaced all static functions + with name begining with _ by the same name begining + with "my_" to prevent the possible conflicts + with system symbols Dan warned us about. + + * camel-stream-b64.c (camel_stream_b64_write_to_stream): + use CamelStreamB64 type for the input stream. + + * camel-mime-part.c (_get_content_object): remove + debugging trace + (_write_content_to_stream): implement the b64 + encoding the new way (that is using camel_stream_b64) + + * camel-data-wrapper.c (my_write_to_stream): + fix implementation so that it writes properly + to the output stream even. + + * camel-stream-b64.c (camel_stream_b64_write_to_stream): + fix implementation. + +2000-02-29 bertrand <bertrand@helixcode.com> + + * camel-stream-b64.c (camel_stream_b64_write_to_stream): new + utility function. + + * camel-data-wrapper.c (_write_to_stream): default + implementation. + + * gmime-utils.c (_store_header_pair_from_string): + revert strange changes. + + * camel-stream-b64.c (my_read_decode): set eos to true when we + have read the whole input stream. + (my_reset): set eos to FALSE. + +2000-02-28 NotZed <NotZed@HelixCode.com> + + * camel-mime-part.c (_parse_header_pair): Dont free this either. + + * camel-medium.c (_remove_header): Ugh, dont free the header + before we actually remove it. + (_add_header): Ugh, dont free hashtable entries which may be + duplicated (hash_insert _will_ reference that memory). + + * string-utils.c (string_trim): Trimming a 0-length string is not + an error. + + * camel-mime-message.c (_parse_header_pair): Fixed very broken + memory handling of header_name/value. + + * providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): + Initialise end_of_last_message always. + (camel_mbox_copy_file_chunk): Stop trying to read if we run out of + data, rather than looping forever. + (camel_mbox_write_xev): Use an open flag when opening with create. + + * camel-folder.c (camel_folder_search_by_expression): No, its not + a fatal error to search on a non-searchable folder, you just dont + get any matches. + (_open): Dont open an opened folder (i dont see why this is really + a bug, but what the hell ...) + + * providers/mbox/camel-mbox-folder.c (_init): Set search cap on. + (_open): Call parent class to perform open. Remove folder-open + check to parent instead. + (_create): open takes a creation mask, dont use umask to try and + set the open mode. + (_delete): Dont bother checking folder==NULL, its already been + checked on the external interface (changed to an assertion, this + would have to be a camel bug). + (_delete_messages): Likewise. + (_create): Ditto. + (_init): Dont go and clear all the paths and shit that the parent + open just setup for us. + (_delete_messages): Get rid of more umask stuff. + (_append_message): Make sure we pass file mode to open with create. + (_append_message): Cleaned up some indenting to make it readable. + + * camel-stream-b64.c (my_read_encode): Fixed a typo. + + * providers/mbox/camel-mbox-search.c: Changed to use e-sexp, + rather than filter-sexp. + +2000-02-28 bertrand <bertrand@helixcode.com> + + * camel-stream-b64.c (my_read_encode): encoding + filter. + +2000-02-23 bertrand <Bertrand.Guiheneuf@aful.org> + + * camel-stream-b64.c: changed the __static + suffix into a my_ prefix. + (camel_stream_b64_set_mode): reset the persistent + status. + (my_read_decode): remove superfluous % + + * providers/mbox/camel-mbox-utils.c (camel_mbox_copy_file_chunk): + fix exception description message. + +2000-02-24 Dan Winship <danw@helixcode.com> + + * camel-session.c: Add camel_session_get_transport_for_protocol. + + * camel-transport.h: + * camel-transport.c: Add an abstract CamelTransport class. + + * providers/sendmail/*: A CamelTransport that uses sendmail + to deliver mail. + +2000-02-24 Dan Winship <danw@helixcode.com> + + * camel-folder.c: use CamelExceptions for run-time errors, not + incorrect code. Don't bother validating that an object exists from + inside one of its methods, since you couldn't have gotten there if + it didn't. Fix some code style bugs. + + (_init): Rename init_with_store to init and add parent_folder, + separator, and name arguments. + (_set_name): Get separator from self, not parent_store now. + + * camel-store.h: + * camel-store.c: Remove get/set_separator. + + * providers/mbox/: Update for above. + +2000-02-23 Dan Winship <danw@helixcode.com> + + * camel-medium.c (_finalize): Free the data in the headers hash + table. + (_add_header): g_strdup the header name and value when adding it. + + * camel-mime-part-utils.c + (camel_mime_part_construct_headers_from_stream): Free the header + data after calling camel_medium_add_header, since it will have + g_strdup()ed it itself. + +2000-02-22 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-search.c: Dont compile by default. + + * providers/mbox/Makefile.am: Fuck off the filter code. + +2000-02-22 bertrand <Bertrand.Guiheneuf@aful.org> + + * camel-stream-b64.c (read_decode__static): + don't read the char if we reached the length + of the output buffer. Hours lost on this + %$!@# bug : 3.5 + + * camel-folder.c (camel_folder_get_subfolder): + (camel_folder_create): + (camel_folder_delete): + (camel_folder_delete_messages): + (camel_folder_list_subfolders): + (camel_folder_expunge): + (camel_folder_get_message_by_number): + (camel_folder_get_message_count): + (camel_folder_append_message): + (camel_folder_copy_message_to): + (camel_folder_get_summary): + (camel_folder_get_message_uid): + (camel_folder_get_message_by_uid): + (camel_folder_get_uid_list): + Check folder state (open/close) and raise an + exception if it is not ok. + + * providers/mbox/camel-mbox-folder.c (_create): + create the file and the path with two different + names. + + * camel-folder.c (_create): handle the case + when the folder name starts with '/' + + * camel-exception.c (camel_exception_new): use + (void) instead of () in decl. + + * camel-exception.h: cosmetic fixes. + + * camel-exception.c (camel_exception_init): new routine. + Fix a bug in mail/message-list.c + + + * camel-folder.h: cosmetic changes. + + * camel-stream-b64.c (reset__static): added a + reset method. Thanks message-browser to find + so much bugs :) + + * providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): readd + Unicode libs. + +2000-02-21 bertrand <Bertrand.Guiheneuf@aful.org> + + * camel-formatter.c (lookup_unique_id): + awful hack to test get_output_stream. + * camel-stream-b64.[ch] : + b64 encoding/decoding is now implemented as + a stream. + +2000-02-21 bertrand <Bertrand.Guiheneuf@aful.org> + + * camel-seekable-substream.c (_reemit_parent_signal): + emit "data_available" when parent stream emits it. + +2000-02-21 NotZed <NotZed@HelixCode.com> + + * providers/mbox/Makefile.am: Uh, fixed LIBADD again. What was + there was never ever going to work, wasn't it tested? + +2000-02-21 Dan Winship <danw@helixcode.com> + + * camel-session.h: (struct _CamelSession): Add authenticator. + + * camel-session.c (camel_session_new): Add authenticator. + (camel_session_query_authenticator): New function to query the + session authenticator for password, etc, information. + +2000-02-21 Dan Winship <danw@helixcode.com> + + * camel-session.c: add CamelExceptions to several functions. Use + camel_session_new to initialize the session and URL fields of + created CamelStores as appropriate. + + * camel-store.h: + * camel-store.c + * camel-service.h: + * camel-service.c: Move the session and url (and associated + functions) from CamelStore to CamelService. Add url_flags to + CamelService so subclasses can specify which URL components + are mandatory for them. Add camel_session_new for + camel_session_get_store* to use. + + * providers/mbox/camel-mbox-folder.c: + * providers/mbox/camel-mbox-store.c: + * providers/mbox/camel-mbox-store.h: Update for above changes. + + * camel-exception-list.def: Once camel is being used for real, + exceptions won't be renumberable. So renumber them now to make + more room to add exceptions to the various categories later, and + add a big warning message. + +2000-02-20 Dan Winship <danw@helixcode.com> + + * providers/mbox/Makefile.am: add libibex back to + libcamelmbox_la_LIBADD + +2000-02-18 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-search.h + (camel_mbox_folder_search_by_expression): Added exception to call, + and fixed caller. + + * providers/mbox/camel-mbox-search.c + (camel_mbox_folder_search_by_expression): Major changes, to use + the sexp evaluator from filter/filter-sexp.c to implement the + searching. + (func_body_contains): Changed to support multiple strings in 1 + command (results or'd together) + + * url-util.c (g_url_new): Fixed a typo (colon == 0 isn't right), + and made it so full url's are absolute pathed (Dan, this is how it + has to work!). Also, always include a path part, even if it is an + empty string. + +2000-02-18 Dan Winship <danw@helixcode.com> + + * camel/camel-types.h: New header with the typedefs for all camel + classes. Now the class headers can just include this and the + header for the parent type. This makes it possible for + CamelService to include a CamelSession without creating an + #include loop. + + * camel/*: + * composer/e-msg-composer-attachment-bar.h: + * mail/folder-browser.c: + * mail/message-list.c: frob #includes to match the new reality + +2000-02-17 Dan Winship <danw@helixcode.com> + + * camel/camel-service.h: + * camel/camel-service.c: Make camel-service us a Gurl internally. + Remove the login/password interfaces and instead provide + camel_service_connect_with_url. Add CamelExceptions + +2000-02-17 bertrand <Bertrand.Guiheneuf@aful.org> + + * camel/camel-formatter.c (handle_text_plain): + (handle_text_html): use camel_stream_reset instead + of seek. The formatter should be able to work + with all streams, not only seekable streams. + In the case where some provider implementation + would not be able to provide a reset method + to their stream, implementors would have + to find a workaround. + + * camel/camel-session.c (camel_session_new): use + (void) instean of () in function decl. + + * camel/camel-folder.c: ifdef async operation + related code. + + * camel/camel-seekable-stream.c (_seek): added a warning. + (_reset): default implementation of reset for seekable + stream. + + * camel/camel-mime-message.h: set_received_date declaration fix. + cosmetic changes. + + * camel/providers/mbox/camel-mbox-provider.c (camel_provider_module_init): + use (void) instead of (). + + * camel/camel-stream.c (camel_stream_reset): + new method for CamelStream. + +2000-02-17 Dan Winship <danw@helixcode.com> + + * camel/url-util.c (g_url_to_string): New function to convert + a Gurl back into a char *. + +2000-02-17 bertrand <Bertrand.Guiheneuf@aful.org> + + * camel/camel-formatter.c (handle_text_plain): + revamped so that it uses the output stream + of the data wrapper + (handle_text_html): ditto. + + + * camel/camel-simple-data-wrapper.h: + * camel/camel-simple-data-wrapper.c (camel_simple_data_wrapper_new): + use (void) instead of (). + (_get_output_stream): simple implementation. + +2000-02-16 bertrand <Bertrand.Guiheneuf@aful.org> + + * camel/camel-data-wrapper.c (_set_input_stream): ref input stream + (_set_output_stream): ref output stream + (_finalize): unref input and output streams + + * camel/camel-seekable-substream.c (_set_bounds): don't + seek the begining of the substream. + (_eos): fix eos condition testing. + (_finalize): unref parent stream + (_init_with_seekable_stream_and_bounds): ref parent stream + + * camel/gstring-util.c (g_string_equal_for_hash): + (g_string_equal_for_glist): return type is int. + + * camel/camel.h: + * camel/camel.c (camel_init): use (void) + instead of (). + +2000-02-16 NotZed <NotZed@HelixCode.com> + + * providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): Added + libfilter to link line (temporarily?). Required for + filter-sexp. + +2000-02-15 bertrand <bertrand@helixcode.com> + + * camel/camel-multipart.c (_localize_part): + this routine replaces the _read_part routine + and does not store the part in a buffer. + (_set_input_stream): use the set_input_stream + instead of the construct_from_stream. + each bodypart is given an input stream. + + * camel/camel-mime-part-utils.c: + include the data-wrapper-repository header. + (camel_mime_part_construct_content_from_stream): + use the set_input_stream instead of the + construct_from_stream method. + + * camel/camel-seekable-substream.c (_set_bounds): + cur position is set to 0 not to inf_bound. + +2000-02-15 bertrand <Bertrand.Guiheneuf@aful.org> + + * camel/camel-mime-part.c: include gmime-base64.h + various compilation and runtime fixes. + (_set_input_stream): store the input substream + for the content object. + + * camel/camel-data-wrapper.h: declare the + set/get function on input/output stream. + + * camel/camel-mime-part.c (_get_content_object): + don't use a temporary mem stream. + + * camel/camel-seekable-substream.c (_seek): + (_eos): + (_read): the substream can be unlimited in length + + * camel/camel-data-wrapper.c (camel_data_wrapper_class_init): + set the get/set_input/output_stream methods. + + * camel/camel-multipart.c (_construct_from_stream): + camel_stream_seek -> camel_seekable_stream_seek + +2000-02-14 Miguel de Icaza <miguel@gnu.org> + + * camel/providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): Add + the unicode libraries as well. + + * camel/camel-provider.c (camel_provider_register_as_module): Add + error reporting here. Desire to use Solaris increases. Hair loss + in the last two hours: 5,400. + + * camel/providers/mbox/camel-mbox-provider.c + (camel_mbox_get_provider): Renamed function. + + * camel/camel.h: All include files use camel/ now here. + + * camel/providers/mbox/Makefile.am: Drop all the dynamism from + Camel, and make this a standard library. + +2000-02-14 bertrand <Bertrand.Guiheneuf@aful.org> + + * camel/gmime-utils.c (get_header_array_from_stream): use the + eos stream method. + (gmime_read_line_from_stream): ditto. + + * camel/camel-stream-fs.h (struct ): add the eof field + cosmetics changes. + + * camel/camel-stream-fs.c (camel_stream_fs_init): set eof. + (_read): set eof on end of file. + (_eos): implemented. + + * camel/gmime-utils.c (get_header_array_from_stream): + make a blocking version of the header parser. + When the fs stream uses gnome-vfs, this should + be changed. + (gmime_read_line_from_stream): ditto. + +2000-02-11 bertrand <Bertrand.Guiheneuf@aful.org> + + * camel/camel-stream-fs.c: + everywhere, when using the cur_pos field, do it + on the CamelSeekableStream object. + (_seek): small fix. + + * camel/camel-seekable-stream.c (camel_seekable_stream_seek): + s/camel_stream_seek/camel_seekable_stream_seek/g + + * camel/camel-seekable-stream.h: + (struct ): added a field to store the + current position. + + * camel/camel-seekable-stream.c (camel_seekable_stream_get_current_position): + New function. Allows to get the current position + of a seekable stream. + + +2000-02-13 NotZed <notzed@zedzone.helixcode.com> + + * providers/mbox/camel-mbox-search.c: New file, implements the + search api for mbox folders. + + * providers/mbox/Makefile.am: Link with ibex. + + * camel-folder.c (camel_folder_has_search_capability): Api + additions. + (camel_folder_search_by_expression): Ditto. + +2000-02-12 NotZed <notzed@zedzone.helixcode.com> + + * providers/mbox/camel-mbox-folder.c (_set_name): Setup index + filename as well. + (_init_with_store): Init index filename. Hmm, none of these + names ever seem to get free'd (FIXME?) + + * providers/mbox/camel-mbox-folder.h: Add index file name. + +2000-02-12 NotZed <notzed@helixcode.com> + + * camel-folder.h: Add folder search functions. + + ** Created ChangeLog just for camel ** + - refer to ../ChangeLog for changes prior to this date. |