diff options
author | Not Zed <NotZed@Ximian.com> | 2003-08-28 03:50:25 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2003-08-28 03:50:25 +0800 |
commit | 7dea6c9dc22d7be2f2069bb2372d2df9df2abdd5 (patch) | |
tree | fe3c66020637a15c20a71b2ef0fbe71a73c2631d /camel/camel-object.h | |
parent | 6b615eaf55a664686b2513f0ae6701e338ace46b (diff) | |
download | gsoc2013-evolution-7dea6c9dc22d7be2f2069bb2372d2df9df2abdd5.tar.gz gsoc2013-evolution-7dea6c9dc22d7be2f2069bb2372d2df9df2abdd5.tar.zst gsoc2013-evolution-7dea6c9dc22d7be2f2069bb2372d2df9df2abdd5.zip |
implement PERSISTENT_PROPERTIES, for index mode.
2003-08-27 Not Zed <NotZed@Ximian.com>
* providers/local/camel-local-folder.c (local_getv): implement
PERSISTENT_PROPERTIES, for index mode.
* camel-object.c (cobject_state_read): Also add property reading,
and bump version to 1.
(cobject_state_write): add persistent property writing.
2003-08-26 Not Zed <NotZed@Ximian.com>
* camel-folder.c (folder_getv): chain up properly.
* camel-file-utils.c (camel_file_util_savename): helper to create
a .#filename filename.
* providers/local/camel-local-folder.c
(camel_local_folder_construct): init meta-data for local folders.
(local_getv): chain up properly, if args are not processed, rather
than don't if they aren't.
2003-08-23 Not Zed <NotZed@Ximian.com>
* camel-object.c (cobject_class_init): added a new event,
meta_changed.
(camel_object_meta_set, camel_object_meta_get): meta-data api.
(camel_object_free_hooks): Free meta-data if it is set on the
object.
* providers/local/camel-local-folder.c
(camel_local_folder_get_type): setup a property list for local
folders, just 'index_body' at present.
svn path=/trunk/; revision=22388
Diffstat (limited to 'camel/camel-object.h')
-rw-r--r-- | camel/camel-object.h | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/camel/camel-object.h b/camel/camel-object.h index 0bcdeaef0f..a13cf69325 100644 --- a/camel/camel-object.h +++ b/camel/camel-object.h @@ -33,6 +33,7 @@ extern "C" { #endif /* __cplusplus */ #include <glib.h> +#include <stdio.h> /* FILE */ #include <stdlib.h> /* size_t */ #include <stdarg.h> #include <pthread.h> @@ -74,6 +75,7 @@ extern CamelType camel_object_type; typedef struct _CamelObjectClass CamelObjectClass; typedef struct _CamelObject CamelObject; typedef unsigned int CamelObjectHookID; +typedef struct _CamelObjectMeta CamelObjectMeta; typedef void (*CamelObjectClassInitFunc) (CamelObjectClass *); typedef void (*CamelObjectClassFinalizeFunc) (CamelObjectClass *); @@ -85,19 +87,37 @@ typedef void (*CamelObjectEventHookFunc) (CamelObject *, gpointer, gpointer); #define CAMEL_INVALID_TYPE (NULL) -/* camel object args */ +/* camel object args. */ enum { - CAMEL_OBJECT_ARG_DESCRIPTION = CAMEL_ARG_FIRST, + /* Get a description of the object. */ + CAMEL_OBJECT_ARG_DESCRIPTION = CAMEL_ARG_FIRST, /* Get a copy of the meta-data list (should be freed) */ + CAMEL_OBJECT_ARG_METADATA, + CAMEL_OBJECT_ARG_STATE_FILE, + CAMEL_OBJECT_ARG_PERSISTENT_PROPERTIES, }; enum { CAMEL_OBJECT_DESCRIPTION = CAMEL_OBJECT_ARG_DESCRIPTION | CAMEL_ARG_STR, + /* Returns a CamelObjectMeta list */ + CAMEL_OBJECT_METADATA = CAMEL_OBJECT_ARG_METADATA | CAMEL_ARG_PTR, + /* sets where the persistent data should reside, otherwise it isn't persistent */ + CAMEL_OBJECT_STATE_FILE = CAMEL_OBJECT_ARG_STATE_FILE | CAMEL_ARG_STR, + /* returns a GSList CamelProperties of persistent properties */ + CAMEL_OBJECT_PERSISTENT_PROPERTIES = CAMEL_OBJECT_ARG_PERSISTENT_PROPERTIES | CAMEL_ARG_PTR, }; enum _CamelObjectFlags { CAMEL_OBJECT_DESTROY = (1<<0), }; +/* returned by get::CAMEL_OBJECT_METADATA */ +struct _CamelObjectMeta { + struct _CamelObjectMeta *next; + + char *value; + char name[1]; /* allocated as part of structure */ +}; + /* TODO: create a simpleobject which has no events on it, or an interface for events */ struct _CamelObject { struct _CamelObjectClass *klass; @@ -155,6 +175,14 @@ struct _CamelObjectClass int (*getv)(struct _CamelObject *, struct _CamelException *ex, CamelArgGetV *args); /* we only free 1 at a time, and only pointer types, obviously */ void (*free)(struct _CamelObject *, guint32 tag, void *ptr); + + /* get/set meta-data interface */ + char *(*meta_get)(struct _CamelObject *, const char * name); + gboolean (*meta_set)(struct _CamelObject *, const char * name, const char *value); + + /* persistence stuff */ + int (*state_read)(struct _CamelObject *, FILE *fp); + int (*state_write)(struct _CamelObject *, FILE *fp); }; /* The type system .... it's pretty simple..... */ @@ -209,6 +237,14 @@ int camel_object_setv(void *obj, struct _CamelException *ex, CamelArgV *); int camel_object_get(void *obj, struct _CamelException *ex, ...); int camel_object_getv(void *obj, struct _CamelException *ex, CamelArgGetV *); +/* meta-data for user-specific data */ +char *camel_object_meta_get(void *vo, const char * name); +gboolean camel_object_meta_set(void *vo, const char * name, const char *value); + +/* reads/writes the state from/to the CAMEL_OBJECT_STATE_FILE */ +int camel_object_state_read(void *vo); +int camel_object_state_write(void *vo); + /* free a bunch of objects, list must be 0 terminated */ void camel_object_free(void *vo, guint32 tag, void *value); |