if ((flags & CAMEL_STORE_FOLDER_CREATE) != 0) {
CamelFolderInfo *fi;
- fi = camel_store_get_folder_info_sync (parent_store, full_name, 0, NULL, NULL);
+ /* Use 'recursive' mode, even for just created folder, to have set whether
+ the folder has children or not properly. */
+ fi = camel_store_get_folder_info_sync (parent_store, full_name, CAMEL_STORE_FOLDER_INFO_RECURSIVE, NULL, NULL);
g_return_val_if_fail (fi != NULL, lf);
camel_store_folder_created (parent_store, fi);
CamelLocalSettings *local_settings;
CamelSettings *settings;
CamelService *service;
+ CamelFolderInfo *fi;
GPtrArray *folders;
gint res = -1;
DIR *dir;
while ((d = readdir (dir))) {
gchar *full_name, *filename;
const gchar *short_name;
- CamelFolderInfo *fi;
struct stat st;
if (strcmp (d->d_name, "tmp") == 0
fi = scan_fi (store, flags, full_name, short_name, cancellable);
g_free (full_name);
- fi->flags &= ~CAMEL_FOLDER_NOCHILDREN;
- fi->flags |= CAMEL_FOLDER_CHILDREN;
-
g_ptr_array_add (folders, fi);
}
camel_folder_info_free (old_topfi);
}
+ fi = *topfi;
+
+ if (fi && (flags & CAMEL_STORE_FOLDER_INFO_RECURSIVE) != 0) {
+ while (fi) {
+ if (fi->child) {
+ fi->flags = fi->flags & (~CAMEL_FOLDER_NOCHILDREN);
+ fi->flags = fi->flags | CAMEL_FOLDER_CHILDREN;
+
+ fi = fi->child;
+ } else if (fi->next) {
+ fi = fi->next;
+ } else {
+ while (fi) {
+ fi = fi->parent;
+ if (fi && fi->next) {
+ fi = fi->next;
+ break;
+ }
+ }
+ }
+ }
+ }
+
res = 0;
} else
res = -1;