Update for CamelObject and some other changes
authorDan Winship <danw@src.gnome.org>
Tue, 5 Sep 2000 21:18:00 +0000 (21:18 +0000)
committerDan Winship <danw@src.gnome.org>
Tue, 5 Sep 2000 21:18:00 +0000 (21:18 +0000)
camel/providers/cache/camel-cache-folder.c
camel/providers/cache/camel-cache-folder.h
camel/providers/cache/camel-cache-provider.c
camel/providers/cache/camel-cache-store.c
camel/providers/cache/camel-cache-store.h

index 0d24fb5..0e91e02 100644 (file)
@@ -67,8 +67,7 @@
 #include <camel/camel-exception.h>
 #include <camel/camel-medium.h>
 
-static CamelFolderClass *parent_class;
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
+#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
 
 static void init (CamelFolder *folder, CamelStore *parent_store,
                  CamelFolder *parent_folder, const gchar *name,
@@ -83,7 +82,7 @@ static void expunge (CamelFolder *folder, CamelException *ex);
 static gint get_message_count (CamelFolder *folder);
 
 static void append_message (CamelFolder *folder, CamelMimeMessage *message, 
-                           guint32 flags, CamelException *ex);
+                           const CamelMessageInfo *info, CamelException *ex);
 
 static guint32 get_message_flags (CamelFolder *folder, const char *uid);
 static void set_message_flags (CamelFolder *folder, const char *uid,
@@ -109,17 +108,13 @@ static GPtrArray *search_by_expression (CamelFolder *folder,
 static const CamelMessageInfo *get_message_info (CamelFolder *folder,
                                                 const char *uid);
 
-static void finalize (GtkObject *object);
+static void finalize (CamelObject *object);
 
 static void
 camel_cache_folder_class_init (CamelCacheFolderClass *camel_cache_folder_class)
 {
        CamelFolderClass *camel_folder_class =
                CAMEL_FOLDER_CLASS (camel_cache_folder_class);
-       GtkObjectClass *gtk_object_class =
-               GTK_OBJECT_CLASS (camel_cache_folder_class);
-
-       parent_class = gtk_type_class (camel_folder_get_type ());
 
        /* virtual method overload */
        camel_folder_class->init = init;
@@ -140,29 +135,22 @@ camel_cache_folder_class_init (CamelCacheFolderClass *camel_cache_folder_class)
        camel_folder_class->free_subfolder_names = free_subfolder_names;
        camel_folder_class->search_by_expression = search_by_expression;
        camel_folder_class->get_message_info = get_message_info;
-
-       gtk_object_class->finalize = finalize;
 }
 
-GtkType
+CamelType
 camel_cache_folder_get_type (void)
 {
-       static GtkType camel_cache_folder_type = 0;
+       static CamelType camel_cache_folder_type = CAMEL_INVALID_TYPE;
 
-       if (!camel_cache_folder_type) {
-               GtkTypeInfo camel_cache_folder_info =   
-               {
-                       "CamelCacheFolder",
+       if (camel_cache_folder_type == CAMEL_INVALID_TYPE) {
+               camel_cache_folder_type = camel_type_register (
+                       CAMEL_FOLDER_TYPE, "CamelCacheFolder",
                        sizeof (CamelCacheFolder),
                        sizeof (CamelCacheFolderClass),
-                       (GtkClassInitFunc) camel_cache_folder_class_init,
-                       (GtkObjectInitFunc) NULL,
-                               /* reserved_1 */ NULL,
-                               /* reserved_2 */ NULL,
-                       (GtkClassInitFunc) NULL,
-               };
-
-               camel_cache_folder_type = gtk_type_unique (CAMEL_FOLDER_TYPE, &camel_cache_folder_info);
+                       (CamelObjectClassInitFunc) camel_cache_folder_class_init,
+                       NULL,
+                       NULL,
+                       (CamelObjectFinalizeFunc) finalize);
        }
 
        return camel_cache_folder_type;
@@ -188,7 +176,7 @@ cache_free_summary (CamelCacheFolder *cache_folder)
 }
 
 static void
-finalize (GtkObject *object)
+finalize (CamelObject *object)
 {
        CamelCacheFolder *cache_folder = CAMEL_CACHE_FOLDER (object);
 
@@ -202,12 +190,10 @@ finalize (GtkObject *object)
        if (cache_folder->uidmap)
                camel_cache_map_destroy (cache_folder->uidmap);
 
-       gtk_object_unref (GTK_OBJECT (cache_folder->local));
-       gtk_object_unref (GTK_OBJECT (cache_folder->remote));
+       camel_object_unref (CAMEL_OBJECT (cache_folder->local));
+       camel_object_unref (CAMEL_OBJECT (cache_folder->remote));
 
        g_free (cache_folder->mapfile);
-
-       GTK_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 
@@ -318,21 +304,23 @@ init (CamelFolder *folder, CamelStore *parent_store,
  * update the summary, and propagate the signal.
  */
 static void
-remote_folder_changed (CamelFolder *remote_folder, int type, gpointer data)
+remote_folder_changed (CamelObject *remote_folder, gpointer type,
+                      gpointer user_data)
 {
-       CamelCacheFolder *cache_folder = data;
+       CamelCacheFolder *cache_folder = user_data;
 
        update (cache_folder, NULL);
-       gtk_signal_emit_by_name (GTK_OBJECT (cache_folder), "folder_changed",
-                                type);
+       camel_object_trigger_event (CAMEL_OBJECT (cache_folder),
+                                   "folder_changed", type);
 }
 
 /* If the local folder changes, it's because we just cached a message
  * or expunged messages. Look for new messages and update the UID maps.
  */
 static void
-local_folder_changed (CamelFolder *local_folder, int type, gpointer data)
+local_folder_changed (CamelObject *local, gpointer type, gpointer data)
 {
+       CamelFolder *local_folder = CAMEL_FOLDER (local);
        CamelCacheFolder *cache_folder = data;
        CamelMimeMessage *msg;
        GPtrArray *new_luids;
@@ -407,7 +395,7 @@ get_message_count (CamelFolder *folder)
 /* DONE */
 static void
 append_message (CamelFolder *folder, CamelMimeMessage *message, 
-               guint32 flags, CamelException *ex)
+               const CamelMessageInfo *info, CamelException *ex)
 {
        CamelCacheFolder *cache_folder = (CamelCacheFolder *)folder;
 
@@ -415,7 +403,7 @@ append_message (CamelFolder *folder, CamelMimeMessage *message,
         * 100% reliable way to determine the UID assigned to the
         * remote message, so we can't.
         */
-       camel_folder_append_message (cache_folder->remote, message, flags, ex);
+       camel_folder_append_message (cache_folder->remote, message, info, ex);
 }
 
 /* DONE */
@@ -480,7 +468,7 @@ get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
 {
        CamelCacheFolder *cache_folder = (CamelCacheFolder *)folder;
        CamelMimeMessage *msg;
-       guint32 flags;
+       const CamelMessageInfo *info;
        const char *luid;
 
        /* Check if we have it cached first. */
@@ -499,7 +487,7 @@ get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
        msg = camel_folder_get_message (cache_folder->remote, uid, ex);
        if (!msg)
                return NULL;
-       flags = camel_folder_get_message_flags (cache_folder->remote, uid);
+       info = camel_folder_get_message_info (cache_folder->remote, uid);
 
        /* Add a header giving the remote UID and append it to the
         * local folder. (This should eventually invoke
@@ -508,7 +496,7 @@ get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
         */
        camel_medium_add_header (CAMEL_MEDIUM (msg), "X-Evolution-Remote-UID",
                                 uid);
-       camel_folder_append_message (cache_folder->local, msg, flags, NULL);
+       camel_folder_append_message (cache_folder->local, msg, info, NULL);
 
        return msg;
 }
@@ -608,20 +596,18 @@ camel_cache_folder_new (CamelStore *store, CamelFolder *parent,
        CamelCacheFolder *cache_folder;
        CamelFolder *folder;
 
-       cache_folder = gtk_type_new (CAMEL_CACHE_FOLDER_TYPE);
+       cache_folder = CAMEL_CACHE_FOLDER (camel_object_new (CAMEL_CACHE_FOLDER_TYPE));
        folder = (CamelFolder *)cache_folder;
 
        cache_folder->local = local;
-       gtk_object_ref (GTK_OBJECT (local));
-       gtk_signal_connect (GTK_OBJECT (local), "folder_changed",
-                           GTK_SIGNAL_FUNC (local_folder_changed),
-                           cache_folder);
+       camel_object_ref (CAMEL_OBJECT (local));
+       camel_object_hook_event (CAMEL_OBJECT (local), "folder_changed",
+                                local_folder_changed, cache_folder);
 
        cache_folder->remote = remote;
-       gtk_object_ref (GTK_OBJECT (remote));
-       gtk_signal_connect (GTK_OBJECT (remote), "folder_changed",
-                           GTK_SIGNAL_FUNC (remote_folder_changed),
-                           cache_folder);
+       camel_object_ref (CAMEL_OBJECT (remote));
+       camel_object_hook_event (CAMEL_OBJECT (remote), "folder_changed",
+                                remote_folder_changed, cache_folder);
 
        /* XXX */
 
@@ -634,7 +620,7 @@ camel_cache_folder_sync (CamelCacheFolder *cache_folder, CamelException *ex)
        CamelMimeMessage *msg;
        const char *ruid, *luid;
        int lsize, i;
-       guint32 flags;
+       const CamelMessageInfo *info;
 
        lsize = camel_folder_get_message_count (cache_folder->local);
 
@@ -652,13 +638,13 @@ camel_cache_folder_sync (CamelCacheFolder *cache_folder, CamelException *ex)
                                                ruid, ex);
                if (camel_exception_is_set (ex))
                        return;
-               flags = camel_folder_get_message_flags (cache_folder->remote,
-                                                       ruid);
+               info = camel_folder_get_message_info (cache_folder->remote,
+                                                     ruid);
 
                camel_medium_add_header (CAMEL_MEDIUM (msg),
                                         "X-Evolution-Remote-UID", ruid);
                camel_folder_append_message (cache_folder->local, msg,
-                                            flags, ex);
+                                            info, ex);
                if (camel_exception_is_set (ex))
                        return;
        }
index 4f30c70..c4eadd5 100644 (file)
@@ -35,9 +35,9 @@ extern "C" {
 #include "camel-cache-map.h"
 
 #define CAMEL_CACHE_FOLDER_TYPE     (camel_cache_folder_get_type ())
-#define CAMEL_CACHE_FOLDER(obj)     (GTK_CHECK_CAST((obj), CAMEL_CACHE_FOLDER_TYPE, CamelCacheFolder))
-#define CAMEL_CACHE_FOLDER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_CACHE_FOLDER_TYPE, CamelCacheFolderClass))
-#define IS_CAMEL_CACHE_FOLDER(o)    (GTK_CHECK_TYPE((o), CAMEL_CACHE_FOLDER_TYPE))
+#define CAMEL_CACHE_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_CACHE_FOLDER_TYPE, CamelCacheFolder))
+#define CAMEL_CACHE_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_CACHE_FOLDER_TYPE, CamelCacheFolderClass))
+#define IS_CAMEL_CACHE_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_CACHE_FOLDER_TYPE))
 
 
 typedef struct {
@@ -77,8 +77,8 @@ CamelFolder *camel_cache_folder_new (CamelStore *store, CamelFolder *parent,
 void camel_cache_folder_sync (CamelCacheFolder *cache_folder,
                              CamelException *ex);
 
-/* Standard Gtk function */
-GtkType camel_cache_folder_get_type (void);
+/* Standard Camel function */
+CamelType camel_cache_folder_get_type (void);
 
 #ifdef __cplusplus
 }
index 2d17a62..94d38a2 100644 (file)
@@ -32,12 +32,13 @@ static CamelProvider cache_provider = {
        "cache",
        "Cache",
 
-       "For caching remote mail into a local store."
+       "For caching remote mail into a local store.",
 
        "cache",
 
        0,
 
+       { 0, 0 },
        { 0, 0 }
 };
 
index ce34a0e..b779b4c 100644 (file)
 
 static CamelServiceClass *service_class = NULL;
 
-static void finalize (GtkObject *object);
+static void finalize (CamelObject *object);
 
 static gboolean cache_connect (CamelService *service, CamelException *ex);
 static gboolean cache_disconnect (CamelService *service, CamelException *ex);
 
 static CamelFolder *get_folder (CamelStore *store, const char *folder_name, 
                                gboolean create, CamelException *ex);
-static CamelFolder *delete_folder (CamelStore *store, const char *folder_name, 
-                                  CamelException *ex);
+static void delete_folder (CamelStore *store, const char *folder_name, 
+                          CamelException *ex);
 static char *get_folder_name (CamelStore *store, const char *folder_name, 
                              CamelException *ex);
 static char *get_root_folder_name (CamelStore *store, CamelException *ex);
@@ -64,18 +64,14 @@ static char *get_default_folder_name (CamelStore *store, CamelException *ex);
 static void
 camel_cache_store_class_init (CamelCacheStoreClass *camel_cache_store_class)
 {
-       GtkObjectClass *object_class =
-               GTK_OBJECT_CLASS (camel_cache_store_class);
        CamelServiceClass *camel_service_class =
                CAMEL_SERVICE_CLASS (camel_cache_store_class);
        CamelStoreClass *camel_store_class =
                CAMEL_STORE_CLASS (camel_cache_store_class);
        
-       service_class = gtk_type_class (camel_service_get_type ());
+       service_class = CAMEL_SERVICE_CLASS (camel_type_get_global_classfuncs (camel_service_get_type ()));
 
        /* virtual method overload */
-       object_class->finalize = finalize;
-
        camel_service_class->connect = cache_connect;
        camel_service_class->disconnect = cache_disconnect;
 
@@ -90,44 +86,38 @@ camel_cache_store_class_init (CamelCacheStoreClass *camel_cache_store_class)
 static void
 camel_cache_store_init (gpointer object, gpointer klass)
 {
-       CamelCacheStore *cache_store = CAMEL_CACHE_STORE (object);
        CamelService *service = CAMEL_SERVICE (object);
 
        service->url_flags = CAMEL_SERVICE_URL_NEED_PATH;
 }
 
 
-GtkType
+CamelType
 camel_cache_store_get_type (void)
 {
-       static GtkType camel_cache_store_type = 0;
+       static CamelType camel_cache_store_type = CAMEL_INVALID_TYPE;
 
-       if (!camel_cache_store_type) {
-               GtkTypeInfo camel_cache_store_info =    
-               {
-                       "CamelCacheStore",
+       if (camel_cache_store_type == CAMEL_INVALID_TYPE) {
+               camel_cache_store_type = camel_type_register (
+                       CAMEL_STORE_TYPE, "CamelCacheStore",
                        sizeof (CamelCacheStore),
                        sizeof (CamelCacheStoreClass),
-                       (GtkClassInitFunc) camel_cache_store_class_init,
-                       (GtkObjectInitFunc) camel_cache_store_init,
-                               /* reserved_1 */ NULL,
-                               /* reserved_2 */ NULL,
-                       (GtkClassInitFunc) NULL,
-               };
-
-               camel_cache_store_type = gtk_type_unique (CAMEL_STORE_TYPE, &camel_cache_store_info);
+                       (CamelObjectClassInitFunc) camel_cache_store_class_init,
+                       NULL,
+                       (CamelObjectInitFunc) camel_cache_store_init,
+                       (CamelObjectFinalizeFunc) finalize);
        }
 
        return camel_cache_store_type;
 }
 
 static void
-finalize (GtkObject *object)
+finalize (CamelObject *object)
 {
        CamelCacheStore *cache_store = CAMEL_CACHE_STORE (object);
 
-       gtk_object_unref (GTK_OBJECT (cache_store->local));
-       gtk_object_unref (GTK_OBJECT (cache_store->remote));
+       camel_object_unref (CAMEL_OBJECT (cache_store->local));
+       camel_object_unref (CAMEL_OBJECT (cache_store->remote));
 }
 
 
@@ -152,7 +142,8 @@ cache_connect (CamelService *service, CamelException *ex)
        if (!camel_service_connect (CAMEL_SERVICE (cache_store->remote), ex))
                return FALSE;
        if (!camel_service_connect (CAMEL_SERVICE (cache_store->local), ex)) {
-               camel_service_disconnect (CAMEL_SERVICE (store->remote), NULL);
+               camel_service_disconnect (CAMEL_SERVICE (cache_store->remote),
+                                         NULL);
                return FALSE;
        }
 
@@ -186,6 +177,7 @@ get_folder (CamelStore *store, const char *folder_name,
        lf = camel_store_get_folder (cache_store->local, folder_name,
                                     TRUE, ex);
        if (!lf) {
+               camel_object_unref (CAMEL_OBJECT (rf));
                camel_exception_setv (ex, camel_exception_get_id (ex),
                                      "Could not create cache folder:\n%s",
                                      camel_exception_get_description (ex));
index d85f759..f02c987 100644 (file)
@@ -34,9 +34,9 @@ extern "C" {
 #include <camel/camel-store.h>
 
 #define CAMEL_CACHE_STORE_TYPE     (camel_cache_store_get_type ())
-#define CAMEL_CACHE_STORE(obj)     (GTK_CHECK_CAST((obj), CAMEL_CACHE_STORE_TYPE, CamelCacheStore))
-#define CAMEL_CACHE_STORE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_CACHE_STORE_TYPE, CamelCacheStoreClass))
-#define IS_CAMEL_CACHE_STORE(o)    (GTK_CHECK_TYPE((o), CAMEL_CACHE_STORE_TYPE))
+#define CAMEL_CACHE_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_CACHE_STORE_TYPE, CamelCacheStore))
+#define CAMEL_CACHE_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_CACHE_STORE_TYPE, CamelCacheStoreClass))
+#define IS_CAMEL_CACHE_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_CACHE_STORE_TYPE))
 
 typedef struct {
        CamelStore parent_object;
@@ -55,8 +55,8 @@ typedef struct {
 /* support functions */
 void camel_cache_store_sync (CamelCacheStore *store);
 
-/* Standard Gtk function */
-GtkType camel_cache_store_get_type (void);
+/* Standard Camel function */
+CamelType camel_cache_store_get_type (void);
 
 #ifdef __cplusplus
 }