--- /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.