--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/ListLibrary2/ContactListSrc/CPEngContactListManager.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,416 @@
+/*
+* 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: Contact lists manager
+*
+*/
+
+// INCLUDE FILES
+#include <e32std.h>
+
+#include "CPEngContactListManager.h"
+
+#include "CPEngContactListModBase.h"
+#include "CPEngContactListSettings.h"
+#include "CPEngSessionSlotId.h"
+
+#include "MPEngListLibFactory.h"
+
+#include "PresenceDebugPrint.h"
+
+#include "PEngContactIdsTools.h"
+
+#include "MPEngStorageManager.h"
+
+
+//Default granurality for list of lists
+const TInt KListOfListsGranurality = 3;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::CPEngContactListManager()
+// -----------------------------------------------------------------------------
+//
+CPEngContactListManager::CPEngContactListManager( MPEngListLibFactory& aFactory )
+ : CPEngContactListManagerBase( aFactory ),
+ iAllLists( KListOfListsGranurality ),
+ iSynchronizedLists( KListOfListsGranurality )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListManager::ConstructL( const CPEngSessionSlotId& aSessionSlot )
+ {
+ CPEngContactListManagerBase::ConstructL( aSessionSlot );
+ HandleSettingsUpdateL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::NewL()
+// -----------------------------------------------------------------------------
+//
+CPEngContactListManager* CPEngContactListManager::NewL(
+ MPEngListLibFactory& aFactory,
+ const CPEngSessionSlotId& aSessionSlot )
+ {
+ CPEngContactListManager* self = NewLC( aFactory, aSessionSlot );
+ CleanupStack::Pop(); //self
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPEngContactListManager* CPEngContactListManager::NewLC(
+ MPEngListLibFactory& aFactory,
+ const CPEngSessionSlotId& aSessionSlot )
+ {
+ CPEngContactListManager* self =
+ new ( ELeave ) CPEngContactListManager( aFactory );
+
+ CleanupClosePushL( *self );
+ self->ConstructL( aSessionSlot );
+ return self;
+ }
+
+
+// Destructor
+CPEngContactListManager::~CPEngContactListManager()
+ {
+ iAllLists.Reset();
+ iSynchronizedLists.Reset();
+ }
+
+
+
+// =============================================================================
+// ===============Function from MPEngContactListManager =======================
+// =============================================================================
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::Close()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListManager::Close()
+ {
+ iAccessCount--;
+ if ( iAccessCount == 0 )
+ {
+ iFactory.RemoveCntListManager( this );
+ delete this;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::ContactListL()
+// -----------------------------------------------------------------------------
+//
+MPEngContactListAdvance& CPEngContactListManager::ContactListL(
+ const TDesC& aContactList )
+ {
+ return LoadContactListModelL( aContactList, EFalse, EFalse );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::PEngActiveContactLists()
+// -----------------------------------------------------------------------------
+//
+const MDesCArray& CPEngContactListManager::AllContactListsL() const
+ {
+ return iAllLists;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::PEngActiveContactLists()
+// -----------------------------------------------------------------------------
+//
+const MDesCArray& CPEngContactListManager::SynchronizedContactLists() const
+ {
+ return iSynchronizedLists;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::ContactListSettingsL()
+// -----------------------------------------------------------------------------
+//
+MPEngContactListProperties& CPEngContactListManager::ContactListSettingsL(
+ const TDesC& aContacList )
+ {
+ CPEngContactListSettings* settings = ContactListSettingsOrNull( aContacList );
+ if ( !settings )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ return *settings;
+ }
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::SetAsDefaultCntListL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListManager::SetAsDefaultCntListL(
+ const TDesC& aContactList )
+ {
+ // find contact list and set it as new default contact list
+ MPEngContactListProperties& settings = ContactListSettingsL( aContactList );
+
+
+ // is it already default contact list
+ if ( settings.IsDefault() )
+ {
+ settings.DeletePropertyL( KPEngNewDefaultContactList,
+ KPEngCntLstPropertyNativeCached );
+ return;
+ }
+
+
+ // update settings
+ settings.SetPropertyL( KPEngNewDefaultContactList,
+ KPEngCntLstPropertyNativeCached,
+ ETrue );
+
+ settings.SetPropertyL( KPEngPropertiesUpdateNeeded,
+ KPEngCntLstPropertyNativeCached,
+ ETrue );
+
+ // update settings in the current default contact list
+ MPEngContactListProperties* defaultCntList = DefaultCntListSettingsOrNull();
+ if ( defaultCntList )
+ {
+ defaultCntList->SetPropertyL( KPEngNewDefaultContactList,
+ KPEngCntLstPropertyNativeCached,
+ KErrCancel );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::CreateContactListL()
+// -----------------------------------------------------------------------------
+//
+MPEngContactListProperties& CPEngContactListManager::CreateContactListL(
+ const TDesC& aContactList,
+ TPEngContactListBaseSettings& aBaseSettings )
+ {
+ // check if such a list not exist already
+ if ( ContactListSettingsOrNull( aContactList ) )
+ {
+ User::Leave( KErrAlreadyExists );
+ }
+
+
+ // add new contact list settings
+ CPEngContactListSettings* newList = CPEngContactListSettings::NewLC(
+ aContactList,
+ aBaseSettings,
+ *this );
+ if ( aBaseSettings.iContactListNameAutoUpdate )
+ {
+ // get user name
+ TChar domainSeparator( '@' );
+ TInt offset( iSessionId->UserId().LocateF( domainSeparator ) );
+ TPtrC userName( KErrNotFound == offset ? iSessionId->UserId()
+ : iSessionId->UserId().Left( offset ) );
+
+ newList->UpdateListServerNameL( userName, iUserDomain );
+ }
+
+
+ InsertContactListSettingsL( *newList );
+ CleanupStack::Pop(); // newList
+
+ // update array of lists and store settings
+ HandleSettingsUpdateL();
+ StoreSettingsL();
+
+ return *newList;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::DeleteContactListL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListManager::DeleteContactListL( const TDesC& aContactList )
+ {
+ if ( ContactListModelOrNull( aContactList ) )
+ {
+ User::Leave( KErrInUse );
+ }
+
+
+ CPEngContactListSettings* cntList = ContactListSettingsOrNull( aContactList );
+ if ( !cntList )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+
+ cntList->SetPropertyL( KPEngContactListDeleteNeeded,
+ KPEngCntLstPropertyNativeCached,
+ ETrue );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::ChangeContactListTypeL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListManager::ChangeContactListTypeL(
+ const TDesC& aContactList,
+ TPEngContactListType aContactListType )
+ {
+ // find contact list settings
+ CPEngContactListSettings* settings = ContactListSettingsOrNull( aContactList );
+ if ( !settings )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ if ( settings->BaseSettings().iContactListType == aContactListType )
+ {
+ // type is same, nothing to do
+ return;
+ }
+
+ // load model
+ CPEngContactListModBase* model = &LoadContactListModelL( aContactList,
+ EFalse,
+ ETrue );
+ // update storage type of the model
+ model->ChangeStorageTypeL( CPEngContactListModBase::StoreTypeForListType( aContactListType ) );
+ settings->UpdateListTypeL( aContactListType );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::ReleaseCntListModel()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListManager::ReleaseCntListModel( const TDesC& aContactList )
+ {
+ CPEngContactListModBase* model = ContactListModelOrNull( aContactList );
+ if ( model )
+ {
+ model->Close();
+ }
+ }
+
+
+
+// =============================================================================
+// =============== from CPEngContactListManagerBase ============================
+// =============================================================================
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListManager::HandleSettingsUpdateL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListManager::HandleSettingsUpdateL( void )
+ {
+ CPEngContactListManagerBase::HandleSettingsUpdateL();
+
+
+ iAllLists.Reset();
+ iSynchronizedLists.Reset();
+
+
+ TInt count ( iContactListSettings.Count() );
+ for ( TInt x( 0 ) ; x < count ; x++ )
+ {
+ CPEngContactListSettings* listSettings = iContactListSettings[ x ];
+
+ iAllLists.AppendL( listSettings->Name() );
+
+ if ( listSettings->Synchronized() )
+ {
+ iSynchronizedLists.AppendL( listSettings->Name() );
+ }
+ }
+
+
+ // look for models of the contact lists which has been deleted and remove them
+ count = iContactLists.Count() - 1;
+ for ( ; count >= 0 ; --count )
+ {
+ if ( !( & ( iContactLists[ count ]->Settings() ) ) )
+ {
+ // intance removes itself from array in its destructor
+ iContactLists[ count ]->Close();
+ }
+ }
+ }
+
+// End of File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+