aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-service.c
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2001-02-10 00:43:22 +0800
committerDan Winship <danw@src.gnome.org>2001-02-10 00:43:22 +0800
commit65eb577ecd2ce45f78f8df4da3386e2ac1f3c2c1 (patch)
tree1b71a69279b3130cab4dc333dd6a68d324ea4985 /camel/camel-service.c
parent154d1b95c85bc8888bae6b64a4f2ba040fe869b4 (diff)
downloadgsoc2013-evolution-65eb577ecd2ce45f78f8df4da3386e2ac1f3c2c1.tar
gsoc2013-evolution-65eb577ecd2ce45f78f8df4da3386e2ac1f3c2c1.tar.gz
gsoc2013-evolution-65eb577ecd2ce45f78f8df4da3386e2ac1f3c2c1.tar.bz2
gsoc2013-evolution-65eb577ecd2ce45f78f8df4da3386e2ac1f3c2c1.tar.lz
gsoc2013-evolution-65eb577ecd2ce45f78f8df4da3386e2ac1f3c2c1.tar.xz
gsoc2013-evolution-65eb577ecd2ce45f78f8df4da3386e2ac1f3c2c1.tar.zst
gsoc2013-evolution-65eb577ecd2ce45f78f8df4da3386e2ac1f3c2c1.zip
Rewrite a bunch. Replace the existing folder cache stuff with much simpler
* 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 svn path=/trunk/; revision=8145
Diffstat (limited to 'camel/camel-service.c')
-rw-r--r--camel/camel-service.c83
1 files changed, 36 insertions, 47 deletions
diff --git a/camel/camel-service.c b/camel/camel-service.c
index 0eae1cd98a..bdaa807572 100644
--- a/camel/camel-service.c
+++ b/camel/camel-service.c
@@ -38,6 +38,9 @@ static CamelObjectClass *parent_class = NULL;
/* Returns the class for a CamelService */
#define CSERV_CLASS(so) CAMEL_SERVICE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
+static void construct (CamelService *service, CamelSession *session,
+ CamelProvider *provider, CamelURL *url,
+ CamelException *ex);
static gboolean service_connect(CamelService *service, CamelException *ex);
static gboolean service_disconnect(CamelService *service, gboolean clean,
CamelException *ex);
@@ -46,7 +49,6 @@ static GList * query_auth_types (CamelService *service, gboolean connect, Camel
static void free_auth_types (CamelService *service, GList *authtypes);
static char * get_name (CamelService *service, gboolean brief);
static char * get_path (CamelService *service);
-static gboolean check_url (CamelService *service, CamelException *ex);
static void
@@ -55,9 +57,9 @@ camel_service_class_init (CamelServiceClass *camel_service_class)
parent_class = camel_type_get_global_classfuncs (CAMEL_OBJECT_TYPE);
/* virtual method definition */
+ camel_service_class->construct = construct;
camel_service_class->connect = service_connect;
camel_service_class->disconnect = service_disconnect;
- /*camel_service_class->is_connected = is_connected;*/
camel_service_class->query_auth_types = query_auth_types;
camel_service_class->free_auth_types = free_auth_types;
camel_service_class->get_name = get_name;
@@ -125,82 +127,69 @@ camel_service_get_type (void)
return camel_service_type;
}
-static gboolean
-check_url (CamelService *service, CamelException *ex)
+
+static void
+construct (CamelService *service, CamelSession *session,
+ CamelProvider *provider, CamelURL *url, CamelException *ex)
{
char *url_string;
- if (((service->provider->url_flags & CAMEL_URL_NEED_USER)
+ if (((provider->url_flags & CAMEL_URL_NEED_USER)
== CAMEL_URL_NEED_USER) &&
- (service->url->user == NULL || service->url->user[0] == '\0')) {
- url_string = camel_url_to_string (service->url, FALSE);
+ (url->user == NULL || url->user[0] == '\0')) {
+ url_string = camel_url_to_string (url, FALSE);
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
_("URL '%s' needs a username component"),
url_string);
g_free (url_string);
- return FALSE;
- } else if (((service->provider->url_flags & CAMEL_URL_NEED_HOST)
+ return;
+ } else if (((provider->url_flags & CAMEL_URL_NEED_HOST)
== CAMEL_URL_NEED_HOST) &&
- (service->url->host == NULL || service->url->host[0] == '\0')) {
- url_string = camel_url_to_string (service->url, FALSE);
+ (url->host == NULL || url->host[0] == '\0')) {
+ url_string = camel_url_to_string (url, FALSE);
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
_("URL '%s' needs a host component"),
url_string);
g_free (url_string);
- return FALSE;
- } else if (((service->provider->url_flags & CAMEL_URL_NEED_PATH)
+ return;
+ } else if (((provider->url_flags & CAMEL_URL_NEED_PATH)
== CAMEL_URL_NEED_PATH) &&
- (service->url->path == NULL || service->url->path[0] == '\0')) {
- url_string = camel_url_to_string (service->url, FALSE);
+ (url->path == NULL || url->path[0] == '\0')) {
+ url_string = camel_url_to_string (url, FALSE);
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
_("URL '%s' needs a path component"),
url_string);
g_free (url_string);
- return FALSE;
+ return;
}
- return TRUE;
+ service->provider = provider;
+ service->url = url;
+ service->session = session;
+ camel_object_ref (CAMEL_OBJECT (session));
+
+ service->connected = FALSE;
}
/**
- * camel_service_new: create a new CamelService or subtype
- * @type: the CamelType of the class to create
+ * camel_service_construct:
+ * @service: the CamelService
* @session: the session for the service
* @provider: the service's provider
* @url: the default URL for the service (may be NULL)
* @ex: a CamelException
*
- * Creates a new CamelService (or one of its subtypes), initialized
- * with the given parameters.
- *
- * Return value: the CamelService, or NULL.
+ * Constructs a CamelService initialized with the given parameters.
**/
-CamelService *
-camel_service_new (CamelType type, CamelSession *session,
- CamelProvider *provider, CamelURL *url,
- CamelException *ex)
+void
+camel_service_construct (CamelService *service, CamelSession *session,
+ CamelProvider *provider, CamelURL *url,
+ CamelException *ex)
{
- CamelService *service;
-
- g_return_val_if_fail (CAMEL_IS_SESSION (session), NULL);
-
- service = CAMEL_SERVICE (camel_object_new (type));
-
- /*service->connect_level = 0;*/
-
- service->provider = provider;
- service->url = url;
- if (!check_url (service, ex)) {
- camel_object_unref (CAMEL_OBJECT (service));
- return NULL;
- }
-
- service->session = session;
- camel_object_ref (CAMEL_OBJECT (session));
-
- service->connected = FALSE;
+ g_return_if_fail (CAMEL_IS_SERVICE (service));
+ g_return_if_fail (CAMEL_IS_SESSION (session));
- return service;
+ CSERV_CLASS (service)->construct (service, session, provider, url, ex);
}