phonebookui/Phonebook2/CommandsExtension/inc/CPbk2vCardConverter.h
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/CommandsExtension/inc/CPbk2vCardConverter.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2005-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:  Phonebook 2 vCard converter.
+*
+*/
+
+
+#ifndef CPBK2VCARDCONVERTER_H
+#define CPBK2VCARDCONVERTER_H
+
+// INCLUDES
+#include "MPbk2vCardConverterObserver.h"
+#include <s32file.h>    // RFileWriteStream
+#include <MVPbkSingleContactOperationObserver.h>
+
+// FORWARD DECLARATIONS
+class CVPbkContactManager;
+class MVPbkStoreContact;
+class MVPbkBaseContactField;
+class CVPbkVCardEng;
+class CPbk2AttachmentFile;
+class CPbk2AttachmentFileArray;
+class MDesC16Array;
+class MPbk2ContactNameFormatter;
+class MPbk2ContactLinkIterator;
+
+// DATA DECLARATION
+
+/**
+ * Represents the different 'sending selected detail' menu selections.
+ */
+enum TPbk2SendvCardChoiceItemEnumerations
+    {
+    ESendCurrentItem = 0,
+    ESendAllData,
+    ESendAllDataWithoutPicture,
+    ECancel
+    };
+
+// CLASS DECLARATION
+/**
+ * Phonebook 2 vCard converter.
+ * Responsible for converting contacts to vCards..
+ */
+NONSHARABLE_CLASS(CPbk2vCardConverter) :
+        public CActive,
+        public MVPbkSingleContactOperationObserver
+    {
+    public: // Construction and destruction
+
+        /**
+         * Creates a new instance of this class.
+         *
+         * @param aFs               File server handle.
+         * @param aEngine           Virtual Phonebook contact manager.
+         * @param aVCardEngine      Business card engine.
+         * @param aNameFormatter    Contact name formatter.
+         * @return A new instance of this class
+         */
+        static CPbk2vCardConverter* NewL(
+                RFs& aFs,
+                CVPbkContactManager& aEngine,
+                CVPbkVCardEng& aVCardEngine,
+                MPbk2ContactNameFormatter& aNameFormatter );
+
+        /**
+         * Destructor.
+         */
+        ~CPbk2vCardConverter();
+
+    public: // Interface
+
+        /**
+         * Initializes this process to convert given contact to a vCard file.
+         *
+         * @param aContacts     Contact to convert.
+         * @param aField        Focused field of the contact (can be null).
+         * @param aDataToSend   The data to send mapped into
+         *                      TPbk2SendvCardChoiceItemEnumerations.
+         * @param aObserver     Observer.
+         */
+        void ConvertContactL(
+                const TArray<MVPbkStoreContact*> aContacts,
+                const MVPbkBaseContactField* aField,
+                TInt aDataToSend,
+                MPbk2vCardConverterObserver& aObserver );
+
+        /**
+         * Initializes this process to convert given contacts to vCard files.
+         *
+         * @param aContacts     Contacts to convert.
+         * @param aDataToSend   The data to send mapped into
+         *                      TPbk2SendvCardChoiceItemEnumerations.
+         * @param aObserver     Observer.
+         */
+        void ConvertContactsL(
+                const TArray<MVPbkStoreContact*> aContacts,
+                TInt aDataToSend,
+                MPbk2vCardConverterObserver& aObserver );
+
+        /**
+         * Initializes this process to convert given contacts to vCard files.
+         *
+         * @param aIterator     Contact link iterator.
+         * @param aDataToSend   The data to send mapped into
+         *                      TPbk2SendvCardChoiceItemEnumerations.
+         * @param aObserver     Observer.
+         */
+        void ConvertContactsL(
+                MPbk2ContactLinkIterator& aIterator,
+                TInt aDataToSend,
+                MPbk2vCardConverterObserver& aObserver );
+
+        /**
+         * Returns the created vCard file names when the process is finished.
+         *
+         * @return  vCard file names.
+         */
+        MDesC16Array& FileNames() const;
+
+        /**
+         * Resets the process and destroys any results generated.
+         */
+        void Reset();
+
+        /**
+         * Returns attachment file array.
+         *
+         * @return  Attachment file array.
+         */
+        CPbk2AttachmentFileArray& AttachmentFileArray();
+
+    private: // From CActive
+        void RunL();
+        void DoCancel();
+        TInt RunError(
+                TInt aError );
+
+    private: // From MVPbkSingleContactOperationObserver
+        void VPbkSingleContactOperationComplete(
+                MVPbkContactOperationBase& aOperation,
+                MVPbkStoreContact* aContact );
+        void VPbkSingleContactOperationFailed(
+                MVPbkContactOperationBase& aOperation,
+                TInt aError );
+
+    private: // Implementation
+        CPbk2vCardConverter(
+                RFs& aFs,
+                CVPbkContactManager& aEngine,
+                CVPbkVCardEng& aBCardEngine,
+                MPbk2ContactNameFormatter& aNameFormatter );
+        void ConstructL();
+        void CreatevCardFileL(
+                MVPbkStoreContact* aContact );
+        MVPbkStoreContact* PrepareContactL(
+                MVPbkStoreContact* aContact );
+        void FillTemporaryContactL(
+                MVPbkStoreContact& aDestContact,
+                const MVPbkStoreContact& aSourceContact,
+                const MVPbkBaseContactField& aSourceField ) const;
+        void AddFieldToContactL(
+                MVPbkStoreContact& aDestItem,
+                const MVPbkBaseContactField& aSourceField ) const;
+        void Start();
+        void HandleNextContactL(
+                MVPbkStoreContact* aContact );
+        void IssueRequest();
+        void FinalizeVCardExport();
+
+    private: // Data
+        /// Ref: Open file server session
+        RFs& iFs;
+        /// Ref: Virtual Phonebook contact manager
+        CVPbkContactManager& iEngine;
+        /// Ref: Business card engine
+        CVPbkVCardEng& iVCardEngine;
+        /// Own: Array of vCard files
+        CPbk2AttachmentFileArray* iVcardFiles;
+        /// Own: Contacts to convert
+        RPointerArray<MVPbkStoreContact> iContacts;
+        /// Ref: Contact name formatter
+        MPbk2ContactNameFormatter& iNameFormatter;
+        /// Ref: The field to send, can be null
+        const MVPbkBaseContactField* iField;
+        /// Own: The data to send
+        /// (mapped into TPbk2SendvCardChoiceItemEnumerations)
+        TInt iDataToSend;
+        /// Ref: Observer
+        MPbk2vCardConverterObserver* iObserver;
+        /// Own: Contact operation handle
+        MVPbkContactOperationBase* iContactOperation;
+        /// Own: Temp contact with fields to be sended
+        MVPbkStoreContact* iVCardContact;
+        /// Own: vCard file
+        CPbk2AttachmentFile* iVCardFile;
+        /// Own: File stream for vCard file writing
+        RFileWriteStream iFileWriteStream;
+        /// Own: Index of currently converted contact
+        TInt iOpIndex;
+        /// Own: Flag indicating is this field level operation
+        TBool iFieldLevelOperation;
+        /// Own: Flag indicating that the file writer has tried next drive
+        TBool iNextDriveTried;
+        /// Ref: Reference to selected contacts' iterator
+        MPbk2ContactLinkIterator* iIterator;
+        /// Own: Contact retrieve operation
+        MVPbkContactOperationBase* iRetrieveOperation;
+    };
+
+#endif // CPBK2VCARDCONVERTER_H
+
+// End of File