diff -r 000000000000 -r 8466d47a6819 emailservices/emailclientapi/inc/messageiterator.h --- /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 +#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 iFsMessageArray; + RPointerArray iMessageArray; + + TUint iCount; + + TInt iCursor; + + TFSMailMsgId iFirstMsgId; + + TBool iHasMoreNextItems; + TBool iHasMorePrevItems; +}; + +#endif // CMESSAGEITERATOR_H + +// End of file.