Show
Ignore:
Timestamp:
08/04/08 09:17:20 PM (5 months ago)
Author:
octorian
Message:

Initial IMAP IDLE implementation

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/LogicMail/src/org/logicprobe/LogicMail/mail/IncomingMailConnectionHandler.java

    r264 r266  
    3939import org.logicprobe.LogicMail.message.Message; 
    4040import org.logicprobe.LogicMail.message.MessageFlags; 
     41import org.logicprobe.LogicMail.util.Queue; 
    4142 
    4243public class IncomingMailConnectionHandler extends AbstractMailConnectionHandler { 
     
    113114         * Handles the start of the IDLE state. 
    114115         */ 
    115         protected void handleBeginIdle() { 
     116        protected void handleBeginIdle() throws IOException, MailException { 
     117                if(incomingClient.hasIdle()) { 
     118                        incomingClient.idleModeBegin(); 
     119                        boolean endIdle = false; 
     120                        while(!endIdle) { 
     121                                sleepConnectionThread(500); 
     122                                if(incomingClient.idleModePoll()) { 
     123                                        addRequest( 
     124                                                        IncomingMailConnectionHandler.REQUEST_FOLDER_MESSAGES_RECENT, 
     125                                                        new Object[] { incomingClient.getActiveFolder() }); 
     126                                        endIdle = true; 
     127                                } 
     128                                else if(getShutdownInProgress()) { 
     129                                        endIdle = true; 
     130                                } 
     131                                else 
     132                                { 
     133                                        Queue requestQueue = getRequestQueue(); 
     134                                        synchronized(requestQueue) { 
     135                                                if(requestQueue.element() != null) { 
     136                                                        endIdle = true; 
     137                                                } 
     138                                        } 
     139                                } 
     140                        } 
     141                        incomingClient.idleModeEnd(); 
     142                } 
    116143        } 
    117144