Mark Edwards wrote:
On Feb 25, 2006, at 2:48 PM, Mark Edwards wrote:
Just looking at the code in question, it looks like it builds a giant array with the box's entire index data in it, which obviously will grow along with the size of the mailbox:
// get previous and next message UID $a_msg_index = $IMAP->message_index(NULL, $_SESSION['sort_col'], $_SESSION['sort_order']); $MESSAGE['index'] = array_search((string)$_GET['_uid'], $a_msg_index, TRUE);
if (isset($a_msg_index[$MESSAGE['index']-1])) $javascript .= sprintf("\n%s.set_env('prev_uid', '%s');", $JS_OBJECT_NAME, $a_msg_index[$MESSAGE['index']-1]); if (isset($a_msg_index[$MESSAGE['index']+1])) $javascript .= sprintf("\n%s.set_env('next_uid', '%s');", $JS_OBJECT_NAME, $a_msg_index[$MESSAGE['index']+1]);
A little further testing suggests that its the first line that causes the problem:
$a_msg_index = $IMAP->message_index(NULL, $_SESSION['sort_col'], $_SESSION['sort_order']);
Having a quick look at message_index in program/include/rcube_imap.inc it appears that it returns an array of the index data for the whole mailbox. Why is this necessary to retrieve the UID for two messages? Surely there is a better way to do this?
If you find one, please let me know... Having a look at IlohaMail, it does the same.
-- Mark Edwards
Thomas