diff --git a/modules/imap/handler_modules.php b/modules/imap/handler_modules.php index 4525307f6..256f047cb 100644 --- a/modules/imap/handler_modules.php +++ b/modules/imap/handler_modules.php @@ -758,14 +758,32 @@ public function process() { $this->out('can_share_folders', stripos($imap->get_capability(), 'ACL') !== false); if (imap_authed($imap)) { $quota_root = $imap->get_quota_root($folder ? $folder : 'INBOX'); - if ($quota_root && isset($quota_root[0]['name'])) { - $quota = $imap->get_quota($quota_root[0]['name']); - if ($quota) { - $current = floatval($quota[0]['current']); - $max = floatval($quota[0]['max']); - if ($max > 0) { - $this->out('quota', ceil(($current / $max) * 100)); - $this->out('quota_max', $max / 1024); + if($imap instanceof Hm_JMAP) { + if (!empty($quota_root["methodResponses"][0][1]["list"])) { + $quota = $quota_root["methodResponses"][0][1]["list"][0]; + + if ($quota) { + $used = floatval($quota['used']); + $max = floatval($quota['hardLimit']); + if ($max > 0) { + $quotaPercentage = ceil(($used / $max) * 100); + $quotaMaxInMB = $max / (1024 * 1024); + + $this->out('quota', $quotaPercentage); + $this->out('quota_max', $quotaMaxInMB); + } + } + } + }else { + if ($quota_root && isset($quota_root[0]['name'])) { + $quota = $imap->get_quota($quota_root[0]['name']); + if ($quota) { + $current = floatval($quota[0]['current']); + $max = floatval($quota[0]['max']); + if ($max > 0) { + $this->out('quota', ceil(($current / $max) * 100)); + $this->out('quota_max', $max / 1024); + } } } } diff --git a/modules/imap/hm-jmap.php b/modules/imap/hm-jmap.php index 46b28040e..4c6121431 100644 --- a/modules/imap/hm-jmap.php +++ b/modules/imap/hm-jmap.php @@ -69,7 +69,8 @@ class Hm_JMAP { ); private $default_caps = array( 'urn:ietf:params:jmap:core', - 'urn:ietf:params:jmap:mail' + 'urn:ietf:params:jmap:mail', + 'urn:ietf:params:jmap:quota' ); public $selected_mailbox; @@ -376,6 +377,28 @@ public function get_folder_list_by_level($level=false) { return $this->parse_folder_list_by_level($level); } + public function get_quota_root($mailbox) { + if (!is_array($this->session)) { + throw new Exception("Not authenticated. Please authenticate first."); + } + $methods = [ + [ + "Quota/get", + [ + "accountId"=> (string)$this->account_id, + "name" => $this->session['username'], + "scope" => "folder", + "folder" => $mailbox + ], + "0" + ] + ]; + $response = $this->send_command($this->session['apiUrl'], $methods, 'POST'); + return $response; + } + public function get_capability() { + //TODO: Implement + } /** * Return cached data * @return array @@ -452,7 +475,7 @@ public function get_folder_list() { $methods = array(array( 'Mailbox/get', array( - 'accountId' => $this->account_id, + 'accountId' => (string)$this->account_id, 'ids' => NULL ), 'fl'