/*
* Copyright (c) 2002-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: DM-settings
*
*/
// INCLUDE FILES
#include <featmgr.h>
#include <centralrepository.h>
#include "nsmldmsettings.h"
#include "NSmlDMResourceProfile.h"
#include "DevManInternalCRKeys.h"
const TInt KNSmlDmBluetoothType = 0x101F99F1;
// ----------------------------------------------------------
// CNSmlDMResourceProfiles implementation
// ----------------------------------------------------------
// ----------------------------------------------------------
// CNSmlDMResourceProfiles::~CNSmlDMResourceProfiles()
// ----------------------------------------------------------
CNSmlDMResourceProfiles::~CNSmlDMResourceProfiles()
{
if(iProfileArray)
{
iProfileArray->ResetAndDestroy();
}
delete iProfileArray;
FeatureManager::UnInitializeLib();
}
// ----------------------------------------------------------
// CNSmlDMResourceProfiles* CNSmlDMResourceProfiles::NewLC( TResourceReader& aReader, CNSmlDMSettings& aSettings )
// ----------------------------------------------------------
CNSmlDMResourceProfiles* CNSmlDMResourceProfiles::NewLC( TResourceReader& aReader, CNSmlDMSettings* aSettings )
{
CNSmlDMResourceProfiles* self = new (ELeave) CNSmlDMResourceProfiles;
CleanupStack::PushL( self );
self->ConstructL( aReader, aSettings );
return self;
}
// ----------------------------------------------------------
// void CNSmlDMResourceProfiles::RemoveDuplicateEntry()
// ----------------------------------------------------------
void CNSmlDMResourceProfiles::RemoveDuplicateEntry()
{
TInt count = iProfileArray->Count();
for ( TInt i = 0; i < count; i++ )
{
for(TInt j = i+1; j <count; j++)
{
if((iProfileArray->At(i)->GetServerId()->Des().Compare(iProfileArray->At(j)->GetServerId()->Des()) == 0) &&
(iProfileArray->At(i)->GetServerId()->Length() == iProfileArray->At(j)->GetServerId()->Length()))
{
iProfileArray->Delete(j);
iProfileArray->Compress();
j--;
count--;
}
}
}
}
// ----------------------------------------------------------
// void CNSmlDMResourceProfiles::SaveProfilesL()
// ----------------------------------------------------------
void CNSmlDMResourceProfiles::SaveProfilesL()
{
RemoveDuplicateEntry();
RemoveObexEntryL();
TInt count = iProfileArray->Count();
for ( TInt i = 0; i < count ; i++ )
{
CNSmlDMProfile* profile = iSettings->CreateProfileL();
CleanupStack::PushL( profile );
iProfileArray->At(i)->SaveProfileL( profile );
profile->SaveL();
CleanupStack::PopAndDestroy(); // profile
}
CRepository* centrep = NULL;
TRAPD( err, centrep = CRepository::NewL(KCRUidDeviceManagementInternalKeys));
if (err==KErrNone )
{
TInt err = centrep->Set( KMaxFactoryDMProfileId , count-1 );
delete centrep;
centrep = NULL;
}
}
// ----------------------------------------------------------
// void CNSmlDMResourceProfiles::ConstructL( TResourceReader& aReader )
// ----------------------------------------------------------
void CNSmlDMResourceProfiles::ConstructL( TResourceReader& aReader, CNSmlDMSettings* aSettings )
{
iSettings = aSettings;
iProfileArray = new (ELeave) CArrayPtrFlat<CNSmlDMResourceProfile> (3);
FeatureManager::InitializeLibL();
AddDataL( aReader );
}
// ----------------------------------------------------------
// void CNSmlDMResourceProfiles::AddDataL( TResourceReader& aReader )
// ----------------------------------------------------------
void CNSmlDMResourceProfiles::AddDataL( TResourceReader& aReader )
{
TInt index;
TInt number = aReader.ReadInt16();
for ( index = 0; index < number; index++ )
{
CNSmlDMResourceProfile* profile = CNSmlDMResourceProfile::NewLC( aReader );
iProfileArray->AppendL( profile );
CleanupStack::Pop();
}
}
// ----------------------------------------------------------
// void CNSmlDMResourceProfiles::RemoveObexEntryL( )
// ----------------------------------------------------------
void CNSmlDMResourceProfiles::RemoveObexEntryL()
{
TInt count = iProfileArray->Count();
for ( TInt i = 0; i < count; i++ )
{
if((! FeatureManager::FeatureSupported ( KFeatureIdSyncMlDmObex )) &&
( iProfileArray->At(i)->iTransportId == KNSmlDmBluetoothType))
{
iProfileArray->Delete(i);
iProfileArray->Compress();
i--;
count--;
}
}
}
// End of File