diff -r 5b6f26637ad3 -r f4a778e096c2 contactextensions/predefinedcontacts/inc/PdcEngine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contactextensions/predefinedcontacts/inc/PdcEngine.h Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2007 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: Predefined contacts engine (state machine) +* +*/ + +#ifndef C_PDCENGINE_H +#define C_PDCENGINE_H + +// System includes +#include //for iErrorArray +#include // CActive +#include // RFs +#include // MVPbkContactStoreObserver +#include + +// Forward declarations +class CVPbkContactManager; +class CPdcVCardImporter; +class CPdcXmlImporter; +class CPdcData; +class MVPbkContactStore; +class CVPbkContactLinkArray; +class CPdcContactDeletion; + +/** + * Predefined Contacts engine + * This class as a state machine for the reading of the + * predefined contacts from file, and adding the + * contacts to the contacts database by the delegation of + * the tasks to the relevent classes. + */ +NONSHARABLE_CLASS( CPdcEngine ): public CActive, + public MVPbkContactStoreObserver + { +public: + /** + * Current state of the engine is + * represented by an enumeration. + */ + enum TPdcEngineState + { + EOpeningContacts, + EDeleteOldContacts, + EGettingFileLocation, + EReadingVCards, + EReadingXML, + EUpdateData, + EDeleteStoredContact, + EFinish + }; + +public: + /** + * Symbian 1st phase constructor + * @return Self pointer to CPdcEngine pushed to + * the cleanup stack. + */ + static CPdcEngine* NewLC(); + + /** + * Destructor. + */ + virtual ~CPdcEngine(); + +public: + /** + * Checks if the predefined contacts need to be added. + * @return ETrue if the predefined contacts need to be added + */ + TBool PredefinedContactsNeedAddingL(); + + /** + * Starts the asyncronous process of reading and adding the + * predefined contacts to the contact model + */ + void AddPredefinedContactsL(); + + /** + * Starts the asyncronous process of reading and adding the + * predefined contacts to the contact model + * @param aStatus TRequestStatus of caller (called by ECom + * plugin starting mechanism. + */ + void AddPredefinedContactsL( TRequestStatus& aStatus ); + +private: // C++ constructor and the Symbian second-phase constructor + CPdcEngine(); + void ConstructL(); + +private: // private member functions + void SelfComplete(); + + void DeleteContactsL(); + void GetFileLocationL(); + void ReadVCardsL(); + void ReadXmlL(); + void UpdateDataL(); + void Finish( TInt aError ); + + void DisplayErrorNoteL( TInt aError, TInt aErrorPosition, + TBool errorCannotReserve ); + + /** + *CPdcEngine::DeleteStoredContactsL + * Called when error occur iwhile reading XML or vcard file. + */ + void DeleteStoredContactsL(); + +private: // From CActive + void DoCancel(); + void RunL(); + TInt RunError( TInt aError ); + +private: // from MVPbkContactStoreObserver + void StoreReady( MVPbkContactStore& aContactStore ); + void StoreUnavailable( MVPbkContactStore& aContactStore, TInt aReason ); + void HandleStoreEventL( MVPbkContactStore& aContactStore, + TVPbkContactStoreEvent aStoreEvent ); + +private: // data + /// Current state of engine + TPdcEngineState iEngineState; + /// File system + RFs iFs; + /// Own: Contact manager + CVPbkContactManager* iContactManager; + /// Own: Contact store + MVPbkContactStore* iContactStore; + /// Own: directory containing predefined contacts + HBufC* iFileDirectory; + /// Own: vCard importer + CPdcVCardImporter* iVCardImporter; + /// Own: Xml importer + CPdcXmlImporter* iXmlImporter; + /// Own: Data checker + CPdcData* iPdcData; + /// Own: Ids of the contacts that have been added + CVPbkContactLinkArray* iLinkArray; + /// Own: Contact bulk deleter + CPdcContactDeletion* iContactDeleter; + /// Ref: TRequestStatus of caller + TRequestStatus* iCallerStatus; + /// Judge the type of deletion operator + TBool iDeletedStoredContact; + }; + +#endif // C_PDCENGINE_H