thomascube
2008-02-12 a9a8ef2b5c39d340043a423be71bf38faef567c2
Use INTERNALDATE if Date: header is missing; convert some spaces back to tabs

1 files modified
53 ■■■■■ changed files
program/lib/imap.inc 53 ●●●●● patch | view | raw | blame | history
program/lib/imap.inc
@@ -1650,54 +1650,6 @@
            } else {
                $a = explode(' ', $line);
            }
            if (!isset($result[$id]->date)) {
                $result[$id]->date = '';
            }
            $result[$id]->date = trim($result[$id]->date);
            $before = true;
            if ($result[$id]->date == '') {
                $before = false;
                /* FETCH RECEIVED header */
                $key      = 'fh' . ($c++);
                $request  = $key;
                $request .= " UID FETCH $id (BODY.PEEK[HEADER.FIELDS ";
                $request .= "(RECEIVED)])\r\n";
                if (fputs($fp, $request)) {
                    $_received = '';
                    while ($line = chop(iil_ReadLine($fp, 200))) {
                        $line = trim($line);
                        if (preg_match('/for <(.*)>;(.*)/', $line)) {
                            $_received .= trim($line);
                            break;
                        }
                    }
                    if ($_received != '') {
                        $_received = trim(str_replace(';', '',
                            substr($_received, strpos($_received, ';')) ));
                        if ($_received != '') {
                            $result[$id]->date      = $_received;
                            $result[$id]->timestamp = iil_StrToTime($_received);
                            //trigger_error("Date: {$result[$id]->timestamp}", E_USER_WARNING);
                        }
                    }
                    $result[$id]->date = trim($result[$id]->date);
                }
                /**
                 * This is  hack to display something.
                 */
                if ($result[$id]->date == '') {
                    $result[$id]->date      = date('r');
                    $result[$id]->timestamp = time();
                }
            }
            trigger_error("set before? {$before}, ID {$id}: {$result[$id]->date} / {$result[$id]->timestamp}", E_USER_WARNING);
        }
    } while (strcmp($a[0], $key) != 0);
@@ -1706,9 +1658,9 @@
        Sample reply line: "* 3 FETCH (UID 2417 RFC822.SIZE 2730 FLAGS (\Seen \Deleted))"
    */
    $command_key = 'fh' . ($c++);
    $request  = $command_key . $prefix;
    $request .= " FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)\r\n";
    if (!fputs($fp, $request)) {
        return false;
    }
@@ -1784,13 +1736,14 @@
                    }
                    $result[$id]->internaldate = $time_str;
                    
                    if ($IMAP_USE_INTERNAL_DATE) {
                    if ($IMAP_USE_INTERNAL_DATE || empty($result[$id]->date)) {
                        //calculate timestamp
                        $timestamp     = strtotime($time_str); //return's server's time
                        $na_timestamp  = $timestamp;
                        $timestamp    -= $time_zone * 3600; //compensate for tz, get GMT
                        
                        $result[$id]->timestamp = $timestamp;
                        $result[$id]->date = $time_str;
                    }
                        
                    if ($conn->do_cache) {