ipsservices/ipssosplugin/inc/ipsplgmessagepartstoreroperation.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 04 Oct 2010 00:05:37 +0300
changeset 75 47d84de1c893
parent 20 ecc8def7944a
permissions -rw-r--r--
Revision: 201037 Kit: 201039

/*
 * Copyright (c) 2009 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: Class responsible for storing message part content asynchronously.
 * It can store text/plain and text/html body parts.
 *
 */

#include <e32std.h>
#include <e32base.h>
#include <msvapi.h>

#ifndef IPSPLGMESSAGEPARTSTOREOPERATION_H_
#define IPSPLGMESSAGEPARTSTOREOPERATION_H_

class CFSMailPlugin;
class CFSMailMessage;
class CFSMailMessagePart;
class MFSMailRequestObserver;

NONSHARABLE_CLASS( CIpsPlgMessagePartStorerOperation ) : public CIpsPlgBaseOperation
    {
public:
    /**
     * Symbian 2nd phase constructor
     * @param aMsvSession
     * @param aObserverRequestStatus
     * @param aPlugin
     * @param aMessageParts - ownership is taken from caller
     * @param aRequestId
     * @return CIpsPlgMessagePartStorerOperation*
     */
    static CIpsPlgMessagePartStorerOperation* NewL(CMsvSession& aMsvSession,
            TRequestStatus& aObserverRequestStatus, CFSMailPlugin& aPlugin,
            RPointerArray<CFSMailMessagePart> &aMessageParts,
            MFSMailRequestObserver& aFSOperationObserver,
            const TInt aRequestId);

    /**
     * Symbian 2nd phase constructor
     * @param aMsvSession
     * @param aObserverRequestStatus
     * @param aPlugin
     * @param aMessageParts - ownership is taken from caller
     * @param aRequestId
     * @return CIpsPlgMessagePartStorerOperation*
     */
    static CIpsPlgMessagePartStorerOperation* NewLC(CMsvSession& aMsvSession,
            TRequestStatus& aObserverRequestStatus, CFSMailPlugin& aPlugin,
            RPointerArray<CFSMailMessagePart> &aMessageParts,
            MFSMailRequestObserver& aFSOperationObserver,
            const TInt aRequestId);

    /**
     * Class destructor
     */
    virtual ~CIpsPlgMessagePartStorerOperation();

    /**
     * Implements cancellation of an outstanding request
     */
    void DoCancel();

    /**
    * From CMsvoperation
    */
    virtual const TDesC8& ProgressL();

    // <qmail>
    /**
    * From CIpsPlgBaseOperation
    */
    virtual const TDesC8& GetErrorProgressL(TInt aError);

    /**
    * From CIpsPlgBaseOperation
    */
    virtual TFSProgress GetFSProgressL() const;

    /**
     * From CIpsPlgBaseOperation
     * Returns operation type
     */
    TIpsOpType IpsOpType() const;    
    // </qmail>

protected:

    /**
     * Default constructor
     * @param aMsvSession
     * @param aObserverRequestStatus
     * @param aPlugin
     * @param aMessageParts - ownership is taken from caller
     * @param aRequestId
     */
    CIpsPlgMessagePartStorerOperation(CMsvSession& aMsvSession,
            TRequestStatus& aObserverRequestStatus, CFSMailPlugin& aPlugin,
            RPointerArray<CFSMailMessagePart> &aMessageParts,
            MFSMailRequestObserver& aFSOperationObserver,
            const TInt aRequestId);

private:

    /**
     * Initialization and construction of all leaving members
     */
    void ConstructL();

    /**
     * Handles an active object's request completion event
     */
    void RunL();

    /**
     * Handles a leave occurring in the request completion event handler
     */
    TInt RunError(TInt aError);
    
    /**
	 * Stores next part content in message store
	 * @return returns EFalse if there are none message parts
	 */
    TBool StoreNextPartL();
    
    /**
	 * Stores text plain content in message store
	 * @param CFSMailMessagePart* aPart to be stored
	 */
    void StoreTextPlainPartL(CFSMailMessagePart* aPart);
    
    /**
     * Stores text html content in message store
     * @param CFSMailMessagePart* aPart to be stored
     */
    void StoreTextHtmlPartL(CFSMailMessagePart* aPart);

private:
    //data
    CFSMailPlugin& iPlugin;
    
    // Array of message parts to be stored
    RPointerArray<CFSMailMessagePart> iMessageParts;

    MFSMailRequestObserver& iFSOperationObserver;
    
    // Execution index stores current progres
    TInt iExecutionIndex;
    
    // Data buffer for async operations
    HBufC8* iDataBuffer;

    // <qmail>
    TFSProgress iFSProgress;
    // </qmail>
    };

#endif /* IPSPLGMESSAGEPARTSTOREOPERATION_H_ */