Optomized message retreival -- MUCH faster

This commit is contained in:
lkehresman 1999-11-30 21:08:08 +00:00
parent 2891ac8ba9
commit a24f99b453
3 changed files with 71 additions and 52 deletions

View file

@ -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<BR>";
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);
}
}

View file

@ -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);
if (1 <= $numMessages) {
getMessageHeaders($imapConnection, 1, $numMessages, $from, $subject, $date);
}
$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;
$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 "<TR><TD BGCOLOR=FFFFFF COLSPAN=4><CENTER><BR><B>THIS FOLDER IS EMPTY</B><BR>&nbsp</CENTER></TD></TR>";
} 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++) {

View file

@ -55,10 +55,10 @@
echo "</FORM><BR></TD></TR><BR>\n";
/** RENAMING FOLDERS **/
echo "<TR><TD BGCOLOR=DCDCDC ALIGN=CENTER><FONT FACE=\"Arial,Helvetica\"><B>Rename Folder</B></FONT></TD></TR>";
echo "<TR><TD BGCOLOR=DCDCDC ALIGN=CENTER><FONT FACE=\"Arial,Helvetica\"><B>Rename or Move Folder</B></FONT></TD></TR>";
echo "<TR><TD BGCOLOR=FFFFFF ALIGN=CENTER>";
echo "<FORM ACTION=folders_rename.php METHOD=POST>\n";
echo "Old:&nbsp;&nbsp;<SELECT NAME=mailbox><FONT FACE=\"Arial,Helvetica\">\n";
echo "<FORM ACTION=folders_rename_getname.php METHOD=POST>\n";
echo "<SELECT NAME=old><FONT FACE=\"Arial,Helvetica\">\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 " <OPTION>$boxesUnformatted[$i]\n";
}
echo "</SELECT><BR>\n";
echo "New:&nbsp;&nbsp;<INPUT TYPE=TEXT SIZE=25 NAME=new VALUE=\"INBOX.\"><BR>\n";
echo "<INPUT TYPE=SUBMIT VALUE=Rename>\n";
echo "</SELECT>\n";
echo "<INPUT TYPE=SUBMIT VALUE=\"Rename or Move\">\n";
echo "</FORM></TD></TR></TABLE><BR>\n";
?>