ipsservices/ipssosaoplugin/src/IpsSosAOMboxLogic.cpp
changeset 59 16ed8d08d0b1
parent 30 759dc5235cdb
child 65 478bc57ad291
--- a/ipsservices/ipssosaoplugin/src/IpsSosAOMboxLogic.cpp	Tue Jul 06 14:04:34 2010 +0300
+++ b/ipsservices/ipssosaoplugin/src/IpsSosAOMboxLogic.cpp	Wed Aug 18 09:37:47 2010 +0300
@@ -16,21 +16,11 @@
 *
 */
 
-//<Qmail>
-#include <cmmanager.h>
-//</Qmail>
-
-#include "emailtrace.h"
-#include "IpsSosAOMboxLogic.h"
-//<QMail>
-#include "IpsSosAOSettingsHandler.h"
-//</QMail>
-#include "IpsSosAOSchedulerUtils.h"
-#include "IpsSosAOPlugin.hrh"
-#include "IpsSosAOImapPopLogic.h"
+#include "ipssosaopluginheaders.h"
 
 //<QMail>
 const TInt KAOSecondsInMinute = 60;
+const TInt KAODefaultInboxSyncTimeSecs = 3600;
 //</QMail>
 const TInt KIpsSosAOMboxLogicMinGra = 1;
 
@@ -319,11 +309,14 @@
           ( (iIsRoaming && CanConnectIfRoamingL())||
              !iIsRoaming ) )
         {
+        NM_COMMENT("CIpsSosAOMBoxLogic: event: EEventStart");
         event = EEventNop;
         iAgent->LoadSettingsL();
         iTimer->Cancel();
+        INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", KIpsSosAOStartDelaySeconds);
         iTimer->After( KIpsSosAOStartDelaySeconds );
         iState = EStateWaitSyncStart;
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
         }
     
     while ( event != EEventNop && iState != EStateError )
@@ -331,14 +324,17 @@
         switch ( event )
             {
             case EEventTimerFired:
+                NM_COMMENT("CIpsSosAOMBoxLogic: event: EEventTimerFired");
                 event = HandleTimerFiredL();
               break;
             case EEventStartSync:
+                NM_COMMENT("CIpsSosAOMBoxLogic: event: EEventStartSync");
                 if ( iState == EStateWaitSyncStart )
                     {         
                     iError = KErrNone;
                     iAgent->StartSyncL();
                     iState = EStateSyncOngoing;
+                    NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateSyncOngoing");
                     }
                 else if ( iState == EStateIdleAndWaitCommands )
                     {
@@ -360,7 +356,9 @@
 					//</QMail>
                     if ( type == EAOCConnectAfter )
                         {
+                        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
                         iState = EStateWaitSyncStart;
+                        INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", seconds);
                         iTimer->After( seconds );
                         
                         SetEmnReceivedFlagL( ETrue );
@@ -370,6 +368,7 @@
                         iError = KErrNone;
                         iAgent->StartSyncL();
                         iState = EStateSyncOngoing;
+                        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateSyncOngoing");
                         }
 					//<QMail>
                     CleanupStack::PopAndDestroy( 2, settings );
@@ -379,6 +378,7 @@
                 event = EEventNop;
                 break;
             case EEventFetchMessages:
+                NM_COMMENT("CIpsSosAOMBoxLogic: event: EEventFetchMessages");
                 if ( ( iState == EStateWaitSyncStart || 
                        iState == EStateIdleAndWaitCommands ) &&
                         iFetchMsgArray.Count() > 0 )
@@ -386,6 +386,7 @@
                     iError = KErrNone;
                     iAgent->StartFetchMessagesL( iFetchMsgArray );
                     iFetchMsgArray.Reset();
+                    NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateFetchOngoing");
                     iState = EStateFetchOngoing;
                     }
                 else 
@@ -396,16 +397,20 @@
                 event = EEventNop;
                 break;
             case EEventOperationCompleted:
+                NM_COMMENT("CIpsSosAOMBoxLogic: event: EEventOperationCompleted");
                 event = HandleOperationCompletionL();
                 break;
             case EEventSuspendOperations:
+                NM_COMMENT("CIpsSosAOMBoxLogic: event: EEventSuspendOperations");
                 SuspendOperations();
                 iState = EStateSuspended;
                 event = EEventNop;
                 break;
             case EEventContinueOperations:
+                NM_COMMENT("CIpsSosAOMBoxLogic: event: EEventContinueOperations");
                 if ( iState == EStateSuspended )
                     {
+                    INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", KIpsSosAOContinueWaitTime);
                     iTimer->After( KIpsSosAOContinueWaitTime );
                     }
                 else
@@ -415,9 +420,11 @@
                 // ignore if in other states
                 break;
             case EEventStopAndRemoveOps:
+                NM_COMMENT("CIpsSosAOMBoxLogic: event: EEventStopAndRemoveOps");
                 // notify deletion
                 iAgent->CancelAllAndDisconnectL();
                 iTimer->Cancel();
+                NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateError");
                 iState = EStateError;
                 event = EEventNop;
                 break;
@@ -475,12 +482,14 @@
           agentState == CIpsSosAOBaseAgent::EStatePopulateOnHold ) )
         {
         iAgent->ContinueHoldOperations();
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateSyncOngoing");
         iState = EStateSyncOngoing;
         }
     else if ( iState == EStateSuspended && 
             agentState == CIpsSosAOBaseAgent::EStateFetchOnHold )
         {
         iAgent->ContinueHoldOperations();
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateFetchOngoing");
         iState = EStateFetchOngoing;
         }
     else
@@ -506,12 +515,18 @@
 	//</Qmail>     
     if ( iState == EStateSyncOngoing )
         {
+        INFO_1("CIpsSosAOMBoxLogic: operation completed error: %d", iError);
+        bool doSaveSyncTime = EFalse;
         if ( !( iError == KErrNone || iError == KErrCancel ) )
             {
             ++iErrorCounter;
             }
         else
             {
+            if (iError == KErrNone)
+                {
+                doSaveSyncTime = ETrue;
+                }
             iError = KErrNone;
             iErrorCounter = 0;
             }
@@ -529,6 +544,7 @@
             
             settings->SetEmnReceivedButNotSyncedFlag( EFalse );
             //</QMail>
+            NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateError");
             iState = EStateError;
             iErrorCounter = 0;
             }
@@ -542,14 +558,17 @@
             
             if ( state == IpsServices::EMailAoOff )
                 {
+                NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateIdleAndWaitCommands");
                 iState = EStateIdleAndWaitCommands;
                 }
             else
                 {
                 if( !iTimer->IsActive() )
                     {
+                    INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", KIpsSosAOReTryInterval);
                     iTimer->After( KIpsSosAOReTryInterval );
                     }
+                NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
                 iState = EStateWaitSyncStart;
                 }
 
@@ -567,7 +586,10 @@
             {
             // no errors
             // update successfull sync time to settings
-            SaveSuccessfulSyncTimeL();
+            if (doSaveSyncTime)
+                {
+                SaveSuccessfulSyncTimeL();
+                }
             // and adjust timer to sync interval
             CalculateToNextIntervalL();
             }
@@ -577,6 +599,7 @@
         iError = KErrNone;
         if ( iTimer->IsActive() )
             {
+            NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
             iState = EStateWaitSyncStart;
             }
         else
@@ -600,11 +623,13 @@
         {
         iAgent->HoldOperations();
         }
+    NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateSuspended");
     iState = EStateSuspended;
     // set suspend watchdog, if clien not continue this
     // ensure ao logic to continue
     if ( !iTimer->IsActive() )
         {
+        INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", KIpsSosAOSuspendWatchdogTime);
         iTimer->After( KIpsSosAOSuspendWatchdogTime );
         }
     }
@@ -649,7 +674,7 @@
     {
 	//<Qmail>
     FUNC_LOG;
-     iTimer->Cancel();
+    iTimer->Cancel();
     TMBoxLogicEvent event = EEventNop;
     TTimeIntervalSeconds secondsToConnect = CalculateScheduledSyncTimeL();
     
@@ -679,7 +704,10 @@
                     secsFromLastSync.Int() < interval ) )
                 {
                 // adjust timer to correct sync time
-                iTimer->After(interval - secsFromLastSync.Int());        
+                TInt syncAfter = interval - secsFromLastSync.Int();
+                INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", syncAfter);
+                iTimer->After(syncAfter); 
+                NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
                 iState = EStateWaitSyncStart;
                 }
             else
@@ -692,6 +720,7 @@
     else if ( secondsToConnect.Int() == KErrNotFound )
         {
         // means that ao is not on (but emn is)
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateIdleAndWaitCommands");
         iState = EStateIdleAndWaitCommands;
       
         if ( settings->EmnReceivedButNotSyncedFlag() )
@@ -702,7 +731,9 @@
         }
     else
         {
+        INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", secondsToConnect);
         iTimer->After( secondsToConnect );
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
         iState = EStateWaitSyncStart;
         
 
@@ -734,19 +765,36 @@
         CIpsSosAOSettingsHandler* settings = 
                  CIpsSosAOSettingsHandler::NewL(iSession, iMailboxId);
         CleanupStack::PushL(settings);
-        iTimer->After( 
-                settings->InboxRefreshTime() * KAOSecondsInMinute );
+        TInt inboxRefreshTime = settings->InboxRefreshTime();
+        TInt secs = inboxRefreshTime * KAOSecondsInMinute;
+        INFO_1("CIpsSosAOMBoxLogic: inboxRefreshTime: %d", inboxRefreshTime);
+        INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", secs);
+        if (secs > 0) 
+            {
+            iTimer->After(TTimeIntervalSeconds(secs));
+            }
+        else 
+            {
+            // panic at this point when we get zero time from settings
+            __ASSERT_DEBUG( EFalse, User::Panic( KIpsSosAOPanicLit, KErrGeneral) );
+            iTimer->After(TTimeIntervalSeconds(KAODefaultInboxSyncTimeSecs));
+            }
+            
         CleanupStack::PopAndDestroy(settings);
 	   //</QMail>
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
         iState = EStateWaitSyncStart;
         }
     else if ( interval.Int() > 0 )
         {
+        INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", interval);
         iTimer->After( interval );
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
         iState = EStateWaitSyncStart;
         }
     else 
         {
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateIdleAndWaitCommands");
         iState = EStateIdleAndWaitCommands;
         }