Hi Pieter, hi Rodolfo,
I see the problem and I must say that I just forgot about this function when re-writing the message listing/caching parts...
You solution works fine except that there are IMAP servers that don't return the message headers in the order of the given $msg_index. I now have a solution that first checks local cache if it complete (then we can get the index from there) and otherwise calls iil_C_Sort() and then map the message index with iil_C_FetchUIDs() to get the UIDs.
Tested it with about 5600 messages and got acceptable results.
Thanks for your debugging work! Thomas
Pieter wrote:
Hi Rodolfo,
I do have the same experience! Everything is fast, except for opening an email... I'm using Courier-imap.
I already know why. When an email is openend, Roundcube is searching for the previous and the next mail. (for the prev/next mail function). It does this by downloading the complete mailfolder! (calling the _list_headers function with 'all') This way, server-side sorting does not help; it wil fetch the complete list anyhow.
I have replaced the function "message_index" in "program/include/rcube_imap.inc" with the following. It returns a correct result, and is very, very fast! There is a downside though. This just uses the default imap sorting, it does not take other sorting into account! So, when the message list was sorted on Subject for example, the prev/next takes you to the next message by date instead by subject. (What would a user expect in this case?) function message_index($mbox='', $sort_field='date', $sort_order='DESC') { $mailbox = $mbox ? $this->_mod_mailbox($mbox) : $this->mailbox; return array_reverse(iil_C_FetchUIDs($this->conn, $mailbox)); }
After a little more coding, I've come to the following solution. It is a little slower as the solution above, but solves the problem of sorting discribed above. (This function is *not complete*!! When there is no server-side sorting available, is doesn't do anything!! Don't have time for that now...)
function message_index($mbox='', $sort_field='date', $sort_order='DESC') { $mailbox = $mbox ? $this->_mod_mailbox($mbox) : $this->mailbox; if ($this->get_capability('sort') && ($msg_index = iil_C_Sort($this->conn, $mailbox, $sort_field))) { $a_message_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, implode($msg_index, ','), 'UID'); if ($sort_order == 'DESC') return array_reverse($a_message_index); else return $a_message_index; } }
I hope this helpes!
Pieter Hoekstra.
Rodolfo schreef:
Another thing, before i forget. At this point, it seems that roundcube has issues opening individual mails in large mailboxes. For exmaple, my sent mailbox has about 3500 messages, can't open any messages from there (ranging from 1k to 11MBs), nor from one of the mailing lists that contain about 16000 messages. it just sits there saying that it's loading. eventually it times out and kicks me back to the login screen stating that the session has expired.
can anyone confirm this?
cheers, rodolfo
On 12/4/05, Rodolfo segleaur@gmail.com wrote:
OK, updated today against the sourceforge CVS. Update to the mysql database was no issue (though a word of warning to those unwary, if you already altered the table for the ip and aliases, you must comment out those lines first before running the script against the mySQL DB). rest of the code base updated nicely.
RC is definitely eating less resources now, or at least that's what top and server-status is telling me. the big test for me was opening a 16000 message maildir in Cyrus. Prior to this version, couldn't open it - the script would time out. now, there's no issue - opens the maildir and seems to be doing exactly what it's supposed to.
i concurr with Dennis' problem of marking read/unread e-mails. I sent a large test message (about 8MB), to test the upload capability and mail transfer. i've clicked the message about 5 times, returning to the inbox via the return button and clicking directly on the inbox in the folder list, but it will not mark the message unread.
Deleted old identity and recreated it trying to see if the signatures work, but it seems that it will not append the signature to the mail. i thought at first it was the url at the end of the sig, but it seems that no matter what's there, it will not append.
i don't remember if the previous installs had this problem, but the addresss book button in the compose screen does nothing. don't remember if it's always been like that since i simply used address completion.
can't confirm the report that the contacts disappear after updating. i still have them in the address book. don't know if it's a particularity of that other installation.
definitely feel a speedup of the interface. so over all it's good, but these little snafus.
cheers, rodolfo