ipsservices/ipssosplugin/inc/ipsplgmsgiterator.h
changeset 0 8466d47a6819
child 8 e1b6206813b4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsservices/ipssosplugin/inc/ipsplgmsgiterator.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,266 @@
+/*
+* Copyright (c) 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:  Freestyle message iterator implementation for Symbian Message
+*                store
+*
+*/
+
+
+#ifndef IPSPLGMSGITERATOR_H
+#define IPSPLGMSGITERATOR_H
+
+#include <e32def.h>             // NONSHARABLE_CLASS
+//<cmail>
+#include "MFSMailIterator.h"    // mfsmailiterator
+//</cmail>
+
+class TIpsPlgMsgKey;
+class TIpsPlgMsgSwap;
+class CMsvEntry;
+class CMsvSession;
+class CIpsPlgMsgMapper;
+class CMsvEntrySelection;
+class CIpsPlgSosBasePlugin;
+
+/**
+ *  Freestyle message iterator implementation for Symbian Message store
+ *  
+ *  Provides a service to read messages from Symbian Message Store
+ *  according to the iterator pattern in the specified order.
+ *
+ *  @code
+ *   TMsvId folderId;
+ *   CMsvSession* msvSession;
+ *   RArray<TFSMailSortCriteria> sortCriteria;
+ *   RPointerArray<CFSMailMessage> messages;
+ *   TBool moreAvailable;
+ *   ..
+ *   CMsvEntry* folderEntry = msvSession->GetEntryL( folderId );
+ *   CIpsPlgMsgIterator* iterator = CIpsPlgMsgIterator::NewL(
+ *       entry, EFSMsgDataDate, sortCriteria );
+ *   CleanupStack::PushL( iterator );
+ *   // 'Empty' TFSMailId can be used to refer to the first message
+ *   moreAvailable = iterator->NextL( TFSMailId(), KIteratorBlockSize, 
+ *       messages );
+ *   CleanupStack::PopAndDestroy( iterator );
+ *  @endcode
+ *
+ *  @lib ipssosplugin.lib
+ *  @since 
+ */
+NONSHARABLE_CLASS( CIpsPlgMsgIterator )
+    : public CBase, public MFSMailIterator
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * @param aPlugin     Owning plugin
+     * @param aMsvSession Symbian messaging framework session
+     * @param aMailboxId  Mailbox identifier
+     * @param aFolderId   Identifier of the folder to be iterated
+     * @param aDetails    Specifies the data to be included to the message 
+     *                    objects returned by the iterator
+     * @param aSorting    Specifies the order of the messages in which they are
+     *                    iterated
+     */
+     static CIpsPlgMsgIterator* NewL(
+        CIpsPlgSosBasePlugin& aPlugin,
+        CMsvSession& aMsvSession,
+        const TFSMailMsgId& aMailboxId,
+        const TFSMailMsgId aFolderId,
+        const TFSMailDetails aDetails,
+        const RArray<TFSMailSortCriteria>& aSorting);
+    
+    /**
+     * Two-phased constructor.
+     * @param aPlugin      Owning plugin
+     * @param aFolderEntry Pointer to the folder entry to be iterated. 
+     *                     The ownership is transferred to the iterator
+     * @param aMailboxId  Mailbox identifier
+     * @param aDetails     Specifies the data to be included to the message 
+     *                     objects returned by the iterator
+     * @param aSorting     Specifies the order of the messages in which they are
+     *                     iterated
+     */
+    static CIpsPlgMsgIterator* NewL(
+        CIpsPlgSosBasePlugin& aPlugin,
+        CMsvEntry* aFolderEntry, 
+        const TFSMailMsgId& aMailboxId,
+        const TFSMailDetails aDetails,
+        const RArray<TFSMailSortCriteria>& aSorting);
+    
+
+    /**
+    * Destructor.
+    */
+    virtual ~CIpsPlgMsgIterator();
+
+public: // from MFSMailIterator
+
+    /**
+     * From MFSMailIterator
+     *
+     * @since 
+     */
+    virtual TBool NextL(
+        TFSMailMsgId aCurrentMessageId, 
+        TUint aCount, 
+        RPointerArray<CFSMailMessage>& aMessages);
+    
+    /**
+     * From MFSMailIterator
+     *
+     * @since 
+     */
+    virtual TBool NextL(
+        const TDesC&  aStartWith, 
+        TUint aCount, 
+        RPointerArray<CFSMailMessage>& aMessages);
+    
+    /**
+     * From MFSMailIterator
+     *
+     * @since 
+     */
+    virtual TBool PreviousL(
+        TFSMailMsgId aCurrentMessageId, 
+        TUint aCount, 
+        RPointerArray<CFSMailMessage>& aMessages);
+    
+    /**
+     * From MFSMailIterator
+     *
+     * @since 
+     */
+    virtual TBool PreviousL(
+        const TDesC&  aStartWith, 
+        TUint aCount, 
+        RPointerArray<CFSMailMessage>& aMessages);
+
+private:
+    /**
+     * Returns the requested number of messages after the given message
+     * from the message selection
+     * @param aStart          Index of the first message to be returned
+     * @param aMessageEntries Message ID array from which the messages are 
+     *                        selected
+     * @param aCount          Number of messages to be returned
+     * @param aMessages       Array of return values
+     * @return ETrue, if there are more messages after the last returned 
+     *         message
+     */
+    TBool NextL(
+        TInt aStart,
+        CMsvEntrySelection* aMessageEntries,
+        TUint aCount,
+        RPointerArray<CFSMailMessage>& aMessages);
+
+    /**
+     * Returns the requested number of messages before the given message
+     * from the message selection
+     * @param aStart          Index of the last message to be returned
+     * @param aMessageEntries Message ID array from which the messages are 
+     *                        selected
+     * @param aCount          Number of messages to be returned
+     * @param aMessages       Array of return values
+     * @return ETrue, if there are more messages after the last returned 
+     *         message
+     */
+    TBool PreviousL(
+        TInt aEnd,
+        CMsvEntrySelection* aMessageEntries,
+        TUint aCount,
+        RPointerArray<CFSMailMessage>& aMessages);
+
+    /**
+     * Sorts the message array
+     */
+    void Sort();
+    
+    /**
+     * Searches from the message array a message the subject or the sender
+     * of which starts with the search string.
+     * @param aMessageEntries Message ID array
+     * @param aStartWith      Search string
+     * @return KErrNotSupported: search not supported with the active sort 
+     *         criteria, KErrNotFound: matching message not found, KErrNone: 
+     *         matching message found
+     */
+    TInt SearchL( 
+        CMsvEntrySelection* aMessageEntries,
+        const TDesC&  aStartWith,
+        TInt& aIndex );
+    
+    CMsvEntrySelection* FilterMessagesL();
+
+private:
+
+    CIpsPlgMsgIterator();
+    CIpsPlgMsgIterator( 
+        CIpsPlgSosBasePlugin& aPlugin,
+        const TFSMailMsgId& aMailBoxId,
+        const TFSMailDetails aDetails,
+        const RArray<TFSMailSortCriteria>& aSorting );
+    
+    void ConstructL(        
+        CMsvSession& aMsvSession,
+        const TFSMailMsgId aFolderId,
+        const RArray<TFSMailSortCriteria>& aSorting);
+    
+    void ConstructL(        
+        CMsvEntry* aFolderEntry, 
+        const RArray<TFSMailSortCriteria>& aSorting);
+
+private: // data
+
+    
+    /**
+     * Owning plugin
+     */
+    CIpsPlgSosBasePlugin& iPlugin;
+
+    /**
+     * Entry of the folder to be iterated.
+     * Own.
+     */
+    CMsvEntry* iFolderEntry;
+    
+    /**
+     * Controls data to be returned
+     */    
+    TFSMailDetails iRequestedDetails;
+
+    /**
+     * Symbian -> FS message data converter
+     */    
+    CIpsPlgMsgMapper* iMsgMapper;
+
+    /**
+     * Sorting objects
+     */    
+    TIpsPlgMsgKey*  iMsgSortKey;
+    TIpsPlgMsgSwap* iMsgSwapper;
+    TBool           iSortingOn;
+    const RArray<TFSMailSortCriteria>& iSortingCriteria;
+
+    /**
+     * Mailbox identifier
+     */ 
+    const TFSMailMsgId iMailboxId;
+    
+    //Not Owned
+    CMsvSession* iMsvSession;
+    };
+
+#endif // IPSPLGMSGITERATOR_H