diff -r 84d9eb65b26f -r 2981cb3aa489 email/mail/UtilsSrc/CMailCRHandler.cpp --- /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 +#include +#include "MailLog.h" + +//repositories +#include +#include +#include + +// ============================ 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