- Unsubscribe from non-existing folders always (on listing), not only in Settings/Folders UI

release-0.7
alecpl 13 years ago
parent b501e6795d
commit 189a0ae4dc

@ -3083,20 +3083,36 @@ class rcube_imap
$a_folders = $this->conn->listMailboxes($root, $name,
NULL, array('SUBSCRIBED'));
// remove non-existent folders
if (is_array($a_folders)) {
// unsubscribe non-existent folders, remove from the list
if (is_array($a_folders) && $name == '*') {
foreach ($a_folders as $idx => $folder) {
if ($this->conn->data['LIST'] && ($opts = $this->conn->data['LIST'][$folder])
&& in_array('\\NonExistent', $opts)
) {
$this->conn->unsubscribe($folder);
unset($a_folders[$idx]);
}
}
}
}
}
// retrieve list of folders from IMAP server using LSUB
else {
$a_folders = $this->conn->listSubscribed($root, $name);
// unsubscribe non-existent folders, remove from the list
if (is_array($a_folders) && $name == '*') {
foreach ($a_folders as $idx => $folder) {
if ($this->conn->data['LIST'] && ($opts = $this->conn->data['LIST'][$folder])
&& in_array('\\Noselect', $opts)
) {
// Some servers returns \Noselect for existing folders
if (!$this->mailbox_exists($folder)) {
$this->conn->unsubscribe($folder);
unset($a_folders[$idx]);
}
}
}
}
}
}

@ -278,9 +278,6 @@ function rcube_subscription_form($attrib)
$display_folder = str_repeat('    ', $folder['level'])
. Q($protected ? rcmail_localize_foldername($folder['id']) : $folder['name']);
if ($sub_key !== false)
unset($a_subscribed[$sub_key]);
if ($folder['virtual']) {
$classes[] = 'virtual';
}
@ -329,11 +326,6 @@ function rcube_subscription_form($attrib)
Q($display_folder), $protected || $folder['virtual']);
}
// Unsubscribe from non-existing folders
foreach ($a_subscribed as $folder) {
$IMAP->unsubscribe($folder);
}
$RCMAIL->plugins->exec_hook('folders_list', array('table' => $table));
$OUTPUT->add_gui_object('subscriptionlist', $attrib['id']);

Loading…
Cancel
Save