--- /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 <e32base.h>
+#include <s32file.h> // for RFile
+
+//Phonebook2 API includes
+
+#include <MVPbkSingleContactOperationObserver.h>
+#include <MVPbkContactStoreListObserver.h>
+#include <MVPbkBatchOperationObserver.h>
+
+#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<MVPbkStoreContact> iContactsToShow;
+
+ /**
+ * Array of imported contacts to store on device
+ * Own.
+ */
+ RPointerArray<MVPbkStoreContact> 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