messagingappbase/smartmessaging/vcardbc/inc/vcardvpbutil.h
changeset 0 72b543305e3a
--- /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