aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--ChangeLog.ja5
-rw-r--r--libsylph/imap.c33
3 files changed, 42 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index c2e5eec8..1bd89bd1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2007-09-14
+ * libsylph/imap.c: imap_create_folder(): check for \NoInferior and
+ \Noselect flags.
+
+2007-09-14
+
* libsylph/folder.[ch]: folder_item_copy(): new. It duplicates
FolderItem struct.
* libsylph/imap.c: imap_scan_tree(): use 'LIST "" "*"' command
diff --git a/ChangeLog.ja b/ChangeLog.ja
index 9045ea9f..a1e2a9d9 100644
--- a/ChangeLog.ja
+++ b/ChangeLog.ja
@@ -1,5 +1,10 @@
2007-09-14
+ * libsylph/imap.c: imap_create_folder(): \NoInferior と \Noselect
+ フラグをチェックするようにした。
+
+2007-09-14
+
* libsylph/folder.[ch]: folder_item_copy(): 新規。 FolderItem 構造体
を複製する。
* libsylph/imap.c: imap_scan_tree(): フォルダリストを取得するとき
diff --git a/libsylph/imap.c b/libsylph/imap.c
index 35c053e7..cc33ab2a 100644
--- a/libsylph/imap.c
+++ b/libsylph/imap.c
@@ -2131,6 +2131,7 @@ static FolderItem *imap_create_folder(Folder *folder, FolderItem *parent,
gchar separator;
gchar *new_name;
const gchar *p;
+ gboolean no_sub = FALSE, no_select = FALSE;
gint ok;
g_return_val_if_fail(folder != NULL, NULL);
@@ -2186,10 +2187,13 @@ static FolderItem *imap_create_folder(Folder *folder, FolderItem *parent,
str = g_ptr_array_index(argbuf, i);
if (!strncmp(str, "LIST ", 5)) {
exist = TRUE;
+ if (strcasestr(str + 5, "\\Noinferiors"))
+ no_sub = TRUE;
+ if (strcasestr(str + 5, "\\Noselect"))
+ no_select = TRUE;
break;
}
}
- g_ptr_array_free(argbuf, TRUE);
if (!exist) {
ok = imap_cmd_create(session, imap_path);
@@ -2199,10 +2203,37 @@ static FolderItem *imap_create_folder(Folder *folder, FolderItem *parent,
g_free(dirpath);
return NULL;
}
+
+ g_ptr_array_free(argbuf, TRUE);
+ argbuf = g_ptr_array_new();
+ ok = imap_cmd_list(session, NULL, imap_path, argbuf);
+ if (ok != IMAP_SUCCESS) {
+ log_warning("LIST failed\n");
+ g_free(imap_path);
+ g_free(dirpath);
+ g_ptr_array_free(argbuf, TRUE);
+ return NULL;
+ }
+
+ for (i = 0; i < argbuf->len; i++) {
+ gchar *str;
+ str = g_ptr_array_index(argbuf, i);
+ if (!strncmp(str, "LIST ", 5)) {
+ if (strcasestr(str + 5, "\\Noinferiors"))
+ no_sub = TRUE;
+ if (strcasestr(str + 5, "\\Noselect"))
+ no_select = TRUE;
+ break;
+ }
+ }
}
+
+ g_ptr_array_free(argbuf, TRUE);
}
new_item = folder_item_new(new_name, dirpath);
+ new_item->no_sub = no_sub;
+ new_item->no_select = no_select;
folder_item_append(parent, new_item);
g_free(imap_path);
g_free(dirpath);