| | |
| | | |
| | | $response = explode("\r\n", $response); |
| | | foreach ($response as $line) { |
| | | if (preg_match('/^\* ([0-9]+) (EXISTS|RECENT)$/i', $line, $m)) { |
| | | $this->data[strtoupper($m[2])] = (int) $m[1]; |
| | | } |
| | | else if (preg_match('/^\* OK \[/i', $line, $match)) { |
| | | $line = substr($line, 6); |
| | | if (preg_match('/^(UIDNEXT|UIDVALIDITY|UNSEEN) ([0-9]+)/i', $line, $match)) { |
| | | $this->data[strtoupper($match[1])] = (int) $match[2]; |
| | | } |
| | | else if (preg_match('/^(HIGHESTMODSEQ) ([0-9]+)/i', $line, $match)) { |
| | | $this->data[strtoupper($match[1])] = (string) $match[2]; |
| | | } |
| | | else if (preg_match('/^(NOMODSEQ)/i', $line, $match)) { |
| | | $this->data[strtoupper($match[1])] = true; |
| | | } |
| | | else if (preg_match('/^PERMANENTFLAGS \(([^\)]+)\)/iU', $line, $match)) { |
| | | $this->data['PERMANENTFLAGS'] = explode(' ', $match[1]); |
| | | if (preg_match('/^\* OK \[/i', $line)) { |
| | | $pos = strcspn($line, ' ]', 6); |
| | | $token = strtoupper(substr($line, 6, $pos)); |
| | | $pos += 7; |
| | | |
| | | switch ($token) { |
| | | case 'UIDNEXT': |
| | | case 'UIDVALIDITY': |
| | | case 'UNSEEN': |
| | | if ($len = strspn($line, '0123456789', $pos)) { |
| | | $this->data[$token] = (int) substr($line, $pos, $len); |
| | | } |
| | | break; |
| | | |
| | | case 'HIGHESTMODSEQ': |
| | | if ($len = strspn($line, '0123456789', $pos)) { |
| | | $this->data[$token] = (string) substr($line, $pos, $len); |
| | | } |
| | | break; |
| | | |
| | | case 'NOMODSEQ': |
| | | $this->data[$token] = true; |
| | | break; |
| | | |
| | | case 'PERMANENTFLAGS': |
| | | $start = strpos($line, '(', $pos); |
| | | $end = strrpos($line, ')'); |
| | | if ($start && $end) { |
| | | $flags = substr($line, $start + 1, $end - $start - 1); |
| | | $this->data[$token] = explode(' ', $flags); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | // QRESYNC FETCH response (RFC5162) |
| | | else if (preg_match('/^\* ([0-9+]) FETCH/i', $line, $match)) { |
| | | $line = substr($line, strlen($match[0])); |
| | | $fetch_data = $this->tokenizeResponse($line, 1); |
| | | $data = array('id' => $match[1]); |
| | | else if (preg_match('/^\* ([0-9]+) (EXISTS|RECENT|FETCH)/i', $line, $match)) { |
| | | $token = strtoupper($match[2]); |
| | | switch ($token) { |
| | | case 'EXISTS': |
| | | case 'RECENT': |
| | | $this->data[$token] = (int) $match[1]; |
| | | break; |
| | | |
| | | for ($i=0, $size=count($fetch_data); $i<$size; $i+=2) { |
| | | $data[strtolower($fetch_data[$i])] = $fetch_data[$i+1]; |
| | | case 'FETCH': |
| | | // QRESYNC FETCH response (RFC5162) |
| | | $line = substr($line, strlen($match[0])); |
| | | $fetch_data = $this->tokenizeResponse($line, 1); |
| | | $data = array('id' => $match[1]); |
| | | |
| | | for ($i=0, $size=count($fetch_data); $i<$size; $i+=2) { |
| | | $data[strtolower($fetch_data[$i])] = $fetch_data[$i+1]; |
| | | } |
| | | |
| | | $this->data['QRESYNC'][$data['uid']] = $data; |
| | | break; |
| | | } |
| | | |
| | | $this->data['QRESYNC'][$data['uid']] = $data; |
| | | } |
| | | // QRESYNC VANISHED response (RFC5162) |
| | | else if (preg_match('/^\* VANISHED [()EARLIER]*/i', $line, $match)) { |