emailservices/emailclientapi/inc/messageiterator.h
author hgs
Thu, 24 Jun 2010 14:32:18 +0300
changeset 47 f83bd4ae1fe3
child 62 a8c646b56683
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: Email message iterator
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#ifndef CMESSAGEITERATOR_H
hgs
parents:
diff changeset
    19
#define CMESSAGEITERATOR_H
hgs
parents:
diff changeset
    20
                                                                             
hgs
parents:
diff changeset
    21
#include <mmessageiterator.h>                                                                             
hgs
parents:
diff changeset
    22
#include "emailapidefs.h"
hgs
parents:
diff changeset
    23
#include "cfsmailcommon.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
using namespace EmailInterface;
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
class MFSMailIterator;
hgs
parents:
diff changeset
    28
class CPluginData;
hgs
parents:
diff changeset
    29
class CFSMailMessage;
hgs
parents:
diff changeset
    30
class CEmailMessage;
hgs
parents:
diff changeset
    31
/**
hgs
parents:
diff changeset
    32
 * Iterator for email messages
hgs
parents:
diff changeset
    33
 * @since S60 v5.2
hgs
parents:
diff changeset
    34
 */
hgs
parents:
diff changeset
    35
NONSHARABLE_CLASS( CMessageIterator ) : public CBase, public MMessageIterator
hgs
parents:
diff changeset
    36
{
hgs
parents:
diff changeset
    37
public:
hgs
parents:
diff changeset
    38
    /**
hgs
parents:
diff changeset
    39
    * Constructor
hgs
parents:
diff changeset
    40
    * @param aIterator
hgs
parents:
diff changeset
    41
    * @param aPluginData
hgs
parents:
diff changeset
    42
    * @return new iterator
hgs
parents:
diff changeset
    43
    */
hgs
parents:
diff changeset
    44
    static CMessageIterator* NewL( MFSMailIterator* aIterator,
hgs
parents:
diff changeset
    45
                                   CPluginData& aPluginData,
hgs
parents:
diff changeset
    46
                                   TUint aCount );
hgs
parents:
diff changeset
    47
    
hgs
parents:
diff changeset
    48
    ~CMessageIterator();
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
private:
hgs
parents:
diff changeset
    51
    CMessageIterator( MFSMailIterator* aIterator, CPluginData& aPluginData, TUint aCount );
hgs
parents:
diff changeset
    52
    
hgs
parents:
diff changeset
    53
    void ConstructL();
hgs
parents:
diff changeset
    54
    
hgs
parents:
diff changeset
    55
public: // from MEmailInterface              
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
    TEmailTypeId InterfaceId() const;
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
    void Release();
hgs
parents:
diff changeset
    60
    
hgs
parents:
diff changeset
    61
public: // from MMessageIterator
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    /** @see MMessageIterator */
hgs
parents:
diff changeset
    64
    MEmailMessage* NextL();
hgs
parents:
diff changeset
    65
    
hgs
parents:
diff changeset
    66
    /** @see MMessageIterator 
hgs
parents:
diff changeset
    67
     (not implemented) */
hgs
parents:
diff changeset
    68
    
hgs
parents:
diff changeset
    69
    MEmailMessage* PreviousL();
hgs
parents:
diff changeset
    70
    
hgs
parents:
diff changeset
    71
    TUint Count() const;
hgs
parents:
diff changeset
    72
        
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
private:   
hgs
parents:
diff changeset
    75
    // Reads next chunk of messages from protocol plugin
hgs
parents:
diff changeset
    76
    TBool ReadNextChunkL();
hgs
parents:
diff changeset
    77
    TBool ReadPreviousChunkL();
hgs
parents:
diff changeset
    78
    MEmailMessage* ReadFromChunkL();
hgs
parents:
diff changeset
    79
    void CleanCache();    
hgs
parents:
diff changeset
    80
    void AddToCacheL( CFSMailMessage* aFsMsg );    
hgs
parents:
diff changeset
    81
private: // data
hgs
parents:
diff changeset
    82
    
hgs
parents:
diff changeset
    83
    /**
hgs
parents:
diff changeset
    84
    * Iterator internal states. "Consuming" in state names mean getting and 
hgs
parents:
diff changeset
    85
    * returning next message from the iterator.
hgs
parents:
diff changeset
    86
    */
hgs
parents:
diff changeset
    87
    enum TState {
hgs
parents:
diff changeset
    88
        // No messages available in iterator, read them from protocl plugin.
hgs
parents:
diff changeset
    89
        // NextL returns a message from chunk (or NULL if folder is empty)
hgs
parents:
diff changeset
    90
        // This is initial state.
hgs
parents:
diff changeset
    91
        EReadNextMessageChunk,
hgs
parents:
diff changeset
    92
        EReadPreviousMessageChunk,
hgs
parents:
diff changeset
    93
        
hgs
parents:
diff changeset
    94
        // Message(s) are available (retrieved from plugin). No remaining 
hgs
parents:
diff changeset
    95
        // messages excepted from the plugin. NextL returns a message from chunk.
hgs
parents:
diff changeset
    96
        EConsumeFromChunk,
hgs
parents:
diff changeset
    97
        
hgs
parents:
diff changeset
    98
        // Message(s) are available in chunk and more in protocol plugin.
hgs
parents:
diff changeset
    99
        EConsumeFromChunkWithMoreChunksToFollow,
hgs
parents:
diff changeset
   100
        
hgs
parents:
diff changeset
   101
        // Iterator is iterated throuh and NextL would return NULL.
hgs
parents:
diff changeset
   102
        EIteratorConsumed
hgs
parents:
diff changeset
   103
    };
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
    // plugin iterator, owned
hgs
parents:
diff changeset
   106
    MFSMailIterator* iIterator;
hgs
parents:
diff changeset
   107
    
hgs
parents:
diff changeset
   108
    // reference to plugin data
hgs
parents:
diff changeset
   109
    CPluginData&    iPluginData;
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
    CFSMailPlugin*  iPlugin;
hgs
parents:
diff changeset
   112
    
hgs
parents:
diff changeset
   113
    // message id used for reading messages from plugin
hgs
parents:
diff changeset
   114
    TFSMailMsgId    iStartMsgId;
hgs
parents:
diff changeset
   115
    
hgs
parents:
diff changeset
   116
    // Internal state  
hgs
parents:
diff changeset
   117
    TState           iState;
hgs
parents:
diff changeset
   118
    
hgs
parents:
diff changeset
   119
    // pointer array of messages read from protocol plugin (aka message chunk)
hgs
parents:
diff changeset
   120
    RPointerArray<CFSMailMessage> iFsMessageArray;
hgs
parents:
diff changeset
   121
    RPointerArray<CEmailMessage> iMessageArray;
hgs
parents:
diff changeset
   122
    
hgs
parents:
diff changeset
   123
    TUint iCount;
hgs
parents:
diff changeset
   124
    
hgs
parents:
diff changeset
   125
    TInt iCursor;
hgs
parents:
diff changeset
   126
    
hgs
parents:
diff changeset
   127
    TFSMailMsgId iFirstMsgId;
hgs
parents:
diff changeset
   128
    
hgs
parents:
diff changeset
   129
    TBool iHasMoreNextItems;
hgs
parents:
diff changeset
   130
    TBool iHasMorePrevItems;
hgs
parents:
diff changeset
   131
};
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
#endif // CMESSAGEITERATOR_H
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
// End of file