email_plat/email_client_api/inc/emailapidefs.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 22:37:30 +0200
branchRCL_3
changeset 8 e1b6206813b4
parent 0 8466d47a6819
permissions -rw-r--r--
Revision: 201003 Kit: 201007

/*
* 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 Client API definitions
*
*/

#ifndef __EMAILAPIDEFS
#define __EMAILAPIDEFS

#include <e32base.h>
#include <f32file.h>

namespace EmailInterface {

/**
* Id for message, message part, folder and mailbox entries
*/
typedef TUint TEntryId;

/**
* Interface id. Each implementation of MEmailInterface has unique id value.
*/
typedef TInt TEmailTypeId;

const TEntryId KUndefinedEntryId = 0;

/**
 * base interface for all email interfaces available to clients
 * @since S60 v5.0
 */
class MEmailInterface
{
public:
    /** returns interface id (kind of RTTI) */
    virtual TEmailTypeId InterfaceId() const = 0;

    /** frees memory allocated by interface impl. */    
    virtual void Release() = 0;
};

/**
 * Defines abstraction for entry ID. Used by message, folder, mailbox etc types.
 * @since S60 v5.0
 */
class TBaseId
{
public:
    inline TBaseId() : iId( KUndefinedEntryId ){}
    inline TBaseId( TEntryId aId ) : iId( aId ){}
    
    TEntryId   iId;
};

/**
 * Defines mailbox ID
 * @since S60 v5.0
 */
class TMailboxId : public TBaseId  
{
public:
    inline TMailboxId() : 
        TBaseId(){}
    inline TMailboxId( TEntryId aId ) : TBaseId( aId ){}
    inline TBool operator==( const TMailboxId& aMailboxId ) const {
        return ( aMailboxId.iId == iId ); }
};

/**
 * Defines folder ID which is associated with a mailbox
 * @since S60 v5.0
 */
class TFolderId : public TBaseId
{
public:
    // parent mailbox
    TMailboxId iMailboxId;
    inline TFolderId( TEntryId aId, const TMailboxId& aMailboxId ) : 
        TBaseId( aId ),iMailboxId( aMailboxId.iId ){}
        
    inline TFolderId() : TBaseId(), iMailboxId() {}
    
    inline TBool operator==( const TFolderId& aFolderId ) const {
        return ( iMailboxId.iId == aFolderId.iMailboxId.iId &&
        iId == aFolderId.iId ); }
        
    inline TBool operator!=( const TFolderId& aFolderId ) const {
        return !( aFolderId == *this ); }
};

/**
 * Defines email message ID which is associated with a mailbox and folder
 * @since S60 v5.0
 */
class TMessageId : public TBaseId
{
public:
    inline TMessageId() : TBaseId(), iFolderId(){}
    
    inline TMessageId( TEntryId aMsgId, TEntryId aFolderId, TMailboxId aMailboxId ) : 
    TBaseId( aMsgId ), iFolderId( aFolderId, aMailboxId ){}

    inline TBool operator==( const TMessageId& aMessageId ) const {
        return ( iFolderId == aMessageId.iFolderId &&
        iId == aMessageId.iId ); }
        
    inline TBool operator!=( const TMessageId& aMessageId ) const {
        return !( aMessageId == *this ); }
    
    /**
    * parent folder id.
    */
    TFolderId iFolderId;
};


/**
 * Message content (part) id
 * @since S60 v5.0
 */
class TMessageContentId : public TBaseId
{
public:
    inline TMessageContentId(): TBaseId(), iMessageId() {}
    
    inline TMessageContentId( TEntryId aContentId, TEntryId aMsgId, TEntryId aFolderId, TMailboxId aMailboxId ) : 
    TBaseId( aContentId ), iMessageId( aMsgId, aFolderId, aMailboxId ){}
    
    inline TBool operator==( const TMessageContentId& aContentId ) const {
        return ( iMessageId == aContentId.iMessageId &&
        iId == aContentId.iId ); }
        
    inline TBool operator!=( const TMessageContentId& aContentId ) const {
        return !( aContentId == *this ); }
    
    // parent message
    TMessageId iMessageId;
};

typedef RArray<TMessageId> REmailMessageIdArray;

typedef RArray<TFolderId>  REmailFolderIdArray;

typedef RArray<TMailboxId>     REmailMailboxIdArray;

} // EmailInterface

#endif // __EMAILAPIDEFS