/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* 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: Michael Zucchi
*/
#if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION)
#error "Only can be included directly."
#endif
#ifndef CAMEL_STORE_SUMMARY_H
#define CAMEL_STORE_SUMMARY_H
#include
#include
#include
/* Standard GObject macros */
#define CAMEL_TYPE_STORE_SUMMARY \
(camel_store_summary_get_type ())
#define CAMEL_STORE_SUMMARY(obj) \
(G_TYPE_CHECK_INSTANCE_CAST \
((obj), CAMEL_TYPE_STORE_SUMMARY, CamelStoreSummary))
#define CAMEL_STORE_SUMMARY_CLASS(cls) \
(G_TYPE_CHECK_CLASS_CAST \
((cls), CAMEL_TYPE_STORE_SUMMARY, CamelStoreSummaryClass))
#define CAMEL_IS_STORE_SUMMARY(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE \
((obj), CAMEL_TYPE_STORE_SUMMARY))
#define CAMEL_IS_STORE_SUMMARY_CLASS(cls) \
(G_TYPE_CHECK_CLASS_TYPE \
((cls), CAMEL_TYPE_STORE_SUMMARY))
#define CAMEL_STORE_SUMMARY_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS \
((obj), CAMEL_TYPE_STORE_SUMMARY, CamelStoreSummaryClass))
G_BEGIN_DECLS
struct _CamelFolderSummary;
typedef struct _CamelStoreSummary CamelStoreSummary;
typedef struct _CamelStoreSummaryClass CamelStoreSummaryClass;
typedef struct _CamelStoreSummaryPrivate CamelStoreSummaryPrivate;
typedef struct _CamelStoreInfo CamelStoreInfo;
#define CAMEL_STORE_INFO_FOLDER_UNKNOWN (~0)
enum {
CAMEL_STORE_INFO_PATH = 0,
CAMEL_STORE_INFO_LAST
};
struct _CamelStoreInfo {
volatile gint refcount;
gchar *path;
guint32 flags;
guint32 unread;
guint32 total;
};
struct _CamelStoreSummary {
GObject parent;
CamelStoreSummaryPrivate *priv;
GPtrArray *folders; /* CamelStoreInfo's */
GHashTable *folders_path; /* CamelStoreInfo's by path name */
};
struct _CamelStoreSummaryClass {
GObjectClass parent_class;
/* size of memory objects */
gsize store_info_size;
/* load/save the global info */
gint (*summary_header_load) (CamelStoreSummary *summary,
FILE *file);
gint (*summary_header_save) (CamelStoreSummary *summary,
FILE *file);
/* create/save/load an individual message info */
CamelStoreInfo *
(*store_info_new) (CamelStoreSummary *summary,
const gchar *path);
CamelStoreInfo *
(*store_info_load) (CamelStoreSummary *summary,
FILE *file);
gint (*store_info_save) (CamelStoreSummary *summary,
FILE *file,
CamelStoreInfo *info);
void (*store_info_free) (CamelStoreSummary *summary,
CamelStoreInfo *info);
/* virtualise access methods */
void (*store_info_set_string)
(CamelStoreSummary *summary,
CamelStoreInfo *info,
gint type,
const gchar *value);
};
GType camel_store_summary_get_type (void) G_GNUC_CONST;
CamelStoreSummary *
camel_store_summary_new (void);
void camel_store_summary_set_filename
(CamelStoreSummary *summary,
const gchar *filename);
/* load/save the summary in its entirety */
gint camel_store_summary_load (CamelStoreSummary *summary);
gint camel_store_summary_save (CamelStoreSummary *summary);
/* set the dirty bit on the summary */
void camel_store_summary_touch (CamelStoreSummary *summary);
/* add a new raw summary item */
void camel_store_summary_add (CamelStoreSummary *summary,
CamelStoreInfo *info);
/* build/add raw summary items */
CamelStoreInfo *
camel_store_summary_add_from_path
(CamelStoreSummary *summary,
const gchar *path);
/* Just build raw summary items */
CamelStoreInfo *
camel_store_summary_info_new (CamelStoreSummary *summary);
CamelStoreInfo *
camel_store_summary_info_ref (CamelStoreSummary *summary,
CamelStoreInfo *info);
void camel_store_summary_info_unref (CamelStoreSummary *summary,
CamelStoreInfo *info);
/* removes a summary item */
void camel_store_summary_remove (CamelStoreSummary *summary,
CamelStoreInfo *info);
void camel_store_summary_remove_path (CamelStoreSummary *summary,
const gchar *path);
/* lookup functions */
gint camel_store_summary_count (CamelStoreSummary *summary);
CamelStoreInfo *
camel_store_summary_path (CamelStoreSummary *summary,
const gchar *path);
GPtrArray * camel_store_summary_array (CamelStoreSummary *summary);
void camel_store_summary_array_free (CamelStoreSummary *summary,
GPtrArray *array);
void camel_store_info_set_string (CamelStoreSummary *summary,
CamelStoreInfo *info,
gint type,
const gchar *value);
const gchar * camel_store_info_path (CamelStoreSummary *summary,
CamelStoreInfo *info);
const gchar * camel_store_info_name (CamelStoreSummary *summary,
CamelStoreInfo *info);
gboolean camel_store_summary_connect_folder_summary
(CamelStoreSummary *summary,
const gchar *path,
struct _CamelFolderSummary *folder_summary);
gboolean camel_store_summary_disconnect_folder_summary
(CamelStoreSummary *summary,
struct _CamelFolderSummary *folder_summary);
G_END_DECLS
#endif /* CAMEL_STORE_SUMMARY_H */