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,9 +579,13 @@ class kolab_storage
{
// find custom display name in folder METADATA
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));
if (($name = $metadata[$folder][self::NAME_KEY_PRIVATE]) || ($name = $metadata[$folder][self::NAME_KEY_SHARED])) {
return $name;
// For performance reasons ask for all folders, it will be cached as one cache entry
$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;
}
}
}
@ -765,7 +769,7 @@ class kolab_storage
}
}
$names[$name] = $folder->get_name();
$names[$name] = $c_folder->get_name();
}
// Build SELECT field of parent folder
@ -1018,7 +1022,7 @@ class kolab_storage
$folder->children = array(); // reset list
// 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;
}
else {
@ -1631,8 +1635,9 @@ class kolab_storage
{
if (self::setup()) {
$keys = array(
self::NAME_KEY_PRIVATE,
self::NAME_KEY_SHARED,
// For better performance we skip displayname here, see (self::custom_displayname())
// self::NAME_KEY_PRIVATE,
// self::NAME_KEY_SHARED,
self::CTYPE_KEY,
self::CTYPE_KEY_PRIVATE,
self::COLOR_KEY_PRIVATE,

View file

@ -147,34 +147,7 @@ abstract class kolab_storage_folder_api
*/
public function get_name()
{
if ($name = $this->get_custom_displayname()) {
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;
}
}
return kolab_storage::object_name($this->name);
}
/**