aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-object.h
diff options
context:
space:
mode:
authorNot Zed <NotZed@Ximian.com>2003-08-28 03:50:25 +0800
committerMichael Zucci <zucchi@src.gnome.org>2003-08-28 03:50:25 +0800
commit7dea6c9dc22d7be2f2069bb2372d2df9df2abdd5 (patch)
treefe3c66020637a15c20a71b2ef0fbe71a73c2631d /camel/camel-object.h
parent6b615eaf55a664686b2513f0ae6701e338ace46b (diff)
downloadgsoc2013-evolution-7dea6c9dc22d7be2f2069bb2372d2df9df2abdd5.tar
gsoc2013-evolution-7dea6c9dc22d7be2f2069bb2372d2df9df2abdd5.tar.gz
gsoc2013-evolution-7dea6c9dc22d7be2f2069bb2372d2df9df2abdd5.tar.bz2
gsoc2013-evolution-7dea6c9dc22d7be2f2069bb2372d2df9df2abdd5.tar.lz
gsoc2013-evolution-7dea6c9dc22d7be2f2069bb2372d2df9df2abdd5.tar.xz
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.h40
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);