email_plat/email_client_api/inc/memailcontent.h
author hgs
Thu, 30 Sep 2010 11:43:07 +0300
changeset 74 6c59112cfd31
parent 47 email_plat/email_client_api/memailcontent.h@f83bd4ae1fe3
permissions -rw-r--r--
201039
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: ECom interface for Email Client API
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#ifndef MEMAILCONTENT_H
hgs
parents:
diff changeset
    19
#define MEMAILCONTENT_H
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#include <emailapidefs.h>
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
namespace EmailInterface {
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
_LIT( KContentTypeTextPlain, "text/plain" );
hgs
parents:
diff changeset
    26
_LIT( KContentTypeTextHtml, "text/html" );
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
class MEmailOperationObserver;
hgs
parents:
diff changeset
    29
class MEmailAttachment;
hgs
parents:
diff changeset
    30
class MEmailMultipart;
hgs
parents:
diff changeset
    31
class MEmailTextContent;
hgs
parents:
diff changeset
    32
class MEmailMessageContent;
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
/**
hgs
parents:
diff changeset
    35
* Callback interface used for content fetching asynchronously.
hgs
parents:
diff changeset
    36
* Object deriving this interface is passed to MEmailMessageContent::FetchL
hgs
parents:
diff changeset
    37
* @since S60 v5.0
hgs
parents:
diff changeset
    38
*/
hgs
parents:
diff changeset
    39
class MEmailFetchObserver
hgs
parents:
diff changeset
    40
{
hgs
parents:
diff changeset
    41
public:
hgs
parents:
diff changeset
    42
    /** Content fetched
hgs
parents:
diff changeset
    43
    * @param operation result 
hgs
parents:
diff changeset
    44
    */
hgs
parents:
diff changeset
    45
    virtual void DataFetchedL( const TInt aResult ) = 0;
hgs
parents:
diff changeset
    46
};
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
typedef RPointerArray<MEmailMessageContent> REmailContentArray;
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
/**
hgs
parents:
diff changeset
    51
* Base interface for mime message parts.
hgs
parents:
diff changeset
    52
* @since S60 v5.0
hgs
parents:
diff changeset
    53
*/
hgs
parents:
diff changeset
    54
class MEmailMessageContent : public MEmailInterface
hgs
parents:
diff changeset
    55
{
hgs
parents:
diff changeset
    56
public:
hgs
parents:
diff changeset
    57
    /** numeric identifier of message content */
hgs
parents:
diff changeset
    58
    virtual TMessageContentId Id() const = 0;
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
// fields as per RFC 2045
hgs
parents:
diff changeset
    61
    /**
hgs
parents:
diff changeset
    62
     * return sContent-Type field value
hgs
parents:
diff changeset
    63
     */
hgs
parents:
diff changeset
    64
    virtual TPtrC ContentType() const = 0;
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
    /**
hgs
parents:
diff changeset
    67
     * sets value of Content-Type field
hgs
parents:
diff changeset
    68
     * @param content type
hgs
parents:
diff changeset
    69
     */
hgs
parents:
diff changeset
    70
    virtual void SetContentType( const TDesC& aContentType ) = 0;
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
    /**
hgs
parents:
diff changeset
    73
    /* Returns Content-ID field value.
hgs
parents:
diff changeset
    74
     * @return content id
hgs
parents:
diff changeset
    75
     */
hgs
parents:
diff changeset
    76
    virtual TPtrC ContentId() const = 0;
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
    /**
hgs
parents:
diff changeset
    79
     * Sets value of Content-ID field
hgs
parents:
diff changeset
    80
     * @param content id
hgs
parents:
diff changeset
    81
     */
hgs
parents:
diff changeset
    82
    virtual void SetContentId( const TDesC& aContentId ) = 0;
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
    /**
hgs
parents:
diff changeset
    85
     * Returns value of content-description field
hgs
parents:
diff changeset
    86
     * @return content description 
hgs
parents:
diff changeset
    87
     */
hgs
parents:
diff changeset
    88
    virtual TPtrC ContentDescription() const = 0;
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
    /**
hgs
parents:
diff changeset
    91
     * Sets value of content description field
hgs
parents:
diff changeset
    92
     * @param content description 
hgs
parents:
diff changeset
    93
     */
hgs
parents:
diff changeset
    94
    virtual void SetContentDescription( const TDesC& aContentDescription ) = 0;
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
    /**
hgs
parents:
diff changeset
    97
     * Returns value of content disposition field
hgs
parents:
diff changeset
    98
     * @return content disposition
hgs
parents:
diff changeset
    99
     */
hgs
parents:
diff changeset
   100
    virtual TPtrC ContentDisposition() const = 0;
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
    /**
hgs
parents:
diff changeset
   103
     * Sets value of content-disposition field
hgs
parents:
diff changeset
   104
     * @param content disposition
hgs
parents:
diff changeset
   105
     */
hgs
parents:
diff changeset
   106
    virtual void SetContentDisposition( const TDesC& aContentDisposition ) = 0;
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
// end of standard  RFC 2045 fields
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
    /**
hgs
parents:
diff changeset
   111
     * returns Content-class field value (non-standard)
hgs
parents:
diff changeset
   112
     */
hgs
parents:
diff changeset
   113
    virtual TPtrC ContentClass() const = 0;
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
    /**
hgs
parents:
diff changeset
   116
     * Sets value of Content-class field (non-standard)
hgs
parents:
diff changeset
   117
     * @param content class
hgs
parents:
diff changeset
   118
     */
hgs
parents:
diff changeset
   119
    virtual void SetContentClass( const TDesC& aContentClass ) = 0;
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
    /**
hgs
parents:
diff changeset
   122
     * Available (=fetched) size accessor. If this is less than value from
hgs
parents:
diff changeset
   123
     * TotalSize(), Fetch() should be used to retrieve more data from
hgs
parents:
diff changeset
   124
     * remote mail server.
hgs
parents:
diff changeset
   125
     * @return fetched size of the data.
hgs
parents:
diff changeset
   126
     */
hgs
parents:
diff changeset
   127
    virtual TInt AvailableSize() const = 0;
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
    /**
hgs
parents:
diff changeset
   130
     * Total size accessor
hgs
parents:
diff changeset
   131
     * @return total size of message text.
hgs
parents:
diff changeset
   132
     */
hgs
parents:
diff changeset
   133
    virtual TInt TotalSize( ) const = 0;
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
    /**
hgs
parents:
diff changeset
   136
     * Returns pointer descriptor to content data
hgs
parents:
diff changeset
   137
     */
hgs
parents:
diff changeset
   138
    virtual TPtrC ContentL() const = 0;
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
    /**
hgs
parents:
diff changeset
   141
     * Sets content data.
hgs
parents:
diff changeset
   142
     */
hgs
parents:
diff changeset
   143
    virtual void SetContentL( const TDesC& aContent ) = 0;
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
    /**
hgs
parents:
diff changeset
   146
     * Starts fetching rest of content asynchronously.
hgs
parents:
diff changeset
   147
     *
hgs
parents:
diff changeset
   148
     * If available size after fetch is smaller than total size, next chunk can
hgs
parents:
diff changeset
   149
     * be fetched with new invocatin of Fetch method.
hgs
parents:
diff changeset
   150
     *
hgs
parents:
diff changeset
   151
     * Calling Release() implicitly cancels fetching.
hgs
parents:
diff changeset
   152
     * @param aObserver called when when fetch completes.
hgs
parents:
diff changeset
   153
     * @exception KErrInUse if fetch is ongoing
hgs
parents:
diff changeset
   154
     */
hgs
parents:
diff changeset
   155
    virtual void FetchL( MEmailFetchObserver& aObserver ) = 0;
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
    /**
hgs
parents:
diff changeset
   158
     * Cancels fetch operation, observer is not called
hgs
parents:
diff changeset
   159
     */
hgs
parents:
diff changeset
   160
    virtual void CancelFetch() = 0;
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    /**
hgs
parents:
diff changeset
   163
     * Stores message content to a file
hgs
parents:
diff changeset
   164
     */
hgs
parents:
diff changeset
   165
    virtual void SaveToFileL( const TDesC& aPath ) = 0;
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
    /**
hgs
parents:
diff changeset
   168
     * Typesafe multipart accessor for obtaining MEmailMultipart pointer
hgs
parents:
diff changeset
   169
     * to this object.
hgs
parents:
diff changeset
   170
     * @param content as multipart or NULL if content is not multipart
hgs
parents:
diff changeset
   171
     */
hgs
parents:
diff changeset
   172
    virtual MEmailMultipart* AsMultipartOrNull() const = 0;
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
    /**
hgs
parents:
diff changeset
   175
     * Typesafe text content accessor for obtaining MEmailTextContent pointer
hgs
parents:
diff changeset
   176
     * to this object.
hgs
parents:
diff changeset
   177
     * @param content as text content or NULL if content is not text
hgs
parents:
diff changeset
   178
     */
hgs
parents:
diff changeset
   179
    virtual MEmailTextContent* AsTextContentOrNull() const = 0;
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
    /**
hgs
parents:
diff changeset
   182
     * Typesafe attachment content accessor for obtaining MEmailAttachment pointer
hgs
parents:
diff changeset
   183
     * to this object.
hgs
parents:
diff changeset
   184
     * @param content as attachment content or NULL if content is not an attachment
hgs
parents:
diff changeset
   185
     */
hgs
parents:
diff changeset
   186
    virtual MEmailAttachment* AsAttachmentOrNull() const = 0;
hgs
parents:
diff changeset
   187
};
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
/**
hgs
parents:
diff changeset
   190
* Convenience abstraction for manipulating plain or html text content. Use
hgs
parents:
diff changeset
   191
* CEmailInterfaceFactory::InterfaceL( KEmailIFUidTextContent ) to make new
hgs
parents:
diff changeset
   192
* instance of this interface.
hgs
parents:
diff changeset
   193
* @since S60 v5.0
hgs
parents:
diff changeset
   194
*/
hgs
parents:
diff changeset
   195
class MEmailTextContent : public MEmailMessageContent
hgs
parents:
diff changeset
   196
{
hgs
parents:
diff changeset
   197
public:
hgs
parents:
diff changeset
   198
    /**
hgs
parents:
diff changeset
   199
     * Text (content) type 
hgs
parents:
diff changeset
   200
     */
hgs
parents:
diff changeset
   201
    enum TTextType {
hgs
parents:
diff changeset
   202
        EPlainText, // text/plain
hgs
parents:
diff changeset
   203
        EHtmlText   // text/html
hgs
parents:
diff changeset
   204
    };
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
    /**
hgs
parents:
diff changeset
   207
    * Tells if content has specified type of text.
hgs
parents:
diff changeset
   208
    */
hgs
parents:
diff changeset
   209
    virtual TTextType TextType() const = 0;
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
    /**
hgs
parents:
diff changeset
   212
    * Sets (replaces) text to message content. Possible old content is
hgs
parents:
diff changeset
   213
    * deleted. Content type is set to "text/plain" or "text/html" based on
hgs
parents:
diff changeset
   214
    * specified text type.
hgs
parents:
diff changeset
   215
    * @param aPlainOrHtml sub-type of the text
hgs
parents:
diff changeset
   216
    * @param aText content of the message part
hgs
parents:
diff changeset
   217
    */
hgs
parents:
diff changeset
   218
    virtual void SetTextL(
hgs
parents:
diff changeset
   219
        const TTextType aPlainOrHtml,
hgs
parents:
diff changeset
   220
        const TDesC& aText ) = 0;
hgs
parents:
diff changeset
   221
};
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
/**
hgs
parents:
diff changeset
   224
* Message part with multiple sub parts. If MEmailMessage::ContentL returns
hgs
parents:
diff changeset
   225
* content with type "multipart/*" (where '*' is a character sequence) it can
hgs
parents:
diff changeset
   226
* safely be casted to MEmailMultipart
hgs
parents:
diff changeset
   227
* @since S60 v5.0
hgs
parents:
diff changeset
   228
*/
hgs
parents:
diff changeset
   229
class MEmailMultipart : public MEmailMessageContent
hgs
parents:
diff changeset
   230
{
hgs
parents:
diff changeset
   231
public:
hgs
parents:
diff changeset
   232
    /**
hgs
parents:
diff changeset
   233
    * Returns number of child parts
hgs
parents:
diff changeset
   234
    */
hgs
parents:
diff changeset
   235
    virtual TInt PartCountL() = 0;
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
    /**
hgs
parents:
diff changeset
   238
    * Returns a child part, ownership is transferred.
hgs
parents:
diff changeset
   239
    * @param aIndex part to return, leaves KErrArgument if out of bounds
hgs
parents:
diff changeset
   240
    */
hgs
parents:
diff changeset
   241
    virtual MEmailMessageContent* PartByIndexL( const TUint aIndex ) const = 0;
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
    /**
hgs
parents:
diff changeset
   244
    * Deletes part by index.
hgs
parents:
diff changeset
   245
    * @param aIndex part to delete, leaves KErrArgument if out of bounds
hgs
parents:
diff changeset
   246
    */
hgs
parents:
diff changeset
   247
    virtual void DeletePartL( const TUint aIndex ) = 0;
hgs
parents:
diff changeset
   248
hgs
parents:
diff changeset
   249
    /**
hgs
parents:
diff changeset
   250
    * Adds message part, ownership is transferred.
hgs
parents:
diff changeset
   251
    * @param aPart any object derived from MEmailMessageContent
hgs
parents:
diff changeset
   252
    * @param aPos position among child parts
hgs
parents:
diff changeset
   253
    */
hgs
parents:
diff changeset
   254
    virtual void AddPartL(
hgs
parents:
diff changeset
   255
        const MEmailMessageContent& aPart,
hgs
parents:
diff changeset
   256
        const TUint aPos ) = 0;
hgs
parents:
diff changeset
   257
};
hgs
parents:
diff changeset
   258
hgs
parents:
diff changeset
   259
typedef RPointerArray<MEmailAttachment> REmailAttachmentArray;
hgs
parents:
diff changeset
   260
hgs
parents:
diff changeset
   261
/**
hgs
parents:
diff changeset
   262
* Email attachment interface
hgs
parents:
diff changeset
   263
* Attachment is created with MEmailMessage::AddAttachmentL()
hgs
parents:
diff changeset
   264
* @since S60 v5.0
hgs
parents:
diff changeset
   265
*/
hgs
parents:
diff changeset
   266
class MEmailAttachment : public MEmailMessageContent
hgs
parents:
diff changeset
   267
{
hgs
parents:
diff changeset
   268
public:
hgs
parents:
diff changeset
   269
      /**
hgs
parents:
diff changeset
   270
      * Returns file handle of this attachment. If the attachment is
hgs
parents:
diff changeset
   271
      * not associated with a file, null file handle is returned.
hgs
parents:
diff changeset
   272
      */
hgs
parents:
diff changeset
   273
      virtual RFile FileL() const = 0;
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
      /**
hgs
parents:
diff changeset
   276
      * Sets file name field
hgs
parents:
diff changeset
   277
      */
hgs
parents:
diff changeset
   278
      virtual void SetFileNameL( const TDesC& aFileName ) = 0;
hgs
parents:
diff changeset
   279
hgs
parents:
diff changeset
   280
      /**
hgs
parents:
diff changeset
   281
      * Returns file name or null pointer descriptor if attachment
hgs
parents:
diff changeset
   282
      * is not associated with any file
hgs
parents:
diff changeset
   283
      */
hgs
parents:
diff changeset
   284
      virtual TPtrC FileNameL() const = 0;
hgs
parents:
diff changeset
   285
};
hgs
parents:
diff changeset
   286
hgs
parents:
diff changeset
   287
} // namespace EmailInterface
hgs
parents:
diff changeset
   288
hgs
parents:
diff changeset
   289
#endif // MEMAILCONTENT_H