diff -r e11368ed4880 -r 4f2773374eff creator/engine/src/creator_phonebook.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/creator/engine/src/creator_phonebook.cpp Fri May 14 15:53:02 2010 +0300 @@ -0,0 +1,1055 @@ +/* +* Copyright (c) 2010 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 "engine.h" +#include "enginewrapper.h" + +#include "creator_phonebook.h" +#include "creator_traces.h" + +#include +#include + +//#include +_LIT(KTempPath, "C:\\Data\\Creator\\"); + + +typedef struct { +QString iDetail; +QString iFieldContext; +QString iFieldString; +TInt iRandomType; +} DetailFieldInfo; +static const TInt RND_TYPE_UNDEF = -99; +DetailFieldInfo CreatorPbkMiscTextFields[] = { + { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldFirstName).operator QString(), (TInt) CCreatorEngine::EFirstName}, + { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldLastName).operator QString(), (TInt) CCreatorEngine::ESurname}, + { (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldName).operator QString(), (TInt) CCreatorEngine::ECompany}, + { (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldTitle).operator QString(), (TInt) CCreatorEngine::EJobTitle}, + { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldPrefix).operator QString(), (TInt) CCreatorEngine::EPrefix}, + { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldSuffix).operator QString(), (TInt) CCreatorEngine::ESuffix}, + { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldMiddleName).operator QString(), (TInt) CCreatorEngine::EFirstName}, + { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldStreet).operator QString(), (TInt) CCreatorEngine::EAddress}, + { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldLocality).operator QString(), (TInt) CCreatorEngine::ECity}, + { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldRegion).operator QString(), (TInt) CCreatorEngine::EState}, + { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldPostcode).operator QString(), (TInt) CCreatorEngine::EPostcode}, + { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldCountry).operator QString(), (TInt) CCreatorEngine::ECountry}, + { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldStreet).operator QString(), (TInt) CCreatorEngine::EAddress}, + { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldLocality).operator QString(), (TInt) CCreatorEngine::ECity}, + { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldRegion).operator QString(), (TInt) CCreatorEngine::EState}, + { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldPostcode).operator QString(), (TInt) CCreatorEngine::EPostcode}, + { (QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldCountry).operator QString(), (TInt) CCreatorEngine::ECountry}, + { (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactPhoneNumber::SubTypeMobile).operator QString(), (TInt) CCreatorEngine::EPhoneNumber}, + { (QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactPhoneNumber::SubTypeLandline).operator QString(), (TInt) CCreatorEngine::EPhoneNumber}, + { (QContactNote::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactNote::FieldNote).operator QString(), (TInt) CCreatorEngine::EMemoText}, + { (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldDepartment).operator QString(), (TInt) CCreatorEngine::ECompany}, + { (QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldAssistantName).operator QString(), (TInt) CCreatorEngine::ECompany}, + { (QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactFamily::FieldSpouse).operator QString(), (TInt) CCreatorEngine::EFirstName}, + { (QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactFamily::FieldChildren).operator QString(), (TInt) CCreatorEngine::EFirstName}, + { (QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldCustomLabel).operator QString(), (TInt) CCreatorEngine::EFirstName} + }; + +/*TInt CreatorVPbkBinaryFields[] = { + R_VPBK_FIELD_TYPE_CALLEROBJIMG//, + //R_VPBK_FIELD_TYPE_THUMBNAILPATH + };*/ + +/*QString CreatorPbkDateTimeFields[] = { + QContactAnniversary::DefinitionName//R_VPBK_FIELD_TYPE_ANNIVERSARY + };*/ + +//---------------------------------------------------------------------------- + +/* +typedef struct{ +QString iFieldContext; +QString iFieldString; +}PhoneNumInfo; +PhoneNumInfo CreatorPhoneNumberFields[] = + { + { QContactPhoneNumber::ContextHome, QContactPhoneNumber::SubTypeLandline}, + { QContactPhoneNumber::ContextWork, QContactPhoneNumber::SubTypeLandline}, + { QContactPhoneNumber::ContextHome, QContactPhoneNumber::SubTypeMobile}, + { QContactPhoneNumber::ContextWork, QContactPhoneNumber::SubTypeMobile}, + { QContactPhoneNumber::ContextHome, QContactPhoneNumber::SubTypeFacsimile}, + { QContactPhoneNumber::ContextWork, QContactPhoneNumber::SubTypeFacsimile}, + { QContactPhoneNumber::ContextWork, QContactPhoneNumber::SubTypePager }, + { QContactPhoneNumber::ContextHome, QContactPhoneNumber::SubTypeVideo }, + { QContactPhoneNumber::ContextWork, QContactPhoneNumber::SubTypeVideo }, + { QContactPhoneNumber::ContextHome, QContactPhoneNumber::SubTypeVoice }, + { QContactPhoneNumber::ContextWork, QContactPhoneNumber::SubTypeVoice }, + { QContactPhoneNumber::ContextWork, QContactPhoneNumber::SubTypeAssistant }, + { QContactPhoneNumber::ContextHome, QContactPhoneNumber::SubTypeCar } + }; + +*/ +typedef struct{ +QString iFieldContext; +QString iFieldString; +}PhoneNumInfo; +PhoneNumInfo CreatorPhoneNumberFields[] = + { + { "Home", "Landline"}, + { "Work", "Landline"}, + { "Home","Mobile"}, + { "Work", "Mobile"}, + { "Home", "Facsimile"}, + { "Work", "Facsimile"}, + { "Work", "Pager"}, + { "Home", "Video"}, + { "Work", "Video"}, //{ "Home", "Voice" },//{ "Work", "Voice" }, + { "Work", "Assistant" }, + { "Home", "Car" } + }; + + +/*QString CCreatorPhonebook::iPhoneNumberFields[] = + { + {QContactPhoneNumber::SubTypeLandline}, + {QContactPhoneNumber::SubTypeMobile}, + {QContactPhoneNumber::SubTypeFacsimile}, + {QContactPhoneNumber::SubTypePager}, + {QContactPhoneNumber::SubTypeVideo}, + {QContactPhoneNumber::SubTypeVoice} , + {QContactPhoneNumber::SubTypeAssistant}, + {QContactPhoneNumber::SubTypeCar} + }; +*/ +/* +QStringList CreatorPbkContextFields = + { + QContactDetail::ContextHome, + QContactDetail::ContextWork + }; +*/ +QString CreatorPbkEmailFields[] = + { + //R_VPBK_FIELD_TYPE_EMAILGEN, + (QContactDetail::ContextHome).operator QString(),//"Home",//R_VPBK_FIELD_TYPE_EMAILHOME, + (QContactDetail::ContextWork).operator QString()//R_VPBK_FIELD_TYPE_EMAILWORK + }; + + +CPhonebookParameters::CPhonebookParameters() + { + LOGSTRING("Creator: CVirtualPhonebookParameters::CVirtualPhonebookParameters"); + //iGroupName = HBufC::New(KPhonebookFieldLength); + } + +CPhonebookParameters::~CPhonebookParameters() + { + LOGSTRING("Creator: CVirtualPhonebookParameters::~CVirtualPhonebookParameters"); + + //delete iGroupName; + //iContactFields.ResetAndDestroy(); + //iContactFields.Close(); + + //iLinkIds.clear(); + iLinkIds.Reset(); + iLinkIds.Close(); + } + +void CPhonebookParameters::ParseL(CCommandParser* /*parser*/, TParseParams /*aCase = 0*/) + { + } + +TInt CPhonebookParameters::ScriptLinkId() const + { + return iLinkId; + } + +void CPhonebookParameters::SetScriptLinkId(TInt aLinkId) + { + iLinkId = aLinkId; + } + + +//---------------------------------------------------------------------------- + +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() + { + iAddAllFields = EFalse; + } + +void CCreatorPhonebook::ConstructL(CCreatorEngine* aEngine) + { + LOGSTRING("Creator: CCreatorPhonebook::ConstructL"); + + iEngine = aEngine; + + iContactMngr = new QContactManager("symbian"); + + SetDefaultParameters(); + } + + +CCreatorPhonebook::~CCreatorPhonebook() + { + LOGSTRING("Creator: CCreatorPhonebook::~CCreatorPhonebook"); + + if ( iContactsToDelete.Count() ) + { + TRAP_IGNORE( StoreLinksForDeleteL( iContactsToDelete, KUidDictionaryUidContacts ) ); + } + if ( iContactGroupsToDelete.Count() ) + { + TRAP_IGNORE( StoreLinksForDeleteL( iContactGroupsToDelete, KUidDictionaryUidContactGroups ) ); + } + + if( iContactMngr ) + { + delete iContactMngr; + } + + if (iParameters) + { + delete iParameters; + } + } + +//---------------------------------------------------------------------------- + +TBool CCreatorPhonebook::AskDataFromUserL(TInt aCommand, TInt& aNumberOfEntries) + { + LOGSTRING("Creator: CCreatorPhonebook::AskDataFromUserL"); + + TBool ret = CCreatorPhonebookBase::AskDataFromUserL(aCommand, aNumberOfEntries); + + if(ret && aCommand == ECmdCreatePhoneBookEntryContacts && !iDefaultFieldsSelected) + { + iAddAllFields = iEngine->GetEngineWrapper()->YesNoQueryDialog(_L("Add all the other fields to contacts?")); + } + return ret; + } + + +//---------------------------------------------------------------------------- + +TInt CCreatorPhonebook::CreateContactEntryL(CCreatorModuleBaseParameters *aParameters) + { + TInt err=0; + + InitializeContactParamsL(); + bool success = false; + // create a new contact item + //iStore = new QContact(); + + QContact iStore; + + int numberOfFields = iParameters->iContactFields.count(); + QString phone; + for(int i=0; i< numberOfFields; i++ ) + { + QContactDetail* cntdet = new QContactDetail(iParameters->iContactFields.at(i)); + success = iStore.saveDetail( cntdet ); + delete cntdet; + } + + iContactMngr->saveContact( &iStore ); + + iContactsToDelete.Append( (TUint32)iStore.localId() ); + //delete iStore; + return err; + } + + +//---------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- + +void CCreatorPhonebook::DeleteAllL() + { + QList contacts = iContactMngr->contactIds(); + DeleteContactsL( contacts ); + } + +//---------------------------------------------------------------------------- +void CCreatorPhonebook::DeleteAllCreatedByCreatorL() + { + LOGSTRING("Creator: CCreatorPhonebook::DeleteAllCreatedByCreatorL"); + DeleteItemsCreatedWithCreatorL( KUidDictionaryUidContacts ); + } + +//---------------------------------------------------------------------------- +void CCreatorPhonebook::DeleteAllGroupsL() + { + LOGSTRING("Creator: CCreatorPhonebook::DeleteAllGroupsL"); + + QList contacts = iContactMngr->contactIds(); + QList groups; + for(int i = 0; i < contacts.count(); i++) + { + QContact group = iContactMngr->contact( contacts.at(i) ); + if( group.type() == QContactType::TypeGroup ) + { + groups.append( group.localId() ); + } + } + DeleteContactsL( groups ); +/* + User::LeaveIfNull( iStore ); + MVPbkContactLinkArray* groups = iStore->ContactGroupsLC(); + DeleteContactsL( groups, ETrue ); + CleanupStack::PopAndDestroy(); // cannot use groups as parameter + */ + } + +//---------------------------------------------------------------------------- +void CCreatorPhonebook::DeleteAllGroupsCreatedByCreatorL() + { + LOGSTRING("Creator: CCreatorPhonebook::DeleteAllGroupsCreatedByCreatorL"); + DeleteItemsCreatedWithCreatorL( KUidDictionaryUidContactGroups ); + } + +//---------------------------------------------------------------------------- +void CCreatorPhonebook::DeleteContactsL( QList& aContacts /*MVPbkContactLinkArray* aContacts, TBool aGroup*/ ) + { + //QList contacts = iContactMngr->contactIds(); + QMap errorMap; + iContactMngr->removeContacts( &aContacts, &errorMap ); + } + +//---------------------------------------------------------------------------- +void CCreatorPhonebook::DeleteItemsCreatedWithCreatorL( TUid aStoreUid ) + { + CDictionaryFileStore* store = iEngine->FileStoreLC(); + User::LeaveIfNull( store ); + + QList contacts; + // backup previous contact links from store + // otherwise they would be overwritten when calling out.WriteL + TUint32 creatorLink; + if ( store->IsPresentL( aStoreUid ) ) + { + RDictionaryReadStream in; + in.OpenLC( *store, aStoreUid ); + TRAP_IGNORE( + do{ + creatorLink = in.ReadUint32L(); + QContact contact = iContactMngr->contact( creatorLink ); + if( (contact.type() == QContactType::TypeGroup && aStoreUid == KUidDictionaryUidContactGroups ) || (contact.type() != QContactType::TypeGroup && aStoreUid != KUidDictionaryUidContactGroups) ) + { + contacts.append( creatorLink ); + } + }while( creatorLink );) + + CleanupStack::PopAndDestroy(); // in + } + + + DeleteContactsL( contacts ); + + store->Remove( aStoreUid ); + store->CommitL(); + + CleanupStack::PopAndDestroy( store ); + } + +//---------------------------------------------------------------------------- +void CCreatorPhonebook::DoDeleteItemsCreatedWithCreatorL( TUid aStoreUid, CDictionaryFileStore* aStore ) + { + + } + +//---------------------------------------------------------------------------- +TBool CCreatorPhonebook::HasOtherThanGroupsL( /*MVPbkContactLinkArray* aContacts */) + { + LOGSTRING("Creator: CCreatorPhonebook::HasOtherThanGroupsL"); + TBool result( EFalse ); + return result; + } + +QContactDetail CCreatorPhonebook::CreateContactDetail(QString aDetail, QString aFieldContext, QString aFieldString, TInt aRand ) + { + QContactDetail contactDetail; + TPtrC contentData; + if( aDetail == QContactPhoneNumber::DefinitionName) + { + QContactPhoneNumber phoneNumber;// = contactDetail; + phoneNumber.setContexts(aFieldContext); + phoneNumber.setSubTypes(aFieldString); + contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); + QString number = QString::fromUtf16(contentData.Ptr(),contentData.Length()); + phoneNumber.setNumber(number); + return phoneNumber; + } + else if( aDetail == QContactName::DefinitionName ) //--Contact NAME----------------------------- + { + QContactName contactName; + for(int i = 0 ; i < iParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details + { + if(iParameters->iContactFields.at(i).definitionName() == QContactName::DefinitionName ) + { + contactName = iParameters->iContactFields.at(i); + } + } + contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); + QString name = QString::fromUtf16(contentData.Ptr(),contentData.Length()); + if(aFieldString == QContactName::FieldFirstName) + { + if(contactName.firstName().isEmpty()) + { + contactName.setFirstName( name ); + } + } + else if(aFieldString == QContactName::FieldLastName) + { + if(contactName.lastName().isEmpty()) + { + contactName.setLastName( name ); + } + } + else if(aFieldString == QContactName::FieldMiddleName) + { + if(contactName.middleName().isEmpty()) + { + contactName.setMiddleName( name ); + } + } + else if(aFieldString == QContactName::FieldPrefix) + { + if(contactName.prefix().isEmpty()) + { + contactName.setPrefix( name ); + } + } + else if(aFieldString == QContactName::FieldSuffix) + { + if(contactName.suffix().isEmpty()) + { + contactName.setSuffix( name ); + } + } + else //QContactName::FieldCustomLabel: + { + if(contactName.customLabel().isEmpty()) + { + contactName.setCustomLabel( name ); + } + } + return contactName; + } + else if( aDetail == QContactOrganization::DefinitionName ) //--Contact Company----------------------------- + { + QContactOrganization contactCompany; + + for(int i = 0 ; i < iParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details + { + if(iParameters->iContactFields.at(i).definitionName() == QContactOrganization::DefinitionName ) + { + contactCompany = iParameters->iContactFields.at(i); + } + } + contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); + QString company = QString::fromUtf16(contentData.Ptr(),contentData.Length()); + if(aFieldString == QContactOrganization::FieldName) + { + if(contactCompany.name().isEmpty()) + { + contactCompany.setName( company ); + } + } + if(aFieldString == QContactOrganization::FieldTitle) + { + if(contactCompany.title().isEmpty()) + { + contactCompany.setTitle( company ); + } + } + if(aFieldString == QContactOrganization::FieldDepartment) + { + //if(contactCompany.department().isEmpty()) + //{ + QStringList depList = contactCompany.department(); + depList.append(company); + contactCompany.setDepartment(depList); + //} + } + if(aFieldString == QContactOrganization::FieldAssistantName) + { + if(contactCompany.assistantName().isEmpty()) + { + contactCompany.setAssistantName( company ); + } + } + return contactCompany; + } + else if( aDetail == QContactAddress::DefinitionName ) //--Contact Address----------------------------- + { + QContactAddress contactAddress; + + for(int i = 0 ; i < iParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details + { + if(iParameters->iContactFields.at(i).definitionName() == QContactAddress::DefinitionName && iParameters->iContactFields.at(i).value(QContactDetail::FieldContext) == aFieldContext ) + { + contactAddress = iParameters->iContactFields.at(i); + } + } + + contactAddress.setContexts( aFieldContext ); + + contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); + QString address = QString::fromUtf16(contentData.Ptr(),contentData.Length()); + if(aFieldString == QContactAddress::FieldStreet ) + { + if( contactAddress.street().isEmpty() ) + { + contactAddress.setStreet( address ); + } + } + else if(aFieldString == QContactAddress::FieldLocality ) + { + if( contactAddress.locality().isEmpty() ) + { + contactAddress.setLocality( address ); + } + } + else if(aFieldString == QContactAddress::FieldRegion ) + { + if( contactAddress.region().isEmpty() ) + { + contactAddress.setRegion( address ); + } + } + else if(aFieldString == QContactAddress::FieldPostcode ) + { + if( contactAddress.postcode().isEmpty() ) + { + contactAddress.setPostcode( address ); + } + } + else if(aFieldString == QContactAddress::FieldCountry ) + { + if( contactAddress.country().isEmpty() ) + { + contactAddress.setCountry( address ); + } + } + else + { + return contactDetail; + } + return contactAddress; + } + else if( aDetail == QContactNote::DefinitionName ) //--Contact Note----------------------------- + { + QContactNote contactNote; + contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); + QString note = QString::fromUtf16(contentData.Ptr(),contentData.Length()); + contactNote.setNote(note); + return contactNote; + } + else if( aDetail == QContactFamily::DefinitionName ) //--Contact Family----------------------------- + { + QContactFamily contactFamily; + + for(int i = 0 ; i < iParameters->iContactFields.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details + { + if(iParameters->iContactFields.at(i).definitionName() == QContactFamily::DefinitionName && iParameters->iContactFields.at(i).value(QContactDetail::FieldContext) == aFieldContext ) + { + contactFamily = iParameters->iContactFields.at(i); + } + } + contentData.Set(iEngine->RandomString((CCreatorEngine::TRandomStringType) aRand)); + QString familyData = QString::fromUtf16(contentData.Ptr(),contentData.Length()); + if(aFieldString == QContactFamily::FieldSpouse ) + { + if( contactFamily.spouse().isEmpty() ) + { + contactFamily.setSpouse( familyData ); + } + } + if(aFieldString == QContactFamily::FieldChildren ) + { + QStringList children = contactFamily.children(); + children.append( familyData ); + contactFamily.setChildren( children ); + } + + return contactFamily; + } + + if( aDetail == QContactAvatar::DefinitionName) //--Contact Picture----------------------------- + { + RFs& fs = CCoeEnv::Static()->FsSession(); + QContactAvatar contactAvatar; + TBuf srcPath; + iEngine->RandomPictureFileL(srcPath); + TBuf destPath(KTempPath); + + if(!BaflUtils::FolderExists( fs, destPath )) + { + BaflUtils::EnsurePathExistsL( fs, destPath ); + } + + TInt err=BaflUtils::CopyFile( fs, srcPath, destPath ); + + TParse temp; + temp.Set( srcPath,NULL,NULL ); + destPath.Append(temp.NameAndExt()); + + QString avatarFile = QString::fromUtf16( destPath.Ptr(),destPath.Length() ); + + QPixmap avatarPix(avatarFile); + + contactAvatar.setAvatar(avatarFile); + contactAvatar.setPixmap(avatarPix); + + return contactAvatar; + } + if( aDetail == QContactAnniversary::DefinitionName) + { + QContactAnniversary contactAnniversary; + QDate date; + TTime datetime = iEngine->RandomDate( CCreatorEngine::EDateFuture ); + date.setDate( datetime.DateTime().Year(),(int) (datetime.DateTime().Month()+1), datetime.DateTime().Day() ); + //contactAnniversary.setEvent(QContactAnniversary::); + contactAnniversary.setOriginalDate( date ); + return contactAnniversary; + } + + + + + + return contactDetail; + } +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- +void CCreatorPhonebook::StoreLinksForDeleteL( RArray& aLinks, TUid aStoreUid ) + { + LOGSTRING("Creator: CCreatorPhonebook::StoreLinksForDeleteL"); + CDictionaryFileStore* store = iEngine->FileStoreLC(); + User::LeaveIfNull( store ); + + // backup previous contact links from store + // otherwise they would be overwritten when calling out.WriteL + TUint32 previousLink; + if ( store->IsPresentL( aStoreUid ) ) + { + RDictionaryReadStream in; + in.OpenLC( *store, aStoreUid ); + bool r = false; + TRAP_IGNORE( + do{ //iContactMngr->CreateLinksLC( in )) != NULL ) // will leave with KErrEof + previousLink = in.ReadUint32L(); + iPreviousDeleteLinks.Append( previousLink ); + if(previousLink) + { + r=true; + } + else + { + r=false; + } + }while(r==true); ); + + CleanupStack::PopAndDestroy(); // in + } + + RDictionaryWriteStream out; + out.AssignLC( *store, aStoreUid ); + + // restore previous links + for ( TInt i = 0; i < iPreviousDeleteLinks.Count(); i++ ) + { + out.WriteUint32L( iPreviousDeleteLinks[i] ); + //CleanupStack::PopAndDestroy(); // PackLC + } + + // write new links + for(int i=0; i < aLinks.Count(); i++) + { + //TUint32 localId = (TUint32) aLinks[i]; + //out.WriteUint32L( aLinks[i] ); + out.WriteUint32L( aLinks[i] ); + } + out.CommitL(); + //CleanupStack::PopAndDestroy(); // aLinks.PackLC + CleanupStack::PopAndDestroy(); // out + + store->CommitL(); + + CleanupStack::PopAndDestroy( store ); + } + +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- +/*TInt CCreatorPhonebook::iPhoneNumberFields[] = + { + R_VPBK_FIELD_TYPE_LANDPHONEGEN, + R_VPBK_FIELD_TYPE_LANDPHONEHOME, + R_VPBK_FIELD_TYPE_LANDPHONEWORK, + R_VPBK_FIELD_TYPE_MOBILEPHONEGEN, + R_VPBK_FIELD_TYPE_MOBILEPHONEHOME, + R_VPBK_FIELD_TYPE_MOBILEPHONEWORK, + R_VPBK_FIELD_TYPE_FAXNUMBERGEN, + R_VPBK_FIELD_TYPE_FAXNUMBERHOME, + R_VPBK_FIELD_TYPE_FAXNUMBERWORK, + R_VPBK_FIELD_TYPE_PAGERNUMBER, + R_VPBK_FIELD_TYPE_VIDEONUMBERGEN, + R_VPBK_FIELD_TYPE_VIDEONUMBERHOME, + R_VPBK_FIELD_TYPE_VIDEONUMBERWORK, + R_VPBK_FIELD_TYPE_VOIPGEN, + R_VPBK_FIELD_TYPE_VOIPHOME, + R_VPBK_FIELD_TYPE_VOIPWORK, + R_VPBK_FIELD_TYPE_ASSTPHONE, + R_VPBK_FIELD_TYPE_CARPHONE + };*/ + +/*TInt CCreatorPhonebook::iUrlFields[] = + { + R_VPBK_FIELD_TYPE_URLGEN, + R_VPBK_FIELD_TYPE_URLHOME, + R_VPBK_FIELD_TYPE_URLWORK + };*/ + +/*TInt CCreatorPhonebook::iEmailFields[] = + { + R_VPBK_FIELD_TYPE_EMAILGEN, + R_VPBK_FIELD_TYPE_EMAILHOME, + R_VPBK_FIELD_TYPE_EMAILWORK + };*/ + +void CCreatorPhonebook::InitializeContactParamsL(/*CCreatorModuleBaseParameters* aParameters*/) + { + LOGSTRING("Creator: CCreatorPhonebook::InitializeContactParamsL"); + + iParameters = new (ELeave) CPhonebookParameters; + + iParameters->iNumberOfPhoneNumberFields = iNumberOfPhoneNumberFields; + iParameters->iNumberOfURLFields = iNumberOfURLFields; + iParameters->iNumberOfEmailAddressFields = iNumberOfEmailAddressFields; + + + QContactName name; + + TPtrC fname = iEngine->RandomString(CCreatorEngine::EFirstName); + TPtrC lname = iEngine->RandomString(CCreatorEngine::ESurname); + QString firstname = QString::fromUtf16( fname.Ptr(), fname.Length() ); + QString lastname = QString::fromUtf16( lname.Ptr(), lname.Length() ); + + name.setFirstName(firstname); + name.setLastName(lastname); + + if( iAddAllFields ) + { + TInt textFieldCount = sizeof(CreatorPbkMiscTextFields) / sizeof(DetailFieldInfo); + for( TInt tfIndex = 0; tfIndex < textFieldCount; ++tfIndex ) + { + QContactDetail field = CreateContactDetail( CreatorPbkMiscTextFields[tfIndex].iDetail, CreatorPbkMiscTextFields[tfIndex].iFieldContext, CreatorPbkMiscTextFields[tfIndex].iFieldString, CreatorPbkMiscTextFields[tfIndex].iRandomType ); + bool replace = false; + for(int i = 0 ; i< iParameters->iContactFields.count() ; i++) + { + if( !field.isEmpty() && field.definitionName() == iParameters->iContactFields.at(i).definitionName() ) + { + QString context = field.value(QContactDetail::FieldContext); + bool isContextEmpty = context.isEmpty(); + if( isContextEmpty || ( field.value(QContactDetail::FieldContext) == iParameters->iContactFields.at(i).value(QContactDetail::FieldContext)) ) + { + //replace + iParameters->iContactFields.replace(i,field); + replace = true; + } + } + } + if(!replace) + { + if(!field.isEmpty()) + { + iParameters->iContactFields.append(field); + } + } + } + // Add binary fields: + QContactDetail field = CreateContactDetail(QContactAvatar::DefinitionName,"","",0); + iParameters->iContactFields.append(field); + + // Add date-time fields: + QContactDetail fieldAnniv = CreateContactDetail(QContactAnniversary::DefinitionName,"","",0); + iParameters->iContactFields.append(fieldAnniv); + //*************************************************************************** + // Add text fields: + /* TInt textFieldCount = sizeof(CreatorVPbkMiscTextFields) / sizeof(FieldInfo); + for( TInt tfIndex = 0; tfIndex < textFieldCount; ++tfIndex ) + { + //QContactDetail field; + CCreatorContactField* field = CCreatorContactField::NewL(CreatorVPbkMiscTextFields[tfIndex].iFieldCode, KNullDesC); + CleanupStack::PushL(field); + field->SetRandomParametersL(CCreatorContactField::ERandomLengthDefault); + iParameters->iContactFields.AppendL(field); + CleanupStack::Pop(field); + } + + // Add binary fields: + TInt binFieldCount = sizeof(CreatorVPbkBinaryFields) / sizeof(TInt); + for( TInt bfIndex = 0; bfIndex < binFieldCount; ++bfIndex ) + { + CCreatorContactField* field = CCreatorContactField::NewL(CreatorVPbkBinaryFields[bfIndex], KNullDesC8); + CleanupStack::PushL(field); + field->SetRandomParametersL(CCreatorContactField::ERandomLengthDefault); + iParameters->iContactFields.AppendL(field); + CleanupStack::Pop(field); + } + + // Add date-time fields: + TInt dtFieldCount = sizeof(CreatorVPbkDateTimeFields) / sizeof(TInt); + for( TInt dtIndex = 0; dtIndex < dtFieldCount; ++dtIndex ) + { + AddFieldToParamsL(CreatorVPbkDateTimeFields[dtIndex], iEngine->RandomDate(CCreatorEngine::EDateFuture)); + } + + AddFieldToParamsL(R_VPBK_FIELD_TYPE_CALLEROBJIMG, KNullDesC8); + AddFieldToParamsL(R_VPBK_FIELD_TYPE_THUMBNAILPIC, KNullDesC8); + AddFieldToParamsL(R_VPBK_FIELD_TYPE_CALLEROBJTEXT, firstname);*/ + //*************************************************************************** + + //iParameters->iContactFields.append( name ); + } + else + { + iParameters->iContactFields.append( name ); + } + + // Phone numbers: + TInt phoneFieldCount = sizeof(CreatorPhoneNumberFields) / sizeof(PhoneNumInfo); + + TInt inc=0; + for( int i=0; i= phoneFieldCount ) + { + inc = 0; + } + + QContactPhoneNumber phoneNum; + TPtrC phoneNumber = iEngine->RandomString(CCreatorEngine::EPhoneNumber); + QString phone = QString::fromUtf16( phoneNumber.Ptr(), phoneNumber.Length() ); + + phoneNum.setContexts(CreatorPhoneNumberFields[inc].iFieldContext); + phoneNum.setSubTypes(CreatorPhoneNumberFields[inc].iFieldString); + + + phoneNum.setNumber( phone ); + + iParameters->iContactFields.append( phoneNum ); + inc++; + } + + + + // URLs: + for( int i=0; iCreateHTTPUrlLC(); + QString urlAddress = QString::fromUtf16(url->Ptr(), url->Length() ); + contactUrl.setUrl( urlAddress ); + iParameters->iContactFields.append( contactUrl ); + CleanupStack::PopAndDestroy(url); + } + + // EMail addresses: + for( int i=0; iCreateEmailAddressLC();; + /*TPtrC comp = iEngine->RandomString(CCreatorEngine::ECompany); + QString company = QString::fromUtf16( comp.Ptr(), comp.Length() ); + QString address = firstname+"@"+company+".com";*/ + //CreatorPbkEmailFields + QString address = QString::fromUtf16(addr->Ptr(), addr->Length() ); + emailAddr.setEmailAddress( address ); + emailAddr.setContexts(CreatorPbkEmailFields[i%2]); + iParameters->iContactFields.append( emailAddr ); + CleanupStack::PopAndDestroy(addr); + } + + } + + + +// Checks if the link is a group or not +TBool CCreatorPhonebook::IsContactGroupL() + { + return EFalse; + } + +TInt CCreatorPhonebook::CreateGroupEntryL(CCreatorModuleBaseParameters *aParameters) + { + LOGSTRING("Creator: CCreatorVirtualPhonebook::CreateGroupEntryL"); + delete iParameters; + iParameters = 0; + + CPhonebookParameters* parameters = (CPhonebookParameters*) aParameters; + + if( !parameters ) + { + iParameters = new (ELeave) CPhonebookParameters; + iParameters->iContactsInGroup = iContactsInGroup; + TPtrC gname = iEngine->RandomString(CCreatorEngine::EGroupName); + iParameters->iGroupName = QString::fromUtf16( gname.Ptr(),gname.Length() ); + iParameters->iGroupName += " #"; + int rnd = iEngine->RandomNumber(1000, 9999); + iParameters->iGroupName += QString::number( rnd, 10 ); + parameters = iParameters; + } + + TInt err = KErrNone; + + // create a new contact group + QContact newGroup; + newGroup.setType(QContactType::TypeGroup); + QContactName newGroupName; + newGroupName.setCustomLabel( iParameters->iGroupName ); + newGroup.saveDetail(&newGroupName); + iContactMngr->saveContact(&newGroup); + QContactLocalId newGroupId = newGroup.localId(); + + + // define amounts of contacts to be added to the group + TInt amountOfContactsToBeAdded = 0; + if (parameters->iContactsInGroup == KCreateRandomAmountOfGroups) + { + amountOfContactsToBeAdded = iEngine->RandomNumber(30); + } + else + { + amountOfContactsToBeAdded = parameters->iContactsInGroup; + } + + if( parameters->iLinkIds.Count() > 0 ) + { + for( TInt i = 0; i < parameters->iLinkIds.Count(); ++i ) + {/* + const CCreatorContactSet& set = ContactLinkCache::Instance()->ContactSet(parameters->iLinkIds[i].iLinkId); + + const RPointerArray& links = set.ContactLinks(); + TInt numberOfExplicitLinks = links.Count(); // Number of defined contacts in contact-set + TInt numberOfExistingContacts = set.NumberOfExistingContacts(); // Number of existing contacts in contact-set + TInt maxAmount = numberOfExplicitLinks + numberOfExistingContacts; + + if( parameters->iLinkIds[i].iLinkAmount > 0 ) + maxAmount = parameters->iLinkIds[i].iLinkAmount; // Max amount is limited + + TInt addedMembers = 0; + + for( TInt j = 0; j < links.Count() && addedMembers < maxAmount; ++j ) + { + MVPbkContactLink* link = links[j]; + if( link && IsContactGroupL(*link) == EFalse ) + { + TRAPD(err, newGroup->AddContactL(*link)); + if( err != KErrAlreadyExists ) + { + // Ignore "allready exists" -error + User::LeaveIfError(err); + ++addedMembers; + } + } + } + if( addedMembers < maxAmount ) + { + // Add existing contacts, withing the limits set by maxAmount: + amountOfContactsToBeAdded += maxAmount - addedMembers; + }*/ + } + } + if( amountOfContactsToBeAdded > 0 ) + { + QList contacts = iContactMngr->contactIds(); + QContactRelationshipFilter rFilter; + rFilter.setRelationshipType(QContactRelationship::HasMember); + rFilter.setRelatedContactRole(QContactRelationshipFilter::First); + rFilter.setRelatedContactId( newGroup.id() ); + + int cnt = 0; + for(int i=0; cnt < amountOfContactsToBeAdded && i < contacts.count() ; i++ ) + { + QContact contact = iContactMngr->contact( iContactMngr->contactIds().at(i) ); + if( iContactMngr->error() == QContactManager::DoesNotExistError ) + { + + } + else + { + QList relationships = contact.relationships(QContactRelationship::HasMember); + if(!relationships.count() && contact.type() == QContactType::TypeContact ) //just for contacts that are not in relationship - not in group yet + { + QContactRelationship* contactRel = new QContactRelationship(); + contactRel->setRelationshipType(QContactRelationship::HasMember); + contactRel->setFirst(newGroup.id()); + contactRel->setSecond(contact.id()); + iContactMngr->saveRelationship( contactRel ); + delete contactRel; + cnt++; + } + } + } + + // group members and their count + QList groupMemberIds = iContactMngr->contactIds( rFilter ); + int testcnt = groupMemberIds.count(); + + + } + + // store the link to contact, so that Creator is able to delete + // it when user requests deletion of contacts that were created with Creator + iContactGroupsToDelete.Append( (TUint32)newGroupId ); + + return err; + } + +//---------------------------------------------------------------------------- + +TInt CCreatorPhonebook::CreateSubscribedContactEntryL(CCreatorModuleBaseParameters* /*aParameters*/) + { + LOGSTRING("Creator: CCreatorPhonebook::CreateSubscribedContactEntryL"); + + return KErrNotSupported; + } + +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- +