Optomized message retreival -- MUCH faster
authorlkehresman <lkehresman@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 30 Nov 1999 21:08:08 +0000 (21:08 +0000)
committerlkehresman <lkehresman@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 30 Nov 1999 21:08:08 +0000 (21:08 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@43 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/mailbox.php
functions/mailbox_display.php
src/folders.php

index 95caabd139a484c2ff7fd13595ea26f9851584de..83b77febe01a0546424d2da1c4b143c87d59595e 100644 (file)
       }
    }
 
-   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;
       }
    }
 
       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);
       }
    }
index d6c9a6db78d91abebe89c6063b91f0094c8c95ff..84025faa479aaa0d32904a7883f0e0d27acb24cc 100644 (file)
    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) {
       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++) {
index 15ffc2074b8f15e71718f546cf956081dbe4b793..beccf55578421156aa1155fb404e34299274173b 100644 (file)
    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";
 
 ?>