## CamelVeeFolder

CamelVeeFolder

## Synopsis

    struct              CamelVeeFolder;
    #define             CAMEL_UNMATCHED_NAME
    CamelFolder *       camel_vee_folder_new                (CamelStore *parent_store,
                                                             const gchar *full,
                                                             guint32 flags);
    void                camel_vee_folder_construct          (CamelVeeFolder *vf,
                                                             guint32 flags);
    CamelFolder *       camel_vee_folder_get_location       (CamelVeeFolder *vf,
                                                             const struct _CamelVeeMessageInfo *vinfo,
                                                             gchar **realuid);
    void                camel_vee_folder_add_folder         (CamelVeeFolder *vf,
                                                             CamelFolder *sub);
    void                camel_vee_folder_remove_folder      (CamelVeeFolder *vf,
                                                             CamelFolder *sub);
    void                camel_vee_folder_set_folders        (CamelVeeFolder *vf,
                                                             GList *folders);
    gint                camel_vee_folder_rebuild_folder     (CamelVeeFolder *vf,
                                                             CamelFolder *sub,
                                                             GError **error);
    void                camel_vee_folder_set_expression     (CamelVeeFolder *vf,
                                                             const gchar *expr);
    void                camel_vee_folder_ignore_next_changed_event
                                                            (CamelVeeFolder *vf,
                                                             CamelFolder *sub);
    void                camel_vee_folder_hash_folder        (CamelFolder *folder,
                                                             gchar buffer[8]);
    void                camel_vee_folder_sync_headers       (CamelFolder *vf,
                                                             GError **error);
    enum                CamelVeeFolderLock;
    void                camel_vee_folder_lock               (CamelVeeFolder *folder,
                                                             CamelVeeFolderLock lock);
    void                camel_vee_folder_unlock             (CamelVeeFolder *folder,
                                                             CamelVeeFolderLock lock);

## Object Hierarchy

      GObject
       +----CamelObject
             +----CamelFolder
                   +----CamelVeeFolder
                         +----CamelVTrashFolder

## Description

## Details

### struct CamelVeeFolder

    struct CamelVeeFolder;

### CAMEL_UNMATCHED_NAME

    #define CAMEL_UNMATCHED_NAME "UNMATCHED"

### camel_vee_folder_new ()

    CamelFolder *       camel_vee_folder_new                (CamelStore *parent_store,
                                                             const gchar *full,
                                                             guint32 flags);

Create a new CamelVeeFolder object.

`parent_store` : | the parent CamelVeeStore
`full` : | the full path to the vfolder.
`flags` : | flags of some kind
Returns : | A new CamelVeeFolder widget.

### camel_vee_folder_construct ()

    void                camel_vee_folder_construct          (CamelVeeFolder *vf,
                                                             guint32 flags);

### camel_vee_folder_get_location ()

    CamelFolder *       camel_vee_folder_get_location       (CamelVeeFolder *vf,
                                                             const struct _CamelVeeMessageInfo *vinfo,
                                                             gchar **realuid);

Find the real folder (and uid)

`realuid` : | if not NULL, set to the uid of the real message, must be g_free'd by caller.

### camel_vee_folder_add_folder ()

    void                camel_vee_folder_add_folder         (CamelVeeFolder *vf,
                                                             CamelFolder *sub);

Adds `sub` as a source folder to `vf`.

`vf` : | Virtual Folder object
`sub` : | source CamelFolder to add to `vf`

### camel_vee_folder_remove_folder ()

    void                camel_vee_folder_remove_folder      (CamelVeeFolder *vf,
                                                             CamelFolder *sub);

Removed the source folder, `sub`, from the virtual folder, `vf`.

`vf` : | Virtual Folder object
`sub` : | source CamelFolder to remove from `vf`

### camel_vee_folder_set_folders ()

    void                camel_vee_folder_set_folders        (CamelVeeFolder *vf,
                                                             GList *folders);

Set the whole list of folder sources on a vee folder.

### camel_vee_folder_rebuild_folder ()

    gint                camel_vee_folder_rebuild_folder     (CamelVeeFolder *vf,
                                                             CamelFolder *sub,
                                                             GError **error);

Rebuild the folder `sub`, if it should be.

`vf` : | Virtual Folder object
`sub` : | source CamelFolder to add to `vf`
`error` : | return location for a GError, or `NULL`

### camel_vee_folder_set_expression ()

    void                camel_vee_folder_set_expression     (CamelVeeFolder *vf,
                                                             const gchar *expr);

### camel_vee_folder_ignore_next_changed_event ()

    void                camel_vee_folder_ignore_next_changed_event
                                                            (CamelVeeFolder *vf,
                                                             CamelFolder *sub);

The next `sub` folder's 'changed' event will be silently ignored. This is usually used in virtual folders when the change was done in them, but it is neither vTrash nor vJunk folder. Doing this avoids unnecessary removals of messages which don't satisfy search criteria anymore, which could be done on asynchronous delivery of folder's 'changed' signal. These ignored changes are accumulated and used on folder refresh.

`vf` : | a CamelVeeFolder
`sub` : | a CamelFolder folder

Since 3.2

### camel_vee_folder_hash_folder ()

    void                camel_vee_folder_hash_folder        (CamelFolder *folder,
                                                             gchar buffer[8]);

Create a hash string representing the folder name, which should be unique, and remain static for a given folder.

`folder` : | @:

### camel_vee_folder_sync_headers ()

    void                camel_vee_folder_sync_headers       (CamelFolder *vf,
                                                             GError **error);

Since 2.24

### enum CamelVeeFolderLock

    typedef enum {
    	CAMEL_VEE_FOLDER_SUMMARY_LOCK,
    	CAMEL_VEE_FOLDER_SUBFOLDER_LOCK,
    	CAMEL_VEE_FOLDER_CHANGED_LOCK
    } CamelVeeFolderLock;

Since 2.32

### camel_vee_folder_lock ()

    void                camel_vee_folder_lock               (CamelVeeFolder *folder,
                                                             CamelVeeFolderLock lock);

Locks `folder`'s `lock`. Unlock it with `camel_vee_folder_unlock()`.

`folder` : | a CamelVeeFolder
`lock` : | lock type to lock

Since 2.32

### camel_vee_folder_unlock ()

    void                camel_vee_folder_unlock             (CamelVeeFolder *folder,
                                                             CamelVeeFolderLock lock);

Unlocks `folder`'s `lock`, previously locked with `camel_vee_folder_lock()`.

`folder` : | a CamelVeeFolder
`lock` : | lock type to unlock

Since 2.32