ipsservices/ipssosaoplugin/src/IpsSosAOSettingsHandler.cpp
changeset 23 2dc6caa42ec3
parent 20 ecc8def7944a
child 30 759dc5235cdb
--- a/ipsservices/ipssosaoplugin/src/IpsSosAOSettingsHandler.cpp	Mon May 03 12:23:15 2010 +0300
+++ b/ipsservices/ipssosaoplugin/src/IpsSosAOSettingsHandler.cpp	Fri May 14 15:41:10 2010 +0300
@@ -16,23 +16,34 @@
 *
 */
 #include "IpsSosAOSettingsHandler.h"
+#include "IpsSosAoExtendedSettingsManager.h"
+#include "nmipssettingitems.h"
+#include "ipssettingkeys.h"
 #include <SendUiConsts.h>
+#include <msvapi.h>
+#include <cemailaccounts.h>
+#include <smtpset.h>
+#include <nmcommon.h>
 
+const TInt KAOMinutesInHour = 60;
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-CIpsSosAOSettingsHandler* CIpsSosAOSettingsHandler::NewL( TUid aProtocol )
+CIpsSosAOSettingsHandler* CIpsSosAOSettingsHandler::NewL( 
+        CMsvSession& aSession,
+        TMsvId aMailboxId )
     {
-    CIpsSosAOSettingsHandler* self = new(ELeave)CIpsSosAOSettingsHandler();
+    CIpsSosAOSettingsHandler* self = new(ELeave)CIpsSosAOSettingsHandler(aSession);
     CleanupStack::PushL(self);
-    self->ConstructL( aProtocol );
+    self->ConstructL( aMailboxId );
     CleanupStack::Pop(self);
     return self;
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-CIpsSosAOSettingsHandler::CIpsSosAOSettingsHandler() 
+CIpsSosAOSettingsHandler::CIpsSosAOSettingsHandler(CMsvSession& aSession) :
+        iSession(aSession)
     {
     }
 
@@ -40,13 +51,17 @@
 // ----------------------------------------------------------------------------
 CIpsSosAOSettingsHandler::~CIpsSosAOSettingsHandler()
     {
+    delete iExtMgr;
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-void CIpsSosAOSettingsHandler::ConstructL( TUid aProtocol )
+void CIpsSosAOSettingsHandler::ConstructL( TMsvId aMailboxId )
     {
-    iMtmType = aProtocol;
+    TMsvId dummy;    
+    iSession.GetEntry(aMailboxId, dummy, iEntry);
+    
+    iExtMgr = new NmIpsSosAoExtendedSettingsManager(MboxId());
     }
 
 
@@ -55,11 +70,11 @@
 TInt CIpsSosAOSettingsHandler::GetFSPluginId() const
     {
     TInt pluginId = 0;
-    if ( iMtmType.iUid == KSenduiMtmImap4UidValue )
+    if ( iEntry.iMtm.iUid == KSenduiMtmImap4UidValue )
         {
         pluginId = IPSSOSIMAP4PLUGIN_IMPLEMENTATION_UID;
         }
-    else if ( iMtmType.iUid == KSenduiMtmPop3UidValue )
+    else if ( iEntry.iMtm.iUid == KSenduiMtmPop3UidValue )
         {
         pluginId = IPSSOSPOP3PLUGIN_IMPLEMENTATION_UID;
         }
@@ -68,21 +83,64 @@
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
+NmId CIpsSosAOSettingsHandler::MboxId() const
+    {
+    NmId id;
+    id.setId32(iEntry.Id());
+    id.setPluginId32(GetFSPluginId());
+    return id;
+    }
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
 void CIpsSosAOSettingsHandler::GetSubscribedImapFoldersL( 
             TMsvId /*aServiceId*/, 
             RArray<TMsvId>& /*aFoldersArray*/ )
     {
-    
+    //folders not supported
     }
     
     
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 void CIpsSosAOSettingsHandler::ConstructImapPartialFetchInfo( 
-        TImImap4GetPartialMailInfo& /*aInfo*/, 
-        CImImap4Settings& /*aImap4Settings*/ )
+        TImImap4GetPartialMailInfo& aInfo, 
+        CImImap4Settings& aImap4Settings )
     {
+    TInt sizeLimit = aImap4Settings.BodyTextSizeLimit();
     
+    if ( sizeLimit == KIpsHeadersOnly )
+        {
+        aInfo.iTotalSizeLimit = KIpsHeadersOnly;
+        }
+    else if ( sizeLimit == KIpsFullBodyAndAttas )
+        {        
+        aInfo.iTotalSizeLimit = KMaxTInt;
+        aInfo.iAttachmentSizeLimit = KMaxTInt;
+        aInfo.iBodyTextSizeLimit = KMaxTInt;
+        aInfo.iMaxEmailSize = KMaxTInt;
+        aInfo.iPartialMailOptions = ENoSizeLimits;
+        aInfo.iGetMailBodyParts = EGetImap4EmailBodyTextAndAttachments;
+        }
+    else if ( sizeLimit == KIpsFullBodyOnly )
+        {
+        aInfo.iTotalSizeLimit = KMaxTInt; 
+        aInfo.iAttachmentSizeLimit = 0;
+        aInfo.iBodyTextSizeLimit = KMaxTInt;
+        aInfo.iMaxEmailSize = KMaxTInt;
+        aInfo.iPartialMailOptions = EBodyAlternativeText;
+        aInfo.iGetMailBodyParts = EGetImap4EmailBodyAlternativeText;
+        }
+    else
+        {
+        aInfo.iTotalSizeLimit = sizeLimit*1024; 
+        // set zero when it not documentated does total size overrides these 
+        aInfo.iAttachmentSizeLimit = 0;
+        aInfo.iMaxEmailSize = sizeLimit*1024;
+        aInfo.iBodyTextSizeLimit = sizeLimit*1024;
+        aInfo.iPartialMailOptions = EBodyAlternativeText;
+        aInfo.iGetMailBodyParts = EGetImap4EmailBodyAlternativeText;
+        }
     }
 
 
@@ -91,15 +149,37 @@
 IpsServices::TIpsSetDataAoStates 
     CIpsSosAOSettingsHandler::AlwaysOnlineState() const
     {
-    return IpsServices::EMailAoOff;
+    TInt prof = IpsServices::EmailSyncProfileManualFetch;
+    IpsServices::TIpsSetDataAoStates ret = IpsServices::EMailAoOff;
+    
+    QVariant state;
+    TBool ok = GetSettingValue(IpsServices::ReceptionActiveProfile, state);
+    
+    if(ok ){
+        prof = state.toInt();
+        
+        ret = ProfileIntoAOState(prof);
+        }   
+    
+    return ret;
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 void CIpsSosAOSettingsHandler::SetAlwaysOnlineState(
-    const IpsServices::TIpsSetDataAoStates /*aAlwaysOnlineState*/,
-    TBool /*aIgnoreStateFlag*/ )
+    const IpsServices::TIpsSetDataAoStates aAlwaysOnlineState )
     {
+    //we're allowed to switch ourselves off, not on.
+    if ( aAlwaysOnlineState == IpsServices::EMailAoOff ){
+        if(!SetSettingValue(
+                IpsServices::ReceptionActiveProfile, 
+                IpsServices::EmailSyncProfileManualFetch)){
+        
+            CreateKeyValuePair(
+                    IpsServices::ReceptionActiveProfile, 
+                    IpsServices::EmailSyncProfileManualFetch);
+            }
+        }
     
     }
 
@@ -108,7 +188,18 @@
 IpsServices::TIpsSetDataEmnStates 
     CIpsSosAOSettingsHandler::EmailNotificationState() const
     {
-    return IpsServices::EMailEmnOff;
+    IpsServices::TIpsSetDataEmnStates ret = IpsServices::EMailEmnOff;
+
+    /* Not supported yet
+    QVariant state = NULL;
+    TBool ok = GetSettingValue(IpsServices::EmailNotificationState, state);
+        
+    if(ok){
+        ret = static_cast<IpsServices::TIpsSetDataEmnStates>(state.toInt());
+        }
+    */
+        
+    return ret;
     }
 
 // ----------------------------------------------------------------------------
@@ -116,90 +207,315 @@
 void CIpsSosAOSettingsHandler::SetEmailNotificationState(
     const IpsServices::TIpsSetDataEmnStates /*aEmnState*/ )
     {
-    
+    /* Not supported yet
+    if(!SetSettingValue(IpsServices::EmailNotificationState, aEmnState)){
+        CreateKeyValuePair(IpsServices::EmailNotificationState, aEmnState);
+        }
+    */
     }
     
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 TBool CIpsSosAOSettingsHandler::FirstEmnReceived() const
     {
-    return EFalse;
+    TBool ret = EFalse;
+    
+    /* Not supported yet
+    QVariant state = NULL;
+    TBool ok = GetSettingValue(IpsServices::FirstEmnReceived, state);
+            
+    if(ok){
+        ret = static_cast<TBool>(state.toInt());
+        }
+    */
+    
+    return ret;
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 void CIpsSosAOSettingsHandler::SetFirstEmnReceived( TBool /*aValue*/ )
     {
-    
+    /* Not supported yet
+    if(!SetSettingValue( IpsServices::FirstEmnReceived, aValue )){
+        CreateKeyValuePair(IpsServices::FirstEmnReceived, aValue);
+        }
+    */
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 TBool CIpsSosAOSettingsHandler::EmnReceivedButNotSyncedFlag() const
     {
-    return EFalse;
+    TBool ret = EFalse; 
+
+    /* Not supported yet
+
+    QVariant state = NULL;
+    TBool ok = GetSettingValue(IpsServices::EmnReceivedNotSynced, state);
+                
+    if(ok){
+        ret = static_cast<TBool>(state.toInt());
+        }
+    */
+
+    return ret;
     }
     
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 void CIpsSosAOSettingsHandler::SetEmnReceivedButNotSyncedFlag( TBool /*aFlag*/ )
     {
+    /* Not supported yet
     
+    if(!SetSettingValue(IpsServices::EmnReceivedNotSynced, aFlag)){
+        CreateKeyValuePair(IpsServices::EmnReceivedNotSynced, aFlag);
+        }
+    */
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 TUint CIpsSosAOSettingsHandler::SelectedWeekDays() const
     {
-    return 0;
+    TUint ret = 0;
+    
+    QVariant state = NULL;
+    TBool ok = GetSettingValue(IpsServices::ReceptionWeekDays, state);
+                    
+    if(ok){
+        ret = static_cast<TUint>(state.toUInt());
+        }
+    
+    return ret;
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 TTime CIpsSosAOSettingsHandler::SelectedTimeStart() const
     {
-    TTime t = TTime(); 
-    t.HomeTime();
-    return t;
+    QVariant value = NULL;
+    TBool ok = GetSettingValue(IpsServices::ReceptionDayStartTime, value);
+    TDateTime time;
+    
+    if(ok){
+        TInt total = value.toInt();
+        TInt minutes = total%KAOMinutesInHour;
+        TInt hour = total/KAOMinutesInHour;
+        time.SetHour(hour);
+        time.SetMinute(minutes);
+        }
+    
+    TTime ret(time);
+    return ret;       
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 TTime CIpsSosAOSettingsHandler::SelectedTimeStop() const
     {
-    TTime t = TTime();
-    t.HomeTime();
-    return t;
+    QVariant value = NULL;
+    TBool ok = GetSettingValue(IpsServices::ReceptionDayEndTime, value);
+    TDateTime time;
+    
+    if(ok){
+        TInt total = value.toInt();
+        TInt minutes = total%KAOMinutesInHour;
+        TInt hour = total/KAOMinutesInHour;
+        time.SetHour(hour);
+        time.SetMinute(minutes);
+        }
+    
+    TTime ret(time);
+    return ret;
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 void CIpsSosAOSettingsHandler::SetLastUpdateInfo( 
-        const IpsServices::TAOInfo& /*aLastUpdateInfo*/ )
+        const IpsServices::TAOInfo& aLastUpdateInfo )
     {
-    
+    TInt high = I64HIGH(aLastUpdateInfo.iLastSuccessfulUpdate.Int64());
+    TInt low = I64LOW(aLastUpdateInfo.iLastSuccessfulUpdate.Int64());
+   
+    if(!SetSettingValue(IpsServices::AoLastSuccessfulUpdateL, low)){
+        CreateKeyValuePair(IpsServices::AoLastSuccessfulUpdateL, low);
+        }
+        
+    if(!SetSettingValue(IpsServices::AoLastSuccessfulUpdateH, high)){
+        CreateKeyValuePair(IpsServices::AoLastSuccessfulUpdateH, high);
+        }
+        
+    if(!SetSettingValue(
+            IpsServices::AoLastUpdateFailed, 
+            aLastUpdateInfo.iLastUpdateFailed)){
+        CreateKeyValuePair(IpsServices::AoLastUpdateFailed, 
+                aLastUpdateInfo.iLastUpdateFailed);
+        }
+        
+    if(!SetSettingValue(
+            IpsServices::AoUpdateSuccessfulWithCurSettings, 
+            aLastUpdateInfo.iUpdateSuccessfulWithCurSettings)){
+        CreateKeyValuePair(IpsServices::AoUpdateSuccessfulWithCurSettings, 
+                aLastUpdateInfo.iUpdateSuccessfulWithCurSettings);
+        }
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 IpsServices::TAOInfo CIpsSosAOSettingsHandler::LastUpdateInfo() const
     {
-    IpsServices::TAOInfo dummy;
-    return dummy;
+    IpsServices::TAOInfo info;
+
+    TDateTime time;        
+    info.iLastSuccessfulUpdate = time; 
+    
+    QVariant high=NULL;
+    QVariant low=NULL;
+    QVariant fail=NULL;
+    QVariant success=NULL;
+        
+    TBool ok = GetSettingValue(IpsServices::AoLastSuccessfulUpdateH, high);
+    if(ok){
+        ok = GetSettingValue(IpsServices::AoLastSuccessfulUpdateL, low);
+        }
+     if(ok){
+         info.iLastSuccessfulUpdate = MAKE_TINT64( high.toInt(), low.toInt() );
+         }
+    
+    ok = GetSettingValue(IpsServices::AoLastUpdateFailed, fail);
+    
+    if(ok){
+        info.iLastUpdateFailed = static_cast<TBool>(fail.toInt());
+        }
+    
+    ok = GetSettingValue(IpsServices::AoUpdateSuccessfulWithCurSettings, success);
+    
+    if(ok){
+        info.iUpdateSuccessfulWithCurSettings = static_cast<TBool>(success.toInt());
+        }
+    
+    return info;
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 TInt CIpsSosAOSettingsHandler::InboxRefreshTime() const
     {
-    return 0;
+    QVariant value = NULL;
+    TBool ok = EFalse;
+    if(IsDaytime()){
+        ok = GetSettingValue( IpsServices::ReceptionRefreshPeriodDayTime, value);
+        }
+    else{
+        ok = GetSettingValue(IpsServices::ReceptionRefreshPeriodOther, value);
+        }    
+    
+    TInt ret = 0;
+    if(ok){
+        ret = value.toInt();
+        }
+    
+    return ret;
+    }
+
+
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+HBufC* CIpsSosAOSettingsHandler::EmailAddressL()
+    {
+    CEmailAccounts* acc = CEmailAccounts::NewLC();
+    TSmtpAccount smtp;
+    acc->GetSmtpAccountL( iEntry.iRelatedId , smtp );
+    CImSmtpSettings* smtpSet = new (ELeave) CImSmtpSettings();
+    CleanupStack::PushL( smtpSet );
+    acc->LoadSmtpSettingsL( smtp, *smtpSet );
+    HBufC* address = smtpSet->EmailAddress().AllocL();
+    CleanupStack::PopAndDestroy( 2, acc );
+    
+    return address;
+    }
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+TBool CIpsSosAOSettingsHandler::GetSettingValue(
+        IpsServices::SettingItem aItem,
+        QVariant& aValue) const
+    {
+    bool ret = false;
+    if(iExtMgr){
+        ret = iExtMgr->readSetting(aItem, aValue);
+        }
+    return ret;
     }
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-TBool CIpsSosAOSettingsHandler::RoamHomeOnlyFlag()
+TBool CIpsSosAOSettingsHandler::SetSettingValue(
+        const IpsServices::SettingItem aItem, 
+        const QVariant& aData)
+    {
+    bool ret = false;
+    
+    if(iExtMgr){
+        ret = iExtMgr->writeSetting(aItem, aData);
+        }
+    return ret;
+    }
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+TBool CIpsSosAOSettingsHandler::CreateKeyValuePair(
+            const IpsServices::SettingItem aKey, 
+            const QVariant& aValue)
+    {
+    return iExtMgr->createKeyValuePair(aKey, aValue);
+    }
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+TBool CIpsSosAOSettingsHandler::IsDaytime() const
     {
-    return EFalse;
+    TTime current;
+    current.HomeTime();
+    
+    TDateTime tmp = current.DateTime();
+    
+    //create blanc time object for comparison.
+    //real current time cannot be used because we only want to
+    //compare hours & minutes
+    TDateTime dtNow;
+    dtNow.SetMinute(tmp.Minute());
+    dtNow.SetHour(tmp.Hour());
+    
+    TTime now(dtNow);
+    TTime start = SelectedTimeStart();
+    TTime stop = SelectedTimeStop();
+    
+    TDateTime a = start.DateTime();
+    TDateTime b = stop.DateTime();
+    
+    if(now >= start &&
+        now < stop){
+        return ETrue;
+        }
+        
+    return EFalse;    
     }
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+IpsServices::TIpsSetDataAoStates CIpsSosAOSettingsHandler::ProfileIntoAOState(
+            const TInt aProfile) const
+    {
+    IpsServices::TIpsSetDataAoStates ret = IpsServices::EMailAoOff;
+    
+    if ( aProfile != IpsServices::EmailSyncProfileManualFetch ){
+        ret = IpsServices::EMailAoAlways;
+        }
+    
+    return ret;
+    }
+    
 // End of file