## CamelStoreSummary CamelStoreSummary |

## Synopsis

    struct              CamelStoreInfo;
    enum                CamelStoreInfoFlags;
    struct              CamelStoreSummary;
    #define             CAMEL_STORE_INFO_FOLDER_UNKNOWN
    CamelStoreSummary * camel_store_summary_new             (void);
    void                camel_store_summary_set_filename    (CamelStoreSummary *summary,
                                                             const gchar *filename);
    gint                camel_store_summary_load            (CamelStoreSummary *summary);
    gint                camel_store_summary_save            (CamelStoreSummary *summary);
    void                camel_store_summary_touch           (CamelStoreSummary *summary);
    void                camel_store_summary_add             (CamelStoreSummary *summary,
                                                             CamelStoreInfo *info);
    CamelStoreInfo *    camel_store_summary_add_from_path   (CamelStoreSummary *summary,
                                                             const gchar *path);
    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);
    #define             camel_store_summary_info_free
    void                camel_store_summary_remove          (CamelStoreSummary *summary,
                                                             CamelStoreInfo *info);
    void                camel_store_summary_remove_path     (CamelStoreSummary *summary,
                                                             const gchar *path);
    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);

## Object Hierarchy

      GObject
       +----CamelObject
             +----CamelStoreSummary
                   +----CamelIMAPXStoreSummary

## Description

## Details

### struct CamelStoreInfo

    struct CamelStoreInfo {
    	volatile gint refcount;
    	gchar *path;
    	guint32 flags;
    	guint32 unread;
    	guint32 total;
    };

### enum CamelStoreInfoFlags

    typedef enum {
     /*< flags >*/
    	CAMEL_STORE_INFO_FOLDER_NOSELECT = 1 << 0,
    	CAMEL_STORE_INFO_FOLDER_NOINFERIORS = 1 << 1,
    	CAMEL_STORE_INFO_FOLDER_CHILDREN = 1 << 2,
    	CAMEL_STORE_INFO_FOLDER_NOCHILDREN = 1 << 3,
    	CAMEL_STORE_INFO_FOLDER_SUBSCRIBED = 1 << 4,
    	CAMEL_STORE_INFO_FOLDER_VIRTUAL = 1 << 5,
    	CAMEL_STORE_INFO_FOLDER_SYSTEM = 1 << 6,
    	CAMEL_STORE_INFO_FOLDER_VTRASH = 1 << 7,
    	CAMEL_STORE_INFO_FOLDER_SHARED_TO_ME = 1 << 8,
    	CAMEL_STORE_INFO_FOLDER_SHARED_BY_ME = 1 << 9,
    	CAMEL_STORE_INFO_FOLDER_READONLY = 1 << 16,
    	/* empty gap from unused flag removal */
    	CAMEL_STORE_INFO_FOLDER_FLAGGED = 1 << 18,

    	CAMEL_STORE_INFO_FOLDER_LAST          = 1 << 24  /*< skip >*/
    } CamelStoreInfoFlags;

`CAMEL_STORE_INFO_FOLDER_NOSELECT` |
`CAMEL_STORE_INFO_FOLDER_NOINFERIORS` |
`CAMEL_STORE_INFO_FOLDER_CHILDREN` |
`CAMEL_STORE_INFO_FOLDER_NOCHILDREN` |
`CAMEL_STORE_INFO_FOLDER_SUBSCRIBED` |
`CAMEL_STORE_INFO_FOLDER_VIRTUAL` |
`CAMEL_STORE_INFO_FOLDER_SYSTEM` |
`CAMEL_STORE_INFO_FOLDER_VTRASH` |
`CAMEL_STORE_INFO_FOLDER_SHARED_TO_ME` |
`CAMEL_STORE_INFO_FOLDER_SHARED_BY_ME` |
`CAMEL_STORE_INFO_FOLDER_READONLY` |
`CAMEL_STORE_INFO_FOLDER_FLAGGED` |
`CAMEL_STORE_INFO_FOLDER_LAST` |

### struct CamelStoreSummary

    struct CamelStoreSummary;

### CAMEL_STORE_INFO_FOLDER_UNKNOWN

    #define CAMEL_STORE_INFO_FOLDER_UNKNOWN (~0)

### camel_store_summary_new ()

    CamelStoreSummary * camel_store_summary_new             (void);

Create a new CamelStoreSummary object.

Returns : | a new CamelStoreSummary object

### camel_store_summary_set_filename ()

    void                camel_store_summary_set_filename    (CamelStoreSummary *summary,
                                                             const gchar *filename);

Set the filename where the summary will be loaded to/saved from.

`summary` : | a CamelStoreSummary
`filename` : | a filename

### camel_store_summary_load ()

    gint                camel_store_summary_load            (CamelStoreSummary *summary);

Load the summary off disk.

`summary` : | a CamelStoreSummary object
Returns : | `0` on success or `-1` on fail

### camel_store_summary_save ()

    gint                camel_store_summary_save            (CamelStoreSummary *summary);

Writes the summary to disk. The summary is only written if changes have occurred.

`summary` : | a CamelStoreSummary object
Returns : | `0` on succes or `-1` on fail

### camel_store_summary_touch ()

    void                camel_store_summary_touch           (CamelStoreSummary *summary);

Mark the summary as changed, so that a save will force it to be written back to disk.

`summary` : | a CamelStoreSummary object

### camel_store_summary_add ()

    void                camel_store_summary_add             (CamelStoreSummary *summary,
                                                             CamelStoreInfo *info);

Adds a new `info` record to the summary. If `info->uid` is `NULL`, then a new uid is automatically re-assigned by calling `camel_store_summary_next_uid_string()`.

The `info` record should have been generated by calling one of the info_new_*() functions, as it will be free'd based on the summary class. And MUST NOT be allocated directly using malloc.

`summary` : | a CamelStoreSummary object
`info` : | a CamelStoreInfo

### camel_store_summary_add_from_path ()

    CamelStoreInfo *    camel_store_summary_add_from_path   (CamelStoreSummary *summary,
                                                             const gchar *path);

Build a new info record based on the name, and add it to the summary.

`summary` : | a CamelStoreSummary object
`path` : | item path
Returns : | the newly added record

### camel_store_summary_info_new ()

    CamelStoreInfo *    camel_store_summary_info_new        (CamelStoreSummary *summary);

Allocate a new CamelStoreInfo, suitable for adding to this summary.

`summary` : | a CamelStoreSummary object
Returns : | the newly allocated CamelStoreInfo

### camel_store_summary_info_ref ()

    CamelStoreInfo *    camel_store_summary_info_ref        (CamelStoreSummary *summary,
                                                             CamelStoreInfo *info);

Add an extra reference to `info`.

`summary` : | a CamelStoreSummary object
`info` : | a CamelStoreInfo
Returns : | the `info` argument

### camel_store_summary_info_unref ()

    void                camel_store_summary_info_unref      (CamelStoreSummary *summary,
                                                             CamelStoreInfo *info);

Unref and potentially free `info`, and all associated memory.

`summary` : | a CamelStoreSummary object
`info` : | a CamelStoreInfo

### camel_store_summary_info_free

    #define camel_store_summary_info_free camel_store_summary_info_unref

### Warning

`camel_store_summary_info_free` is deprecated and should not be used in newly-written code.

### camel_store_summary_remove ()

    void                camel_store_summary_remove          (CamelStoreSummary *summary,
                                                             CamelStoreInfo *info);

Remove a specific `info` record from the summary.

`summary` : | a CamelStoreSummary object
`info` : | a CamelStoreInfo

### camel_store_summary_remove_path ()

    void                camel_store_summary_remove_path     (CamelStoreSummary *summary,
                                                             const gchar *path);

Remove a specific info record from the summary, by `path`.

`summary` : | a CamelStoreSummary object
`path` : | item path

### camel_store_summary_count ()

    gint                camel_store_summary_count           (CamelStoreSummary *summary);

Get the number of summary items stored in this summary.

`summary` : | a CamelStoreSummary object
Returns : | the number of items gint he summary.

### camel_store_summary_path ()

    CamelStoreInfo *    camel_store_summary_path            (CamelStoreSummary *summary,
                                                             const gchar *path);

Retrieve a summary item by path name.

The returned CamelStoreInfo is referenced for thread-safety and should be unreferenced with `camel_store_summary_info_unref()` when finished with it.

`summary` : | a CamelStoreSummary object
`path` : | path to the item
Returns : | the summary item, or `NULL` if the `path` name is not available

### camel_store_summary_array ()

    GPtrArray *         camel_store_summary_array           (CamelStoreSummary *summary);

Obtain a copy of the summary array. This is done atomically, so cannot contain empty entries.

It must be freed using `camel_store_summary_array_free()`.

`summary` : | a CamelStoreSummary object
Returns : | the summary array

### camel_store_summary_array_free ()

    void                camel_store_summary_array_free      (CamelStoreSummary *summary,
                                                             GPtrArray *array);

Free the folder summary array.

`summary` : | a CamelStoreSummary object
`array` : | the summary array as gotten from `camel_store_summary_array()`

### camel_store_info_set_string ()

    void                camel_store_info_set_string         (CamelStoreSummary *summary,
                                                             CamelStoreInfo *info,
                                                             gint type,
                                                             const gchar *value);

Set a specific string on the `info`.

`summary` : | a CamelStoreSummary object
`info` : | a CamelStoreInfo
`type` : | specific string being set
`value` : | string value to set

### camel_store_info_path ()

    const gchar *       camel_store_info_path               (CamelStoreSummary *summary,
                                                             CamelStoreInfo *info);

Returns the path string from `info`.

`summary` : | a CamelStoreSummary
`info` : | a CamelStoreInfo
Returns : | the path string from `info`

### camel_store_info_name ()

    const gchar *       camel_store_info_name               (CamelStoreSummary *summary,
                                                             CamelStoreInfo *info);

Returns the last segment of the path string from `info`.

`summary` : | a CamelStoreSummary
`info` : | a CamelStoreInfo
Returns : | the last segment of the path string from `info`

### camel_store_summary_connect_folder_summary ()

    gboolean            camel_store_summary_connect_folder_summary
                                                            (CamelStoreSummary *summary,
                                                             const gchar *path,
                                                             struct _CamelFolderSummary *folder_summary);

Connects listeners for count changes on `folder_summary` to keep CamelStoreInfo.total and CamelStoreInfo.unread in sync transparently. The `folder_summary` is stored in `summary` as `path`. Use `camel_store_summary_disconnect_folder_summary()` to disconnect from listening.

`summary` : | a CamelStoreSummary object
`path` : | used path for `folder_summary`
`folder_summary` : | a CamelFolderSummary object
Returns : | Whether successfully connect callbacks for count change notifications.

Since 3.4

### camel_store_summary_disconnect_folder_summary ()

    gboolean            camel_store_summary_disconnect_folder_summary
                                                            (CamelStoreSummary *summary,
                                                             struct _CamelFolderSummary *folder_summary);

Diconnects count change listeners previously connected by `camel_store_summary_connect_folder_summary()`.

`summary` : | a CamelStoreSummary object
`folder_summary` : | a CamelFolderSummary object
Returns : | Whether such connection existed and whether was successfully removed.

Since 3.4