======================================================================
http://www.dbmail.org/mantis/bug_view_advanced_page.php?bug_id=0000097
======================================================================
Reported By:                alessandro
Assigned To:                paul
======================================================================
Project:                    DBMail
Bug ID:                     97
Category:                   IMAP daemon
Reproducibility:            always
Severity:                   minor
Priority:                   normal
Status:                     assigned
======================================================================
Date Submitted:             04-Oct-04 15:46 CEST
Last Modified:              19-Mar-05 19:42 CET
======================================================================
Summary:                    RECENT flag always set
Description: 
When connecting via IMAP, all the messages have the \Recent flag set. This
flag should be set only for newly arrived messages, and should be unset by
the server at the end of the session.
See "Additional Information".
======================================================================

----------------------------------------------------------------------
 ilja - 05-Oct-04 09:51 CEST 
----------------------------------------------------------------------
I'll have a look at this. I guess this is some error that's way deep in the
code..

Paul, can you take care of this in your new (2.1) code? Or have you
already done so?

----------------------------------------------------------------------
 paul - 05-Oct-04 10:28 CEST 
----------------------------------------------------------------------
I did a quick scan through the code when this first came in. I can't find
any places where the recent_flag is actually set to zero. A complete
ommission it seems.

The procedure is actually quite simple:

when user opens mailbox and user has rw access to mailbox:
  update messages set recent_flag=0 where mailbox_idnr matches and
recent_flag=1

So all we need is a db_ call that sets the recent_flag to zero for all
messages in a mailbox, and call this from the correct location in
_ic_select. _ic_select is the only command that is involved, afaik.

Looks easy enough. I'll take care of this.

----------------------------------------------------------------------
 paul - 05-Oct-04 16:39 CEST 
----------------------------------------------------------------------
Not that simple after all.

The call to the new function db_set_msgflag_recent() has to occur *after*
the current session.

One approach would be to update the recent_flag after each retrieval of
active flags for a message or range of messages. Very tricky at best. The
whole mailbox_t should be passed to those functions so we can move the acl
checks and mailbox permission checks to those calls.

Another approach would be to expand imap_userdata_t to include the
previously selected mailbox_t. On selecting a new mailbox, update the
recent_flag for all messages in the previously selected mailbox.

I'll start working on both.

----------------------------------------------------------------------
 aaron - 05-Oct-04 18:48 CEST 
----------------------------------------------------------------------
Would it be possible to have a query run at logout/disconnect that marked
all visited mailboxes as no longer recent? During the session, we'd keep a
list of mailboxes that the person visited. At about the time of the
connection cleanup code, call a function that marks those mailboxes as no
longer recent.

----------------------------------------------------------------------
 alessandro - 11-Oct-04 18:42 CEST 
----------------------------------------------------------------------
hello aaron,
the "recent" flag pertains the single messages, not the mailboxes. plus,
you have to consider concurrent access to the mailbox.
this flag is used so that only the first client to "see" a new message in
a mailbox notifies the user that there's indeed a new message.

----------------------------------------------------------------------
 ilja - 12-Oct-04 17:00 CEST 
----------------------------------------------------------------------
fixed by Paul

----------------------------------------------------------------------
 ilja - 12-Oct-04 20:12 CEST 
----------------------------------------------------------------------
hmm, I think I set the wrong bug to 'Resolved', sorry.

----------------------------------------------------------------------
 aaron - 02-Nov-04 04:32 CET 
----------------------------------------------------------------------
So is this fixed?

----------------------------------------------------------------------
 alessandro - 11-Nov-04 13:19 CET 
----------------------------------------------------------------------
no, it is not fixed, I have just checked latest 2.0 CVS

----------------------------------------------------------------------
 alessandro - 25-Nov-04 00:52 CET 
----------------------------------------------------------------------
I have just installed DBMail 2.0.1, and it broke the fix I wrote for my
IMAP client to overcome this server bug. 
It seems that now the recent flag is not _always_ set, but the situation
has become too messy, I can't isolate the commands that get the message as
not recent.
Please fix this bug, or at least leave the behaviour unmodified (that is,
always recent) until a proper fix is ready.

regards,
Alessandro Magnolo

----------------------------------------------------------------------
 va1210 - 30-Nov-04 19:37 CET 
----------------------------------------------------------------------
I tried hooking up the newest cvs-head-versions of horde and imp to my
dbmail-server, and they display all items in the mailboxes as unread.
Could be related to this..

----------------------------------------------------------------------
 aaron - 30-Nov-04 19:50 CET 
----------------------------------------------------------------------
That's been the case for me with TWIG since just about forever. So the bug
is definitely with DBMail, and it seems that the main problem is finding
the right place in the IMAP session to do the Recent un-flagging.

----------------------------------------------------------------------
 paul - 23-Dec-04 15:19 CET 
----------------------------------------------------------------------
I think I've got this one nailed now. checkout cvs-head.

on select:
  flush list of recent messages from previous select (other mailbox)
  if access is rw:
    build new list of recent message in this mailbox

on logout:
  flush list of recent message

I've added a couple of calls in dbmail-imapsession and imaputil, which are
called from above mentioned locations in _ic_select and _ic_logout

These calls may have to be added in a couple of other places as well, but
the general framework should be valid and functional already.

----------------------------------------------------------------------
 alessandro - 03-Jan-05 17:02 CET 
----------------------------------------------------------------------
I cannot check the fix because I can't manage to compile the experimental
version.
Will this be fixed in 2.0 branch as well? If so, when?

----------------------------------------------------------------------
 paul - 08-Jan-05 19:20 CET 
----------------------------------------------------------------------
Like I said on the list: This bug is fixed in cvs-head, and I don't plan on
fixing it in 2.0. If you have issues compiling cvs-head, please send us
some feedback so we can help.

----------------------------------------------------------------------
 aaron - 18-Mar-05 17:36 CET 
----------------------------------------------------------------------
Let's close this if there are no plans to fix it in 2.0.x.

Bug History
Date Modified  Username       Field                    Change              
======================================================================
04-Oct-04 15:46alessandro     New Bug                                      
05-Oct-04 09:51ilja           Bugnote Added: 0000281                       
05-Oct-04 09:52ilja           Status                   new => acknowledged 
05-Oct-04 10:28paul           Bugnote Added: 0000282                       
05-Oct-04 16:39paul           Bugnote Added: 0000284                       
05-Oct-04 18:48aaron          Bugnote Added: 0000285                       
11-Oct-04 18:42alessandro     Bugnote Added: 0000306                       
12-Oct-04 17:00ilja           Bugnote Added: 0000307                       
12-Oct-04 17:00ilja           Assigned To               => ilja            
12-Oct-04 17:00ilja           Resolution               open => fixed       
12-Oct-04 17:00ilja           Status                   acknowledged => resolved
12-Oct-04 20:12ilja           Bugnote Added: 0000308                       
12-Oct-04 20:12ilja           Resolution               fixed => reopened   
12-Oct-04 20:12ilja           Status                   resolved => feedback
14-Oct-04 10:19ilja           Assigned To              ilja =>             
29-Oct-04 11:13alessandro     Bug Monitored: alessandro                    
02-Nov-04 04:32aaron          Bugnote Added: 0000332                       
11-Nov-04 13:19alessandro     Bugnote Added: 0000350                       
25-Nov-04 00:52alessandro     Bugnote Added: 0000375                       
30-Nov-04 19:37va1210         Bugnote Added: 0000396                       
30-Nov-04 19:50aaron          Bugnote Added: 0000397                       
23-Dec-04 15:19paul           Bugnote Added: 0000462                       
03-Jan-05 17:02alessandro     Bugnote Added: 0000485                       
08-Jan-05 19:20paul           Bugnote Added: 0000493                       
08-Jan-05 19:20paul           Assigned To               => paul            
08-Jan-05 19:20paul           Resolution               reopened => open    
08-Jan-05 19:20paul           Status                   feedback => assigned
18-Mar-05 17:36aaron          Bugnote Added: 0000620                       
19-Mar-05 19:42paul           Resolution               open => fixed       
======================================================================

Reply via email to