diff options
author | Dan Winship <danw@src.gnome.org> | 2000-05-04 23:23:43 +0800 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2000-05-04 23:23:43 +0800 |
commit | ba6b73fe56390dc752b43443701073fff7289709 (patch) | |
tree | dbcb834a29a525587107981b0883f486b9141f8d /camel/camel-session.c | |
parent | 929f89ce1c6fd86370839283e467127c2a1be3f6 (diff) | |
download | gsoc2013-evolution-ba6b73fe56390dc752b43443701073fff7289709.tar gsoc2013-evolution-ba6b73fe56390dc752b43443701073fff7289709.tar.gz gsoc2013-evolution-ba6b73fe56390dc752b43443701073fff7289709.tar.bz2 gsoc2013-evolution-ba6b73fe56390dc752b43443701073fff7289709.tar.lz gsoc2013-evolution-ba6b73fe56390dc752b43443701073fff7289709.tar.xz gsoc2013-evolution-ba6b73fe56390dc752b43443701073fff7289709.tar.zst gsoc2013-evolution-ba6b73fe56390dc752b43443701073fff7289709.zip |
New function to replace camel_provider_scan. Returns a list of either (a)
* 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.
svn path=/trunk/; revision=2797
Diffstat (limited to 'camel/camel-session.c')
-rw-r--r-- | camel/camel-session.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/camel/camel-session.c b/camel/camel-session.c index 06a708b752..bddd22bfe2 100644 --- a/camel/camel-session.c +++ b/camel/camel-session.c @@ -95,6 +95,68 @@ camel_session_register_provider (CamelSession *session, g_hash_table_insert (session->providers, provider->protocol, provider); } +static void +ensure_loaded (gpointer key, gpointer value, gpointer user_data) +{ + CamelSession *session = user_data; + char *name = key; + char *path = value; + + if (!g_hash_table_lookup (session->providers, name)) { + CamelException ex; + + camel_exception_init (&ex); + camel_provider_load (session, path, &ex); + camel_exception_clear (&ex); + } +} + +static gint +provider_compare (gconstpointer a, gconstpointer b) +{ + const CamelProvider *cpa = (const CamelProvider *)a; + const CamelProvider *cpb = (const CamelProvider *)b; + + return strcmp (cpa->name, cpb->name); +} + +static void +add_to_list (gpointer key, gpointer value, gpointer user_data) +{ + GList **list = user_data; + CamelProvider *prov = value; + + *list = g_list_insert_sorted (*list, prov, provider_compare); +} + +/** + * camel_session_list_providers: + * @session: the session + * @load: whether or not to load in providers that are not already loaded + * + * This returns a list of available providers in this session. If @load + * is %TRUE, it will first load in all available providers that haven't + * yet been loaded. + * + * Return value: a GList of providers, which the caller must free. + **/ +GList * +camel_session_list_providers (CamelSession *session, gboolean load) +{ + GList *list; + + g_return_val_if_fail (CAMEL_IS_SESSION (session), NULL); + + if (load) { + g_hash_table_foreach (session->modules, ensure_loaded, + session); + } + + list = NULL; + g_hash_table_foreach (session->providers, add_to_list, &list); + return list; +} + CamelService * camel_session_get_service (CamelSession *session, const char *url_string, |