Sure, patches are always welcome :) dh
Nicolas H. wrote: >>> 2009/9/4 Christopher Michael <[email protected] >>> <mailto:[email protected]>> >>> >>> Nicolas H. wrote: >>> > Hello everyone here, >>> > >>> > >>> > I hope it's the right place to send this, I was recommended to do >>> so on >>> > the #e irc. >>> > >>> > So, I already have used the mail module in the past and I >>> remember it >>> > used to display the number of new (unread) e-mails of my mailbox, >>> using >>> > pop3. This seems quite expected. I would be really surprised >>> if I'm >>> > wrong about this. >>> > >>> > Yesterday I tried it again but this time instead of displaying >>> the >>> > number of unread e-mails, it displays the total number of >>> e-mails. Which >>> > I find weird (is it really the purpose of the mail module ?). >>> > >>> > So I checked the source code here : >>> > http://trac.enlightenment.org/e/browser … A/mail/src >>> > >>> >>> <http://trac.enlightenment.org/e/browser/trunk/E-MODULES-EXTRA/mail/src> >>> > >>> > and noticed that there is a field called num_new that is >>> used... and >>> > because of its name, and because of the way it is used, I >>> think it is >>> > intended to get the number of new messages. >>> > >>> > For instance, in e_mod_main.c : >>> > >>> > >>> > Code: >>> > >>> > 649 void >>> > 650 _mail_set_text (void *data) >>> > 651 { >>> > 652 Instance *inst = data; >>> > 653 Eina_List *l; >>> > 654 char buf[1024]; >>> > 655 int count = 0; >>> > 656 >>> > 657 if (!inst) >>> > 658 return; >>> > 659 >>> > 660 for (l = inst->ci->boxes; l; l = l->next) >>> > 661 { >>> > 662 Config_Box *cb; >>> > 663 >>> > 664 cb = l->data; >>> > 665 if (!cb) >>> > 666 continue; >>> > 667 count += cb->num_new; >>> > 668 } >>> > 669 >>> > 670 if (count > 0) >>> > 671 { >>> > ... >>> > >>> > >>> > The loop seems to count the sum of all new messages of the >>> different >>> > mailboxes. >>> > >>> > In pop.c : >>> > >>> > >>> > Code: >>> > >>> > static void >>> > 215 _mail_cb_mouse_down (void *data, Evas * e, Evas_Object >>> * obj, >>> > 216 void *event_info) >>> > 217 { >>> > ... >>> > 254 snprintf (buf, sizeof (buf), "%s: %d/%d", >>> cb->name, >>> > cb->num_new, >>> > 255 cb->num_total); >>> > ... >>> > >>> > >>> > >>> > this seems to be the code what displays the small pop-up with >>> name of >>> > the mailbox, plus number of new messages and number of all >>> messages >>> > (that can be expected to be usually different). >>> > >>> > Then here in pop.c : >>> > >>> > >>> > Code: >>> > >>> > 156 static int >>> > 157 _mail_pop_server_data (void *data, int type, void *event) >>> > 158 { >>> > ... >>> > 203 case POP_STATE_STATUS_OK: >>> > 204 if (sscanf (in, "+OK %i %i", &num, &total) == 2) >>> > 205 { >>> > 206 pc->config->num_new = num; >>> > 207 pc->config->num_total = num; >>> > 208 } >>> > >>> > >>> > >>> > Here the data received from the pop3 server are "scanned" and >>> weirdly, >>> > both fields num_new and num_total get the same value (num). >>> > >>> > Then I read the pop3 rfc (http://www.ietf.org/rfc/rfc1939.txt) >>> and >>> > unfortunately it seems NOT to be possible to retrieve directly >>> the >>> > number of new e-mails from the pop3 server. The sscanf (in, "+OK >>> %i %i", >>> > &num, &total) actually gives the total number of e-mails to &num >>> and the >>> > size of the mailbox to &total. So num_new gets the total >>> number of >>> > e-mails and it's no surprise that the mail module displays this >>> number >>> > instead of the number of new messages. >>> > >>> > So I am a bit confused. I am quite sure it used to work. Is there >>> still >>> > a way to bring the mail module to display the number of new >>> e-mails >>> > (using pop3) ? Or am I totally wrong and it is not intended to do >>> so ?? >>> > >>> > I hope I didn't bother you with a scilly question, but I couldn't >>> find >>> > an answer to it anywhere else so far. >>> > >>> > I wish you a nice day, >>> > >>> > >>> > >>> > Nicolas Hainaux >>> > >>> You are correct in your assumptions there. POP3 does not have a >>> "total >>> new" option. It may have been possible in the past (due to the >>> code), >>> but the pop code was rewritten (by someone, don't remember who) >>> after my >>> initial write, so I am not entirely sure how it is handled now. >>> If you >>> really really want the total # of new messages, I believe that >>> IMAP has >>> support for that (iirc). >>> >>> Honestly tho, the whole mail module needs a serious rewrite but I >>> just >>> haven't found the time. >>> >>> devilhorns >>> >> Atton Jonathan wrote: >>> maybe the old way was to saved the number of messages in a file and >>> then compare the new number to the old ? >> Christopher Michael a écrit : >>> IIRC, yea that was what it was doing. >>> >>> dh >> > Well, I have no idea about this old way, maybe it is possible to find it > again in the archives thanks to svn (or cvs ?). > Anyway, just saving the number of messages and comparing it to the new > one won't work in frequent cases. Let's assume there are 40 messages. > The user, for any reason, deletes one. Then a new message comes before > the mail module checked the box... the next time it will check it, it > will find 40 messages again and won't display anything new ! > > On another hand, while reading the rfc again, I found a hint. Without > any argument, the LIST command retrieves a short summary for each > message in the mailbox. Each message is identified with a number. This > number seems to be unique for each message (this sounds logical and > moreover in other commands it is mentionned that the argument can be... > > a message-number (required) which may NOT refer to a message marked as deleted > > so when a message is deleted, its number is obviously not given to a new > one later.) > > This example of a mailbox with two messages is given in the rfc : > > C: LIST > S: +OK 2 messages (320 octets) > S: 1 120 > S: 2 200 > S: . > > The second number is the size of the message, doesn't really matter. > > So I would suggest to save the numbers of the messages (in this case 1 > and 2) in a file. The next time, count how many messages in the new list > have got a number that doesn't exist in the saved list. This will give > the number of new messages. > And that's no matter if a message has been deleted in the meanwhile, it > just won't appear in the new list, but we don't care. For example, if we > saved the last result (1 2), and if message 1 is deleted on the server > and a new one comes, the list would look like : > > C: LIST > S: +OK 2 messages (350 octets) > S: 2 200 > S: 3 150 > S: . > > As number 3 still doesn't exist in the saved list (1 2), we know that > there's a message (even though the total amount didn't change). Just add > number 3 to the saved list, display there's 1 new message and that's done. > > I don't think I am able to rewrite the whole mail module but if I find > (a lot of) time, maybe I can try to propose a patch ? > > > Nicolas H. > ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
