diff -r 48060abbbeaf -r b3cee849fa46 creator/src/creator_phonebook.cpp --- a/creator/src/creator_phonebook.cpp Thu Aug 19 09:55:38 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,514 +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: -* -*/ - - - -#include "creator_phonebook.h" -#include "creator_traces.h" - -#include - -//---------------------------------------------------------------------------- - -CPhonebookParameters::CPhonebookParameters() - { - LOGSTRING("Creator: CPhonebookParameters::CPhonebookParameters"); - - iContactFirstName = HBufC::New(KPhonebookFieldLength); - iContactLastName = HBufC::New(KPhonebookFieldLength); - iContactCompanyName = HBufC::New(KPhonebookFieldLength); - iContactJobTitle = HBufC::New(KPhonebookFieldLength); - iContactPostalAddress = HBufC::New(KPhonebookFieldLength); - iWvUserId = HBufC::New(KPhonebookFieldLength); - iRingingtone = HBufC::New(KPhonebookFieldLength); - iThumbnailImage = HBufC::New(KPhonebookFieldLength); - iContactPhoneNumberGeneral = HBufC::New(KPhonebookFieldLength); - iContactURL = HBufC::New(KPhonebookFieldLength); - iContactEmailAddress = HBufC::New(KPhonebookFieldLength); - iGroupName = HBufC::New(KPhonebookFieldLength); - } - -CPhonebookParameters::~CPhonebookParameters() - { - LOGSTRING("Creator: CPhonebookParameters::~CPhonebookParameters"); - - delete iGroupName; - delete iContactEmailAddress; - delete iContactURL; - delete iContactPhoneNumberGeneral; - delete iThumbnailImage; - delete iRingingtone; - delete iWvUserId; - delete iContactPostalAddress; - delete iContactJobTitle; - delete iContactCompanyName; - delete iContactLastName; - delete iContactFirstName; - } -void CPhonebookParameters::ParseL (CCommandParser* parser, TParseParams /*aCase = 0*/) - { - parser->StrParserL (iContactFirstName, '|'); - parser->StrParserL (iContactLastName, '|'); - parser->StrParserL (iContactCompanyName, '|'); - parser->StrParserL (iContactJobTitle, '|'); - parser->StrParserL (iContactPostalAddress, '|'); - parser->StrParserL (iContactPhoneNumberGeneral, '|'); - parser->StrParserL (iContactURL, '|'); - parser->StrParserL (iContactEmailAddress, '|'); - parser->StrParserL (iWvUserId, '|'); - parser->StrParserL (iRingingtone, '|'); - parser->StrParserL (iThumbnailImage, ';'); - } -//---------------------------------------------------------------------------- - -CCreatorPhonebook* CCreatorPhonebook::NewL(CCreatorEngine* aEngine) - { - CCreatorPhonebook* self = CCreatorPhonebook::NewLC(aEngine); - CleanupStack::Pop(self); - return self; - } - -CCreatorPhonebook* CCreatorPhonebook::NewLC(CCreatorEngine* aEngine) - { - CCreatorPhonebook* self = new (ELeave) CCreatorPhonebook; - CleanupStack::PushL(self); - self->ConstructL(aEngine); - return self; - } - -CCreatorPhonebook::CCreatorPhonebook() - { - } - -void CCreatorPhonebook::ConstructL(CCreatorEngine* aEngine) - { - LOGSTRING("Creator: CCreatorPhonebook::ConstructL"); - - iEngine = aEngine; - iContactDBEngine = CPbkContactEngine::NewL(); - iOpCounter = 0; - SetDefaultParameters(); - } - -CCreatorPhonebook::~CCreatorPhonebook() - { - LOGSTRING("Creator: CCreatorPhonebook::~CCreatorPhonebook"); - - if ( iEngine && iContactIds.Count() ) - { - TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iContactIds, KUidDictionaryUidContacts ) ); - } - iContactIds.Reset(); - iContactIds.Close(); - - if ( iEngine && iGroupIds.Count() ) - { - TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iGroupIds, KUidDictionaryUidContactGroups ) ); - } - iGroupIds.Reset(); - iGroupIds.Close(); - - iEntriesToDelete.Reset(); - iEntriesToDelete.Close(); - - CompactPbkDatabase( ETrue ); - - delete iContactDBEngine; - - if (iParameters) - delete iParameters; - } - -//---------------------------------------------------------------------------- -TInt CCreatorPhonebook::CreateContactEntryL(CCreatorModuleBaseParameters *aParameters) - { - LOGSTRING("Creator: CCreatorPhonebook::CreateContactEntryL"); - - delete iParameters; - iParameters = 0; - - CPhonebookParameters* parameters = (CPhonebookParameters*) aParameters; - - // random data needed if no predefined data available - if (!parameters) - { - iParameters = new(ELeave) CPhonebookParameters; - - iParameters->iNumberOfPhoneNumberFields = iNumberOfPhoneNumberFields; - iParameters->iNumberOfURLFields = iNumberOfURLFields; - iParameters->iNumberOfEmailAddressFields = iNumberOfEmailAddressFields; - - iParameters->iNumberOfPhoneNumberFields = iNumberOfPhoneNumberFields; - iParameters->iNumberOfURLFields = iNumberOfURLFields; - iParameters->iNumberOfEmailAddressFields = iNumberOfEmailAddressFields; - - iParameters->iContactFirstName->Des() = iEngine->RandomString(CCreatorEngine::EFirstName); - iParameters->iContactLastName->Des() = iEngine->RandomString(CCreatorEngine::ESurname); - iParameters->iContactCompanyName->Des() = iEngine->RandomString(CCreatorEngine::ECompany); - iParameters->iContactJobTitle->Des() = iEngine->RandomString(CCreatorEngine::EJobTitle); - iParameters->iContactPostalAddress->Des() = iEngine->RandomString(CCreatorEngine::EAddress); - - iParameters->iWvUserId->Des().Copy(_L("wv:")); - iParameters->iWvUserId->Des().Append(iParameters->iContactFirstName->Des()); - - // TO-DO..... - //iParameters->iRingingtone->Des() = KNullDesC; - //iParameters->iThumbnailImage->Des() = KNullDesC; - - iParameters->iContactPhoneNumberGeneral->Des() = iEngine->RandomString(CCreatorEngine::EPhoneNumber); - - iParameters->iContactURL->Des().Copy( _L("http://www.") ); - iParameters->iContactURL->Des().Append( iParameters->iContactCompanyName->Des() ); - iParameters->iContactURL->Des().Append( _L(".com/") ); - - iParameters->iContactEmailAddress->Des().Copy( iParameters->iContactFirstName->Des() ); - iParameters->iContactEmailAddress->Des().Append( _L("@") ); - iParameters->iContactEmailAddress->Des().Append( iParameters->iContactCompanyName->Des() ); - iParameters->iContactEmailAddress->Des().Append( _L(".com") ); - - } - else - { - iParameters = parameters; - } - - TInt err = KErrNone; - - // create a new contact item based on the default template - CPbkContactItem* newContact = iContactDBEngine->CreateEmptyContactL(); - CleanupStack::PushL(newContact); - - AddFieldToContactItemL (*newContact, EPbkFieldIdFirstName, iParameters->iContactFirstName->Des()); - AddFieldToContactItemL (*newContact, EPbkFieldIdLastName, iParameters->iContactLastName->Des()); - AddFieldToContactItemL (*newContact, EPbkFieldIdCompanyName, iParameters->iContactCompanyName->Des()); - AddFieldToContactItemL (*newContact, EPbkFieldIdJobTitle, iParameters->iContactJobTitle->Des()); - AddFieldToContactItemL (*newContact, EPbkFieldIdPostalAddress, iParameters->iContactPostalAddress->Des()); - - AddFieldToContactItemL (*newContact, EPbkFieldIdWVID, iParameters->iWvUserId->Des()); - AddFieldToContactItemL (*newContact, EPbkFieldIdPersonalRingingToneIndication, iParameters->iRingingtone->Des()); - AddFieldToContactItemL (*newContact, EPbkFieldIdThumbnailImage, iParameters->iThumbnailImage->Des()); - - for (TInt i=0; iiNumberOfPhoneNumberFields; i++) - { - if (i%6 == 0) - AddFieldToContactItemL (*newContact, EPbkFieldIdPhoneNumberGeneral, iParameters->iContactPhoneNumberGeneral->Des()); - else if (i%6 == 1) - AddFieldToContactItemL (*newContact, EPbkFieldIdPhoneNumberMobile, iParameters->iContactPhoneNumberGeneral->Des()); - else if (i%6 == 2) - AddFieldToContactItemL (*newContact, EPbkFieldIdFaxNumber, iParameters->iContactPhoneNumberGeneral->Des()); - else if (i%6 == 3) - AddFieldToContactItemL (*newContact, EPbkFieldIdPagerNumber, iParameters->iContactPhoneNumberGeneral->Des()); - else if (i%6 == 4) - AddFieldToContactItemL (*newContact, EPbkFieldIdPhoneNumberHome, iParameters->iContactPhoneNumberGeneral->Des()); - else - AddFieldToContactItemL (*newContact, EPbkFieldIdPhoneNumberWork, iParameters->iContactPhoneNumberGeneral->Des()); - } - - for (TInt j=0; jiNumberOfURLFields; j++) - AddFieldToContactItemL (*newContact, EPbkFieldIdURL, iParameters->iContactURL->Des()); - - for (TInt k=0; kiNumberOfEmailAddressFields; k++) - AddFieldToContactItemL (*newContact, EPbkFieldIdEmailAddress, iParameters->iContactEmailAddress->Des()); - - - // add the contact item to the database - iContactDBEngine->AddNewContactL(*newContact); - - // id has been generated, store it for being able to delete - // entries created only with Creator - iContactIds.Append( newContact->Id() ); - - CleanupStack::PopAndDestroy(); // newContact - - CompactPbkDatabase(); - - return err; - } - -//---------------------------------------------------------------------------- - -TInt CCreatorPhonebook::CreateGroupEntryL(CCreatorModuleBaseParameters *aParameters) - { - LOGSTRING("Creator: CCreatorPhonebook::CreateGroupEntryL"); - - // clear any existing parameter definations - if (iParameters) - { - delete iParameters; - iParameters = NULL; - } - - // random data needed if no predefined data available - if (!aParameters) - { - iParameters = new(ELeave) CPhonebookParameters; - - iParameters->iContactsInGroup = iContactsInGroup; - - iParameters->iGroupName->Des().Copy( iEngine->RandomString(CCreatorEngine::EGroupName) ); - iParameters->iGroupName->Des().Append( _L(" #") ); - iParameters->iGroupName->Des().AppendNum( iEngine->RandomNumber(1000, 9999) ); - } - else - { - // otherwise replace the parameters object - iParameters = (CPhonebookParameters*) aParameters; - } - - TInt err(KErrNone); - - // create contact iterator - CPbkContactIter* contactIter = iContactDBEngine->CreateContactIteratorLC(); - - // create contact id array - CContactIdArray* contactIdArray = CContactIdArray::NewLC(); - - // get all contacts - TBool getFirstContact(ETrue); - TContactItemId contactId; - - for (;;) - { - if (getFirstContact) - { - // get first contact - contactId = contactIter->FirstL(); - getFirstContact = EFalse; - } - else - { - // get next contact - contactId = contactIter->NextL(); - } - - // check if valid contact id received - if (contactId == KNullContactId) - { - // no more contacts, so break - break; - } - else - { - // append to array - contactIdArray->AddL(contactId); - } - } - - // create a new contact group - CContactGroup* newGroup = iContactDBEngine->CreateContactGroupL( iParameters->iGroupName->Des() ); - CleanupStack::PushL(newGroup); - - // define amounts of contacts to be added to the group - TInt amountOfContactsToBeAdded; - if (iParameters->iContactsInGroup == KCreateRandomAmountOfGroups) - amountOfContactsToBeAdded = iEngine->RandomNumber(30); - else - amountOfContactsToBeAdded = iParameters->iContactsInGroup; - - - // a simple way to randomise order of contacts in the array - if (iEngine->RandomNumber(1, 2) == 1) - contactIdArray->ReverseOrder(); - - // assign contacts from the array to the group if any contacts available - if (contactIdArray->Count() > 0) - { - // get random start number which defines from which position to start adding contacts - TInt arrayPosCounter = iEngine->RandomNumber(contactIdArray->Count()-1); - TInt addedContacsCounter(0); - - for (TInt y=0; yAddContactToGroupL((*contactIdArray)[arrayPosCounter], newGroup->Id()); - addedContacsCounter++; - arrayPosCounter++; - - // no need to add more contacts than actually available - if (addedContacsCounter >= contactIdArray->Count()) - break; - - // if limit reached, start from the beginning - if (arrayPosCounter >= contactIdArray->Count()) - arrayPosCounter = 0; - } - } - - // id has been generated, store it for being able to delete - // entries created only with Creator - iGroupIds.Append( newGroup->Id() ); - - CleanupStack::PopAndDestroy(3); // newGroup, contactIdArray, contactIter - - CompactPbkDatabase(); - - return err; - } - - -//---------------------------------------------------------------------------- - -TInt CCreatorPhonebook::CreateSubscribedContactEntryL(CCreatorModuleBaseParameters* /*aParameters*/) - { - LOGSTRING("Creator: CCreatorPhonebook::CreateSubscribedContactEntryL"); - - return KErrNotSupported; - } - -//---------------------------------------------------------------------------- - -void CCreatorPhonebook::AddFieldToContactItemL(CPbkContactItem& aItem, TPbkFieldId aFieldId, const TDesC& aFieldText) - { - //LOGSTRING("Creator: CCreatorPhonebook::AddFieldToContactItemL"); - - CPbkFieldInfo* fieldInfo = iContactDBEngine->FieldsInfo().Find( aFieldId ); - if( fieldInfo ) // field was found - { - // add the field and value to contact - TPbkContactItemField* itemField = aItem.AddOrReturnUnusedFieldL( *fieldInfo ); - - if( itemField && aFieldText.Length() > 0 ) // add text also - { - if( itemField->ItemField().StorageType() == KStorageTypeText ) - { - CContactTextField* textField = itemField->ItemField().TextStorage(); - - // clip the text if it doesn't fit to the field - textField->SetTextL( aFieldText.Left( fieldInfo->MaxLength() ) ); - } - } - } - } - -//---------------------------------------------------------------------------- - -void CCreatorPhonebook::CompactPbkDatabase(TBool aCompressImmediately) - { - LOGSTRING("Creator: CCreatorPhonebook::CompactPbkDatabase"); - - iOpCounter++; - - // compress the database immediately or after each 100th operation - if (aCompressImmediately || iOpCounter%100 == 0) - { - CContactDatabase& db = iContactDBEngine->Database(); - - if (db.CompressRequired()) - { - LOGSTRING("Creator: CCreatorPhonebook::CompactPbkDatabase - Compacting..."); - TRAP_IGNORE( db.CompactL() ); - } - } - } -//---------------------------------------------------------------------------- -void CCreatorPhonebook::DeleteAllL() - { - LOGSTRING("Creator: CCreatorPhonebook::DeleteAllL"); - DeleteAllItemsL( KUidDictionaryUidContacts ); - iContactIds.Reset(); - } - -//---------------------------------------------------------------------------- -void CCreatorPhonebook::DeleteAllCreatedByCreatorL() - { - LOGSTRING("Creator: CCreatorPhonebook::DeleteAllCreatedByCreatorL"); - DeleteItemsCreatedWithCreatorL( KUidDictionaryUidContacts ); - iContactIds.Reset(); - } - -//---------------------------------------------------------------------------- -void CCreatorPhonebook::DeleteAllGroupsL() - { - LOGSTRING("Creator: CCreatorPhonebook::DeleteAllGroupsL"); - DeleteAllItemsL( KUidDictionaryUidContactGroups ); - iGroupIds.Reset(); - } - -//---------------------------------------------------------------------------- -void CCreatorPhonebook::DeleteAllGroupsCreatedByCreatorL() - { - LOGSTRING("Creator: CCreatorPhonebook::DeleteAllGroupsCreatedByCreatorL"); - DeleteItemsCreatedWithCreatorL( KUidDictionaryUidContactGroups ); - iGroupIds.Reset(); - } - -//---------------------------------------------------------------------------- -void CCreatorPhonebook::DeleteAllItemsL( TUid aStoreUid ) - { - LOGSTRING("Creator: CCreatorPhonebook::DeleteItemsL"); - __ASSERT_ALWAYS( aStoreUid == KUidDictionaryUidContacts || - aStoreUid == KUidDictionaryUidContactGroups, - User::Panic( _L("CCreatorPb"), KErrArgument ) ); - - CContactIdArray* allContacts = iContactDBEngine->FindLC( _L("") ); - - CPbkContactItem* item; - TInt i(0); - // remove that type of item ids from the array - // that we don't want to delete - while( allContacts && i < allContacts->Count() ) - { - item = iContactDBEngine->ReadContactL( (*allContacts)[i] ); - if ( ( aStoreUid == KUidDictionaryUidContactGroups ) == - ( item->Type() != KUidContactGroup ) ) - { - allContacts->Remove( i ); - } - else - { - i++; - } - delete item; - item = NULL; - } - iContactDBEngine->DeleteContactsL( *allContacts ); - CleanupStack::PopAndDestroy( allContacts ); - - // contacts deleted, remove the store - CDictionaryFileStore* store = iEngine->FileStoreLC(); - if ( store ) - { - store->Remove( aStoreUid ); - store->CommitL(); - } - CleanupStack::PopAndDestroy( store ); - } - -//---------------------------------------------------------------------------- -void CCreatorPhonebook::DeleteItemsCreatedWithCreatorL( TUid aStoreUid ) - { - LOGSTRING("Creator: CCreatorPhonebook::DeleteItemsCreatedWithCreatorL"); - __ASSERT_ALWAYS( aStoreUid == KUidDictionaryUidContacts || - aStoreUid == KUidDictionaryUidContactGroups, - User::Panic( _L("CCreatorPb"), KErrArgument ) ); - - iEntriesToDelete.Reset(); - - // fetch ids of entries created by Creator - iEngine->ReadEntryIdsFromStoreL( iEntriesToDelete, aStoreUid ); - - // delete entries - for ( TInt i = 0; i < iEntriesToDelete.Count(); i++ ) - { - TRAP_IGNORE( iContactDBEngine->DeleteContactL( iEntriesToDelete[i] ) ); - } - - iEntriesToDelete.Reset(); - - // all entries deleted, remove the Logs related registry - iEngine->RemoveStoreL( aStoreUid ); - }