emailservices/emailclientapi/inc/messageiterator.h
changeset 0 8466d47a6819
child 4 e7aa27f58ae1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/messageiterator.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,135 @@
+/*
+* 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: Email message iterator
+*
+*/
+
+#ifndef CMESSAGEITERATOR_H
+#define CMESSAGEITERATOR_H
+                                                                             
+#include <MMessageIterator.h>                                                                             
+#include "emailapidefs.h"
+#include "CFSMailCommon.h"
+
+using namespace EmailInterface;
+
+class MFSMailIterator;
+class CPluginData;
+class CFSMailMessage;
+class CEmailMessage;
+/**
+ * Iterator for email messages
+ * @since S60 v5.2
+ */
+NONSHARABLE_CLASS( CMessageIterator ) : public CBase, public MMessageIterator
+{
+public:
+    /**
+    * Constructor
+    * @param aIterator
+    * @param aPluginData
+    * @return new iterator
+    */
+    static CMessageIterator* NewL( MFSMailIterator* aIterator,
+                                   CPluginData& aPluginData,
+                                   TUint aCount );
+    
+    ~CMessageIterator();
+
+private:
+    CMessageIterator( MFSMailIterator* aIterator, CPluginData& aPluginData, TUint aCount );
+    
+    void ConstructL();
+    
+public: // from MEmailInterface              
+
+    virtual TEmailTypeId InterfaceId() const;
+
+    virtual void Release();
+    
+public: // from MMessageIterator
+
+    /** @see MMessageIterator */
+    virtual MEmailMessage* NextL();
+    
+    /** @see MMessageIterator 
+     (not implemented) */
+    
+    virtual MEmailMessage* PreviousL();
+    
+    virtual TUint Count() const;
+        
+
+private:   
+    // Reads next chunk of messages from protocol plugin
+    TBool ReadNextChunkL();
+    TBool ReadPreviousChunkL();
+    MEmailMessage* ReadFromChunkL();
+    void CleanCache();    
+    void AddToCacheL( CFSMailMessage* aFsMsg );    
+private: // data
+    
+    /**
+    * Iterator internal states. "Consuming" in state names mean getting and 
+    * returning next message from the iterator.
+    */
+    enum TState {
+        // No messages available in iterator, read them from protocl plugin.
+        // NextL returns a message from chunk (or NULL if folder is empty)
+        // This is initial state.
+        EReadNextMessageChunk,
+        EReadPreviousMessageChunk,
+        
+        // Message(s) are available (retrieved from plugin). No remaining 
+        // messages excepted from the plugin. NextL returns a message from chunk.
+        EConsumeFromChunk,
+        
+        // Message(s) are available in chunk and more in protocol plugin.
+        EConsumeFromChunkWithMoreChunksToFollow,
+        
+        // Iterator is iterated throuh and NextL would return NULL.
+        EIteratorConsumed
+    };
+
+    // plugin iterator, owned
+    MFSMailIterator* iIterator;
+    
+    // reference to plugin data
+    CPluginData&    iPluginData;
+
+    CFSMailPlugin*  iPlugin;
+    
+    // message id used for reading messages from plugin
+    TFSMailMsgId    iStartMsgId;
+    
+    // Internal state  
+    TState           iState;
+    
+    // pointer array of messages read from protocol plugin (aka message chunk)
+    RPointerArray<CFSMailMessage> iFsMessageArray;
+    RPointerArray<CEmailMessage> iMessageArray;
+    
+    TUint iCount;
+    
+    TInt iCursor;
+    
+    TFSMailMsgId iFirstMsgId;
+    
+    TBool iHasMoreNextItems;
+    TBool iHasMorePrevItems;
+};
+
+#endif // CMESSAGEITERATOR_H
+
+// End of file.