diff -r 000000000000 -r 72b543305e3a messagingappbase/smartmessaging/vcardbc/inc/vcardvpbutil.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/smartmessaging/vcardbc/inc/vcardvpbutil.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,326 @@ +/* +* Copyright (c) 2006-2006 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: VirtualPhonebook support for importing VCard messages +* +*/ + + + +#ifndef C_VCARDVPBUTIL_H +#define C_VCARDVPBUTIL_H + +#include +#include // for RFile + +//Phonebook2 API includes + +#include +#include +#include + +#include "vcardbiocontrol.hrh" + +// FORWARD DECLARATIONS +class CVPbkVCardEng; +class CVPbkContactManager; +class MVPbkStoreContact; +class CPbk2StoreConfiguration; +class MVPbkContactStoreList; +class RFileReadStream; +class MVPbkBaseContactField; +class MVPbkFieldType; +class CVPbkContactStoreUriArray; + +NONSHARABLE_CLASS(CVCardVpbUtil): + public CBase, + public MVPbkContactStoreListObserver, + public MVPbkSingleContactOperationObserver, + public MVPbkBatchOperationObserver + { + +public: + + //construction and destruction + + static CVCardVpbUtil* NewL(); + + // Destructor + ~CVCardVpbUtil(); + + + // public API + + /** + * Imports the VCard to both the phone store (for display) and + * Default store (for storing) + * + * @since S60 3.1 + * @param TVCardBCBusinessCardType aVCardType + * The type of imported vcard + * @param aFileHandle The filehandle for the VCard file + * @return void + */ + void ImportVCardL( TVCardBCBusinessCardType aVCardType, RFile aFileHandle ); + + /** + * Commits the VCard to store + * + * @since S60 3.1 + * @return ETrue if contact was stored, EFalse if not + */ + TBool CommitVCardToStoreL(); + + /** + * Returns the imported contact data from the + * Phone default store + * + * @since S60 3.1 + * @return const MVPbkStoreContact contact item + * Ownership is not transferred + */ + MVPbkStoreContact* ContactData() const; + + /** + * Check for contact item fields if they are empty + * @return ETrue for empty contact item, + * EFalse for not empty + */ + TBool IsContactItemEmpty(); + + /** + + // from base class MVPbkContactStoreListObserver + + /** + * Called when the opening process is complete, ie. all stores have been reported + * either failed or successful open. + */ + void OpenComplete(); + + /** + * Called when a contact store is ready to use. + */ + void StoreReady( MVPbkContactStore& aContactStore ); + + /** + * Called when a contact store becomes unavailable. + * Client may inspect the reason of the unavailability and decide whether or not + * it will keep the store opened (ie. listen to the store events). + * @param aContactStore The store that became unavailable. + * @param aReason The reason why the store is unavailable. + * This is one of the system wide error codes. + */ + void StoreUnavailable( MVPbkContactStore& aContactStore, TInt aReason ); + + /** + * Called when changes occur in the contact store. + * @see TVPbkContactStoreEvent + * @param aContactStore The store the event occurred in. + * @param aStoreEvent Event that has occured. + */ + void HandleStoreEventL( + MVPbkContactStore& aContactStore, + TVPbkContactStoreEvent aStoreEvent ); + + + // from base class MVPbkSingleContactOperationObserver + + /** + * Called when operation is completed. + * + * @param aOperation the completed operation. + * @param aContact the contact returned by the operation. + * Client must take the ownership immediately. + * + * !!! NOTICE !!! + * If you use Cleanupstack for MVPbkStoreContact + * Use MVPbkStoreContact::PushL or + * CleanupDeletePushL from e32base.h. + * (Do Not Use CleanupStack::PushL(TAny*) because + * then the virtual destructor of the M-class + * won't be called when the object is deleted). + */ + void VPbkSingleContactOperationComplete( + MVPbkContactOperationBase& aOperation, + MVPbkStoreContact* aContact ); + + /** + * Called if the operation fails. + * + * @param aOperation the failed operation. + * @param aError error code of the failure. + */ + void VPbkSingleContactOperationFailed( + MVPbkContactOperationBase& aOperation, + TInt aError ); + + + // from base class MVPbkBatchOperationObserver + + void StepComplete( MVPbkContactOperationBase& aOperation, + TInt aStepSize ); + + TBool StepFailed( + MVPbkContactOperationBase& aOperation, + TInt aStepSize, TInt aError ); + + void OperationComplete( MVPbkContactOperationBase& aOperation ); + + /** + * Returns formatted contents of aField. + * @param aField the field to format + * @return formatted content of the field. + */ + TPtrC FormatFieldContentL(const MVPbkBaseContactField& aField); + +private: + + // private construction + + /** + * The constructor. + */ + CVCardVpbUtil(); + + /// Second phase constructor. + void ConstructL(); + + + // private API + + /** + * Checking whether the default contact store + * supports all imported fields + * + * @return ETrue if all the fields are supported + * EFalse if some fields are not supported + */ + TBool DefaultStoreSupportsAllFieldsL(); + + /** + * Implementation to import the contact data + * to phone internal contact database + * + * @param aStream The stream from which data is imported + */ + void VCardToPhoneStoreL( RFileReadStream& aStream ); + + /** + * Implementation to import the contact data + * to phone default contact database + * this can be eg. SIM store + * + ** @param iStream The stream from which data is imported + */ + void VCardToDefaultStoreL( RFileReadStream& aStream ); + + /** + * Function to start the Active Scheduler + * and to trigger a leave if asynchronius + * operation returned with a error code + */ + void StartSchedulerAndDecideToLeaveL(); + + /** + * Checking of the field type. + * @param aFieldType The field to be checked + * @param aResourceId The resource id that it is checked against + * @return TBool Field type matching status + */ + TBool IsFieldTypeL( + const MVPbkFieldType& aFieldType, + TInt aResourceId) const; + + TPtr ReallocBufferL(TInt aNewSize); + + /** + * Panic notifying functionality + */ + static void Panic( TInt aReason ); + TBool StoreFullL(); + void ShowNoteL( TInt aResourceId, const TDesC& aString ); + +private: // data + + /** + * last error code from asynchronous operations + */ + TInt iLastError; + + /** + * Current status to take action to observed event + */ + TBool iRespondToObserverEvent; + + /** + * The type of imported VCard + */ + TVCardBCBusinessCardType iVCardType; + + /** + * VirtualPhonebook contact manager API + * Own. + */ + CVPbkContactManager* iContactManager; + + /** + * VirtualPhonebook VCard Importing engine + * Own. + */ + CVPbkVCardEng* iVCardEngine; + + /** + * Default contact store for saved contacts + * Own. + */ + MVPbkContactStore* iDefaultContactStore; + + /** + * Shown contact store ie. phone memory Agenda database + * This is for display purposes and is not used to save data + * Own. + */ + MVPbkContactStore* iShowContactStore; + + /** + * Array of imported contacts to show on screen + * Own. + */ + RPointerArray iContactsToShow; + + /** + * Array of imported contacts to store on device + * Own. + */ + RPointerArray iContactsToStore; + + /** + * List of all opened contact stores. Note that they might not be succesfully opened. + * Own. + */ + MVPbkContactStoreList* iStoreList; + + /** + * Buffer for handling line strings + * Own. + */ + HBufC* iBuffer; + + /** + * List of all succesfully opened contact stores. + * Own. + */ + CVPbkContactStoreUriArray* iAvailableUris; + }; +#endif //C_VCARDVPBUTIL_H