new method to set the default provider for a protocol.

1999-04-25  bertrand <Bertrand.Guiheneuf@inria.fr>

	* camel/camel-session.c (camel_session_set_provider):
	new method to set the default provider for a protocol.
	(camel_session_get_store_from_provider):
	new method to instantiate a folder from a provider.

	* camel/camel-provider.h: s/GString/gchar/g
	+ typo fix.

svn path=/trunk/; revision=878
This commit is contained in:
bertrand
1999-04-25 11:21:33 +00:00
committed by Bertrand Guiheneuf
parent 8fa0292a20
commit f9595bb213
4 changed files with 79 additions and 7 deletions

View File

@ -1,5 +1,13 @@
1999-04-25 bertrand <Bertrand.Guiheneuf@inria.fr>
* camel/camel-session.c (camel_session_set_provider):
new method to set the default provider for a protocol.
(camel_session_get_store_from_provider):
new method to instantiate a folder from a provider.
* camel/camel-provider.h: s/GString/gchar/g
+ typo fix.
* camel/camel-provider.[ch]:
basic provider structure. Have to write the
code for dynamic loading.

View File

@ -40,10 +40,10 @@ typedef enum {
typedef struct {
GtkType object_type; /* used to create instance of the provider */
ProviderType provider_type; /* is a store or a transport */
GString *protocol; /* name of the protocol ("imap"/"smtp"/"mh" ...) */
GString *provider_name; /* name of the provider ("Raymond the imap provider") */
GString *description; /* Useful when multiple providers are available for a same protocol */
} CameProvider;
gchar *protocol; /* name of the protocol ("imap"/"smtp"/"mh" ...) */
gchar *provider_name; /* name of the provider ("Raymond the imap provider") */
gchar *description; /* Useful when multiple providers are available for a same protocol */
} CamelProvider;

View File

@ -43,6 +43,13 @@ camel_session_class_init (CamelSessionClass *camel_session_class)
static void
camel_session_init (CamelSession *session)
{
store_provider_list = g_hash_table_new (g_str_hash, g_str_equal);
transport_provider_list = g_hash_table_new (g_str_hash, g_str_equal);
}
GtkType
@ -57,7 +64,7 @@ camel_session_get_type (void)
sizeof (CamelSession),
sizeof (CamelSessionClass),
(GtkClassInitFunc) camel_session_class_init,
(GtkObjectInitFunc) NULL,
(GtkObjectInitFunc) camel_session_init,
/* reserved_1 */ NULL,
/* reserved_2 */ NULL,
(GtkClassInitFunc) NULL,
@ -69,3 +76,56 @@ camel_session_get_type (void)
return camel_session_type;
}
/**
* camel_session_set_provider: set the default provider for a protocol
* @session: session object for wich the provider will the default
* @provider: provider object
*
* Set the default implementation for a protocol. The protocol
* is determined by provider->protocol field (See CamelProtocol).
* It overrides the default provider for this protocol.
*
**/
void
camel_session_set_provider (CamelSession *session, CamelProvider *provider)
{
GHashTable *table;
g_assert(session);
g_assert(provider);
if (provider->provider_type == PROVIDER_STORE)
table = session->store_provider_list;
else
table = session->transport_provider_list;
g_hash_table_insert (table, (gpointer)(provider->protocol), (gpointer)(provider));
}
/**
* camel_session_get_store_from_provider: create a folder instance for a given provider
* @session: session object the folder will be initialized with
* @provider: provider folder to instantiate
*
*
*
* Return value: the newly instantiated folder
**/
CamelStore *
camel_session_get_store_from_provider (CamelSession *session, CamelProvider *provider)
{
CamelStore *store;
g_assert(session);
g_assert(provider);
store = gtk_object_new (provider->object_type, NULL);
#warning add session initialisation on object
return store;
}

View File

@ -32,7 +32,7 @@ extern "C" {
#endif /* __cplusplus }*/
#include <gtk/gtk.h>
#include "camel-provider.h"
#define CAMEL_SESSION_TYPE (camel_session_get_type ())
#define CAMEL_SESSION(obj) (GTK_CHECK_CAST((obj), CAMEL_SESSION_TYPE, CamelSession))
@ -46,6 +46,9 @@ typedef struct _CamelSession CamelSession;
struct _CamelSession
{
GtkObject parent_object;
GHashTable *store_provider_list; /* providers are identified by their protocol */
GHashTable *transport_provider_list;
};
@ -53,7 +56,7 @@ struct _CamelSession
typedef struct {
GtkObjectClass parent_class;
/* Virtual methods */
} CamelSessionClass;
@ -66,6 +69,7 @@ GtkType camel_session_get_type (void);
void camel_session_set_provider (CamelSession *session, CamelProvider *provider);
#ifdef __cplusplus