/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* camel-store.h : Abstract class for an email store
*
* Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
*
* This library is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see .
*
* Authors: Bertrand Guiheneuf
* Michael Zucchi
* Jeffrey Stedfast
*/
#if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION)
#error "Only can be included directly."
#endif
#ifndef CAMEL_STORE_H
#define CAMEL_STORE_H
/* for mode_t */
#include
#include
#include
#include
/* Standard GObject macros */
#define CAMEL_TYPE_STORE \
(camel_store_get_type ())
#define CAMEL_STORE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST \
((obj), CAMEL_TYPE_STORE, CamelStore))
#define CAMEL_STORE_CLASS(cls) \
(G_TYPE_CHECK_CLASS_CAST \
((cls), CAMEL_TYPE_STORE, CamelStoreClass))
#define CAMEL_IS_STORE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE \
((obj), CAMEL_TYPE_STORE))
#define CAMEL_IS_STORE_CLASS(cls) \
(G_TYPE_CHECK_CLASS_TYPE \
((cls), CAMEL_TYPE_STORE))
#define CAMEL_STORE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS \
((obj), CAMEL_TYPE_STORE, CamelStoreClass))
/**
* CAMEL_STORE_ERROR:
*
* Since: 2.32
**/
#define CAMEL_STORE_ERROR \
(camel_store_error_quark ())
G_BEGIN_DECLS
/**
* CamelStoreError:
*
* Since: 2.32
**/
typedef enum {
CAMEL_STORE_ERROR_INVALID,
CAMEL_STORE_ERROR_NO_FOLDER
} CamelStoreError;
typedef struct _CamelFolderInfo {
struct _CamelFolderInfo *next;
struct _CamelFolderInfo *parent;
struct _CamelFolderInfo *child;
gchar *full_name;
gchar *display_name;
CamelFolderInfoFlags flags;
gint32 unread;
gint32 total;
} CamelFolderInfo;
struct _CamelDB;
typedef struct _CamelStore CamelStore;
typedef struct _CamelStoreClass CamelStoreClass;
typedef struct _CamelStorePrivate CamelStorePrivate;
/* open mode for folder */
typedef enum {
CAMEL_STORE_FOLDER_CREATE = 1 << 0,
CAMEL_STORE_FOLDER_EXCL = 1 << 1, /* deprecated, not honored */
CAMEL_STORE_FOLDER_BODY_INDEX = 1 << 2,
CAMEL_STORE_FOLDER_PRIVATE = 1 << 3 /* a private folder that
should not show up in
unmatched, folder
info's, etc. */
} CamelStoreGetFolderFlags;
struct _CamelStore {
CamelService parent;
CamelStorePrivate *priv;
CamelObjectBag *folders;
struct _CamelDB *cdb_r;
struct _CamelDB *cdb_w;
CamelStoreFlags flags;
/* XXX The default "mode" (read/write) is changed only by
* evolution-groupwise for non-writable proxy accounts.
* The mode is only checked by the account combo box in
* Evolution's composer window. */
CamelStorePermissionFlags mode;
/* Future ABI expansion */
gpointer later[4];
};
struct _CamelStoreClass {
CamelServiceClass parent_class;
GHashFunc hash_folder_name;
GEqualFunc equal_folder_name;
/* Non-Blocking Methods */
gboolean (*can_refresh_folder) (CamelStore *store,
CamelFolderInfo *info,
GError **error);
/* Synchronous I/O Methods */
CamelFolder * (*get_folder_sync) (CamelStore *store,
const gchar *folder_name,
CamelStoreGetFolderFlags flags,
GCancellable *cancellable,
GError **error);
CamelFolderInfo *
(*get_folder_info_sync) (CamelStore *store,
const gchar *top,
CamelStoreGetFolderInfoFlags flags,
GCancellable *cancellable,
GError **error);
CamelFolder * (*get_inbox_folder_sync)
(CamelStore *store,
GCancellable *cancellable,
GError **error);
CamelFolder * (*get_junk_folder_sync) (CamelStore *store,
GCancellable *cancellable,
GError **error);
CamelFolder * (*get_trash_folder_sync)
(CamelStore *store,
GCancellable *cancellable,
GError **error);
CamelFolderInfo *
(*create_folder_sync) (CamelStore *store,
const gchar *parent_name,
const gchar *folder_name,
GCancellable *cancellable,
GError **error);
gboolean (*delete_folder_sync) (CamelStore *store,
const gchar *folder_name,
GCancellable *cancellable,
GError **error);
gboolean (*rename_folder_sync) (CamelStore *store,
const gchar *old_name,
const gchar *new_name,
GCancellable *cancellable,
GError **error);
gboolean (*synchronize_sync) (CamelStore *store,
gboolean expunge,
GCancellable *cancellable,
GError **error);
/* Reserved slots for methods. */
gpointer reserved_for_methods[21];
/* Signals */
void (*folder_created) (CamelStore *store,
CamelFolderInfo *folder_info);
void (*folder_deleted) (CamelStore *store,
CamelFolderInfo *folder_info);
void (*folder_opened) (CamelStore *store,
CamelFolder *folder);
void (*folder_renamed) (CamelStore *store,
const gchar *old_name,
CamelFolderInfo *folder_info);
void (*folder_info_stale) (CamelStore *store);
};
GType camel_store_get_type (void);
GQuark camel_store_error_quark (void) G_GNUC_CONST;
void camel_store_folder_created (CamelStore *store,
CamelFolderInfo *folder_info);
void camel_store_folder_deleted (CamelStore *store,
CamelFolderInfo *folder_info);
void camel_store_folder_opened (CamelStore *store,
CamelFolder *folder);
void camel_store_folder_renamed (CamelStore *store,
const gchar *old_name,
CamelFolderInfo *folder_info);
void camel_store_folder_info_stale (CamelStore *store);
CamelFolderInfo *
camel_folder_info_new (void);
void camel_folder_info_free (CamelFolderInfo *fi);
#ifndef CAMEL_DISABLE_DEPRECATED
CamelFolderInfo *
camel_folder_info_build (GPtrArray *folders,
const gchar *namespace_,
gchar separator,
gboolean short_names);
#endif /* CAMEL_DISABLE_DEPRECATED */
CamelFolderInfo *
camel_folder_info_clone (CamelFolderInfo *fi);
gboolean camel_store_can_refresh_folder (CamelStore *store,
CamelFolderInfo *info,
GError **error);
CamelFolder * camel_store_get_folder_sync (CamelStore *store,
const gchar *folder_name,
CamelStoreGetFolderFlags flags,
GCancellable *cancellable,
GError **error);
void camel_store_get_folder (CamelStore *store,
const gchar *folder_name,
CamelStoreGetFolderFlags flags,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
CamelFolder * camel_store_get_folder_finish (CamelStore *store,
GAsyncResult *result,
GError **error);
CamelFolderInfo *
camel_store_get_folder_info_sync
(CamelStore *store,
const gchar *top,
CamelStoreGetFolderInfoFlags flags,
GCancellable *cancellable,
GError **error);
void camel_store_get_folder_info (CamelStore *store,
const gchar *top,
CamelStoreGetFolderInfoFlags flags,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
CamelFolderInfo *
camel_store_get_folder_info_finish
(CamelStore *store,
GAsyncResult *result,
GError **error);
CamelFolder * camel_store_get_inbox_folder_sync
(CamelStore *store,
GCancellable *cancellable,
GError **error);
void camel_store_get_inbox_folder (CamelStore *store,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
CamelFolder * camel_store_get_inbox_folder_finish
(CamelStore *store,
GAsyncResult *result,
GError **error);
CamelFolder * camel_store_get_junk_folder_sync
(CamelStore *store,
GCancellable *cancellable,
GError **error);
void camel_store_get_junk_folder (CamelStore *store,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
CamelFolder * camel_store_get_junk_folder_finish
(CamelStore *store,
GAsyncResult *result,
GError **error);
CamelFolder * camel_store_get_trash_folder_sync
(CamelStore *store,
GCancellable *cancellable,
GError **error);
void camel_store_get_trash_folder (CamelStore *store,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
CamelFolder * camel_store_get_trash_folder_finish
(CamelStore *store,
GAsyncResult *result,
GError **error);
CamelFolderInfo *
camel_store_create_folder_sync (CamelStore *store,
const gchar *parent_name,
const gchar *folder_name,
GCancellable *cancellable,
GError **error);
void camel_store_create_folder (CamelStore *store,
const gchar *parent_name,
const gchar *folder_name,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
CamelFolderInfo *
camel_store_create_folder_finish
(CamelStore *store,
GAsyncResult *result,
GError **error);
gboolean camel_store_delete_folder_sync (CamelStore *store,
const gchar *folder_name,
GCancellable *cancellable,
GError **error);
void camel_store_delete_folder (CamelStore *store,
const gchar *folder_name,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean camel_store_delete_folder_finish
(CamelStore *store,
GAsyncResult *result,
GError **error);
gboolean camel_store_rename_folder_sync (CamelStore *store,
const gchar *old_name,
const gchar *new_name,
GCancellable *cancellable,
GError **error);
void camel_store_rename_folder (CamelStore *store,
const gchar *old_name,
const gchar *new_name,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean camel_store_rename_folder_finish
(CamelStore *store,
GAsyncResult *result,
GError **error);
gboolean camel_store_synchronize_sync (CamelStore *store,
gboolean expunge,
GCancellable *cancellable,
GError **error);
void camel_store_synchronize (CamelStore *store,
gboolean expunge,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean camel_store_synchronize_finish (CamelStore *store,
GAsyncResult *result,
GError **error);
gboolean camel_store_maybe_run_db_maintenance
(CamelStore *store,
GError **error);
G_END_DECLS
#endif /* CAMEL_STORE_H */