Aleksander Machniak
2012-05-23 996d75d5fa4a5052094a64cf82d78c4375a5e797
Improved PERMANENTFLAGS checking code, added code for flags caching (currently commented out)
1 files modified
49 ■■■■■ changed files
program/include/rcube_imap.php 49 ●●●●● patch | view | raw | blame | history
program/include/rcube_imap.php
@@ -403,13 +403,54 @@
    {
        $flag = strtoupper($flag);
        $imap_flag = $this->conn->flags[$flag];
        $perm_flags = $this->get_permflags($this->folder);
        if ($this->folder !== null) {
            $this->check_connection();
        return in_array_nocase($imap_flag, $perm_flags);
        }
        // @TODO: cache permanent flags (?)
        return (in_array_nocase($imap_flag, $this->conn->data['PERMANENTFLAGS']));
    /**
     * Returns PERMANENTFLAGS of the specified folder
     *
     * @param  string $folder Folder name
     *
     * @return array Flags
     */
    public function get_permflags($folder)
    {
        if (!strlen($folder)) {
            return array();
        }
/*
        Checking PERMANENTFLAGS is rather rare, so we disable caching of it
        Re-think when we'll use it for more than only MDNSENT flag
        $cache_key = 'mailboxes.permanentflags.' . $folder;
        $permflags = $this->get_cache($cache_key);
        if ($permflags !== null) {
            return explode(' ', $permflags);
        }
*/
        if (!$this->check_connection()) {
            return array();
        }
        if ($this->conn->select($folder)) {
            $permflags = $this->conn->data['PERMANENTFLAGS'];
        }
        else {
            return array();
        }
        if (!is_array($permflags)) {
            $permflags = array();
        }
/*
        // Store permflags as string to limit cached object size
        $this->update_cache($cache_key, implode(' ', $permflags));
*/
        return $permflags;
    }