--- a/uiservicetab/vimpststorage/src/cvimpststorageserviceview.cpp Thu Aug 19 09:41:53 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1275 +0,0 @@
-/*
-* Copyright (c) 2008 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: Storage service view implementation
-*
-*/
-
-
-// INCLUDE FILES
-#include "cvimpststorageserviceview.h"
-
-#include "cvimpststoragecontactlist.h"
-#include "cvimpststoragecontact.h"
-#include "mvimpststoragevpbkcontactstore.h"
-#include "cvimpststoragevpbkserverstore.h"
-#include "cvimpststoragevpbklocalstore.h"
-#include "cvimpststoragecontactsorter.h"
-#include "cvimpststorageactivehandler.h"
-#include "mvimpststoragecontactsobserver.h"
-#include "vimpststorageutils.h"
-
-#include <MVPbkStoreContact.h>
-#include <VPbkContactStoreUris.h>
-#include <TVPbkContactStoreUriPtr.h>
-#include "uiservicetabtracer.h"
-#include "tvimpstconsts.h"
-#include "mvimpststoragecontact.h"
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-
-// panic handler
-GLDEF_C void Panic( TVIMPSTStoragePanics aPanic )
- {
- User::Panic( KPanicCategory, aPanic );
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::CVIMPSTStorageServiceView
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CVIMPSTStorageServiceView::CVIMPSTStorageServiceView(TUint32 aServiceId) :
- iServiceId(aServiceId),
- iOwnContact( NULL ),
- iUnNamedText( NULL )
- {
- TRACER_AUTO;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::ConstructL
-// Symbian 2nd phase constructor can leave.
-// The constructor also does synchronizing with Phone Book by removing the
-// deleted elements from the persistent storage
-// -----------------------------------------------------------------------------
-//
-void CVIMPSTStorageServiceView::ConstructL(const TDesC& aStoreName, const TDesC& aServiceName)
- {
- TRACER_AUTO;
-
- iActiveHandler = CVIMPSTStorageActiveHandler::NewL(this);
-
- // create sorter for contacts
- iContactSorter = CVIMPSTStorageContactSorter::NewL();
-
- //set the sorting algorithem to order by presence.
- iContactSorter->SetSortAlgorithm( MVIMPSTStorageContact::ECompareByPresence);
-
- TRACE( "SubServiceType() Type : %S", &aStoreName );
- //find whether its a local store or xsp store
- if ( VPbkContactStoreUris::DefaultCntDbUri().CompareC( aStoreName, 1, NULL )
- != 0 )
- {
- TRACE( " service store created" );
- //Create XSP Store
- iVPbkContactStore =
- CVIMPSTStorageVPbkServerStore::NewL(aStoreName,aServiceName ,*this );
- }
- else
- {
- TRACE( "local store created " );
- //Create Local Contacts.cdb store
- iVPbkContactStore = CVIMPSTStorageVPbkLocalStore::NewL(VPbkContactStoreUris::DefaultCntDbUri(),
- aServiceName,
- *this );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CVIMPSTStorageServiceView* CVIMPSTStorageServiceView::NewL(TUint32 aServiceId,
- const TDesC& aStoreName,
- const TDesC& aServiceName)
- {
- TRACER_AUTO;
-
- CVIMPSTStorageServiceView* self = new( ELeave ) CVIMPSTStorageServiceView(aServiceId);
- CleanupStack::PushL( self );
- self->ConstructL(aStoreName, aServiceName);
- CleanupStack::Pop( self );
- return self;
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::~CVIMPSTStorageServiceView
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-// Destructor
-CVIMPSTStorageServiceView::~CVIMPSTStorageServiceView()
- {
- TRACER_AUTO;
- if( iActiveHandler )
- {
- iActiveHandler->Cancel();
- delete iActiveHandler;
- }
-
- iContactListArray.ResetAndDestroy();
-
- delete iOwnContact;
- delete iContactSorter;
- delete iVPbkContactStore;
- iContactObservers.Reset();
- iContactObservers.Close();
-
- if(iUnNamedText)
- {
- delete iUnNamedText;
- iUnNamedText = NULL;
- }
-
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::AddObserverL
-// From MVIMPSTStorageServiceView
-// -----------------------------------------------------------------------------
-//
-void CVIMPSTStorageServiceView::AddObserverL( MVIMPSTStorageContactsObserver*
- aObserver )
- {
- TRACER_AUTO;
- User::LeaveIfError( aObserver ? KErrNone : KErrArgument );
- TInt index = iContactObservers.Find( aObserver );
- if( index == KErrNotFound )
- {
- TRACE( "aObserver added ");
- User::LeaveIfError( iContactObservers.Append( aObserver ) );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::RemoveObserverL
-// From MVIMPSTStorageServiceView
-// -----------------------------------------------------------------------------
-void CVIMPSTStorageServiceView::RemoveObserver( MVIMPSTStorageContactsObserver*
- aObserver )
- {
- TRACER_AUTO;
- __ASSERT_ALWAYS( aObserver, Panic( EObserverIsNull ));
- const TInt index( iContactObservers.Find( aObserver ) );
- if ( index >=0)
- {
- TRACE( "aObserver found" );
- iContactObservers.Remove( index );
- iContactObservers.Compress();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::SetUnnamedTextL
-// From MVIMPSTStorageServiceView
-// -----------------------------------------------------------------------------
-void CVIMPSTStorageServiceView::SetUnnamedTextL(HBufC* aUnnamedText )
- {
- // takes ownership
- iUnNamedText = aUnnamedText;
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::CreateContactListL
-// -----------------------------------------------------------------------------
-//
-MVIMPSTStorageContactList* CVIMPSTStorageServiceView::CreateContactListL(
- const TDesC& aContactListId,
- const TDesC& aDisplayName )
- {
- TRACER_AUTO;
- CVIMPSTStorageContactList* contactList =
- CVIMPSTStorageContactList::NewLC(*iContactSorter,
- aContactListId,
- aDisplayName );
-
- TIdentityRelation< CVIMPSTStorageContactList > findBy(
- CVIMPSTStorageServiceView::ContactListFindByContactListId);
- TInt indexOfList( iContactListArray.Find( contactList, findBy ) );
- if( indexOfList == KErrNotFound )
- {
- TRACE( "list not exist in list");
- TLinearOrder< CVIMPSTStorageContactList > order(
- CVIMPSTStorageServiceView::ContactListOrderByDisplayName );
- iContactListArray.InsertInOrderAllowRepeats( contactList, order );
- CleanupStack::Pop( contactList );
- TRACE( " new list created");
- }
- else
- {
- TRACE( " list already exist in list" );
- CleanupStack::PopAndDestroy( contactList );
- contactList = iContactListArray[ indexOfList ];
- }
- return contactList;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::RemoveContactList
-// -----------------------------------------------------------------------------
-//
-void CVIMPSTStorageServiceView::RemoveContactList( const TDesC& aContactListId )
- {
- TRACER_AUTO;
- TInt pos( FindContactListById( aContactListId ) );
- if( pos >= 0 )
- {
- TRACE( "aContactListId found" );
- delete iContactListArray[ pos ];
- iContactListArray.Remove( pos );
- iContactListArray.Compress();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::ListCount
-// Count of contactlists
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::ListCount() const
- {
- TRACER_AUTO;
- return iContactListArray.Count();
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::ListAt
-// Reference to contact list
-// -----------------------------------------------------------------------------
-//
-MVIMPSTStorageContactList& CVIMPSTStorageServiceView::ListAt( TInt aIndex ) const
- {
- TRACER_AUTO;
- // User::LeaveIfError( aIndex < iContactListArray.Count() ? KErrNone : KErrArgument );
- __ASSERT_ALWAYS( (aIndex < iContactListArray.Count() && aIndex >=0 ), Panic( EContactsArrayOutOfSync ));
- return *iContactListArray[ aIndex ];
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::ContactCount
-// Count of contacts
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::ContactCount( TBool aSkipOfflineContacts ) const
- {
- TRACER_AUTO;
- TInt contactCount( 0 );
- TInt count( iContactListArray.Count() );
- for( TInt a( 0 ); a < count; ++a )
- {
- contactCount += iContactListArray[ a ]->ContactCount( aSkipOfflineContacts,
- EFalse );
- }
- TRACE(" contactCount = %d" ,contactCount );
- return contactCount;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::UpdatepresenceL
-// -----------------------------------------------------------------------------
-//
-MVIMPSTStorageContact* CVIMPSTStorageServiceView::UpdatePresenceL(
- const TDesC& aContactId,
- TVIMPSTEnums::TOnlineStatus aStatus,
- const TDesC& aStatusText,
- const TDesC8& aAvatarData,
- TBool aIsClearingAvatar /*= EFalse*/)
- {
- TRACER_AUTO;
- MVIMPSTStorageContact* contact = NULL;
- if( iOwnContact && ( aContactId.Compare( iOwnContact->UserId() ) == 0 ) )
- {
- TRACE("own Item presence");
- if( aAvatarData.Compare(iOwnContact->AvatarContent() ) != 0 )
- {
- if((aIsClearingAvatar)||(aAvatarData.Length() > 0))
- {
- TRACE( "own avatar change NotifyAllObserversL");
- iOwnContact->SetAvatarContentL( aAvatarData ,*iVPbkContactStore );
- NotifyAllObserversL(TVIMPSTEnums::EStorageAvatarChange,NULL,iOwnContact,0);
- }
- }
- if( ( iOwnContact->OnlineStatus() != aStatus ) || ( aStatusText.Compare( iOwnContact->StatusText() ) != 0 ) )
- {
- // own presence has changes
- // update to own presence
- iOwnContact->SetOnlineStatus( aStatus );
- iOwnContact->SetStatusTextL(aStatusText);
- TRACE( " own presene NotifyAllObserversL");
- NotifyAllObserversL(TVIMPSTEnums::EStorageOwnPresenceChange,NULL, iOwnContact,0);
- }
- contact = iOwnContact;
- }
- else
- {
- TRACE( "contact item ");
- contact = FindContactByUserId( aContactId );
- if(contact)
- {
- TRACE( "contact exist " );
- TInt index = KErrNotFound;
- TVIMPSTEnums::TOnlineStatus oldOnlineStatus = contact->OnlineStatus();
- TRACE( "contact oldOnlineStatus = %d", oldOnlineStatus );
- TRACE( "contact new presence = %d", aStatus );
- //status text can be different for the sam status hence not inside the if condition.
- if( oldOnlineStatus != aStatus )
- {
- TRACE( "contact presence change ");
-
- contact->SetOnlineStatus( aStatus );
- TInt count = iContactListArray.Count();
- for(TInt i = 0; i < count; i++)
- {
- index = iContactListArray[i]->FindIndexOfContact(contact);
- if(KErrNotFound != index )
- {
- iContactListArray[i]->ResortContact(contact);
- TRACE( "contact ResortContact " );
- // get the index of the sorted contact, as after sorting the
- // index would have changed based on presence.
- // break after the contact list is found and the contact is found
- break;
- }
- }
- contact->SetStatusTextL(aStatusText);
- if(aAvatarData.Length()>0)
- {
- TInt oldIndex = IndexOfContact (contact);
- contact->SetAvatarContentL( aAvatarData ,*iVPbkContactStore);
- NotifyAllObserversL(TVIMPSTEnums::EStorageAvatarChange,NULL, contact, oldIndex );
- }
-
- // once this event occued ,apply the sorting
- NotifyAllObserversWithDelay(TVIMPSTEnums::EStorageMultiplePresenceChange,NULL, contact, -1);
- }
- else if( aStatusText.Compare( contact->StatusText() ) != 0 )
- {
- TInt oldIndex = IndexOfContact (contact);
- contact->SetStatusTextL(aStatusText);
- NotifyAllObserversL(TVIMPSTEnums::EStoragePresenceChange,NULL, contact, oldIndex );
- }
- else if( aAvatarData.Length() && aAvatarData.Compare( contact->AvatarContent() ) != 0 )
- {
- TInt oldIndex = IndexOfContact (contact);
- contact->SetAvatarContentL( aAvatarData ,*iVPbkContactStore);
- NotifyAllObserversL(TVIMPSTEnums::EStorageAvatarChange,NULL, contact, oldIndex );
- }
- TRACE("aStatusText = %S ", &aStatusText );
- TRACE( "NotifyAllObserversL called" );
- TRACE( "NotifyAllObserversL finish" );
- }
- }
- return contact;
- }
-
- // -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::UpdateAvatarL
-// -----------------------------------------------------------------------------
-//
- MVIMPSTStorageContact* CVIMPSTStorageServiceView::UpdateAvatarL(const TDesC& aContactId,
- const TDesC8& aAvatarData )
- {
- TRACER_AUTO;
- MVIMPSTStorageContact* contact = NULL;
- if( iOwnContact && ( aContactId.Compare( iOwnContact->UserId() ) == 0 ) )
- {
- TRACE( "own avatar" );
- iOwnContact->SetAvatarContentL( aAvatarData ,*iVPbkContactStore);
- NotifyAllObserversL(TVIMPSTEnums::EStorageOwnPresenceChange,NULL, iOwnContact,0);
- contact = iOwnContact;
- }
- else
- {
- TRACE( "buddy avatar" );
- contact = FindContactByUserId( aContactId );
- if(contact)
- {
- TRACE( "contact exit");
- contact->SetAvatarContentL( aAvatarData ,*iVPbkContactStore);
- TInt index = IndexOfContact(contact);
- NotifyAllObserversL(TVIMPSTEnums::EStorageAvatarChange,NULL, contact,index);
- TRACE( " NotifyAllObserversL called" );
- }
- }
- return contact;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::FindContactListInternal
-// -----------------------------------------------------------------------------
-//
-CVIMPSTStorageContactList* CVIMPSTStorageServiceView::FindContactListInternal(
- const TDesC& aListId )
- {
- TRACER_AUTO;
- TInt contactListIndex( FindContactListById( aListId ) );
- return ( contactListIndex >= 0 ? iContactListArray[ contactListIndex ] : NULL );
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::FindContactList
-// -----------------------------------------------------------------------------
-//
-MVIMPSTStorageContactList* CVIMPSTStorageServiceView::FindContactList( const TDesC& aListId )
- {
- TRACER_AUTO;
- return FindContactListInternal( aListId );
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::FindContactListById
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::FindContactListById(const TDesC& aListId )
- {
- TRACER_AUTO;
- TInt index = KErrNotFound;
- TInt count( iContactListArray.Count() );
- TRACE( " count = %d", count );
- for( TInt i= 0 ; i < count ; i++ )
- {
- if( KErrNone == VIMPSTStorageUtils::NeutralCompare(
- aListId,
- iContactListArray[ i ]->ListId(), EFalse ) )
- {
- TRACE( " contact list found" );
- index = i;
- break;
- }
- }
- return index;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::FindContactListById
-// -----------------------------------------------------------------------------
-//
-MVIMPSTStorageContact* CVIMPSTStorageServiceView::FindContactByLink(const MVPbkContactLink& aContactLink )
- {
- TRACER_AUTO;
- MVIMPSTStorageContact* contact = NULL;
- TInt count( iContactListArray.Count() );
- for( TInt i= 0 ; i < count ; i++ )
- {
- CVIMPSTStorageContactList* contactList = iContactListArray[ i ];
- contact = contactList->FindContactByContactLink( aContactLink );
- if( contact )
- {
- TRACE( " contact found = %d ", i );
- break;
- }
- }
- return contact;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::GetServiceId
-// -----------------------------------------------------------------------------
-//
-TUint32 CVIMPSTStorageServiceView::GetServiceId()
- {
- TRACER_AUTO;
- return iServiceId;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::LocalStore
-// -----------------------------------------------------------------------------
-//
-TBool CVIMPSTStorageServiceView::IsLocalStore() const
- {
- TRACER_AUTO;
- return iVPbkContactStore->LocalStore();
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::OwnContactL
-// -----------------------------------------------------------------------------
-//
-MVIMPSTStorageContact& CVIMPSTStorageServiceView::OwnContactL()
- {
- TRACER_AUTO;
- if( !iOwnContact )
- {
- iOwnContact = CVIMPSTStorageContact::NewL(KNullDesC,
- KNullDesC ) ;
- }
- return *iOwnContact;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::SetOwnUserIdL
-// -----------------------------------------------------------------------------
-//
-void CVIMPSTStorageServiceView::SetOwnUserIdL(const TDesC& aUserId )
- {
- TRACER_AUTO;
- if( !iOwnContact )
- {
- iOwnContact = CVIMPSTStorageContact::NewL(aUserId,
- KNullDesC
- ) ;
- TRACE( "iOwnContact created" );
- }
- else if( aUserId.Compare( iOwnContact->UserId() ) != 0 )
- {
- _LIT (KNullWithSpace, " ");
- TRACE( "SetOwnUserIdL iOwnContact was existing" );
- if(KNullWithSpace ().Compare(iOwnContact->UserId())!=0)
- {
- iVPbkContactStore->RemoveAllVPbkContactsL(); // if user id is changed remove all contacts
- RemoveAllCacheContactsL();
- }
- iOwnContact->SetUserIdL( aUserId );
- iOwnContact->SetAvatarContentL(KNullDesC8,*iVPbkContactStore );
-
- NotifyAllObserversL( TVIMPSTEnums::EStorageEventOwnUserChanged,NULL,iOwnContact,0 );
- TRACE( "NotifyAllObserversL delivered" );
- }
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::FindContactByUserId
-// From MVIMPSTStorageServiceView.
-// Try to load with given ID, return NULL if not found.
-// -----------------------------------------------------------------------------
-MVIMPSTStorageContact* CVIMPSTStorageServiceView::FindContactByUserId( const TDesC& aUserId )
- {
- TRACER_AUTO;
- MVIMPSTStorageContact* contact = NULL;
- CVIMPSTStorageContactList* contactList = NULL;
- TInt count( iContactListArray.Count() );
- for( TInt a( 0 ); a < count; ++a )
- {
- contactList = iContactListArray[ a ];
- contact = contactList->FindContact( aUserId );
- if( contact )
- {
- TRACE(" contact found " );
- break;
- }
- if(!contact)
- {
- TInt acount =contactList->Count();
- for( TInt i( 0 ); i < acount; ++i )
- {
- MVIMPSTStorageContact* acontact = &(contactList->operator [](i));
- if( acontact->UserId().Compare( aUserId) == 0 )
- {
- contact=acontact;
- break;
- }
- }
- }
- }
-
- return contact;
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::FindContactByUserId
-// From MVIMPSTStorageServiceView.
-// Try to load with given ID, return NULL if not found.
-// -----------------------------------------------------------------------------
-MVIMPSTStorageContact* CVIMPSTStorageServiceView::FindCacheContactByUserId( const TDesC& aUserId )
- {
- TRACER_AUTO;
- return FindContactByUserId( aUserId );
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::FindCacheContactByLink
-// From MVIMPSTStorageServiceView.
-// Try to load with given ID, return NULL if not found.
-// -----------------------------------------------------------------------------
-MVIMPSTStorageContact* CVIMPSTStorageServiceView::FindCacheContactByLink(const MVPbkContactLink& aContactLink )
- {
- TRACER_AUTO;
- return FindContactByLink( aContactLink );
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::CreateContactL
-// -----------------------------------------------------------------------------
-//
-MVIMPSTStorageContact* CVIMPSTStorageServiceView::CreateNewContactL(const TDesC& aUserId,
- const TDesC& aDisplayName /*= KNullDesC*/,
- TBool aIsInvitationItem /*=EFalse*/,
- TBool aInvitationAutoAccept /*= EFalse */)
- {
- TRACER_AUTO;
- // This will create a contact in the CDB file. It returns MVPbkContactLink link to the CDB file.
- MVIMPSTStorageContact* contact = FindCacheContactByUserId( aUserId );
- if( !contact )
- {
- iIsInvitationItem = aIsInvitationItem;
- TRACE( "contact does not exist in list" );
- iVPbkContactStore->CreateVPbkContactL( aUserId ,aDisplayName, aInvitationAutoAccept );
- TRACE( "new contact created");
- }
- return contact;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::CreateNewFetchContactsL
-// -----------------------------------------------------------------------------
-//
- void CVIMPSTStorageServiceView::CreateNewFetchContactsL( RArray <TPtrC> &aFirstNameList,
- RArray <TPtrC> &aServiceField )
- {
- TRACER_AUTO;
- if( !iVPbkContactStore->LocalStore() )
- {
- RemoveAllCacheContactsL();
- }
- iVPbkContactStore->AddVPbkFetchContactsL( aFirstNameList, aServiceField );
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::RemoveContactL
-// From MVIMPSTStorageServiceView.
-// Try to load with given ID, return NULL if not found.
-// -----------------------------------------------------------------------------
-
-TInt CVIMPSTStorageServiceView::RemoveContactL( MVIMPSTStorageContact* aContact )
- {
- TRACER_AUTO;
- TInt error = KErrArgument;
- if( aContact )
- {
- TRACE( "contact found" );
- error = iVPbkContactStore->RemoveVPbkContactL( *aContact->ContactLink() );
- }
- return error;
- }
-
-
- // -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::RetriveLinkXSPIdsL
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::RetriveLinkXSPIdsL(const TDesC8& aContactPackLink )
- {
- TRACER_AUTO;
- // return the no of retrived xsp of contacts
- return iVPbkContactStore->RetrieveVPbkXSPIdL( aContactPackLink );
- }
-
- // ---------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::GetRetrieveXSPIdL
-// ---------------------------------------------------------------------------
-//
-const TDesC& CVIMPSTStorageServiceView::GetRetrieveXSPIdL(TInt aIndex )
- {
- TRACER_AUTO;
- TRACE( " aIndex = %d",aIndex );
- return iVPbkContactStore->GetRetrieveVPbkXSPIdL( aIndex );
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::CreateNewContactFromRetrivedIdL
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::CreateNewContactFromRetrivedIdL( TInt aIndexToUse )
- {
- TRACER_AUTO;
- TRACE( "aIndexToUse = %d",aIndexToUse );
- // This will create a contact in the CDB file. It returns MVPbkContactLink link to the CDB file.
- return iVPbkContactStore->CreateRetriveVPbkContactL( aIndexToUse );
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::DeleteNewContactFromRetrivedIdL
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::DeleteNewContactFromRetrivedIdL( TInt aIndexToUse )
- {
- TRACER_AUTO;
- TRACE( "aIndexToUse = %d",aIndexToUse );
- // This will create a contact in the CDB file. It returns MVPbkContactLink link to the CDB file.
- return iVPbkContactStore->deleteRetriveVPbkContactL( aIndexToUse );
- }
-
- // ----------------------------------------------------------
-// CVIMPSTStorageServiceView::DeleteDatabaseL
-// ----------------------------------------------------------
-void CVIMPSTStorageServiceView::DeleteDatabaseL()
- {
- TRACER_AUTO;
- iVPbkContactStore->DeleteDatabaseL();
- }
-
-//================================================== from writer interface=======================
- // -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::UpdateCacheContactL
-// -----------------------------------------------------------------------------
-//
-MVIMPSTStorageContact* CVIMPSTStorageServiceView::UpdateCacheContactL(const MVPbkContactLink& aContactLink,
- const TDesC& aUserId,
- const TDesC& aDisplayName,
- const TDesC8& aAvatarContent)
- {
- TRACER_AUTO;
- MVIMPSTStorageContact* contact = FindContactByLink(aContactLink);
- if( contact )
- {
- TInt oldIndex = IndexOfContact( contact );
- TBool sortNeeded = EFalse;
- if( contact->UserId().Compare( aUserId) != 0 )
- {
- TRACE( "user id changed" );
- NotifyAllObserversL( TVIMPSTEnums::EStorageEventUserIdPreChange,NULL, contact,oldIndex);
- contact->SetUserIdL( aUserId );
- if(aUserId.Length()== 0)
- {
- sortNeeded = ETrue;
- contact->SetOnlineStatus(TVIMPSTEnums::EUnknown);
- }
- NotifyAllObserversL( TVIMPSTEnums::EStorageEventUserIdPostChange,NULL, contact,oldIndex);
- TRACE( "NotifyAllObserversL delivered" );
- }
- if(contact->Name().Compare(aDisplayName) != 0 )
- {
- sortNeeded = ETrue;
- TRACE( "display name changed" );
- if( aDisplayName.Length() <= 0 && iUnNamedText )
- {
- contact->SetNameL( *iUnNamedText );
- }
- else
- {
- contact->SetNameL( aDisplayName );
- }
- }
- if(sortNeeded)
- {
- TInt index = KErrNotFound;
- TInt count = iContactListArray.Count();
- for(TInt i = 0; i < count; i++)
- {
- index = iContactListArray[i]->FindIndexOfContact(contact);
- if(KErrNotFound != index )
- {
- iContactListArray[i]->ResortContact(contact);
- // get the index of the sorted contact, as after sorting the
- // index would have changed based on presence.
- // break after the contact list is found and the contact is found
- break;
- }
- }
- NotifyAllObserversL( TVIMPSTEnums::EStorageEventContactChange,NULL,contact, oldIndex );
- }
- if( contact->AvatarContent().Compare( aAvatarContent ) != 0 )
- {
- TRACE( "User id changed" );
- contact->SetAvatarContentL( aAvatarContent,*iVPbkContactStore );
- NotifyAllObserversL( TVIMPSTEnums::EStorageAvatarChange,NULL, contact, KErrNotFound);
- TRACE( " NotifyAllObserversL delivered" );
- }
- }
- return contact;
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::AddContactToCacheL
-// -----------------------------------------------------------------------------
-MVIMPSTStorageContact* CVIMPSTStorageServiceView::AddContactToCacheL (const MVPbkContactLink& aContactLink,
- const TDesC& aUserId,
- const TDesC& aDisplayName,
- const TDesC8& aAvatarContent,
- TVIMPSTEnums::TVIMPSTStorgaeEventType aType )
- {
- TRACER_AUTO;
- TRACE(" user id: %S", &aUserId);
- TRACE( " storageeventtype: %d", aType );
- MVIMPSTStorageContactList* contactList = FindContactListInternal( KFriendList );
- if( !contactList )
- {
- contactList = CreateContactListL(KFriendList,KNullDesC);
- }
- TRACE(" Before findcontactlink" );
- MVIMPSTStorageContact* contact = FindContactByLink(aContactLink);
- TRACE( " After findcontactlink check for findcontactuserid" );
- if(!contact && aUserId.Length() )
- {
- MVIMPSTStorageContact* contact = FindContactByUserId( aUserId );
- }
- TRACE( " After findcontactuserid " );
- if( !contact )
- {
- TRACE( " contact not exist ");
- TInt error = KErrGeneral;
- TInt index = KErrNotFound;
- if( aDisplayName.Length() <= 0 && iUnNamedText )
- {
- TRACE(" no display name " );
- contact = CVIMPSTStorageContact::NewLC( aUserId, *iUnNamedText , aContactLink ,aAvatarContent );
- }
- else
- {
- TRACE( " has display name " );
- contact = CVIMPSTStorageContact::NewLC( aUserId, aDisplayName , aContactLink, aAvatarContent);
- }
- // if the xsp id is numm, then the presence state should be EUnknown;
- if(0 == aUserId.Length())
- {
- contact->SetOnlineStatus(TVIMPSTEnums::EUnknown);
- }
- else if( aType == TVIMPSTEnums::EStorageEventContactAddition && !iIsInvitationItem )
- {
- // if a invitation item getting accepted do not set to pending again
- // if user has choosen add contact set the default status as pending
- // to avoid any kind of flickering
- contact->SetOnlineStatus(TVIMPSTEnums::EPending);
- }
- error = contactList->AddStorageContactToCacheL( contact, index );
- TRACE( "AddStorageContactToCacheL error= %d ",error );
- if( error == KErrNone )
- {
- TRACE( "success " );
- CleanupStack::Pop(); // contact
- TInt count = iContactListArray.Count();
- for(TInt i = 0; i < count; i++)
- {
- index = iContactListArray[i]->FindIndexOfContact(contact);
- if(KErrNotFound != index )
- {
- iContactListArray[i]->ResortContact(contact);
- TRACE( " contact ResortContact " );
- // get the index of the sorted contact, as after sorting the
- // index would have changed based on presence.
- // break after the contact list is found and the contact is found
- break;
- }
- }
- index = IndexOfContact(contact);
- NotifyAllObserversL( aType,NULL, contact, index );
- }
- else
- {
- TRACE( " not success " );
- CleanupStack::PopAndDestroy(); // contact
- contact = NULL;
- }
- }
- iIsInvitationItem = EFalse; // reset the flag
- return contact;
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::AddStorageContactToCacheL
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::AddStorageContactToCacheL(MVIMPSTStorageContact* aContactToAdd )
- {
- TRACER_AUTO;
- TInt error = KErrGeneral;
- MVIMPSTStorageContactList* contactList = FindContactListInternal( KFriendList );
- if( !contactList )
- {
- contactList = CreateContactListL(KFriendList,KNullDesC); // create the default list :TODO chnage to proper sol
- }
- if( aContactToAdd )
- {
- if( aContactToAdd->Name().Length() <= 0 && iUnNamedText )
- {
- aContactToAdd->SetNameL( *iUnNamedText );
- }
- TInt index = KErrNotFound;
- TRACE( " online status = %d ", TVIMPSTEnums::EPending);
- // if the userid(xsp field is null then the presence is unknown.)
- if(aContactToAdd->UserId().Length() == 0)
- {
- aContactToAdd->SetOnlineStatus(TVIMPSTEnums::EUnknown);
- }
- else
- {
- aContactToAdd->SetOnlineStatus(TVIMPSTEnums::EPending);
- }
- error = contactList->AddStorageContactToCacheL( aContactToAdd, index ); // aContactToAdd ownership is transfered
- TRACE( "index = %d ",index );
- if( error == KErrNone )
- {
- TInt count = iContactListArray.Count();
- for(TInt i = 0; i < count; i++)
- {
- index = iContactListArray[i]->FindIndexOfContact(aContactToAdd);
- if(KErrNotFound != index )
- {
- iContactListArray[i]->ResortContact(aContactToAdd);
- TRACE( "contact ResortContact " );
- // get the index of the sorted contact, as after sorting the
- // index would have changed based on presence.
- // break after the contact list is found and the contact is found
- break;
- }
- }
- index = IndexOfContact(aContactToAdd);
- NotifyAllObserversL( TVIMPSTEnums::EStorageEventContactAddition,NULL, aContactToAdd, index );
- }
- }
- TRACE( " error = %d ",error );
- return error;
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::RemoveContactFromCacheL
-// From MVIMPSTStorageServiceView.
-// Try to load with given ID, return NULL if not found.
-// -----------------------------------------------------------------------------
-
-TInt CVIMPSTStorageServiceView::RemoveContactFromCacheL(const MVPbkContactLink& aContactLink,
- TVIMPSTEnums::TVIMPSTStorgaeEventType aType)
- {
- TRACER_AUTO;
- TInt error = KErrNotFound;
- MVIMPSTStorageContactList* contactList = FindContactListInternal( KFriendList );
- if( !contactList )
- {
- contactList = CreateContactListL( KFriendList,KNullDesC ); // create the default list :TODO chnage to proper sol
- }
- MVIMPSTStorageContact* contact = FindContactByLink(aContactLink);
- if( contact )
- {
- // do not change the order of below line
- // contact can be access just before deletion but not after delete from cache
- if( aType == TVIMPSTEnums::EStorageEventDeleteFromPbk )
- {
- // in EStorageEventDeleteFromPbk event ,caller should not remove from his local list
- // this just to inform that if user caller want to do any pre operation like unsubscriibtion etc
- NotifyAllObserversL( aType ,NULL,contact,0); //contact is still valid
- }
- TInt index = 0;
- error = contactList->RemoveContactFromCacheL( aContactLink, index );
- NotifyAllObserversL( TVIMPSTEnums::EStorageEventContactDelete ,NULL,NULL,index); //contact is not valid ,deleted
- }
- TRACE("error = %d ",error );
- return error;
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::RemoveAllCacheContactsL
-// -----------------------------------------------------------------------------
-//
-void CVIMPSTStorageServiceView::RemoveAllCacheContactsL()
- {
- TRACER_AUTO;
- TRACE( " count = %d", iContactListArray.Count());
- iContactListArray.ResetAndDestroy();
- TRACE( " remove sucess" );
- NotifyAllObserversL(TVIMPSTEnums::EStorageAllContactRemoved,NULL,NULL,0 );
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::GetDefaultContactListL
-// -----------------------------------------------------------------------------
-//
-MVIMPSTStorageContactList* CVIMPSTStorageServiceView::GetDefaultContactListL()
- {
- TRACER_AUTO;
- MVIMPSTStorageContactList* contactList = FindContactListInternal( KFriendList );
- return contactList;
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::NotifyServiceViewL
-// -----------------------------------------------------------------------------
-//
-void CVIMPSTStorageServiceView::NotifyServiceViewL( TVIMPSTEnums::TVIMPSTStorgaeEventType aEventType,
- MVIMPSTStorageContact* aContact /*= NULL */ )
- {
- TRACER_AUTO;
- NotifyAllObserversL(aEventType,NULL, aContact,0 );
- }
-
- //================================================== from writer interface end ===========================
-// TLinearOrder
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::ContactListOrderByDisplayName
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::ContactListOrderByDisplayName(
- const CVIMPSTStorageContactList& aContactListA,
- const CVIMPSTStorageContactList& aContactListB )
- {
- TRACER_AUTO;
- return aContactListA.DisplayName().CompareC( aContactListB.DisplayName() );
- }
-
-// TIdentityRelation
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::ContactListFindByContactListId
-// -----------------------------------------------------------------------------
-//
-TBool CVIMPSTStorageServiceView::ContactListFindByContactListId(
- const CVIMPSTStorageContactList& aContactListA,
- const CVIMPSTStorageContactList& aContactListB )
- {
- TRACER_AUTO;
- const MVIMPSTStorageContactList& listA = aContactListA;
- const MVIMPSTStorageContactList& listB = aContactListB;
- TRACE(" return" );
- return ( VIMPSTStorageUtils::NeutralCompare( listA.ListId(),
- listB.ListId(), EFalse ) == 0 );
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::Count
-// Returns item count
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::Count() const
- {
- TRACER_AUTO;
- // fetch contact list count from storage
- // and add contact counts from expanded contact lists
- TInt listCount( ListCount() );
- TInt itemCount( 0 );
- TInt contactCount = 0;
- for( TInt i(0); i<listCount; ++i )
- {
- MVIMPSTStorageContactList& list = ListAt(i);
- contactCount = list.Count() ;
- ++itemCount;
- if( contactCount > 0 )
- {
- // if list is expanded, add count of count of contacts
- // in this list to item count
- itemCount += contactCount;
- //check for this
- }
- }
- TRACE( "itemCount =%d",itemCount );
- return itemCount;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::Item
-// Returns item at given index
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-MVIMPSTStorageItemModel::SItem CVIMPSTStorageServiceView::Item( TInt aIndex ) const
- {
- TRACER_AUTO;
- MVIMPSTStorageItemModel::SItem item;
- item.iType = MVIMPSTStorageItemModel::EInvalid;
- item.iContactList = NULL;
- item.iContact = NULL;
- TInt contactCount = 0;
- TInt count( 0 );
- TInt listCount( ListCount() );
- for( TInt i( 0 ); i < listCount; ++i )
- {
- MVIMPSTStorageContactList& list = ListAt( i );
- item.iContactList = &list;
-
- ++count;
- if( count > aIndex )
- {
- // there's a list in given index
- item.iType = MVIMPSTStorageItemModel::EContactList;
- TRACE( "Item end" );
- return item;
- }
- contactCount = list.Count() ;
- if( contactCount > 0 )
- {
- // list is expanded, consider also contacts in this list
- if( count + contactCount > aIndex )
- {
- // there's a contact in given index
- TInt contactIndex( aIndex - count );
- item.iType = MVIMPSTStorageItemModel::EContactItem;
- item.iContact = &list[contactIndex];
- TRACE( "Item end" );
- return item;
- }
- // add expanded list's contact count
- count += contactCount;
- }
- }
- // not found
- return item;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::IndexOfContact
-// Gets index of contact in list
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::IndexOfContact( MVIMPSTStorageContact* aContact ) const
- {
- TRACER_AUTO;
- TInt listCount( ListCount() );
- TInt itemCount( 0 );
- TInt contactCount = 0;
- TInt indexOfContact = KErrNotFound;
- for( TInt i(0); i < listCount; ++i )
- {
- MVIMPSTStorageContactList& list = ListAt(i);
- contactCount = list.Count( ) ;
- indexOfContact = list.FindIndexOfContact( aContact );
- // if we're showing all contacts or
- // there are online contacts in this list,
- // the list-item is shown => increase count check this?
- //itemCount; //++itemCount;
- if( indexOfContact != KErrNotFound )
- {
- // add earlier items to index.
- indexOfContact += itemCount;
- break;
- }
- else
- {
- itemCount += contactCount;
- }
- //add the code for if contact not found in first list
- }
- TRACE( " indexOfContact = %d", indexOfContact );
- return indexOfContact;
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::IndexOfList
-// Gets index of contact in list
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::IndexOfList( MVIMPSTStorageContactList* aList,
- TBool /*aIgnoreOwnItem = EFalse*/,
- TBool /*aIgnoreEmptyLists = ETrue*/ ) const
- {
- TRACER_AUTO;
- TInt listCount( ListCount() );
- TInt itemCount( 0 );
- for( TInt i(0); i<listCount; ++i )
- {
- MVIMPSTStorageContactList& list = ListAt(i);
- if( &list == aList )
- {
- TRACE( "list matched");
- break;
- }
- else
- {
- // list will be consider for calculating the index
- // at initial state of fetching the list.count will be zero
- // because all the lists will be fetched first and the contacts
- itemCount = itemCount+ list.Count() + 1;
- }
- }
- TRACE( "itemCount = %d",itemCount );
- return itemCount;
- }
-// -----------------------------------------------------------------------------
-// CVIMPSTContactListModel::MdcaCount
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageServiceView::MdcaCount() const
- {
- TRACER_AUTO;
- return Count();
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTContactListModel::MdcaPoint
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TPtrC CVIMPSTStorageServiceView::MdcaPoint( TInt /*aIndex */) const
- {
- TRACER_AUTO;
- // These will be filtered out
- return KNullDesC();
- }
- // -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::Sort
-/// KNullDesC -> sort all
-// -----------------------------------------------------------------------------
-//
-void CVIMPSTStorageServiceView::Sort( const TDesC& aContactListId /* = KNullDesC */ )
- {
- TRACER_AUTO;
- if( aContactListId.Length() != 0 )
- {
- MVIMPSTStorageContactList* list = FindContactList( aContactListId );
- if( list )
- {
- TRACE( " list sort" );
- list->Sort();
- }
- }
- else
- {
- TInt count( iContactListArray.Count() );
- for( TInt a( 0 ); a < count; ++a )
- {
- MVIMPSTStorageContactList& list = *iContactListArray[ a ];
- TRACE( " all list sort" );
- list.Sort();
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::NotifyAllObservers
-// -----------------------------------------------------------------------------
-//
-void CVIMPSTStorageServiceView::NotifyAllObserversL( TVIMPSTEnums::TVIMPSTStorgaeEventType aType,
- MVIMPSTStorageContactList *aList,
- MVIMPSTStorageContact* aContact,
- TInt aContactIndex )
- {
- TRACER_AUTO;
- TInt count = iContactObservers.Count();
- for( TInt i=0; i<count; i++ )
- {
- iContactObservers[i]->HandleStorageChangeL( aType, aList, aContact, aContactIndex );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::NotifyAllObserversWithDelay
-// -----------------------------------------------------------------------------
-//
-void CVIMPSTStorageServiceView::NotifyAllObserversWithDelay( TVIMPSTEnums::TVIMPSTStorgaeEventType aType,
- MVIMPSTStorageContactList *aList,
- MVIMPSTStorageContact* aContact,
- TInt aContactIndex )
- {
- TRACER_AUTO;
- if(iActiveHandler->IsActive() )
- {
- iActiveHandler->Cancel();
- }
- iActiveHandler->IssueRequest( aType, aList, aContact, aContactIndex );
- }
-
-// -----------------------------------------------------------------------------
-// CVIMPSTStorageServiceView::HandleDelayedNotificationL
-// -----------------------------------------------------------------------------
-//
-void CVIMPSTStorageServiceView::HandleDelayedNotificationL(TVIMPSTEnums::TVIMPSTStorgaeEventType aType,
- MVIMPSTStorageContactList *aList,
- MVIMPSTStorageContact* aContact,
- TInt aContactIndex)
- {
- TRACER_AUTO;
- NotifyAllObserversL( aType, aList, aContact, aContactIndex );
- }
-// End of File