From: lkehresman Date: Tue, 30 Nov 1999 21:08:08 +0000 (+0000) Subject: Optomized message retreival -- MUCH faster X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=3e054c439cee79e856555fba92166173a197388d;p=squirrelmail.git Optomized message retreival -- MUCH faster git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@43 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- diff --git a/functions/mailbox.php b/functions/mailbox.php index 95caabd1..83b77feb 100644 --- a/functions/mailbox.php +++ b/functions/mailbox.php @@ -20,31 +20,49 @@ } } - function getMessageHeaders($imapConnection, $i, &$from, &$subject, &$date) { - fputs($imapConnection, "messageFetch FETCH $i:$i RFC822.HEADER.LINES (From Subject Date)\n"); - $read = fgets($imapConnection, 1024); - /* I have to replace <> with [] because HTML uses <> as tags, thus not printing what's in <> */ - $read = ereg_replace("<", "[", $read); - $read = ereg_replace(">", "]", $read); + function getMessageHeaders($imapConnection, $start, $end, &$from, &$subject, &$date) { - while ((substr($read, 0, 15) != "messageFetch OK") && (substr($read, 0, 16) != "messageFetch BAD")) { - if (substr($read, 0, 5) == "From:") { - $read = ereg_replace("<", "EMAILSTART--", $read); - $read = ereg_replace(">", "--EMAILEND", $read); - $from = substr($read, 5, strlen($read) - 6); - } - else if (substr($read, 0, 5) == "Date:") { - $read = ereg_replace("<", "[", $read); - $read = ereg_replace(">", "]", $read); - $date = substr($read, 5, strlen($read) - 6); - } - else if (substr($read, 0, 8) == "Subject:") { - $read = ereg_replace("<", "[", $read); - $read = ereg_replace(">", "]", $read); - $subject = substr($read, 8, strlen($read) - 9); - } + $rel_start = $start; + + if (($start > $end) || ($start < 1)) { + echo "Error in message header fetching. Start message: $start, End message: $end
"; + exit; + } + while ($rel_start <= $end) { + if ($end - $rel_start > 50) { + $rel_end = $rel_start + 50; + } else { + $rel_end = $end; + } + fputs($imapConnection, "messageFetch FETCH $rel_start:$rel_end RFC822.HEADER.LINES (From Subject Date)\n"); $read = fgets($imapConnection, 1024); + + $from_num = $rel_start - 1; + $date_num = $rel_start - 1; + $subj_num = $rel_start - 1; + while ((substr($read, 0, 15) != "messageFetch OK") && (substr($read, 0, 16) != "messageFetch BAD")) { + if (substr($read, 0, 5) == "From:") { + $read = ereg_replace("<", "EMAILSTART--", $read); + $read = ereg_replace(">", "--EMAILEND", $read); + $from[$from_num] = substr($read, 5, strlen($read) - 6); + $from_num++; + } + else if (substr($read, 0, 5) == "Date:") { + $read = ereg_replace("<", "[", $read); + $read = ereg_replace(">", "]", $read); + $date[$date_num] = substr($read, 5, strlen($read) - 6); + $date_num++; + } + else if (substr($read, 0, 8) == "Subject:") { + $read = ereg_replace("<", "[", $read); + $read = ereg_replace(">", "]", $read); + $subject[$subj_num] = substr($read, 8, strlen($read) - 9); + $subj_num++; + } + $read = fgets($imapConnection, 1024); + } + $rel_start = $rel_start + 50; } } @@ -52,10 +70,11 @@ fputs($imapConnection, "messageStore STORE $i:$q +FLAGS (\\$flag)\n"); } - function getMessageFlags($imapConnection, $i, &$flags) { + function getMessageFlags($imapConnection, $j, &$flags) { /** * 2 FETCH (FLAGS (\Answered \Seen)) */ - fputs($imapConnection, "messageFetch FETCH $i:$i FLAGS\n"); + fputs($imapConnection, "messageFetch FETCH $j:$j FLAGS\n"); $read = fgets($imapConnection, 1024); + $count = 0; while ((substr($read, 0, 15) != "messageFetch OK") && (substr($read, 0, 16) != "messageFetch BAD")) { if (strpos($read, "FLAGS")) { $read = ereg_replace("\(", "", $read); @@ -71,6 +90,7 @@ } else { $flags[0] = "None"; } + $count++; $read = fgets($imapConnection, 1024); } } diff --git a/functions/mailbox_display.php b/functions/mailbox_display.php index d6c9a6db..84025faa 100644 --- a/functions/mailbox_display.php +++ b/functions/mailbox_display.php @@ -34,41 +34,42 @@ function showMessagesForMailbox($imapConnection, $mailbox, $numMessages, $startMessage, $sort) { include("../config/config.php"); - $j = 1; - while ($j <= $numMessages) { - $q = 0; - getMessageHeaders($imapConnection, $j, $from, $subject, $date); - getMessageFlags($imapConnection, $j, $flags); - - $messages[$j]["TIME_STAMP"] = getTimeStamp(explode(" ", trim($date))); - $messages[$j]["DATE_STRING"] = getDateString(explode(" ", trim($date))); - $messages[$j]["ID"] = $j; - $messages[$j]["FROM"] = $from; - $messages[$j]["SUBJECT"] = $subject; + if (1 <= $numMessages) { + getMessageHeaders($imapConnection, 1, $numMessages, $from, $subject, $date); + } + + $j = 0; + while ($j < $numMessages) { + $messages[$j]["TIME_STAMP"] = getTimeStamp(explode(" ", trim($date[$j]))); + $messages[$j]["DATE_STRING"] = getDateString(explode(" ", trim($date[$j]))); + $messages[$j]["ID"] = $j+1; + $messages[$j]["FROM"] = $from[$j]; + $messages[$j]["SUBJECT"] = $subject[$j]; $messages[$j]["FLAG_DELETED"] = false; $messages[$j]["FLAG_ANSWERED"] = false; $messages[$j]["FLAG_SEEN"] = false; - while ($q < count($flags)) { - if ($flags[$q] == "Deleted") { + $num = 0; + getMessageFlags($imapConnection, $j+1, $flags); + while ($num < count($flags)) { + if ($flags[$num] == "Deleted") { $messages[$j]["FLAG_DELETED"] = true; } - else if ($flags[$q] == "Answered") { + else if ($flags[$num] == "Answered") { $messages[$j]["FLAG_ANSWERED"] = true; } - else if ($flags[$q] == "Seen") { + else if ($flags[$num] == "Seen") { $messages[$j]["FLAG_SEEN"] = true; } - $q++; + $num++; } - $j++; } /** Find and remove the ones that are deleted */ - $i = 1; - $j = 1; - while ($j <= $numMessages) { + $i = 0; + $j = 0; + while ($j < $numMessages) { if ($messages[$j]["FLAG_DELETED"] == true) { $j++; continue; @@ -85,8 +86,7 @@ $j++; } - $numMessagesOld = $numMessages; - $numMessages = $i - 1; + $numMessages = $i; // There's gotta be messages in the array for it to sort them. if ($numMessages > 0) { @@ -154,7 +154,7 @@ if ($numMessages == 0) { // if there's no messages in this folder echo "

THIS FOLDER IS EMPTY
 
"; } else if ($startMessage == $endMessage) { // if there's only one message in the box, handle it different. - $i = $startMessage; + $i = $startMessage - 1; printMessageInfo($imapConnection, $t, $msgs[$i]["ID"], $msgs[$i]["FROM"], $msgs[$i]["SUBJECT"], $msgs[$i]["DATE_STRING"], $msgs[$i]["FLAG_ANSWERED"], $msgs[$i]["FLAG_SEEN"]); } else { for ($i = $startMessage - 1;$i <= $endMessage - 1; $i++) { diff --git a/src/folders.php b/src/folders.php index 15ffc207..beccf555 100644 --- a/src/folders.php +++ b/src/folders.php @@ -55,10 +55,10 @@ echo "

\n"; /** RENAMING FOLDERS **/ - echo "Rename Folder"; + echo "Rename or Move Folder"; echo ""; - echo "
\n"; - echo "Old:  \n"; for ($i = 0; $i < count($boxesUnformatted); $i++) { $use_folder = true; for ($p = 0; $p < count($special_folders); $p++) { @@ -69,9 +69,8 @@ if ($use_folder == true) echo "
\n"; ?>