aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers/imap/camel-imap-store.h
Commit message (Collapse)AuthorAgeFilesLines
* change a bunch of IS_CAMEL_* macros to CAMEL_IS_*Dan Winship2000-12-141-1/+1
| | | | | | | * Namespace cleanup: change a bunch of IS_CAMEL_* macros to CAMEL_IS_* svn path=/trunk/; revision=6972
* New file with code for IMAP authentication mechanisms. (Currently justDan Winship2000-10-311-1/+9
| | | | | | | | | | | | | | | | | | | | | * 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(). svn path=/trunk/; revision=6272
* Improved IMAP namespace handling: leave the namespace in theDan Winship2000-10-301-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. svn path=/trunk/; revision=6256
* add subscribed_folders.Chris Toshok2000-10-251-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. svn path=/trunk/; revision=6157
* Only send the LOGOUT command if the store is connected. (imap_connect):Jeffrey Stedfast2000-10-171-0/+2
| | | | | | | | | | | | | | | | | | | 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. svn path=/trunk/; revision=5944
* Simple subclass of CamelFolderSummary that also keeps a UIDVALIDITY valueDan Winship2000-10-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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.) svn path=/trunk/; revision=5891
* New file containing camel_imap_command and friends. MajorDan Winship2000-10-041-44/+0
| | | | | | | | | | | | | | | | | | | | | | | | * 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. svn path=/trunk/; revision=5693
* Return untagged data in a GPtrArray rather than a string, since it savesDan Winship2000-09-281-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | * 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. svn path=/trunk/; revision=5608
* INBOX is case-insensitive. (get_root_folder_name): Make the root folder ""Dan Winship2000-09-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | * 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. svn path=/trunk/; revision=5541
* Cleanup of lots of exception handling ; bugfixesPeter Williams2000-09-061-3/+0
| | | | svn path=/trunk/; revision=5202
* Don't wrap printed strings in quotes, makes things messyJeffrey Stedfast2000-08-311-0/+3
| | | | | | | | | | | | | | | | | | | | | | 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 svn path=/trunk/; revision=5122
* Prevent exceptions from being overwrittenJeffrey Stedfast2000-08-301-5/+21
| | | | | | | | | | | | 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 svn path=/trunk/; revision=5107
* CamelRemoteStore: a new generic store for stores that connect to servers. ↵Peter Williams2000-08-301-8/+8
| | | | | | Prepare for the ability to cancel operations (much better exception handling). Clean up IMAP like nobody's business svn path=/trunk/; revision=5103
* Now takes a char * parameter rather than a streamJeffrey Stedfast2000-08-131-1/+2
| | | | | | | | | | | | | | | 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 svn path=/trunk/; revision=4786
* Changed param order a bit and fixed some logicJeffrey Stedfast2000-08-121-1/+1
| | | | | | | | | | | | | 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 svn path=/trunk/; revision=4766
* New convenience function for multi-transactional commands (openingJeffrey Stedfast2000-08-121-1/+11
| | | | | | | | | | | | 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) svn path=/trunk/; revision=4762
* Merge with camel-async.Peter Williams2000-08-111-6/+6
| | | | svn path=/trunk/; revision=4687
* Get message count when STATUS is not available. (imap_init):Jeffrey Stedfast2000-07-291-6/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. svn path=/trunk/; revision=4406
* Initialize the summary and subfolder listing. (imap_summary_free): NowJeffrey Stedfast2000-07-251-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. svn path=/trunk/; revision=4298
* Made it a little more forgiving. Also set current_folder to NULL as thereJeffrey Stedfast2000-07-241-1/+1
| | | | | | | | | | | | | 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. svn path=/trunk/; revision=4288
* New convenience function to unquote a string if it's encapsulated by "'sJeffrey Stedfast2000-07-151-2/+2
| | | | | | | | | | | | | 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. svn path=/trunk/; revision=4170
* Updated to use CAMEL_IMAP_OK, CAMEL_IMAP_NO, CAMEL_IMAP_BAD, andJeffrey Stedfast2000-07-141-1/+1
| | | | | | | | | | | 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. svn path=/trunk/; revision=4155
* Move the CAPABILITY command here so we don't have to keep checking eachJeffrey Stedfast2000-06-281-0/+1
| | | | | | | | | | | | | | | | | 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) svn path=/trunk/; revision=3767
* UpdatedJeffrey Stedfast2000-06-231-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 2000-06-22 Jeffrey Stedfast <fejj@helixcode.com> * 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. svn path=/trunk/; revision=3700
* IMAP will now allow you to login, and on some IMAP providers it will ↵Jeffrey Stedfast2000-06-141-2/+1
| | | | | | | | | | actually allow you to get mail - however there are some things that might need to be rewritten in Camel to allow all IMAP providers to work right now, it wants to open /INBOX which isn't always the same as INBOX Camel won't seem to allow me to just have it open "INBOX" if I specify '/' as the separator *sigh* svn path=/trunk/; revision=3557
* Updated to reflect changes made in camel-imap-store.cJeffrey Stedfast2000-06-101-3/+3
| | | | | | | | | | | | | | | 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. svn path=/trunk/; revision=3494
* worked on getting providers/imap/* to build cleanly, fixed a number of ↵Jeffrey Stedfast2000-06-071-1/+1
| | | | | | | | stupid errors and things like that am commit'ing code since there are some volunteers that would like to work on imap svn path=/trunk/; revision=3440
* Ripped out camel_imap_command_get_additional_data() from camel-imap-store ↵Jeffrey Stedfast2000-05-281-2/+1
| | | | | | and implemented a number of methods in camel-imap-folder svn path=/trunk/; revision=3233
* Took out code that had been there to reconnect to the server if it was notJeffrey Stedfast2000-05-261-1/+16
| | | | | | | | | | | | | 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. svn path=/trunk/; revision=3202
* Added more files to the imap provider to use as an outline - will likely ↵Jeffrey Stedfast2000-05-251-0/+70
need heavy editing later in development This is mostly meant as guidance to both me and any volunteers that start working on imap svn path=/trunk/; revision=3192