email/mail/UtilsSrc/CMailCRHandler.cpp
changeset 79 2981cb3aa489
parent 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/mail/UtilsSrc/CMailCRHandler.cpp	Wed Nov 03 09:52:46 2010 +0530
@@ -0,0 +1,453 @@
+/*
+* Copyright (c) 2002-2006 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:  Implementation of CMailCRhandler
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "CMailCRHandler.h"
+#include	"MsgMailDocument.h"
+#include	<centralrepository.h>
+#include	<e32cmn.h>
+#include    "MailLog.h"
+
+//repositories
+#include	<MailInternalCRKeys.h>
+#include 	<CommonUiInternalCRKeys.h>
+#include 	<messaginginternalcrkeys.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMailCRHandler::CMailCRHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CMailCRHandler::CMailCRHandler(CMsgMailDocument* aModel)
+	: iModel( aModel )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CMailCRHandler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CMailCRHandler::ConstructL()
+    {
+	CRepository* mailSession = CRepository::NewLC( KCRUidMail );
+	iSessions.AppendL(mailSession);
+	CleanupStack::Pop(); // mailSession
+	
+	CRepository* muiuSession = CRepository::NewLC( KCRUidCommonUi );
+	iSessions.AppendL(muiuSession);
+	CleanupStack::Pop(); // muiuSession
+	
+	CRepository* muiuVariation = CRepository::NewLC( KCRUidMuiuVariation );
+	iSessions.AppendL(muiuVariation);
+	CleanupStack::Pop(); // muiuVariation
+	
+    GetCRInt( KCRUidMail, KMailLocalVariationFlags, 
+        iMailUiLocalVariationFlags );      
+    LOG1( "CMailCRHandler::ConstructL LV-Flags:%d", 
+        iMailUiLocalVariationFlags ); 
+        
+    GetCRInt( KCRUidMuiuVariation, KMuiuEmailConfigFlags, 
+        iMuiuVariationFlags );
+    LOG1( "CMailCRHandler::ConstructL MUIU-email Flags:%d", 
+        iMuiuVariationFlags );
+    
+    GetCRInt( KCRUidMuiuVariation, KMuiuMmsFeatures, 
+        iMmsVariationFags );        
+    LOG1( "CMailCRHandler::ConstructL MUIU-mms Flags:%d", 
+        iMmsVariationFags );                 
+    }
+
+// -----------------------------------------------------------------------------
+// CMailCRHandler::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMailCRHandler* CMailCRHandler::NewL( CMsgMailDocument* aModel )
+    {
+    CMailCRHandler* self = new( ELeave ) CMailCRHandler( aModel );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+
+// Destructor
+EXPORT_C CMailCRHandler::~CMailCRHandler()
+    {
+	iSettingsNotifyHandlers.ResetAndDestroy();    
+	iSessions.ResetAndDestroy();
+    }
+
+// -----------------------------------------------------------------------------
+//  CMailCRHandler::HandleNotifyInt
+// -----------------------------------------------------------------------------
+//
+void CMailCRHandler::HandleNotifyInt(
+    const TUint32 aID,
+    const TInt    aNewValue )
+    {
+    // then inform the model about it.
+    if( aID == KMailAdditionalHeaderSettings )
+        {
+        TInt additionalHeaderSettings = aNewValue;
+        if( additionalHeaderSettings >= 0 )
+            {
+            TRAPD( err, iModel->SetReceivedIntL(
+						CMsgMailDocument::EIndexAddHeaders, 
+						additionalHeaderSettings ));
+			if ( err )
+				{
+				LOG1( "CMailCRHandler::HandleNotifyInt failed err:%d", err );
+				}
+            }
+        }
+	}
+
+// -----------------------------------------------------------------------------
+//  CMailCRHandler::HandleNotifyReal
+// -----------------------------------------------------------------------------
+//
+void CMailCRHandler::HandleNotifyReal(TUint32 /*aId*/, TReal /*aNewValue*/)
+	{
+	//NO OPERATION
+	}
+	
+// -----------------------------------------------------------------------------
+//  CMailCRHandler::HandleNotifyString
+// -----------------------------------------------------------------------------
+//
+void CMailCRHandler::HandleNotifyString(
+    TUint32 /*aId*/, const TDesC16& /*aNewValue*/)
+	{
+	//NO OPERATION
+	}
+	
+// -----------------------------------------------------------------------------
+//  CMailCRHandler::HandleNotifyBinary
+// -----------------------------------------------------------------------------
+//	
+void CMailCRHandler::HandleNotifyBinary(
+    TUint32 /*aId*/, const TDesC8& /*aNewValue*/)
+	{
+	//NO OPERATION
+	}
+
+// -----------------------------------------------------------------------------
+//  CMailCRHandler::HandleNotifyGeneric
+// -----------------------------------------------------------------------------
+//
+void CMailCRHandler::HandleNotifyGeneric( const TUint32 /*aID*/ )
+    {
+	//NO OPERATION
+	}
+
+// -----------------------------------------------------------------------------
+//  CMailCRHandler::HandleNotifyError
+// -----------------------------------------------------------------------------
+//
+void CMailCRHandler::HandleNotifyError(
+    const TUint32 /*aID*/,
+    const TInt    /*aError*/,
+	CCenRepNotifyHandler* /*aHandler*/ )
+    {
+	//NO OPERATION
+	}
+
+
+
+EXPORT_C void CMailCRHandler::UpdateModelFromCentralRepositoryL()
+	{
+	TInt headerSettings;
+	
+	// Get the additional header settings, 
+	// if not initialized update with default value
+	TInt err = (iSessions[EMailRepository])->Get( 
+	    KMailAdditionalHeaderSettings, headerSettings );
+	if( err == KErrNotFound || err == KErrUnknown || headerSettings < 0 )
+		{
+	    (iSessions[EMailRepository])->Set( KMailAdditionalHeaderSettings, 5 );	// CSI: 47 # See a comment above.
+        }
+
+    iModel->SetReceivedIntL( 
+        CMsgMailDocument::EIndexAddHeaders, headerSettings );
+	}
+
+// -----------------------------------------------------------------------------
+// CMailCRHandler::GetCRInt
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMailCRHandler::GetCRInt(
+    const TUid&     aUid,
+    const TUint32   aKey,
+    TInt&           aValue ) const
+    {
+    // Prepare and get client
+    CRepository*  client(NULL);
+
+    TInt err = GetClientForUid( aUid, client );
+
+    // Check if problems with getting the client
+    if( err == KErrNone )
+        {
+        err = client->Get( aKey, aValue );
+        }
+
+    // Return result
+    return err;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMailCRHandler::SetCRInt
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMailCRHandler::SetCRInt(
+    const TUid&     aUid,
+    const TUint32   aKey,
+    const TInt      aValue) const
+    {
+    // Prepare and get client
+    CRepository*  client(NULL);
+
+    TInt err = GetClientForUid( aUid, client );
+
+    // Check if problems with getting the client
+    if( err == KErrNone )
+        {
+        err = client->Set( aKey, aValue );
+        }
+
+    // Return result
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CMailCRHandler::GetCRReal
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMailCRHandler::GetCRReal(
+    const TUid&     aUid,
+    const TUint32   aKey,
+    TReal&          aValue ) const
+    {
+    // Prepare and get client
+    CRepository*  client(NULL);
+
+    TInt err = GetClientForUid( aUid, client );
+
+    // Check if problems with getting the client
+    if( err == KErrNone )
+        {
+        err = client->Get( aKey, aValue );
+        }
+
+    // Return result
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CMailCRHandler::SetCRReal
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMailCRHandler::SetCRReal(
+    const TUid&     aUid,
+    const TUint32   aKey,
+    const TReal&    aValue ) const
+    {
+    // Prepare and get client
+    CRepository*  client(NULL);
+
+    TInt err = GetClientForUid( aUid, client );
+
+    // Check if problems with getting the client
+    if( err == KErrNone )
+        {
+        err = client->Set( aKey, aValue );
+        }
+
+    // Return result
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CMailCRHandler::GetCRBinary
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMailCRHandler::GetCRBinary(
+    const TUid&     aUid,
+    const TUint32   aKey,
+    TDes8&          aValue ) const
+    {
+    // Prepare and get client
+    CRepository*  client(NULL);
+
+    TInt err = GetClientForUid( aUid, client );
+
+    // Check if problems with getting the client
+    if( err == KErrNone )
+        {
+        err = client->Get( aKey, aValue );
+        }
+
+    // Return result
+    return err;
+    }
+    
+// -----------------------------------------------------------------------------
+// CMailCRHandler::SetCRBinary
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMailCRHandler::SetCRBinary(
+    const TUid&     aUid,
+    const TUint32   aKey,
+    const TDesC8&   aValue ) const
+    {
+    // Prepare and get client
+    CRepository*  client(NULL);
+
+    TInt err = GetClientForUid( aUid, client );
+
+    // Check if problems with getting the client
+    if( err == KErrNone )
+        {
+        err = client->Set( aKey, aValue );
+        }
+
+    // Return result
+    return err;
+    }
+ 
+ // ---------------------------------------------------------------------------
+// CMailCRHandler::GetCRString
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMailCRHandler::GetCRString(
+    const TUid&     aUid,
+    const TUint32   aKey,
+    TDes16&         aValue ) const
+    {
+    // Prepare and get client
+    CRepository*  client(NULL);
+
+    TInt err = GetClientForUid( aUid, client );
+
+    // Check if problems with getting the client
+    if( err == KErrNone )
+        {
+        err = client->Get( aKey, aValue );
+        }
+
+    // Return result
+    return err;
+    }
+    
+// -----------------------------------------------------------------------------
+// CMailCRHandler::SetCRString
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMailCRHandler::SetCRString(
+    const TUid&     aUid,
+    const TUint32   aKey,
+    const TDesC16&  aValue ) const
+    {
+    // Prepare and get client
+    CRepository*  client(NULL);
+
+    TInt err = GetClientForUid( aUid, client );
+
+    // Check if problems with getting the client
+    if( err == KErrNone )
+        {
+        err = client->Set( aKey, aValue );
+        }
+
+    // Return result
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CMailCRHandler::GetClientForUid
+// -----------------------------------------------------------------------------
+//
+TInt CMailCRHandler::GetClientForUid(
+    const TUid&         aUid,
+    CRepository*&  aClient ) const
+    {
+    TInt error = KErrNone;
+    
+    if( aUid == KCRUidMail )
+        {
+        // Get mail observer
+	    aClient = iSessions[EMailRepository];
+        }
+    else if( aUid == KCRUidCommonUi )
+    	{
+    	// Get common ui observer
+    	aClient = iSessions[ECommonUiRepository];
+    	}
+    else if( aUid == KCRUidMuiuVariation )
+    	{
+    	aClient = iSessions[EMuiuVariationKeys];
+    	}
+    else
+        {
+        // Return error
+        error = KErrNotFound;
+        }
+
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CMailCRHandler::SetNotifyHandlerL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMailCRHandler::SetNotifyHandlerL(
+    MCenRepNotifyHandlerCallback* aCallBack,
+    CMailCRHandler::ERepository aRepository, 
+    CCenRepNotifyHandler::TCenRepKeyType aKeyType, TUint32 aKeyValue )
+	{
+	__ASSERT_DEBUG( aRepository < ERepositoryOutOfBounds, User::Invariant() );
+	
+	MCenRepNotifyHandlerCallback* observer;
+	if (!aCallBack)
+		observer = this;
+	else		
+		observer = aCallBack;
+	
+	CCenRepNotifyHandler* mailSettingsNotifyHandler =
+		CCenRepNotifyHandler::NewLC( 
+		    *observer, 
+		    *iSessions[aRepository], 						// CSI: 2 # This is checked above in the assert macro.
+		    aKeyType, 
+		    aKeyValue );
+
+	mailSettingsNotifyHandler->StartListeningL();
+	iSettingsNotifyHandlers.AppendL(mailSettingsNotifyHandler);
+	CleanupStack::Pop(mailSettingsNotifyHandler);
+	}
+
+//  End of File