wvuing/IMPSServiceSettingsUI/SharedDataSrc/CIMPSSharedDataHandler.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/IMPSServiceSettingsUI/SharedDataSrc/CIMPSSharedDataHandler.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,493 @@
+/*
+* Copyright (c) 2004 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:  Shared data handler
+*
+*/
+
+// INCLUDE FILES
+#include    "CIMPSSharedDataHandler.h"
+#include	"MIMPSSharedDataObserver.h"
+#include	"WVSettingsSharedDataNG.h"
+#include	"IMPSSharedDataDefs.h"
+
+#include	<shareddatavalues.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CWVSettingsUICheckboxSettingPage::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIMPSSharedDataHandler* CIMPSSharedDataHandler::NewL(
+    MIMPSSharedDataObserver* aObserver,
+    const TUid aUid, TBool aTemporary )
+    {
+    CIMPSSharedDataHandler* self =
+        new( ELeave ) CIMPSSharedDataHandler( aObserver,
+                                              aUid,
+                                              aTemporary );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+
+// Symbian OS default constructor can leave.
+void CIMPSSharedDataHandler::ConstructL()
+    {
+    iSharedDataClient = this;
+    // assign
+    User::LeaveIfError( iSharedDataClient.Connect() );
+    if ( iTemporary )
+        {
+        User::LeaveIfError( iSharedDataClient.AssignToTemporaryFile( iUid ) );
+        }
+    else
+        {
+        User::LeaveIfError( iSharedDataClient.Assign( iUid ) );
+        }
+
+    AppendKeyPairsL();
+    }
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::SubscribeChange( const TUid aUid, const TIMPSSharedKeys aKey )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMPSSharedDataHandler::SubscribeChange( const TUid aUid, const TIMPSSharedKeys aKey )
+    {
+    TBuf<KMaxKeyName> key;
+    MapKeysToSharedData( aKey, key );
+    return iSharedDataClient.NotifyChange( aUid, &key );
+    }
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::SubscribeSet( const TUid aUid, const TIMPSSharedKeys aKey )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMPSSharedDataHandler::SubscribeSet( const TUid aUid, const TIMPSSharedKeys aKey )
+    {
+    TBuf<KMaxKeyName> key;
+    MapKeysToSharedData( aKey, key );
+    return iSharedDataClient.NotifySet( aUid, &key );
+    }
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::UnSubscribe( const TUid aUid, const TIMPSSharedKeys aKey )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMPSSharedDataHandler::UnSubscribe( const TUid aUid, const TIMPSSharedKeys aKey )
+    {
+    TBuf<KMaxKeyName> key;
+    MapKeysToSharedData( aKey, key );
+    iSharedDataClient.CancelNotify( aUid, &key );
+    }
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::GetStringKey( const TIMPSSharedKeys aKey, TDes& aValue )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMPSSharedDataHandler::GetStringKey( const TIMPSSharedKeys aKey, TDes& aValue )
+    {
+    TBuf<KMaxKeyName> key;
+    MapKeysToSharedData( aKey, key );
+    return iSharedDataClient.GetString( key, aValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::GetIntKey( const TDesC& aKey, TInt& aValue )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMPSSharedDataHandler::GetIntKey( const TIMPSSharedKeys aKey, TInt& aValue )
+    {
+    TBuf<KMaxKeyName> key;
+    MapKeysToSharedData( aKey, key );
+    return iSharedDataClient.GetInt( key, aValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::SetStringKey( const TIMPSSharedKeys aKey, const TDesC& aValue )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMPSSharedDataHandler::SetStringKey( const TIMPSSharedKeys aKey, const TDesC& aValue )
+    {
+    TBuf<KMaxKeyName> key;
+    MapKeysToSharedData( aKey, key );
+    return iSharedDataClient.SetString( key, aValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::SetIntKey( const TIMPSSharedKeys aKey, TInt aValue )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMPSSharedDataHandler::SetIntKey( const TIMPSSharedKeys aKey, TInt aValue )
+    {
+    TRAPD( err, DoSetIntKeyL( aKey, aValue ) );
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::DoSetIntKeyL( const TIMPSSharedKeys aKey, TInt aValue )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMPSSharedDataHandler::DoSetIntKeyL( const TIMPSSharedKeys aKey, TInt aValue )
+    {
+    TBuf<KMaxKeyName> key;
+    MapKeysToSharedData( aKey, key );
+
+    User::LeaveIfError( iSharedDataClient.SetInt( key, aValue ) );
+    }
+
+
+// ---------------------------------------------------------
+// CIMPSSharedDataHandler::HandleNotifyL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CIMPSSharedDataHandler::HandleNotifyL( const TUid aUid,
+                                            const TDesC& aKey,
+                                            const TDesC& /* aValue */ )
+    {
+    if ( iObserver )
+        {
+        TIMPSSharedKeys keyToClient;
+        MapKeysToClient( keyToClient, aKey );
+        if ( iTemporary )
+            {
+            iObserver->HandleTemporaryKeyNotifyL( aUid, keyToClient );
+            }
+        else
+            {
+            iObserver->HandlePermanentKeyNotifyL( aUid, keyToClient );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::Signal( const TDesC& aKey )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMPSSharedDataHandler::Signal( const TIMPSSharedKeys aKey )
+    {
+    TRAPD( err, DoSignalL( aKey ) );
+    return err;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::DoSignalL( const TDesC& aKey )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMPSSharedDataHandler::DoSignalL( const TIMPSSharedKeys aKey )
+    {
+    TBuf<KMaxKeyName> key;
+    MapKeysToSharedData( aKey, key );
+
+    TInt current( 0 );
+    TInt err = iSharedDataClient.GetInt( key, current );
+    if ( err == KErrNotFound )
+        {
+        // we don't need to worry about this since if the key is not found
+        // the correct value for the current value is 0
+        err = KErrNone;
+        }
+    User::LeaveIfError( err );
+    User::LeaveIfError( iSharedDataClient.SetInt( key, current + 1 ) );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::CancelSignal( const TDesC& aKey )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMPSSharedDataHandler::CancelSignal( const TIMPSSharedKeys aKey )
+    {
+    TRAPD( err, DoCancelSignalL( aKey ) );
+    return err;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::DoCancelSignalL( const TDesC& aKey )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMPSSharedDataHandler::DoCancelSignalL( const TIMPSSharedKeys aKey )
+    {
+    TBuf<KMaxKeyName> key;
+    MapKeysToSharedData( aKey, key );
+
+    TInt current( 0 );
+    TInt err = iSharedDataClient.GetInt( key, current );
+    if ( err == KErrNotFound )
+        {
+        // we don't need to worry about this since if the key is not found
+        // the correct value for the current value is 0
+        err = KErrNone;
+        }
+    User::LeaveIfError( err );
+    User::LeaveIfError( iSharedDataClient.SetInt( key, current - 1 ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CIMPSSharedDataHandler::ConvertSharedDataKey( const TDesC& aSrc, TIMPSSharedKeys& aKey )
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMPSSharedDataHandler::ConvertSharedDataKey( const TDesC& aSrc, TIMPSSharedKeys& aDest )
+    {
+    TInt err = MapKeysToClient( aDest, aSrc );
+    return err;
+    }
+
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CIMPSSharedDataHandler::CIMPSSharedDataHandler( MIMPSSharedDataObserver* aObserver,
+                                                const TUid aUid,
+                                                TBool aTemporary )
+        : iObserver( aObserver ), iUid( aUid ), iTemporary( aTemporary )
+    {
+    }
+
+// Destructor
+CIMPSSharedDataHandler::~CIMPSSharedDataHandler()
+    {
+    iSharedDataClient.Close();
+    iKeys.Close();
+    }
+
+
+// ---------------------------------------------------------
+// CIMPSSharedDataHandler::MapKeysToSharedData()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CIMPSSharedDataHandler::MapKeysToSharedData( const TIMPSSharedKeys aKey, TDes& aSharedDataKey )
+    {
+    // just to make sure the descriptor is empty
+    aSharedDataKey.Zero();
+
+    TInt count( 0 );
+    for ( count = 0; count < iKeys.Count(); count++ )
+        {
+        if ( iKeys[count].iKeyForClient == aKey )
+            {
+            aSharedDataKey.Append( iKeys[count].iKeyForSharedData );
+            return KErrNone;
+            }
+        }
+    return KErrNotFound;
+    }
+
+// ---------------------------------------------------------
+// CIMPSSharedDataHandler::MapKeysToClient()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CIMPSSharedDataHandler::MapKeysToClient( TIMPSSharedKeys& aKey, const TDesC& aSharedDataKey )
+    {
+    TInt count( 0 );
+    for ( count = 0; count < iKeys.Count(); count++ )
+        {
+        if ( 0 == iKeys[count].iKeyForSharedData.Compare( aSharedDataKey ) )
+            {
+            aKey = iKeys[count].iKeyForClient;
+            return KErrNone;
+            }
+        }
+    return KErrNotFound;
+    }
+
+// ---------------------------------------------------------
+// CIMPSSharedDataHandler::DoAppendKeyPairL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CIMPSSharedDataHandler::DoAppendKeyPairL( TIMPSSharedKeys aKey, const TDesC& aSharedDataKey )
+    {
+    TIMPSSharedKeyPairs temp;
+    temp.iKeyForSharedData.Set( aSharedDataKey );
+    temp.iKeyForClient = aKey;
+    User::LeaveIfError( iKeys.Append( temp ) );
+    }
+
+// ---------------------------------------------------------
+// CIMPSSharedDataHandler::AppendKeyPairsL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CIMPSSharedDataHandler::AppendKeyPairsL()
+    {
+    // Service Settings UI
+    DoAppendKeyPairL( EIMPSSharedKeysIMLogin,
+                      KWVSettingsKeyNameChatLogin );
+    DoAppendKeyPairL( EIMPSSharedKeysIMConnStart,
+                      KWVSettingsKeyNameIMConnStart );
+    DoAppendKeyPairL( EIMPSSharedKeysIMConnEnd,
+                      KWVSettingsKeyNameIMConnEnd );
+    DoAppendKeyPairL( EIMPSSharedKeysIMConnDays,
+                      KWVSettingsKeyNameIMConnDays );
+    DoAppendKeyPairL( EIMPSSharedKeysPECLogin,
+                      KWVSettingsKeyNamePECLogin );
+    DoAppendKeyPairL( EIMPSSharedKeysPECConnStart,
+                      KWVSettingsKeyNamePECConnStart );
+    DoAppendKeyPairL( EIMPSSharedKeysPECConnEnd,
+                      KWVSettingsKeyNamePECConnEnd );
+    DoAppendKeyPairL( EIMPSSharedKeysPECConnDays,
+                      KWVSettingsKeyNamePECConnDays );
+
+    // Connection UI keys
+    // Connection UI Group channel keys
+    DoAppendKeyPairL( EIMPSSharedKeysIMClientLoginLogoutStateChannel,
+                      KIMPSSharedKeysIMClientLoginLogoutStateChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysIMLoginLogoutEventChannel,
+                      KIMPSSharedKeysIMLoginLogoutEventChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysIMSSClientReqistrationChannel,
+                      KIMPSSharedKeysIMSSClientReqistrationChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysIMGlobalOperationSignalChannel,
+                      KIMPSSharedKeysIMGlobalOperationSignalChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysIMRemoteUiNotificationsChannel,
+                      KIMPSSharedKeysIMRemoteUiNotificationsChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysPECClientLoginLogoutStateChannel,
+                      KIMPSSharedKeysPECClientLoginLogoutStateChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysPECLoginLogoutEventChannel,
+                      KIMPSSharedKeysPECLoginLogoutEventChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysPECSSClientReqistrationChannel,
+                      KIMPSSharedKeysPECSSClientReqistrationChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysPECGlobalOperationSignalChannel,
+                      KIMPSSharedKeysPECGlobalOperationSignalChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysPECRemoteUiNotificationsChannel,
+                      KIMPSSharedKeysPECRemoteUiNotificationsChannel );
+
+    DoAppendKeyPairL( EIMPSSharedKeysCommonClientLoginLogoutStateChannel,
+                      KIMPSSharedKeysCommonClientLoginLogoutStateChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysCommonLoginLogoutEventChannel,
+                      KIMPSSharedKeysCommonLoginLogoutEventChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysCommonSSClientReqistrationChannel,
+                      KIMPSSharedKeysCommonSSClientReqistrationChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysCommonGlobalOperationSignalChannel,
+                      KIMPSSharedKeysCommonGlobalOperationSignalChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysCommonRemoteUiNotificationsChannel,
+                      KIMPSSharedKeysCommonRemoteUiNotificationsChannel );
+    // Connection UI Group data keys
+    DoAppendKeyPairL( EIMPSSharedKeysIMClientLoginLogoutStateData,
+                      KIMPSSharedKeysIMClientLoginLogoutStateData );
+    DoAppendKeyPairL( EIMPSSharedKeysIMLoginLogoutEventData,
+                      KIMPSSharedKeysIMLoginLogoutEventData );
+    DoAppendKeyPairL( EIMPSSharedKeysIMSSClientReqistrationData,
+                      KIMPSSharedKeysIMSSClientReqistrationData );
+    DoAppendKeyPairL( EIMPSSharedKeysIMGlobalOperationSignalData,
+                      KIMPSSharedKeysIMGlobalOperationSignalData );
+    DoAppendKeyPairL( EIMPSSharedKeysIMRemoteUiNotificationsData,
+                      KIMPSSharedKeysIMRemoteUiNotificationsData );
+    DoAppendKeyPairL( EIMPSSharedKeysPECClientLoginLogoutStateData,
+                      KIMPSSharedKeysPECClientLoginLogoutStateData );
+    DoAppendKeyPairL( EIMPSSharedKeysPECLoginLogoutEventData,
+                      KIMPSSharedKeysPECLoginLogoutEventData );
+    DoAppendKeyPairL( EIMPSSharedKeysPECSSClientReqistrationData,
+                      KIMPSSharedKeysPECSSClientReqistrationData );
+    DoAppendKeyPairL( EIMPSSharedKeysPECGlobalOperationSignalData,
+                      KIMPSSharedKeysPECGlobalOperationSignalData );
+    DoAppendKeyPairL( EIMPSSharedKeysPECRemoteUiNotificationsData,
+                      KIMPSSharedKeysPECRemoteUiNotificationsData );
+
+    DoAppendKeyPairL( EIMPSSharedKeysCommonClientLoginLogoutStateData,
+                      KIMPSSharedKeysCommonClientLoginLogoutStateData );
+    DoAppendKeyPairL( EIMPSSharedKeysCommonLoginLogoutEventData,
+                      KIMPSSharedKeysCommonLoginLogoutEventData );
+    DoAppendKeyPairL( EIMPSSharedKeysCommonSSClientReqistrationData,
+                      KIMPSSharedKeysCommonSSClientReqistrationData );
+    DoAppendKeyPairL( EIMPSSharedKeysCommonGlobalOperationSignalData,
+                      KIMPSSharedKeysCommonGlobalOperationSignalData );
+    DoAppendKeyPairL( EIMPSSharedKeysCommonRemoteUiNotificationsData,
+                      KIMPSSharedKeysCommonRemoteUiNotificationsData );
+
+    // Connection UI Global channel keys
+    DoAppendKeyPairL( EIMPSSharedKeysIMGlobalChannel,
+                      KIMPSSharedKeysIMGlobalChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysPECGlobalChannel,
+                      KIMPSSharedKeysPECGlobalChannel );
+
+    // Connection UI Global data keys
+    DoAppendKeyPairL( EIMPSSharedKeysIMGlobalData,
+                      KIMPSSharedKeysIMGlobalData );
+    DoAppendKeyPairL( EIMPSSharedKeysPECGlobalData,
+                      KIMPSSharedKeysPECGlobalData );
+
+    // Connection UI Permanent global data key
+    DoAppendKeyPairL( EIMPSSharedKeysPermanentGlobalChannel,
+                      KIMPSSharedKeysPermanentGlobalChannel );
+    DoAppendKeyPairL( EIMPSSharedKeysPermanentGlobalData,
+                      KIMPSSharedKeysPermanentGlobalData );
+
+    DoAppendKeyPairL( EIMPSSharedKeysIMPresenceAuthSettingKey,
+                      KIPMSSharedKeysIMPresenceAuthSettingKey );
+
+    // Profile engines key
+    DoAppendKeyPairL( EIMPSSharedKeysProEngAllowUpdatePresence,
+                      KProEngAllowUpdatePresence );
+
+    // Presence UI keys
+    DoAppendKeyPairL( EIMPSSharedKeysPECAppKeyNamePublishing,
+                      KPECAppKeyNamePublishing );
+
+    // Service settings login type change notifier key
+    DoAppendKeyPairL( EIMPSSharedKeysServSettLoginTypeChangedPEC,
+                      KIMPSSharedKeysServiceSettingsLoginTypesChangedPEC );
+    // Service settings login type change notifier key
+    DoAppendKeyPairL( EIMPSSharedKeysServSettLoginTypeChangedIM,
+                      KIMPSSharedKeysServiceSettingsLoginTypesChangedIM );
+
+    // Service settings schedule change notifier key
+    DoAppendKeyPairL( EIMPSSharedKeysServSettScheduleChangedPEC,
+                      KIMPSSharedKeysServiceSettingsScheduleChangedPEC );
+    // Service settings schedule change notifier key
+    DoAppendKeyPairL( EIMPSSharedKeysServSettScheduleChangedIM,
+                      KIMPSSharedKeysServiceSettingsScheduleChangedIM );
+    }
+
+//  End of File