alecpl
2010-06-09 2653fe169f781f2736c0f8fd18a7f1806b7c71d9
program/include/rcube_imap_generic.php
@@ -709,13 +709,14 @@
          // do plain text auth
          $result = $this->login($user, $password);
       }
write_log('imap', '----------');
       if (is_resource($result)) {
            if ($this->prefs['force_caps']) {
             $this->clearCapability();
            }
          $this->getNamespace();
            $this->logged = true;
          return true;
       } else {
          return false;
@@ -1506,7 +1507,7 @@
    {
       $node = array();
       if ($str[$begin] != '(') {
          $stop = $begin + strspn($str, "1234567890", $begin, $end - $begin);
          $stop = $begin + strspn($str, '1234567890', $begin, $end - $begin);
          $msg = substr($str, $begin, $stop - $begin);
          if ($msg == 0)
              return $node;
@@ -1552,30 +1553,40 @@
    function thread($folder, $algorithm='REFERENCES', $criteria='', $encoding='US-ASCII')
    {
        $old_sel = $this->selected;
       if (!$this->select($folder)) {
          return false;
          return false;
       }
        // return empty result when folder is empty and we're just after SELECT
        if ($old_sel != $folder && !$this->exists) {
            return array(array(), array(), array());
       }
       $encoding  = $encoding ? trim($encoding) : 'US-ASCII';
       $algorithm = $algorithm ? trim($algorithm) : 'REFERENCES';
       $criteria  = $criteria ? 'ALL '.trim($criteria) : 'ALL';
        $data      = '';
       if (!$this->putLineC("thrd1 THREAD $algorithm $encoding $criteria")) {
          return false;
       }
       do {
          $line = trim($this->readLine(10000));
          if (preg_match('/^\* THREAD/', $line)) {
             $str         = trim(substr($line, 8));
             $depthmap    = array();
             $haschildren = array();
             $tree = $this->parseThread($str, 0, strlen($str), null, null, 0, $depthmap, $haschildren);
          $line = trim($this->readLine());
          if ($this->startsWith($line, '* THREAD')) {
             $data .= substr($line, 9);
          } else if (preg_match('/^[0-9() ]+$/', $line)) {
             $data .= $line;
          }
       } while (!$this->startsWith($line, 'thrd1', true, true));
       $result_code = $this->parseResult($line);
       if ($result_code == 0) {
           return array($tree, $depthmap, $haschildren);
            $depthmap    = array();
            $haschildren = array();
            $tree = $this->parseThread($data, 0, strlen($data), null, null, 0, $depthmap, $haschildren);
            return array($tree, $depthmap, $haschildren);
       }
       $this->error = "Thread: $line";
@@ -1765,12 +1776,11 @@
             $mode = 0;
       }
         $reply_key = '* ' . $id;
       $result = false;
       // format request
      $key     = 'ftch0';
      $request = $key . ($is_uid ? ' UID' : '') . " FETCH $id (BODY.PEEK[$part])";
         $reply_key = '* ' . $id;
      $key       = 'ftch0';
      $request   = $key . ($is_uid ? ' UID' : '') . " FETCH $id (BODY.PEEK[$part])";
       // send request
      if (!$this->putLine($request)) {
          return false;
@@ -1782,7 +1792,8 @@
             $a    = explode(' ', $line);
         } while (!($end = $this->startsWith($line, $key, true)) && $a[2] != 'FETCH');
         $len = strlen($line);
         $len    = strlen($line);
       $result = false;
      // handle empty "* X FETCH ()" response
       if ($line[$len-1] == ')' && $line[$len-2] != '(') {
@@ -1878,7 +1889,7 @@
                 $line = $this->readLine(1024);
         } while (!$this->startsWith($line, $key, true));
         if ($result) {
         if ($result !== false) {
          if ($file) {
             fwrite($file, $result);
            } else if ($print) {