2
#ifndef _CAMEL_IMAPP_DRIVER_H
3
#define _CAMEL_IMAPP_DRIVER_H
5
#include <camel/camel-list-utils.h>
6
#include <camel/camel-object.h>
8
#include "camel-imapp-stream.h"
10
#define CAMEL_IMAPP_DRIVER_TYPE (camel_imapp_driver_get_type ())
11
#define CAMEL_IMAPP_DRIVER(obj) (CAMEL_CHECK_CAST((obj), CAMEL_IMAPP_DRIVER_TYPE, CamelIMAPPDriver))
12
#define CAMEL_IMAPP_DRIVER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_IMAPP_DRIVER_TYPE, CamelIMAPPDriverClass))
13
#define CAMEL_IS_IMAP_DRIVER(o) (CAMEL_CHECK_TYPE((o), CAMEL_IMAPP_DRIVER_TYPE))
17
typedef struct _CamelIMAPPDriver CamelIMAPPDriver;
18
typedef struct _CamelIMAPPDriverClass CamelIMAPPDriverClass;
20
typedef struct _CamelIMAPPFetch CamelIMAPPFetch;
22
typedef gint (*CamelIMAPPDriverFunc)(struct _CamelIMAPPDriver *driver, gpointer data);
23
typedef struct _CamelSasl * (*CamelIMAPPSASLFunc)(struct _CamelIMAPPDriver *driver, gpointer data);
24
typedef void (*CamelIMAPPLoginFunc)(struct _CamelIMAPPDriver *driver, gchar **login, gchar **pass, gpointer data);
26
typedef void (*CamelIMAPPFetchFunc)(struct _CamelIMAPPDriver *driver, CamelIMAPPFetch *);
28
struct _CamelIMAPPFetch {
29
struct _CamelIMAPPFetch *next;
30
struct _CamelIMAPPFetch *prev;
32
CamelStream *body; /* the content fetched */
34
struct _CamelIMAPPFolder *folder;
38
CamelIMAPPFetchFunc done;
42
struct _CamelMimeMessage;
44
struct _CamelIMAPPDriver {
45
CamelObject parent_object;
47
struct _CamelIMAPPEngine *engine;
49
struct _CamelIMAPPFolder *folder;
51
/* current folder stuff */
57
guint32 permanentflags;
60
GPtrArray *list_result;
61
GSList *list_commands;
64
/* sem_t list_sem; for controlled access to list variables */
66
/* this is so the node is always in a list - easier exception management */
67
CamelDList body_fetch;
68
CamelDList body_fetch_done;
70
/* factory to get an appropriate sasl mech */
71
CamelIMAPPSASLFunc get_sasl;
72
gpointer get_sasl_data;
74
/* callbacks, get login username/pass */
75
CamelIMAPPLoginFunc get_login;
76
gpointer get_login_data;
79
struct _CamelIMAPPDriverClass {
80
CamelObjectClass parent_class;
83
CamelType camel_imapp_driver_get_type (void);
85
CamelIMAPPDriver * camel_imapp_driver_new(CamelIMAPPStream *stream);
87
void camel_imapp_driver_set_sasl_factory(CamelIMAPPDriver *id, CamelIMAPPSASLFunc get_sasl, gpointer sasl_data);
88
void camel_imapp_driver_set_login_query(CamelIMAPPDriver *id, CamelIMAPPLoginFunc get_login, gpointer login_data);
90
void camel_imapp_driver_login(CamelIMAPPDriver *id);
92
void camel_imapp_driver_select(CamelIMAPPDriver *id, struct _CamelIMAPPFolder *folder);
93
void camel_imapp_driver_update(CamelIMAPPDriver *id, struct _CamelIMAPPFolder *folder);
94
void camel_imapp_driver_sync(CamelIMAPPDriver *id, gboolean expunge, struct _CamelIMAPPFolder *folder);
96
struct _CamelStream * camel_imapp_driver_fetch(CamelIMAPPDriver *id, struct _CamelIMAPPFolder *folder, const gchar *uid, const gchar *body);
98
GPtrArray * camel_imapp_driver_list(CamelIMAPPDriver *id, const gchar *name, guint32 flags);
100
struct _CamelStream *camel_imapp_driver_get(CamelIMAPPDriver *id, struct _CamelIMAPPFolder *folder, const gchar *uid);
101
void camel_imapp_driver_append(CamelIMAPPDriver *id, struct _CamelIMAPPFolder *folder, struct _CamelDataWrapper *);