--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuistorage/src/CCAContact.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,492 @@
+/*
+* Copyright (c) 2005 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 contact data container
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CCAContact.h"
+#include "CCAStorage.h"
+#include "TCAStoragePanics.h"
+#include "MCAStoredContactsObserver.h"
+#include "MCAStorageInfo.h"
+#include "TStorageManagerGlobals.h"
+#include "ChatDebugPrint.h"
+#include "CCAStorageDefs.h"
+#include "CAUtils.h"
+
+#include <e32base.h>
+#include <e32std.h>
+#include <e32def.h>
+#include <s32strm.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCAContact::CCAContact
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCAContact::CCAContact( MCAStoredContactsObserver* aObserver,
+ MCAStorageInfo* aVariation ) :
+ iObserver( aObserver ), iVariation( aVariation )
+ {
+ iPresenceStatus = TStorageManagerGlobals::EUnknown;
+ iClientType = TStorageManagerGlobals::EUnknownClient;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCAContact::ConstructL()
+ {
+ // creating empty user id to making sure that we always have some
+ // initial "value", even though it is empty.
+ // User id is necesssary information
+ // for contact.
+ iUserId = HBufC::NewL( 1 );
+
+ // same for nickname
+ iNickname = HBufC::NewL( 1 );
+
+ // same for alias
+ iAlias = HBufC::NewL( 1 );
+
+ UpdateIdentification();
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCAContact* CCAContact::NewL( MCAStoredContactsObserver* aObserver,
+ MCAStorageInfo* aVariation )
+ {
+ CCAContact* self = new( ELeave ) CCAContact( aObserver, aVariation );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+
+// Destructor
+CCAContact::~CCAContact()
+ {
+ delete iUserId;
+ delete iNickname;
+ delete iAlias;
+ delete iStatusText;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::UserId
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContact::UserId() const
+ {
+ __ASSERT_ALWAYS( iUserId, Panic( ENoSuitableUserId ) );
+ return *( iUserId );
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::Nickname
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContact::Nickname() const
+ {
+ if ( iNickname )
+ {
+ return *iNickname;
+ }
+ return KNullDesC;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::Alias
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContact::Alias() const
+ {
+ if ( iAlias )
+ {
+ return *iAlias;
+ }
+ return KNullDesC;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::Identification
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContact::Identification() const
+ {
+ return iIdentification;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::OnlineStatus
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TStorageManagerGlobals::TPresenceStatus CCAContact::OnlineStatus() const
+ {
+ return iPresenceStatus;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::IsBlocked
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TBool CCAContact::IsBlocked() const
+ {
+ return iIsBlocked;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::IsWatched
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TBool CCAContact::IsWatched() const
+ {
+ return iWatcherActive;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::ClientType
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TStorageManagerGlobals::TClientType CCAContact::ClientType() const
+ {
+ return iClientType;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetClientType
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetClientType( TStorageManagerGlobals::TClientType aType )
+ {
+ if ( iClientType != aType )
+ {
+ // state different, has changed
+ iIsChanged |= 1;
+ }
+
+ iClientType = aType;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetOnlineStatus
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetOnlineStatus(
+ TStorageManagerGlobals::TPresenceStatus aOnlineStatus )
+ {
+ if ( iPresenceStatus != aOnlineStatus )
+ {
+ // state different, has changed
+ iIsChanged |= 1;
+ }
+
+ iPresenceStatus = aOnlineStatus;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetBlocked
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetBlocked( TBool aBlocked )
+ {
+ if ( iIsBlocked != aBlocked )
+ {
+ // state different, has changed
+ iIsChanged |= 1;
+ }
+
+ iIsBlocked = aBlocked;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetWatched
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetWatched( TBool aWatched )
+ {
+ if ( iWatcherActive != aWatched )
+ {
+ // state different, has changed
+ iIsChanged |= 1;
+ }
+
+ iWatcherActive = aWatched;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetPendingMessages
+// From MCAExtendedStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetPendingMessages( TInt aAmount )
+ {
+ if ( iPendingMessages != aAmount )
+ {
+ // state different, has changed
+ iIsChanged |= 1;
+ }
+
+ iPendingMessages = aAmount;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAContact::SignalChanges
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SignalChanges()
+ {
+ TBool wasChanged( 0 != iIsChanged );
+ iIsChanged = 0;
+
+ if ( wasChanged )
+ {
+ // The observer shall decide whether to pass the information onward.
+ iObserver->HandleChange( NULL, this,
+ TStorageManagerGlobals::EStorageEventPostChange, iUserIdChanged );
+ }
+
+ iUserIdChanged = EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::Selected
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TBool CCAContact::Selected() const
+ {
+ return iSelected;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetSelected
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetSelected( TBool aSelected )
+ {
+ iSelected = aSelected;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetSelected
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TInt CCAContact::PendingMessages() const
+ {
+ return iPendingMessages;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::StatusText
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContact::StatusText() const
+ {
+ if ( iStatusText )
+ {
+ return *iStatusText;
+ }
+ return KNullDesC;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetStatusTextL
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetStatusTextL( const TDesC& aStatusText )
+ {
+ HBufC* tmp = aStatusText.AllocL();
+ delete iStatusText;
+ iStatusText = tmp;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::GetPropertyL
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+HBufC* CCAContact::PropertyL(
+ TStorageManagerGlobals::TCAStorageProperty aProperty )
+ {
+ switch ( aProperty )
+ {
+ case TStorageManagerGlobals::EStoragePropNickname :
+ {
+ return iNickname->AllocL();
+ // break; // RVCT
+ }
+ case TStorageManagerGlobals::EStoragePropAlias :
+ {
+ return iAlias->AllocL();
+ // break; // RVCT
+ }
+ default :
+ {
+ return NULL;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::GetPropertyL
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetPropertyL(
+ TStorageManagerGlobals::TCAStorageProperty aProperty,
+ const TDesC& aData )
+ {
+ switch ( aProperty )
+ {
+ case TStorageManagerGlobals::EStoragePropNickname :
+ {
+ // set nickname
+ HBufC* tmp = aData.AllocL();
+ delete iNickname;
+ iNickname = tmp;
+
+ UpdateIdentification();
+ break;
+ }
+ case TStorageManagerGlobals::EStoragePropAlias :
+ {
+ HBufC* tmp = aData.AllocL();
+ delete iAlias;
+ iAlias = tmp;
+
+ UpdateIdentification();
+ break;
+ }
+ case TStorageManagerGlobals::EStoragePropUserId:
+ {
+ SetUserIdL( aData );
+ break;
+ }
+ default :
+ {
+ // no such property
+ User::Leave( KErrArgument );
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::UpdateIdentification
+// Update identification of contact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::UpdateIdentification()
+ {
+ iIsChanged |= 1;
+
+ if ( iVariation && iVariation->ShowNickname()
+ && ( iNickname->Length() > 0 ) )
+ {
+ // use nickname as identification
+ iIdentification.Set( *iNickname );
+ return;
+ }
+
+ // no nickname
+ if ( iAlias->Length() > 0 )
+ {
+ // use alias as identification from now on
+ iIdentification.Set( *iAlias );
+ return;
+ }
+
+ // otherwise always fallback to userid
+ iIdentification.Set( CAUtils::DisplayId( *iUserId ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetUserIdL
+// From MCAExtendedStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetUserIdL( const TDesC& aUserId )
+ {
+ HBufC* tempUserId = aUserId.AllocL();
+ delete iUserId;
+ iUserId = tempUserId;
+ iUserIdChanged = ETrue;
+
+ UpdateIdentification();
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetNickname
+// From MCAExtendedStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetNicknameL( const TDesC& aNickname )
+ {
+ HBufC* tempNickname = aNickname.AllocL();
+ delete iNickname;
+ iNickname = tempNickname;
+
+ UpdateIdentification();
+ }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetAliasL
+// From MCAExtendedStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetAliasL( const TDesC& aAlias )
+ {
+ HBufC* tempAlias = aAlias.AllocL();
+ delete iAlias;
+ iAlias = tempAlias;
+
+ UpdateIdentification();
+ }
+
+
+// End of File