Performance: Better displayname annotation handling

This commit is contained in:
Aleksander Machniak 2016-02-23 13:36:22 +01:00
parent 644df15bad
commit 46f962833f
2 changed files with 13 additions and 35 deletions

View file

@ -579,11 +579,15 @@ class kolab_storage
{ {
// find custom display name in folder METADATA // find custom display name in folder METADATA
if (self::$config->get('kolab_custom_display_names', true) && self::setup()) { if (self::$config->get('kolab_custom_display_names', true) && self::setup()) {
$metadata = self::$imap->get_metadata($folder, array(self::NAME_KEY_PRIVATE, self::NAME_KEY_SHARED)); // For performance reasons ask for all folders, it will be cached as one cache entry
if (($name = $metadata[$folder][self::NAME_KEY_PRIVATE]) || ($name = $metadata[$folder][self::NAME_KEY_SHARED])) { $metadata = self::$imap->get_metadata("*", array(self::NAME_KEY_PRIVATE, self::NAME_KEY_SHARED));
if ($data = $metadata[$folder]) {
if (($name = $data[self::NAME_KEY_PRIVATE]) || ($name = $data[self::NAME_KEY_SHARED])) {
return $name; return $name;
} }
} }
}
return false; return false;
} }
@ -765,7 +769,7 @@ class kolab_storage
} }
} }
$names[$name] = $folder->get_name(); $names[$name] = $c_folder->get_name();
} }
// Build SELECT field of parent folder // Build SELECT field of parent folder
@ -1018,7 +1022,7 @@ class kolab_storage
$folder->children = array(); // reset list $folder->children = array(); // reset list
// skip top folders or ones with a custom displayname // skip top folders or ones with a custom displayname
if (count($path) < 1 || $folder->get_custom_displayname()) { if (count($path) < 1 || kolab_storage::custom_displayname($folder->name)) {
$tree->children[] = $folder; $tree->children[] = $folder;
} }
else { else {
@ -1631,8 +1635,9 @@ class kolab_storage
{ {
if (self::setup()) { if (self::setup()) {
$keys = array( $keys = array(
self::NAME_KEY_PRIVATE, // For better performance we skip displayname here, see (self::custom_displayname())
self::NAME_KEY_SHARED, // self::NAME_KEY_PRIVATE,
// self::NAME_KEY_SHARED,
self::CTYPE_KEY, self::CTYPE_KEY,
self::CTYPE_KEY_PRIVATE, self::CTYPE_KEY_PRIVATE,
self::COLOR_KEY_PRIVATE, self::COLOR_KEY_PRIVATE,

View file

@ -147,34 +147,7 @@ abstract class kolab_storage_folder_api
*/ */
public function get_name() public function get_name()
{ {
if ($name = $this->get_custom_displayname()) { return kolab_storage::object_name($this->name);
return $name;
}
return kolab_storage::object_prettyname($this->name);
}
/**
* Get the custom display name of this folder
*
* @return string Folder custom name
*/
public function get_custom_displayname()
{
$rcmail = rcube::get_instance();
// find custom display name in folder METADATA
if ($rcmail->config->get('kolab_custom_display_names', true)) {
$metadata = $this->get_metadata();
if ($name = $metadata[kolab_storage::NAME_KEY_PRIVATE]) {
return $name;
}
if ($name = $metadata[kolab_storage::NAME_KEY_SHARED]) {
return $name;
}
}
} }
/** /**