2 commits - lib/kolab lib/kolab_sync_backend.php

Aleksander Machniak machniak at kolabsys.com
Tue Oct 9 19:26:31 CEST 2012


 lib/kolab/kolab_format_distributionlist.php |    4 +++
 lib/kolab/kolab_storage.php                 |   32 +++++++++++++++++++++++++---
 lib/kolab/kolab_storage_folder.php          |    8 -------
 lib/kolab_sync_backend.php                  |   13 ++---------
 4 files changed, 37 insertions(+), 20 deletions(-)

New commits:
commit b4d24b0dca59bf0b8045bdcb24a49d300b9b2734
Author: Aleksander Machniak <alec at alec.pl>
Date:   Tue Oct 9 19:26:08 2012 +0200

    Fix detecting folder type

diff --git a/lib/kolab_sync_backend.php b/lib/kolab_sync_backend.php
index 1804614..522e1cf 100644
--- a/lib/kolab_sync_backend.php
+++ b/lib/kolab_sync_backend.php
@@ -631,21 +631,14 @@ class kolab_sync_backend
 
         if ($folderdata && !empty($folderdata[$name])) {
             $uid = $folderdata[$name][self::UID_KEY];
-            $this->folder_uids[$name] = $uid;
-            return $uid;
+            return $this->folder_uids[$name] = $uid;
         }
 */
         // Add type to folder UID hash, so type change can be detected by Syncroton
-        if (!$type) {
-            $metadata = $this->storage->get_metadata($name, kolab_storage::CTYPE_KEY);
-            $type     = $metadata[$name][kolab_storage::CTYPE_KEY];
-        }
-
-        $uid = md5($name . '!!' . $type);
+        $uid = $name . '!!' . ($type !== null ? $type : kolab_storage::folder_type($name));
+        $uid = md5($uid);
 
         return $this->folder_uids[$name] = $uid;
-
-        return $uid;
     }
 
     /**


commit ce0e5da59fde68db373c1529e962bdae0359f6d9
Author: Aleksander Machniak <alec at alec.pl>
Date:   Tue Oct 9 19:21:21 2012 +0200

    Update libkolab

diff --git a/lib/kolab/kolab_format_distributionlist.php b/lib/kolab/kolab_format_distributionlist.php
index a747b87..fcb94c1 100644
--- a/lib/kolab/kolab_format_distributionlist.php
+++ b/lib/kolab/kolab_format_distributionlist.php
@@ -71,6 +71,9 @@ class kolab_format_distributionlist extends kolab_format
 
         $this->obj->setMembers($members);
 
+        // set type property for proper caching
+        $object['_type'] = 'distribution-list';
+
         // cache this data
         $this->data = $object;
         unset($this->data['_formatobj']);
@@ -123,6 +126,7 @@ class kolab_format_distributionlist extends kolab_format
             'changed'   => self::php_datetime($this->obj->lastModified()),
             'name'      => $this->obj->name(),
             'member'    => array(),
+            '_type'     => 'distribution-list',
         );
 
         $members = $this->obj->members();
diff --git a/lib/kolab/kolab_storage.php b/lib/kolab/kolab_storage.php
index 546d19a..e14156d 100644
--- a/lib/kolab/kolab_storage.php
+++ b/lib/kolab/kolab_storage.php
@@ -310,11 +310,14 @@ class kolab_storage
 
         // save color in METADATA
         // TODO: also save 'showalarams' and other properties here
-        // TODO: change private/shared precedence depending on private or shared folder
 
         if ($result && $prop['color']) {
-            if (!($meta_saved = self::$imap->set_metadata($folder, array(self::COLOR_KEY_SHARED => $prop['color']))))  // try in shared namespace
-                $meta_saved = self::$imap->set_metadata($folder, array(self::COLOR_KEY_PRIVATE => $prop['color']));    // try in private namespace
+            $meta_saved = false;
+            $ns = self::$imap->folder_namespace($folder);
+            if ($ns == 'personal')  // save in shared namespace for personal folders
+                $meta_saved = self::$imap->set_metadata($folder, array(self::COLOR_KEY_SHARED => $prop['color']));
+            if (!$meta_saved)    // try in private namespace
+                $meta_saved = self::$imap->set_metadata($folder, array(self::COLOR_KEY_PRIVATE => $prop['color']));
             if ($meta_saved)
                 unset($prop['color']);  // unsetting will prevent fallback to local user prefs
         }
@@ -595,4 +598,27 @@ class kolab_storage
         return $types[self::CTYPE_KEY_PRIVATE] ?: $types[self::CTYPE_KEY];
     }
 
+
+    /**
+     * Returns type of IMAP folder
+     *
+     * @param string $folder Folder name (UTF7-IMAP)
+     *
+     * @return string Folder type
+     */
+    static function folder_type($folder)
+    {
+        $metadata = self::$imap->get_metadata($folder, array(self::CTYPE_KEY, self::CTYPE_KEY_PRIVATE));
+
+        if (!is_array($metadata)) {
+            return null;
+        }
+
+        if (!empty($metadata[$folder])) {
+            return self::folder_select_metadata($metadata[$folder]);
+        }
+
+        return 'mail';
+    }
+
 }
diff --git a/lib/kolab/kolab_storage_folder.php b/lib/kolab/kolab_storage_folder.php
index daa988f..08bf669 100644
--- a/lib/kolab/kolab_storage_folder.php
+++ b/lib/kolab/kolab_storage_folder.php
@@ -75,13 +75,7 @@ class kolab_storage_folder
      */
     public function set_folder($name, $ftype = null)
     {
-        if (!$ftype) {
-            $metadata = $this->imap->get_metadata($name, array(kolab_storage::CTYPE_KEY, kolab_storage::CTYPE_KEY_PRIVATE));
-            $this->type_annotation = $metadata[$name][kolab_storage::CTYPE_KEY_PRIVATE] ?: $metadata[$name][kolab_storage::CTYPE_KEY];
-        }
-        else {
-            $this->type_annotation = $ftype;
-        }
+        $this->type_annotation = $ftype ? $ftype : kolab_storage::folder_type($name);
 
         list($this->type, $suffix) = explode('.', $this->type_annotation);
         $this->default      = $suffix == 'default';





More information about the commits mailing list