--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvcommandutils/Src/CCAContactEditCmd.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,329 @@
+/*
+* Copyright (c) 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: This component is for contact editing
+*
+*/
+
+
+
+// ============================ HEADER FILES ===============================
+// INCLUDE FILES
+#include "CCAContactEditCmd.h"
+#include "MCAProcessManager.h"
+#include "TEnumsPC.h"
+#include "ImpsCSPAllErrors.h"
+#include "IMNoteMapper.h"
+#include "IMDialogUtils.h"
+
+#include <chatNG.rsg>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CCAContactEditCmd::~CCAContactEditCmd()
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// C++ constructor
+// -----------------------------------------------------------------------------
+//
+CCAContactEditCmd::CCAContactEditCmd(
+ MCAUiContactEditCmdCB& aUiContactEditCmdCB,
+ MCAContactEditPC & aCCAContactEditPC )
+ :
+ iUiContactEditCmdCB( aUiContactEditCmdCB ),
+ iCCAContactEditPC( static_cast <CCAContactEditPC&>( aCCAContactEditPC ) )
+ {
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditCmd::NewL
+// -----------------------------------------------------------------------------
+//
+CCAContactEditCmd* CCAContactEditCmd::NewL( MCAProcessManager& aProcessManager,
+ MCAUiContactEditCmdCB& aUiContactEditCmdCB )
+ {
+ CCAContactEditCmd* self = CCAContactEditCmd::NewLC( aProcessManager ,
+ aUiContactEditCmdCB );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditCmd::NewLC
+// -----------------------------------------------------------------------------
+//
+CCAContactEditCmd* CCAContactEditCmd::NewLC( MCAProcessManager& aProcessManager,
+ MCAUiContactEditCmdCB& aUiContactEditCmdCB )
+ {
+ CCAContactEditCmd* self = new( ELeave ) CCAContactEditCmd(
+ aUiContactEditCmdCB,
+ *aProcessManager.GetContactEditInterface() );
+ CleanupStack::PushL( self );
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditCmd::SetObserver
+// -----------------------------------------------------------------------------
+//
+void CCAContactEditCmd::SetObserver( MCACommandObserver& /*aObserver*/ )
+ {
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditCmd::CancelCommand
+// -----------------------------------------------------------------------------
+//
+void CCAContactEditCmd::CancelCommand()
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContactEditCmd::ExecuteCommandL
+// -----------------------------------------------------------------------------
+//
+void CCAContactEditCmd::ExecuteCommandL()
+ {
+ MCAUiContactEditCmdCB::TContactEditParams params;
+
+ iUiContactEditCmdCB.GetParameters( params );
+
+ switch ( params.iContactEditOperation )
+ {
+ case MCAUiContactEditCmdCB::TContactEditParams::ELoadContactDetails :
+ {
+ LoadCCAContactDetailsL( params ) ;
+ break;
+ }
+
+ case MCAUiContactEditCmdCB::TContactEditParams::EAddContact :
+ {
+ SaveCCAContactDetailsL( params ) ;
+ break;
+ }
+ case MCAUiContactEditCmdCB::TContactEditParams::EUpdateContact :
+ {
+ SaveCCAContactDetailsL( params ) ;
+ break;
+ }
+ case MCAUiContactEditCmdCB::TContactEditParams::EMoveContact :
+ {
+ MoveContactL( params ) ;
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+ iUiContactEditCmdCB.SetParameters( params );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContactEditCmd::IsAsynchronous
+// -----------------------------------------------------------------------------
+//
+TBool CCAContactEditCmd::IsAsynchronous()
+ {
+ return ETrue;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditCmd::LoadCCAContactDetails
+// -----------------------------------------------------------------------------
+//
+void CCAContactEditCmd::LoadCCAContactDetailsL(
+ MCAUiContactEditCmdCB::TContactEditParams &aParams )
+ {
+
+ iCCAContactEditPC.GetContactDetailsL(
+ aParams.iAliasEnabled,
+ aParams.iNicknameEnabled,
+ aParams.iOwnData,
+ aParams.iOrigId,
+ aParams.iAlias,
+ aParams.iNickname,
+ aParams.iUserId,
+ aParams.iIdentification );
+
+
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditCmd::SaveCCAContactDetails
+// -----------------------------------------------------------------------------
+//
+void CCAContactEditCmd::SaveCCAContactDetailsL
+( MCAUiContactEditCmdCB::TContactEditParams &aParams )
+ {
+
+ aParams.iContactEditOperationError = KErrNone ;
+
+ if ( aParams.iNewContact )
+ {
+ aParams.iContactEditOperationError =
+ iCCAContactEditPC.AddContactL( *aParams.iListId,
+ *aParams.iUserId,
+ *aParams.iNickname,
+ *aParams.iAlias );
+ }
+ else
+ {
+ aParams.iContactEditOperationError =
+ iCCAContactEditPC.UpdateContactL( *aParams.iListId,
+ *aParams.iUserId,
+ *aParams.iNickname );
+ }
+
+ switch ( aParams.iContactEditOperationError )
+ {
+ case KErrNone:
+ {
+ TInt noteId( aParams.iNewContact ?
+ R_QTN_CHAT_CONTACT_ADD_NOTE : R_QTN_CHAT_CNOTE_SAVED );
+ // find the contact in storage
+ // If the wvid was edited, the contact is different and we
+ // must search it from the storage
+ iCCAContactEditPC.SetContactL( *aParams.iListId, *aParams.iUserId ) ;
+
+ {
+ // check nickname
+ HBufC* newNick =
+ iCCAContactEditPC.GetCurrentContactNickname().AllocL();
+
+ if ( newNick )
+ {
+ // contact found and it has a nickname
+ CleanupStack::PushL( newNick );
+ TPtrC newNickPtr( newNick->Des() );
+
+ // compare it to the one we tried to add
+ if ( newNickPtr.CompareC( *aParams.iNickname ) != 0
+ && aParams.iNicknameEnabled )
+ {
+ // nickname was changed
+ noteId = R_QTN_CHAT_SERVER_ALTERED_NICK;
+ }
+ CleanupStack::PopAndDestroy( newNick );
+ }
+ }
+ IMDialogUtils::DisplayConfirmationNoteL( noteId );
+
+ break;
+ }
+
+ case ECSPPartiallySuccessful:
+ {
+ // show the detailed error codes
+ const RPointerArray<MCAPresenceError>& errorArray =
+ iCCAContactEditPC.LastContactEditOperationResultL();
+
+ TInt count( errorArray.Count() );
+
+
+ //for partially successful.
+
+ if ( count == 0 )
+ {
+ IMNoteMapper::ShowNoteL( ECSPUnknownUserId, *aParams.iUserId );
+ }
+
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ TInt error = errorArray[ i ]->ErrorCode();
+ const TDesC& userId = errorArray[i]->UserId();
+ if ( userId.Length() > 0 )
+ {
+ IMNoteMapper::ShowNoteL( error, userId );
+ }
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAContactEditCmd::MoveContactL
+// -----------------------------------------------------------------------------
+//
+
+void CCAContactEditCmd::MoveContactL(
+ MCAUiContactEditCmdCB::TContactEditParams &aParams )
+ {
+
+
+
+ // make a copy of ids so that instances are
+ // valid when storage contacts disappear
+ HBufC* userId = iCCAContactEditPC.GetCurrentContactUserId().AllocLC();
+ HBufC* nickName = iCCAContactEditPC.GetCurrentContactNickname().AllocLC();
+
+ // We have to remove first, because some servers
+ // don't support same nicknames on different lists.
+ // Yes, nicknames.
+ aParams.iContactEditOperationError = iCCAContactEditPC.RemoveContactL(
+ *aParams.iListId,
+ *userId ) ;
+ if ( aParams.iContactEditOperationError == KErrNone )
+ {
+
+ aParams.iContactEditOperationError = iCCAContactEditPC.AddContactL(
+ *aParams.iUserId,
+ *userId,
+ *nickName,
+ KNullDesC() );
+ if ( aParams.iContactEditOperationError != KErrNone )
+ {
+ // adding failed, rollback
+ // we can ignore the return value, because in this case
+ // we will show the error from previous AddContactL
+ iCCAContactEditPC.AddContactL( *aParams.iListId,
+ *userId,
+ *nickName,
+ KNullDesC() );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( 2, userId ); // nickName, userId
+
+ }
+
+