ipsservices/ipssosaoplugin/src/IpsSosAOMboxLogic.cpp
branchRCL_3
changeset 63 d189ee25cf9d
parent 13 0396474f30f5
child 64 3533d4323edc
--- a/ipsservices/ipssosaoplugin/src/IpsSosAOMboxLogic.cpp	Thu Aug 19 09:38:05 2010 +0300
+++ b/ipsservices/ipssosaoplugin/src/IpsSosAOMboxLogic.cpp	Tue Aug 31 15:04:17 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -16,23 +16,11 @@
 *
 */
 
-
-//<cmail> internal dependency removed
-/*#ifdef _DEBUG
-#include "../../internal/IpsSosAOPluginTester/inc/IpsSosAOPluginTester.hrh"
-#endif // _DEBUG*/
-//</cmail>
-
-#include <cmmanager.h>
+#include "ipssosaopluginheaders.h"
 
-#include "emailtrace.h"
-#include "IpsSosAOMboxLogic.h"
-#include "ipssetdataapi.h"
-#include "IpsSosAOSchedulerUtils.h"
-#include "IpsSosAOPlugin.hrh"
-#include "IpsSosAOImapPopLogic.h"
-
+//<QMail>
 const TInt KAOSecondsInMinute = 60;
+//</QMail>
 const TInt KIpsSosAOMboxLogicMinGra = 1;
 
 // ----------------------------------------------------------------------------
@@ -43,8 +31,10 @@
         TMsvId aMailboxId ) :
     iSession( aSession ), iMailboxId( aMailboxId ), iState( EStateError ),
     iErrorCounter( 0 ), iError( KErrNone ), iTimer( NULL ),
-    iFetchMsgArray( KIpsSosAOMboxLogicMinGra ), iDataApi( NULL ), iAgent( NULL ),
-    iExtendedSettings( NULL ), iIsRoaming( EFalse )
+	//<QMail>
+    iFetchMsgArray( KIpsSosAOMboxLogicMinGra ), iAgent( NULL ),
+    iIsRoaming( EFalse )
+	//</QMail>
     {
     FUNC_LOG;
     }
@@ -56,8 +46,8 @@
     {
     FUNC_LOG;
     delete iTimer;
-    delete iDataApi;
-    delete iExtendedSettings;
+	//<QMail>
+	//</QMail>
     delete iAgent;
     iFetchMsgArray.Close();
     }
@@ -85,9 +75,12 @@
     {
     FUNC_LOG;
     iTimer = CIpsSosAOPluginTimer::NewL( CActive::EPriorityStandard, *this );
-    iDataApi = CIpsSetDataApi::NewL( iSession );
+	//<QMail>
+
+	
     iAgent = CIpsSosAOBaseAgent::CreateAgentL( iSession, *this, iMailboxId );
-    LoadSettingsL();
+    
+    //</QMail>
     }
 
 // ----------------------------------------------------------------------------
@@ -177,7 +170,9 @@
 void CIpsSosAOMBoxLogic::FetchMessagesL( const RArray<TMsvId> aArray )
     {
     FUNC_LOG;
-    LoadSettingsL();
+    //<Qmail>
+    
+    //</Qmail>
     for ( TInt i = 0; i < aArray.Count(); i++ )
         {
         iFetchMsgArray.AppendL( aArray[i] );
@@ -210,55 +205,86 @@
     {
     FUNC_LOG;
     TBool ret = ETrue;
-    TIpsSetDataEmnStates state = EMailEmnOff;
-    if ( iExtendedSettings )
+	//<QMail>
+    CIpsSosAOSettingsHandler* settings = NULL;
+    TRAP_IGNORE( settings = 
+            CIpsSosAOSettingsHandler::NewL(iSession, iMailboxId));
+    
+    if( settings )
         {
-        state = iExtendedSettings->EmailNotificationState();
+        IpsServices::TIpsSetDataEmnStates state = IpsServices::EMailEmnOff;
+        state = settings->EmailNotificationState();
+        
+        if ( state == IpsServices::EMailEmnOff )
+            {
+            ret = EFalse;
+            }
+        
+        delete settings;
         }
-    if ( state == EMailEmnOff )
-        {
-        ret = EFalse;
-        }
+    
+	//</QMail>
     return ret;
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // 
+//<QMail>
 void CIpsSosAOMBoxLogic::GetEmailAddress(  
     TBuf<KIpsSosAOTextBufferSize>& aEmailAddress ) const
     {
     FUNC_LOG;
-    const TDesC& addr = iExtendedSettings->EmailAddress();
-    __ASSERT_DEBUG( ( 
-            addr.Length() <= KIpsSosAOTextBufferSize ), 
-            User::Panic( KIpsSosAOPanicLit, KErrGeneral) );
+    CIpsSosAOSettingsHandler* settings = NULL;
+
+    TRAPD( err, settings = CIpsSosAOSettingsHandler::NewL(
+            iSession, iMailboxId) );
     
-    if ( addr.Length() <= KIpsSosAOTextBufferSize )
+    if( settings )
         {
-        aEmailAddress.Copy( addr );
+        HBufC* addr = NULL;
+        TRAP(err, addr = settings->EmailAddressL());
+        
+        if( addr )
+            {
+            __ASSERT_DEBUG( ( 
+                    addr->Length() <= KIpsSosAOTextBufferSize ), 
+                    User::Panic( KIpsSosAOPanicLit, KErrGeneral) );
+            
+            if ( addr->Length() <= KIpsSosAOTextBufferSize )
+                {
+                aEmailAddress.Copy( *addr );
+                }
+            delete addr;
+            }   
+        
+        delete settings;
         }
+    
+	//<QMail>
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-//  
-//<cmail>
+//<QMail>
 void CIpsSosAOMBoxLogic::SetEmnReceivedFlagL( TBool aNewValue )
-//</cmail>
     {
-    LoadSettingsL();
-    iExtendedSettings->SetEmnReceivedButNotSyncedFlag( aNewValue );
-    iDataApi->SaveExtendedSettingsL(
-        *iExtendedSettings );
+    
+    CIpsSosAOSettingsHandler* settings = 
+            CIpsSosAOSettingsHandler::NewL(
+                iSession, iMailboxId );
+    CleanupStack::PushL(settings);
+    
+    settings->SetEmnReceivedButNotSyncedFlag( aNewValue );
+    
+    CleanupStack::PopAndDestroy(settings);
+	//</QMail>
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 //
-//<cmail>
 TBool CIpsSosAOMBoxLogic::IsMailboxRoamingStoppedL()
-//</cmail>
     {
     TBool ret = EFalse;
     if ( iIsRoaming && !CanConnectIfRoamingL() )
@@ -279,64 +305,79 @@
     TInt cycles = 0;
     
     if ( event == EEventStart && iState == EStateError && 
-            CanConnectIfRoamingL() )
+          ( (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 )
         {
-//<cmail> removing flags    
-/*#ifdef IPSSOSIMAPPOLOGGING_ON
-        WriteDebugData( event );
-#endif*/
-//</cmail>
         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 )
                     {
                     // start sync command in idle state is currently 
                     // received when emn arrives, checking scheduling 
                     // if user have selected week days / hours in setting
+					//<QMail>
+                    CIpsSosAOSettingsHandler* settings = 
+                             CIpsSosAOSettingsHandler::NewL(iSession, iMailboxId);
+                    CleanupStack::PushL(settings);
+                    
                     CIpsSosAOSchedulerUtils* scheduler = 
-                        CIpsSosAOSchedulerUtils::NewLC( *iExtendedSettings );
+                        CIpsSosAOSchedulerUtils::NewLC( *settings );
+                        
                     TTimeIntervalSeconds seconds;
                     TIpsSosAOConnectionType type = 
-                        scheduler->SecondsToNextMark( seconds );
+                            scheduler->SecondsToNextMark( seconds );
+                    
+					//</QMail>
                     if ( type == EAOCConnectAfter )
                         {
+                        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
                         iState = EStateWaitSyncStart;
+                        INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", seconds);
                         iTimer->After( seconds );
-                        //<cmail>
+                        
                         SetEmnReceivedFlagL( ETrue );
-                        //</cmail>
                         }
                     else
                         {
                         iError = KErrNone;
                         iAgent->StartSyncL();
                         iState = EStateSyncOngoing;
+                        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateSyncOngoing");
                         }
-                    CleanupStack::PopAndDestroy( scheduler );
+					//<QMail>
+                    CleanupStack::PopAndDestroy( 2, settings );
+					//</QMail>
                     }
                 // ignore in other states
                 event = EEventNop;
                 break;
             case EEventFetchMessages:
+                NM_COMMENT("CIpsSosAOMBoxLogic: event: EEventFetchMessages");
                 if ( ( iState == EStateWaitSyncStart || 
                        iState == EStateIdleAndWaitCommands ) &&
                         iFetchMsgArray.Count() > 0 )
@@ -344,6 +385,7 @@
                     iError = KErrNone;
                     iAgent->StartFetchMessagesL( iFetchMsgArray );
                     iFetchMsgArray.Reset();
+                    NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateFetchOngoing");
                     iState = EStateFetchOngoing;
                     }
                 else 
@@ -354,28 +396,31 @@
                 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
-                    {
-                    event = EEventNop;
-                    }
+                event = EEventNop;
                 // 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;
@@ -432,13 +477,17 @@
         ( agentState == CIpsSosAOBaseAgent::EStateConnectAndSyncOnHold || 
           agentState == CIpsSosAOBaseAgent::EStatePopulateOnHold ) )
         {
+        iTimer->Cancel();
         iAgent->ContinueHoldOperations();
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateSyncOngoing");
         iState = EStateSyncOngoing;
         }
     else if ( iState == EStateSuspended && 
             agentState == CIpsSosAOBaseAgent::EStateFetchOnHold )
         {
+        iTimer->Cancel();
         iAgent->ContinueHoldOperations();
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateFetchOngoing");
         iState = EStateFetchOngoing;
         }
     else
@@ -457,30 +506,43 @@
     {
     FUNC_LOG;
     TInt event = EEventNop;
+	//<Qmail>
+    CIpsSosAOSettingsHandler* settings = 
+             CIpsSosAOSettingsHandler::NewL(iSession, iMailboxId);
+    CleanupStack::PushL(settings);
+	//</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;
             }
-        //<cmail>
+        
         if ( iError != KErrNone && 
                 IsErrorFatalL( iError ) )
-        //</cmail>
             {
             iAgent->CancelAllAndDisconnectL();
             // switch ao off
-            iExtendedSettings->SetAlwaysOnlineState( EMailAoOff );
+			//<QMail>
+            
+            settings->SetAlwaysOnlineState( IpsServices::EMailAoOff );
             // emn not swithced of if its going to be "always on" in
             // future
-            iExtendedSettings->SetEmnReceivedButNotSyncedFlag( EFalse );
-            iDataApi->SaveExtendedSettingsL(
-                *iExtendedSettings );
+            
+            settings->SetEmnReceivedButNotSyncedFlag( EFalse );
+            //</QMail>
+            NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateError");
             iState = EStateError;
             iErrorCounter = 0;
             }
@@ -488,26 +550,33 @@
                 iErrorCounter < KIpsSosAOMaxReTryTimes )
             {
             // not fatal error
-            TIpsSetDataAoStates state = iExtendedSettings->AlwaysOnlineState();
-            if ( state == EMailAoOff )
+			//<QMail>
+            IpsServices::TIpsSetDataAoStates state = 
+                    settings->AlwaysOnlineState();
+            
+            if ( state == IpsServices::EMailAoOff )
                 {
+                NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateIdleAndWaitCommands");
                 iState = EStateIdleAndWaitCommands;
                 }
             else
                 {
                 if( !iTimer->IsActive() )
                     {
-                iTimer->After( KIpsSosAOReTryInterval );
+                    INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", KIpsSosAOReTryInterval);
+                    iTimer->After( KIpsSosAOReTryInterval );
                     }
+                NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
                 iState = EStateWaitSyncStart;
                 }
+
+			//</QMail>
             }
         else if ( iError != KErrNone && 
                 iErrorCounter >= KIpsSosAOMaxReTryTimes )
             {
-            //<cmail>
+            
             SetEmnReceivedFlagL( EFalse );
-            //</cmail>
             // not fatal, but all re trys are gone
             CalculateToNextIntervalL();
             }
@@ -515,7 +584,10 @@
             {
             // no errors
             // update successfull sync time to settings
-            SaveSuccessfulSyncTimeL();
+            if (doSaveSyncTime)
+                {
+                SaveSuccessfulSyncTimeL();
+                }
             // and adjust timer to sync interval
             CalculateToNextIntervalL();
             }
@@ -525,6 +597,7 @@
         iError = KErrNone;
         if ( iTimer->IsActive() )
             {
+            NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
             iState = EStateWaitSyncStart;
             }
         else
@@ -532,6 +605,9 @@
             event = CheckSchedulingAndSwitchStateL();          
             }
         }
+		//<Qmail>
+    CleanupStack::PopAndDestroy(settings);
+	//</Qmail>
     return event;
     }
 
@@ -545,35 +621,46 @@
         {
         iAgent->HoldOperations();
         }
-    iState = EStateSuspended;
     // set suspend watchdog, if clien not continue this
     // ensure ao logic to continue
-    if ( !iTimer->IsActive() )
+    if ( !iTimer->IsActive() || iState == EStateSyncOngoing || iState == EStateFetchOngoing)
         {
+        INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", KIpsSosAOSuspendWatchdogTime);
         iTimer->After( KIpsSosAOSuspendWatchdogTime );
         }
+    NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateSuspended");
+    iState = EStateSuspended;
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-//
-//<cmail>
+//<QMail>
+
 TBool CIpsSosAOMBoxLogic::IsErrorFatalL( TInt aError )
-//</cmail>
     {
     FUNC_LOG;
     // error can be fatal only if we haven't got successful connect
     // in mailbox ever and error is something else than KErrNone or
     // KErrCancel, and retry interval is reached
     TBool ret = EFalse;
-    LoadSettingsL();
-    TAOInfo info = iExtendedSettings->LastUpdateInfo();
+    //<Qmail>
+    
+    //</Qmail>
+    
+    CIpsSosAOSettingsHandler* settings = 
+             CIpsSosAOSettingsHandler::NewL(iSession, iMailboxId);
+    CleanupStack::PushL(settings);
+    
+    IpsServices::TAOInfo info = settings->LastUpdateInfo();
     if ( aError != KErrNone && aError != KErrCancel 
             && !info.iUpdateSuccessfulWithCurSettings
             && iErrorCounter >= KIpsSosAOMaxReTryTimes )
         {
         ret = ETrue;
         }
+    
+    CleanupStack::PopAndDestroy(settings);
+    //</QMail>
     return ret;
     }
 
@@ -583,15 +670,22 @@
 CIpsSosAOMBoxLogic::TMBoxLogicEvent 
     CIpsSosAOMBoxLogic::CheckSchedulingAndSwitchStateL()
     {
-     //<cmail> logs removed </cmail>
+	//<Qmail>
+    FUNC_LOG;
     iTimer->Cancel();
     TMBoxLogicEvent event = EEventNop;
     TTimeIntervalSeconds secondsToConnect = CalculateScheduledSyncTimeL();
-    //<cmail> logs removed </cmail>
+    
+    CIpsSosAOSettingsHandler* settings = 
+             CIpsSosAOSettingsHandler::NewL(iSession, iMailboxId);
+    CleanupStack::PushL(settings);
+      
     if ( secondsToConnect.Int() == 0 )
         {
         //check last successfull sync time and check is interval reached
-        TAOInfo info = iExtendedSettings->LastUpdateInfo();
+
+    
+        IpsServices::TAOInfo info = settings->LastUpdateInfo();
         if ( !info.iUpdateSuccessfulWithCurSettings )
             {
             event = EEventStartSync;
@@ -601,14 +695,17 @@
             TTime now;
             now.HomeTime();
             TInt interval = 
-                iExtendedSettings->InboxRefreshTime() * KAOSecondsInMinute;
+                    settings->InboxRefreshTime() * KAOSecondsInMinute;
             TTimeIntervalSeconds secsFromLastSync;
             now.SecondsFrom( info.iLastSuccessfulUpdate, secsFromLastSync );
             if ( (secsFromLastSync.Int() > 0) && ( 
                     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
@@ -616,12 +713,15 @@
                 event = EEventStartSync;
                 }
             }
+        
         }
     else if ( secondsToConnect.Int() == KErrNotFound )
         {
         // means that ao is not on (but emn is)
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateIdleAndWaitCommands");
         iState = EStateIdleAndWaitCommands;
-        if ( iExtendedSettings->EmnReceivedButNotSyncedFlag() )
+      
+        if ( settings->EmnReceivedButNotSyncedFlag() )
             {
             // got emn when logic was stopped
             event = EEventStartSync;
@@ -629,10 +729,15 @@
         }
     else
         {
+        INFO_1("CIpsSosAOMBoxLogic: timer scheduled: %d", secondsToConnect);
         iTimer->After( secondsToConnect );
+        NM_COMMENT("CIpsSosAOMBoxLogic: switching state: EStateWaitSyncStart");
         iState = EStateWaitSyncStart;
+        
+
         }
-    
+    CleanupStack::PopAndDestroy(settings);
+    //</Qmail>
     return event;
     }
 
@@ -642,28 +747,52 @@
 void CIpsSosAOMBoxLogic::CalculateToNextIntervalL()
     {
     FUNC_LOG;
-    //<cmail> logs removed </cmail>
+    
     iTimer->Cancel();
     TTimeIntervalSeconds interval;
     // first check and calculate scheduling function also loads settings
     interval = CalculateScheduledSyncTimeL();
-    //<cmail> logs removed </cmail>
+    
     if ( interval.Int() == 0 )
         {
         // add next interval, if interval is grater than 0 it means
         // that off-line time is going, user have selected days / times from
         // settings
-        iTimer->After( 
-                iExtendedSettings->InboxRefreshTime() * KAOSecondsInMinute );
+		
+		//<QMail>
+        CIpsSosAOSettingsHandler* settings = 
+                 CIpsSosAOSettingsHandler::NewL(iSession, iMailboxId);
+        CleanupStack::PushL(settings);
+        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;
         }
     
@@ -674,29 +803,36 @@
 //
 TTimeIntervalSeconds CIpsSosAOMBoxLogic::CalculateScheduledSyncTimeL()
     {
-    FUNC_LOG;
-    //<cmail> logs removed </cmail> 
-    LoadSettingsL();
-    TTimeIntervalSeconds seconds;
+    FUNC_LOG;    
+	//<Qmail>
+    
+    TTimeIntervalSeconds seconds=KErrNotFound;
+	
     
+    CIpsSosAOSettingsHandler* settings = 
+             CIpsSosAOSettingsHandler::NewL(iSession, iMailboxId);
+    CleanupStack::PushL(settings);
+            
     // first check is ao or emn on at all
-    if ( (iExtendedSettings->AlwaysOnlineState() == EMailAoOff && 
-            iExtendedSettings->EmailNotificationState() == EMailEmnOff  )||
-        iExtendedSettings->SelectedWeekDays() == 0 ) // no week days chosen
+    if ( (settings->AlwaysOnlineState() == IpsServices::EMailAoOff && 
+            settings->EmailNotificationState() == IpsServices::EMailEmnOff  )||
+            settings->SelectedWeekDays() == 0 ) // no week days chosen
         {
         // no timed sync on
+        CleanupStack::PopAndDestroy(settings);    
         return KErrNotFound;
         }
     
-    if ( iExtendedSettings->EmailNotificationState() != EMailEmnOff && 
-         !iExtendedSettings->EmnReceivedButNotSyncedFlag()   )
+    if ( settings->EmailNotificationState() != IpsServices::EMailEmnOff && 
+         !settings->EmnReceivedButNotSyncedFlag()   )
         {
+        CleanupStack::PopAndDestroy(settings);
         return KErrNotFound;
         }
     
     
     CIpsSosAOSchedulerUtils* scheduler = CIpsSosAOSchedulerUtils::NewLC(
-        *iExtendedSettings );
+        *settings );
 
     TIpsSosAOConnectionType type = scheduler->SecondsToNextMark( seconds );
     if ( type == EAOCDisconnectAfter ) 
@@ -712,7 +848,9 @@
         // this means that user have choosed time/day schedule at 
         // timed sync and now we have to wait sync time
         }
-    CleanupStack::PopAndDestroy( scheduler );
+    CleanupStack::PopAndDestroy( 2, settings );
+    
+	//</QMail>
     return seconds;
     }
 
@@ -722,12 +860,9 @@
 void CIpsSosAOMBoxLogic::LoadSettingsL()
     {
     FUNC_LOG;
-    //<cmail> logs removed </cmail> 
-    delete iExtendedSettings;
-    iExtendedSettings = NULL;
-    iExtendedSettings = CIpsSetDataExtension::NewL();
-    iDataApi->LoadExtendedSettingsL( iMailboxId, *iExtendedSettings );
-    //<cmail> logs removed </cmail>
+    //<QMail>
+    //removed loading
+	//</QMail>
     }
 
 // ----------------------------------------------------------------------------
@@ -738,16 +873,22 @@
     FUNC_LOG;
     TTime now;
     now.HomeTime();
-    LoadSettingsL();
-    TAOInfo info;
+    //<QMail>
+    
+	
+    CIpsSosAOSettingsHandler* settings = 
+             CIpsSosAOSettingsHandler::NewL(iSession, iMailboxId);
+    CleanupStack::PushL(settings);
+        
+    IpsServices::TAOInfo info;
     info.iLastSuccessfulUpdate = now;
     info.iUpdateSuccessfulWithCurSettings = ETrue;
-    info.iLastUpdateFailed=EFalse;
-    iExtendedSettings->SetLastUpdateInfo( info );
+    settings->SetLastUpdateInfo( info );
     // clear flag
-    iExtendedSettings->SetEmnReceivedButNotSyncedFlag( EFalse );
-    iDataApi->SaveExtendedSettingsL(
-            *iExtendedSettings );
+    settings->SetEmnReceivedButNotSyncedFlag( EFalse );
+            
+    CleanupStack::PopAndDestroy(settings);
+	//</QMail>
     }
 
 // ----------------------------------------------------------------------------
@@ -755,21 +896,28 @@
 TBool CIpsSosAOMBoxLogic::CanConnectIfRoamingL()
     {
     FUNC_LOG;
-    TBool ret = ETrue;
-
-    RCmManager cmManager;
-    cmManager.OpenLC();
-    TCmGenConnSettings OccSettings;
+    TBool ret = EFalse;
+    //<Qmail>
+    RCmManager mgr;
+    CleanupClosePushL(mgr);
+    TRAPD(err, mgr.OpenL());
     
-    //ask roaming settings from occ
-    cmManager.ReadGenConnSettingsL(OccSettings);
-    if(OccSettings.iCellularDataUsageVisitor == ECmCellularDataUsageDisabled && iIsRoaming)
-        {
+    TCmGenConnSettings set;
+    if(err==KErrNone){
+        TRAP(err, mgr.ReadGenConnSettingsL(set));
+        }
+    
+    CleanupStack::PopAndDestroy(&mgr);
+    
+    if( err==KErrNone && 
+            set.iCellularDataUsageVisitor == ECmCellularDataUsageAutomatic){
+        ret = ETrue;
+        }
+    else{
         ret = EFalse;
         }
-    
-    CleanupStack::PopAndDestroy(&cmManager); // cmManager
-    
+   
+    //</QMail>
     return ret;          
     }
 
@@ -777,80 +925,48 @@
 // ----------------------------------------------------------------------------
 TBool CIpsSosAOMBoxLogic::FirstEMNReceived()
     {
-    return iExtendedSettings->FirstEmnReceived();
+	//<QMail>
+    CIpsSosAOSettingsHandler* settings = NULL;
+    TBool ret = EFalse;
+    TRAP_IGNORE(CIpsSosAOSettingsHandler::NewL(iSession, iMailboxId));
+    if(settings){
+        ret = settings->FirstEmnReceived();
+        delete settings;
+        }
+    
+    return ret;
+    
+	//</QMail>
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 void CIpsSosAOMBoxLogic::SetFirstEMNReceived()
     {
-    TRAP_IGNORE( LoadSettingsL() );
-    iExtendedSettings->SetFirstEmnReceived( ETrue );
+    //<QMail>
     
-    //if alwaysonline was allowed to roam, so will EMN be.
-    iExtendedSettings->SetEmailNotificationState( EMailEmnAutomatic );
+    CIpsSosAOSettingsHandler* settings = NULL;
+    TRAP_IGNORE( settings = 
+            CIpsSosAOSettingsHandler::NewL(iSession, iMailboxId));
     
+    if(settings){
+        settings->SetFirstEmnReceived( ETrue );
+        
     
-    // set always online state off when emn is on
-    iExtendedSettings->SetAlwaysOnlineState( EMailAoOff );    
-    iExtendedSettings->SetInboxRefreshTime( KErrNotFound );
+        //if alwaysonline was allowed to roam, so will EMN be.
+        settings->SetEmailNotificationState(
+            settings->AlwaysOnlineState() == 
+            IpsServices::EMailAoAlways ? 
+                IpsServices::EMailEmnAutomatic : IpsServices::EMailEmnHomeOnly );
+        
+        
+        // set always online state off when emn is on
+        settings->SetAlwaysOnlineState( IpsServices::EMailAoOff );
+        delete settings;
+        }
     
-    TRAP_IGNORE( iDataApi->SaveExtendedSettingsL(
-       *iExtendedSettings ) );    
-    
+	//</QMail>
     }
-//<cmail> removing flags
-/*
-#ifdef IPSSOSIMAPPOLOGGING_ON
-// ----------------------------------------------------------------------------
-// ----------------------------------------------------------------------------
-//
-void CIpsSosAOMBoxLogic::WriteDebugData( TInt aEvent )
-    {
-    switch ( aEvent )
-        {
-        case EEventTimerFired:
-            break;
-        case EEventStartSync:
-            break;
-        case EEventFetchMessages:
-            break;
-        case EEventOperationCompleted:
-            break;
-        case EEventSuspendOperations:
-            break;
-        case EEventContinueOperations:
-            break;
-        case EEventStart:
-            break;
-        case EEventStopAndRemoveOps:
-            break;
-        case EEventNop:
-            break;
-        default:
-            break;
-        }
-
-    switch ( iState )
-        {
-        case EStateWaitSyncStart:
-            break;
-        case EStateSyncOngoing:
-            break;
-        case EStateFetchOngoing:
-            break;
-        case EStateSuspended:
-            break;
-        case EStateIdleAndWaitCommands:
-            break;
-        case EStateError:
-            break;
-        default:
-            break;
-        };
-    }
-#endif // IPSSMTPLOGGING_ON*/
-//</cmail>    
 
 // End of file