/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* camel-folder.h: Abstract class for an email folder
*
* 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
*/
#if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION)
#error "Only can be included directly."
#endif
#ifndef CAMEL_FOLDER_H
#define CAMEL_FOLDER_H
#include
#include
#include
/* Standard GObject macros */
#define CAMEL_TYPE_FOLDER \
(camel_folder_get_type ())
#define CAMEL_FOLDER(obj) \
(G_TYPE_CHECK_INSTANCE_CAST \
((obj), CAMEL_TYPE_FOLDER, CamelFolder))
#define CAMEL_FOLDER_CLASS(cls) \
(G_TYPE_CHECK_CLASS_CAST \
((cls), CAMEL_TYPE_FOLDER, CamelFolderClass))
#define CAMEL_IS_FOLDER(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE \
((obj), CAMEL_TYPE_FOLDER))
#define CAMEL_IS_FOLDER_CLASS(cls) \
(G_TYPE_CHECK_CLASS_TYPE \
((cls), CAMEL_TYPE_FOLDER))
#define CAMEL_FOLDER_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS \
((obj), CAMEL_TYPE_FOLDER, CamelFolderClass))
/**
* CAMEL_FOLDER_ERROR:
*
* Since: 2.32
**/
#define CAMEL_FOLDER_ERROR \
(camel_folder_error_quark ())
G_BEGIN_DECLS
struct _CamelStore;
typedef struct _CamelFolderChangeInfo CamelFolderChangeInfo;
typedef struct _CamelFolderChangeInfoPrivate CamelFolderChangeInfoPrivate;
typedef struct _CamelFolder CamelFolder;
typedef struct _CamelFolderClass CamelFolderClass;
typedef struct _CamelFolderPrivate CamelFolderPrivate;
/**
* CamelFolderError:
*
* Since: 2.32
**/
typedef enum {
CAMEL_FOLDER_ERROR_INVALID,
CAMEL_FOLDER_ERROR_INVALID_STATE,
CAMEL_FOLDER_ERROR_NON_EMPTY,
CAMEL_FOLDER_ERROR_NON_UID,
CAMEL_FOLDER_ERROR_INSUFFICIENT_PERMISSION,
CAMEL_FOLDER_ERROR_INVALID_PATH,
CAMEL_FOLDER_ERROR_INVALID_UID,
CAMEL_FOLDER_ERROR_SUMMARY_INVALID
} CamelFolderError;
/**
* CamelFetchType:
*
* Since: 3.4
**/
typedef enum {
CAMEL_FETCH_OLD_MESSAGES,
CAMEL_FETCH_NEW_MESSAGES
} CamelFetchType;
struct _CamelFolderChangeInfo {
GPtrArray *uid_added;
GPtrArray *uid_removed;
GPtrArray *uid_changed;
GPtrArray *uid_recent;
CamelFolderChangeInfoPrivate *priv;
};
typedef struct _CamelFolderQuotaInfo CamelFolderQuotaInfo;
/**
* CamelFolderQuotaInfo:
*
* Since: 2.24
**/
struct _CamelFolderQuotaInfo {
gchar *name;
guint64 used;
guint64 total;
struct _CamelFolderQuotaInfo *next;
};
struct _CamelFolder {
CamelObject parent;
CamelFolderPrivate *priv;
CamelFolderSummary *summary;
CamelFolderFlags folder_flags;
CamelMessageFlags permanent_flags;
/* Future ABI expansion */
gpointer later[4];
};
struct _CamelFolderClass {
CamelObjectClass parent_class;
/* Non-Blocking Methods */
gint (*get_message_count) (CamelFolder *folder);
CamelMessageFlags
(*get_permanent_flags) (CamelFolder *folder);
CamelMessageFlags
(*get_message_flags) (CamelFolder *folder,
const gchar *uid);
gboolean (*set_message_flags) (CamelFolder *folder,
const gchar *uid,
CamelMessageFlags flags,
CamelMessageFlags set);
gboolean (*get_message_user_flag)(CamelFolder *folder,
const gchar *uid,
const gchar *name);
void (*set_message_user_flag)(CamelFolder *folder,
const gchar *uid,
const gchar *name,
gboolean value);
const gchar * (*get_message_user_tag) (CamelFolder *folder,
const gchar *uid,
const gchar *name);
void (*set_message_user_tag) (CamelFolder *folder,
const gchar *uid,
const gchar *name,
const gchar *value);
GPtrArray * (*get_uids) (CamelFolder *folder);
void (*free_uids) (CamelFolder *folder,
GPtrArray *array);
gint (*cmp_uids) (CamelFolder *folder,
const gchar *uid1,
const gchar *uid2);
void (*sort_uids) (CamelFolder *folder,
GPtrArray *uids);
GPtrArray * (*get_summary) (CamelFolder *folder);
void (*free_summary) (CamelFolder *folder,
GPtrArray *summary);
gboolean (*has_search_capability)(CamelFolder *folder);
GPtrArray * (*search_by_expression) (CamelFolder *folder,
const gchar *expression,
GCancellable *cancellable,
GError **error);
GPtrArray * (*search_by_uids) (CamelFolder *folder,
const gchar *expression,
GPtrArray *uids,
GCancellable *cancellable,
GError **error);
void (*search_free) (CamelFolder *folder,
GPtrArray *result);
CamelMessageInfo *
(*get_message_info) (CamelFolder *folder,
const gchar *uid);
void (*delete_) (CamelFolder *folder);
void (*rename) (CamelFolder *folder,
const gchar *newname);
void (*freeze) (CamelFolder *folder);
void (*thaw) (CamelFolder *folder);
gboolean (*is_frozen) (CamelFolder *folder);
guint32 (*count_by_expression) (CamelFolder *folder,
const gchar *expression,
GCancellable *cancellable,
GError **error);
GPtrArray * (*get_uncached_uids) (CamelFolder *folder,
GPtrArray *uids,
GError **error);
gchar * (*get_filename) (CamelFolder *folder,
const gchar *uid,
GError **error);
CamelMimeMessage *
(*get_message_cached) (CamelFolder *folder,
const gchar *message_uid,
GCancellable *cancellable);
/* Synchronous I/O Methods */
gboolean (*append_message_sync) (CamelFolder *folder,
CamelMimeMessage *message,
CamelMessageInfo *info,
gchar **appended_uid,
GCancellable *cancellable,
GError **error);
gboolean (*expunge_sync) (CamelFolder *folder,
GCancellable *cancellable,
GError **error);
CamelMimeMessage *
(*get_message_sync) (CamelFolder *folder,
const gchar *message_uid,
GCancellable *cancellable,
GError **error);
CamelFolderQuotaInfo *
(*get_quota_info_sync) (CamelFolder *folder,
GCancellable *cancellable,
GError **error);
gboolean (*purge_message_cache_sync)
(CamelFolder *folder,
gchar *start_uid,
gchar *end_uid,
GCancellable *cancellable,
GError **error);
gboolean (*refresh_info_sync) (CamelFolder *folder,
GCancellable *cancellable,
GError **error);
gboolean (*synchronize_sync) (CamelFolder *folder,
gboolean expunge,
GCancellable *cancellable,
GError **error);
gboolean (*synchronize_message_sync)
(CamelFolder *folder,
const gchar *message_uid,
GCancellable *cancellable,
GError **error);
gboolean (*transfer_messages_to_sync)
(CamelFolder *source,
GPtrArray *message_uids,
CamelFolder *destination,
gboolean delete_originals,
GPtrArray **transferred_uids,
GCancellable *cancellable,
GError **error);
/* Reserved slots for methods. */
gpointer reserved_for_methods[20];
/* Signals */
void (*changed) (CamelFolder *folder,
CamelFolderChangeInfo *info);
void (*deleted) (CamelFolder *folder);
void (*renamed) (CamelFolder *folder,
const gchar *old_name);
};
GType camel_folder_get_type (void);
GQuark camel_folder_error_quark (void) G_GNUC_CONST;
void camel_folder_set_lock_async (CamelFolder *folder,
gboolean skip_folder_lock);
struct _CamelStore *
camel_folder_get_parent_store (CamelFolder *folder);
const gchar * camel_folder_get_full_name (CamelFolder *folder);
gchar * camel_folder_dup_full_name (CamelFolder *folder);
void camel_folder_set_full_name (CamelFolder *folder,
const gchar *full_name);
const gchar * camel_folder_get_display_name (CamelFolder *folder);
gchar * camel_folder_dup_display_name (CamelFolder *folder);
void camel_folder_set_display_name (CamelFolder *folder,
const gchar *display_name);
const gchar * camel_folder_get_description (CamelFolder *folder);
gchar * camel_folder_dup_description (CamelFolder *folder);
void camel_folder_set_description (CamelFolder *folder,
const gchar *description);
CamelMessageFlags
camel_folder_get_permanent_flags
(CamelFolder *folder);
#ifndef CAMEL_DISABLE_DEPRECATED
CamelMessageFlags
camel_folder_get_message_flags (CamelFolder *folder,
const gchar *uid);
gboolean camel_folder_set_message_flags (CamelFolder *folder,
const gchar *uid,
CamelMessageFlags flags,
CamelMessageFlags set);
gboolean camel_folder_get_message_user_flag
(CamelFolder *folder,
const gchar *uid,
const gchar *name);
void camel_folder_set_message_user_flag
(CamelFolder *folder,
const gchar *uid,
const gchar *name,
gboolean value);
const gchar * camel_folder_get_message_user_tag
(CamelFolder *folder,
const gchar *uid,
const gchar *name);
void camel_folder_set_message_user_tag
(CamelFolder *folder,
const gchar *uid,
const gchar *name,
const gchar *value);
#endif /* CAMEL_DISABLE_DEPRECATED */
gboolean camel_folder_has_summary_capability
(CamelFolder *folder);
gint camel_folder_get_message_count (CamelFolder *folder);
#ifndef CAMEL_DISABLE_DEPRECATED
gint camel_folder_get_unread_message_count
(CamelFolder *folder);
#endif
gint camel_folder_get_deleted_message_count
(CamelFolder *folder);
GPtrArray * camel_folder_get_summary (CamelFolder *folder);
void camel_folder_free_summary (CamelFolder *folder,
GPtrArray *array);
#define camel_folder_delete_message(folder, uid) \
(camel_folder_set_message_flags ( \
folder, uid, \
CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN, \
CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN))
GPtrArray * camel_folder_get_uids (CamelFolder *folder);
void camel_folder_free_uids (CamelFolder *folder,
GPtrArray *array);
GPtrArray * camel_folder_get_uncached_uids (CamelFolder *folder,
GPtrArray *uids,
GError **error);
gint camel_folder_cmp_uids (CamelFolder *folder,
const gchar *uid1,
const gchar *uid2);
void camel_folder_sort_uids (CamelFolder *folder,
GPtrArray *uids);
GPtrArray * camel_folder_search_by_expression
(CamelFolder *folder,
const gchar *expr,
GCancellable *cancellable,
GError **error);
GPtrArray * camel_folder_search_by_uids (CamelFolder *folder,
const gchar *expr,
GPtrArray *uids,
GCancellable *cancellable,
GError **error);
void camel_folder_search_free (CamelFolder *folder,
GPtrArray *result);
guint32 camel_folder_count_by_expression (CamelFolder *folder,
const gchar *expression,
GCancellable *cancellable,
GError **error);
CamelMessageInfo *
camel_folder_get_message_info (CamelFolder *folder,
const gchar *uid);
void camel_folder_delete (CamelFolder *folder);
void camel_folder_rename (CamelFolder *folder,
const gchar *new_name);
void camel_folder_changed (CamelFolder *folder,
CamelFolderChangeInfo *changes);
void camel_folder_freeze (CamelFolder *folder);
void camel_folder_thaw (CamelFolder *folder);
gboolean camel_folder_is_frozen (CamelFolder *folder);
gint camel_folder_get_frozen_count (CamelFolder *folder);
CamelFolderQuotaInfo *
camel_folder_quota_info_new (const gchar *name,
guint64 used,
guint64 total);
CamelFolderQuotaInfo *
camel_folder_quota_info_clone (const CamelFolderQuotaInfo *info);
void camel_folder_quota_info_free (CamelFolderQuotaInfo *info);
void camel_folder_free_nop (CamelFolder *folder,
GPtrArray *array);
void camel_folder_free_shallow (CamelFolder *folder,
GPtrArray *array);
void camel_folder_free_deep (CamelFolder *folder,
GPtrArray *array);
gchar * camel_folder_get_filename (CamelFolder *folder,
const gchar *uid,
GError **error);
void camel_folder_lock (CamelFolder *folder);
void camel_folder_unlock (CamelFolder *folder);
gboolean camel_folder_append_message_sync
(CamelFolder *folder,
CamelMimeMessage *message,
CamelMessageInfo *info,
gchar **appended_uid,
GCancellable *cancellable,
GError **error);
void camel_folder_append_message (CamelFolder *folder,
CamelMimeMessage *message,
CamelMessageInfo *info,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean camel_folder_append_message_finish
(CamelFolder *folder,
GAsyncResult *result,
gchar **appended_uid,
GError **error);
gboolean camel_folder_expunge_sync (CamelFolder *folder,
GCancellable *cancellable,
GError **error);
void camel_folder_expunge (CamelFolder *folder,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean camel_folder_expunge_finish (CamelFolder *folder,
GAsyncResult *result,
GError **error);
CamelMimeMessage *
camel_folder_get_message_sync (CamelFolder *folder,
const gchar *message_uid,
GCancellable *cancellable,
GError **error);
void camel_folder_get_message (CamelFolder *folder,
const gchar *message_uid,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
CamelMimeMessage *
camel_folder_get_message_finish (CamelFolder *folder,
GAsyncResult *result,
GError **error);
CamelFolderQuotaInfo *
camel_folder_get_quota_info_sync
(CamelFolder *folder,
GCancellable *cancellable,
GError **error);
void camel_folder_get_quota_info (CamelFolder *folder,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
CamelFolderQuotaInfo *
camel_folder_get_quota_info_finish
(CamelFolder *folder,
GAsyncResult *result,
GError **error);
gboolean camel_folder_purge_message_cache_sync
(CamelFolder *folder,
gchar *start_uid,
gchar *end_uid,
GCancellable *cancellable,
GError **error);
void camel_folder_purge_message_cache
(CamelFolder *folder,
gchar *start_uid,
gchar *end_uid,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean camel_folder_purge_message_cache_finish
(CamelFolder *folder,
GAsyncResult *result,
GError **error);
gboolean camel_folder_refresh_info_sync (CamelFolder *folder,
GCancellable *cancellable,
GError **error);
void camel_folder_refresh_info (CamelFolder *folder,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean camel_folder_refresh_info_finish
(CamelFolder *folder,
GAsyncResult *result,
GError **error);
gboolean camel_folder_synchronize_sync (CamelFolder *folder,
gboolean expunge,
GCancellable *cancellable,
GError **error);
void camel_folder_synchronize (CamelFolder *folder,
gboolean expunge,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean camel_folder_synchronize_finish (CamelFolder *folder,
GAsyncResult *result,
GError **error);
gboolean camel_folder_synchronize_message_sync
(CamelFolder *folder,
const gchar *message_uid,
GCancellable *cancellable,
GError **error);
void camel_folder_synchronize_message
(CamelFolder *folder,
const gchar *message_uid,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean camel_folder_synchronize_message_finish
(CamelFolder *folder,
GAsyncResult *result,
GError **error);
gboolean camel_folder_transfer_messages_to_sync
(CamelFolder *source,
GPtrArray *message_uids,
CamelFolder *destination,
gboolean delete_originals,
GPtrArray **transferred_uids,
GCancellable *cancellable,
GError **error);
void camel_folder_transfer_messages_to
(CamelFolder *source,
GPtrArray *message_uids,
CamelFolder *destination,
gboolean delete_originals,
gint io_priority,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean camel_folder_transfer_messages_to_finish
(CamelFolder *source,
GAsyncResult *result,
GPtrArray **transferred_uids,
GError **error);
/* update functions for change info */
CamelFolderChangeInfo *
camel_folder_change_info_new (void);
void camel_folder_change_info_clear (CamelFolderChangeInfo *info);
void camel_folder_change_info_free (CamelFolderChangeInfo *info);
gboolean camel_folder_change_info_changed (CamelFolderChangeInfo *info);
/* for building diff's automatically */
void camel_folder_change_info_add_source
(CamelFolderChangeInfo *info,
const gchar *uid);
void camel_folder_change_info_add_source_list
(CamelFolderChangeInfo *info,
const GPtrArray *list);
void camel_folder_change_info_add_update
(CamelFolderChangeInfo *info,
const gchar *uid);
void camel_folder_change_info_add_update_list
(CamelFolderChangeInfo *info,
const GPtrArray *list);
void camel_folder_change_info_build_diff
(CamelFolderChangeInfo *info);
/* for manipulating diff's directly */
void camel_folder_change_info_cat (CamelFolderChangeInfo *info,
CamelFolderChangeInfo *src);
void camel_folder_change_info_add_uid (CamelFolderChangeInfo *info,
const gchar *uid);
void camel_folder_change_info_remove_uid
(CamelFolderChangeInfo *info,
const gchar *uid);
void camel_folder_change_info_change_uid
(CamelFolderChangeInfo *info,
const gchar *uid);
void camel_folder_change_info_recent_uid
(CamelFolderChangeInfo *info,
const gchar *uid);
G_END_DECLS
#endif /* CAMEL_FOLDER_H */