Optomized message retreival -- MUCH faster
This commit is contained in:
parent
2891ac8ba9
commit
a24f99b453
3 changed files with 71 additions and 52 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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> </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++) {
|
||||
|
|
|
@ -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: <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: <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";
|
||||
|
||||
?>
|
||||
|
|
Loading…
Add table
Reference in a new issue