email/mail/UtilsSrc/MsgMailPreferences.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/mail/UtilsSrc/MsgMailPreferences.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) 2002 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"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implements storage class for mail preferences
+*
+*/
+
+
+// INCLUDE FILES
+#include <msvapi.h>                     // MsvSession, MsvEntry
+#include <miutset.h>                    // KUidMsgTypeSMTP
+#include <smtpset.h>                    // CImSmtpSettings
+#include <featmgr.h>
+#include <bldvariant.hrh>
+#include <charconv.h>
+#include <cemailaccounts.h>				// CEmailAccounts
+#include <SendUiConsts.h>
+#include "MsgMailPreferences.h"         // TMsgMailPreferences
+
+
+// LOCAL CONSTANTS
+const TInt KFirstBit = 1;
+const TInt KSecondBit = 2;
+const TInt KFourthBit = 4;
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Constructor
+// Sets default values.
+//
+EXPORT_C CMsgMailPreferences::CMsgMailPreferences():
+    iScheduling(CMsgMailPreferences::EMsgMailSchedulingNextConn),     
+    iServiceId(KMsvUnknownServiceIndexEntryId)
+    {
+    iHeaderResults = 5;				// CSI: 47 # See a comment above.
+    // if these defaults above are changed, DefaultAccountSettings() should be 
+    // changed accordingly
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailPreferences::DefaultAccountSettingsL gets all default values 
+// for all preferences from specified remote mailbox service
+// Returns: none (updates fields)
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CMsgMailPreferences::DefaultAccountSettingsL(
+    const TMsvId aServiceId, // service whose settings are to be used
+    CMsvSession& aSession) // used to get the settings
+    {
+    SetServiceId( aServiceId );
+
+    if ( aServiceId != KMsvUnknownServiceIndexEntryId )        
+        {            
+        // Resolve account id
+        TMsvEntry smtpEntry;
+        TMsvId serviceId;
+        User::LeaveIfError( 
+        	aSession.GetEntry( aServiceId, serviceId, smtpEntry ) );
+        
+        // Set "Send on next connection" and Utf 8 as defaults
+        TImSMTPSendMessageOption sendingOption = ESendMessageOnNextConnection;
+        iSendingCharacterSet = TUid::Uid(KCharacterSetIdentifierUtf8);
+        
+            
+		CEmailAccounts* smtpAccount = CEmailAccounts::NewLC();
+		CImSmtpSettings* smtpSet = new ( ELeave ) CImSmtpSettings();
+		CleanupStack::PushL( smtpSet );
+	
+		TSmtpAccount accountParams;
+		accountParams.iSmtpService = aServiceId;
+		accountParams.iSmtpAccountId = smtpEntry.iMtmData2;
+		
+		smtpAccount->LoadSmtpSettingsL( accountParams, *smtpSet );
+		sendingOption = smtpSet->SendMessageOption();
+		iSendingCharacterSet = SolveCharacterSet( *smtpSet );
+		
+		CleanupStack::PopAndDestroy( 2, smtpAccount );			// CSI: 47 # smtpSet, smtpAccount
+				
+		
+        SetMessageScheduling(
+        	( sendingOption == ESendMessageImmediately ) ?
+            EMsgMailSchedulingNow : EMsgMailSchedulingNextConn );        	                      	
+        }     
+    else 
+        {
+        // no default account, restore defaults (see constructor)
+        SetMessageScheduling(
+        	CMsgMailPreferences::EMsgMailSchedulingNextConn);
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailPreferences::ExportSendOptionsL exports preferences from TMsvEntry
+// Returns: none (updates fields from TMsvEntry)
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CMsgMailPreferences::ExportSendOptionsL(
+    const TMsvEmailEntry& aEntry) // TMsvEntry from where the values are got
+    {
+    // Send options: "Mail account"
+    SetServiceId(aEntry.iServiceId);
+
+    // Send options: "Sending"
+    SetMessageScheduling(aEntry.SendingState() == KMsvSendStateWaiting ?
+        EMsgMailSchedulingNow : EMsgMailSchedulingNextConn);
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailPreferences::ImportSendOptionsL imports preferences into TMsvEntry
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CMsgMailPreferences::ImportSendOptionsL(TMsvEmailEntry& aEntry)
+    {
+    aEntry.iServiceId = ServiceId();
+
+    // set Send options: "Sending" in entry
+    // for entry, there is no difference between now and next connection
+    if ( MessageScheduling() == 
+        CMsgMailPreferences::EMsgMailSchedulingNow )
+        {
+        aEntry.SetSendingState(KMsvSendStateWaiting);
+        }
+    else 
+        {
+        aEntry.SetSendingState(KMsvSendStateScheduled);
+        }    
+    }
+
+//
+// ---------------------------------------------------------
+// CMsgMailPreferences::GetAdditionalHeaderVisibility gets header visibility
+// Returns: header visibility status 
+// ---------------------------------------------------------
+//
+EXPORT_C EHeaderStatus CMsgMailPreferences::GetAdditionalHeaderVisibility( TMsgControlId aHeader)
+    {
+    TInt results(0);
+
+    if(aHeader == EMsgComponentIdCc)
+    	{
+    	results = iHeaderResults ^ KFirstBit;
+    	}
+    else if(aHeader == EMsgComponentIdBcc)
+    	{
+    	results = iHeaderResults ^ KSecondBit;				// CSI: 47 # <insert a comment here>
+    	}
+    else if(aHeader == EMsgComponentIdSubject)
+    	{
+    	results = iHeaderResults ^ KFourthBit;				// CSI: 47 # <insert a comment here>
+    	}
+
+    EHeaderStatus returnVal;
+
+    if (results < iHeaderResults)
+    	returnVal = EHeaderVisible;
+    else
+    	returnVal = EHeaderHidden;
+
+    return returnVal;
+    }
+
+// ---------------------------------------------------------
+// CMsgMailPreferences::SetAdditionalHeaders sets user configurable headers
+// Returns: none
+// ----------------------------------------------------
+//
+EXPORT_C void CMsgMailPreferences::SetAdditionalHeaders(
+    TInt aValue) // new additional headers settings
+    {
+    iHeaderResults = aValue;
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailPreferences::SolveCharacterSet()
+// ----------------------------------------------------------------------------
+//
+TUid CMsgMailPreferences::SolveCharacterSet( 
+    const CImSmtpSettings& aSmtpSettings ) const
+    {
+    TUid characterSet = TUid::Uid(KCharacterSetIdentifierUtf8);
+    // encoding supported, so read charset id from smtp settings.
+    if ( iEncodingSupported )
+        {
+        characterSet = aSmtpSettings.DefaultMsgCharSet();             
+        }
+    else
+        {                                  
+	    if ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) )
+	        {
+	        characterSet = TUid::Uid(
+	            KCharacterSetIdentifierIso2022Jp );
+	        }
+        }
+        
+    return characterSet;        
+    }    
+
+//  End of File  
+