Update for CamelObject and some other changes
svn path=/trunk/; revision=5210
This commit is contained in:
90
camel/providers/cache/camel-cache-folder.c
vendored
90
camel/providers/cache/camel-cache-folder.c
vendored
@ -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;
|
||||
}
|
||||
|
||||
10
camel/providers/cache/camel-cache-folder.h
vendored
10
camel/providers/cache/camel-cache-folder.h
vendored
@ -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
|
||||
}
|
||||
|
||||
3
camel/providers/cache/camel-cache-provider.c
vendored
3
camel/providers/cache/camel-cache-provider.c
vendored
@ -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 }
|
||||
};
|
||||
|
||||
|
||||
46
camel/providers/cache/camel-cache-store.c
vendored
46
camel/providers/cache/camel-cache-store.c
vendored
@ -46,15 +46,15 @@
|
||||
|
||||
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));
|
||||
|
||||
10
camel/providers/cache/camel-cache-store.h
vendored
10
camel/providers/cache/camel-cache-store.h
vendored
@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user