aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-vee-folder.c
diff options
context:
space:
mode:
Diffstat (limited to 'camel/camel-vee-folder.c')
-rw-r--r--camel/camel-vee-folder.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/camel/camel-vee-folder.c b/camel/camel-vee-folder.c
index 7904ab5f12..eb9a5d21b9 100644
--- a/camel/camel-vee-folder.c
+++ b/camel/camel-vee-folder.c
@@ -53,6 +53,9 @@ static void vee_refresh_info(CamelFolder *folder, CamelException *ex);
static void vee_sync (CamelFolder *folder, gboolean expunge, CamelException *ex);
static void vee_expunge (CamelFolder *folder, CamelException *ex);
+static void vee_freeze (CamelFolder *folder);
+static void vee_thaw (CamelFolder *folder);
+
static CamelMimeMessage *vee_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex);
static void vee_append_message(CamelFolder *folder, CamelMimeMessage *message, const CamelMessageInfo *info, char **appended_uid, CamelException *ex);
static void vee_transfer_messages_to(CamelFolder *source, GPtrArray *uids, CamelFolder *dest, GPtrArray **transferred_uids, gboolean delete_originals, CamelException *ex);
@@ -134,6 +137,9 @@ camel_vee_folder_class_init (CamelVeeFolderClass *klass)
folder_class->set_message_user_flag = vee_set_message_user_flag;
folder_class->rename = vee_rename;
+
+ folder_class->freeze = vee_freeze;
+ folder_class->thaw = vee_thaw;
}
static void
@@ -1566,3 +1572,50 @@ subfolder_deleted(CamelFolder *f, void *event_data, CamelVeeFolder *vf)
{
camel_vee_folder_remove_folder(vf, f);
}
+
+
+static void
+vee_freeze (CamelFolder *folder)
+{
+ CamelVeeFolder *vfolder = (CamelVeeFolder *) folder;
+ struct _CamelVeeFolderPrivate *p = _PRIVATE (vfolder);
+ GList *node;
+
+ CAMEL_VEE_FOLDER_LOCK (vfolder, subfolder_lock);
+
+ node = p->folders;
+ while (node) {
+ CamelFolder *f = node->data;
+
+ camel_folder_freeze (f);
+ node = node->next;
+ }
+
+ CAMEL_VEE_FOLDER_UNLOCK (vfolder, subfolder_lock);
+
+ /* call parent implementation */
+ CAMEL_FOLDER_CLASS (camel_vee_folder_parent)->freeze (folder);
+}
+
+static void
+vee_thaw (CamelFolder *folder)
+{
+ CamelVeeFolder *vfolder = (CamelVeeFolder *) folder;
+ struct _CamelVeeFolderPrivate *p = _PRIVATE (vfolder);
+ GList *node;
+
+ CAMEL_VEE_FOLDER_LOCK (vfolder, subfolder_lock);
+
+ node = p->folders;
+ while (node) {
+ CamelFolder *f = node->data;
+
+ camel_folder_thaw (f);
+ node = node->next;
+ }
+
+ CAMEL_VEE_FOLDER_UNLOCK (vfolder, subfolder_lock);
+
+ /* call parent implementation */
+ CAMEL_FOLDER_CLASS (camel_vee_folder_parent)->thaw (folder);
+}