creator/src/creator_phonebook.cpp
branchRCL_3
changeset 21 b3cee849fa46
parent 20 48060abbbeaf
child 22 fad26422216a
--- 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 <CPbkContactIter.h>
-
-//----------------------------------------------------------------------------
-
-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; i<iParameters->iNumberOfPhoneNumberFields; 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; j<iParameters->iNumberOfURLFields; j++)
-        AddFieldToContactItemL (*newContact, EPbkFieldIdURL, iParameters->iContactURL->Des());
-
-    for (TInt k=0; k<iParameters->iNumberOfEmailAddressFields; 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; y<amountOfContactsToBeAdded; y++) 
-            { 
-            // add contact to group 
-            iContactDBEngine->AddContactToGroupL((*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 );
-    }