emailservices/emailclientapi/inc/emailapiutils.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: This file implements utilities like CPluginData.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#ifndef EMAILAPIUTILS_H
hgs
parents:
diff changeset
    19
#define EMAILAPIUTILS_H
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#include <e32base.h>
hgs
parents:
diff changeset
    22
#include "cfsmailcommon.h"
hgs
parents:
diff changeset
    23
#include <emailapidefs.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 CFSMailPlugin;
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
enum TDataOwner
hgs
parents:
diff changeset
    30
    {
hgs
parents:
diff changeset
    31
    EClientOwns,
hgs
parents:
diff changeset
    32
    EAPIOwns
hgs
parents:
diff changeset
    33
    };
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
/**
hgs
parents:
diff changeset
    37
* Helper container class for storing plugin pointer and implementation UID
hgs
parents:
diff changeset
    38
* @since S60 v5.2
hgs
parents:
diff changeset
    39
*/
hgs
parents:
diff changeset
    40
NONSHARABLE_CLASS( TPluginData )
hgs
parents:
diff changeset
    41
    {
hgs
parents:
diff changeset
    42
    public:
hgs
parents:
diff changeset
    43
    
hgs
parents:
diff changeset
    44
        inline TPluginData( TUid aUid ) : iPlugin( NULL ), iUid( TUid::Uid( aUid.iUid ) ) {}
hgs
parents:
diff changeset
    45
        
hgs
parents:
diff changeset
    46
        CFSMailPlugin* iPlugin;
hgs
parents:
diff changeset
    47
        
hgs
parents:
diff changeset
    48
        const TUid     iUid;
hgs
parents:
diff changeset
    49
    };
hgs
parents:
diff changeset
    50
    
hgs
parents:
diff changeset
    51
/**
hgs
parents:
diff changeset
    52
* Plugin data is a utility for protocol plugin creation and book 
hgs
parents:
diff changeset
    53
* keeping. Objects using the plugin should access it via this
hgs
parents:
diff changeset
    54
* class for optimised reference counting.
hgs
parents:
diff changeset
    55
*/
hgs
parents:
diff changeset
    56
NONSHARABLE_CLASS( CPluginData ) : public CBase
hgs
parents:
diff changeset
    57
{
hgs
parents:
diff changeset
    58
public:    
hgs
parents:
diff changeset
    59
    /**
hgs
parents:
diff changeset
    60
    * returns plugin instance or null if failed to instantiate.
hgs
parents:
diff changeset
    61
    * LoadResult() will return error code in instantiation
hgs
parents:
diff changeset
    62
    */
hgs
parents:
diff changeset
    63
    CFSMailPlugin* ClaimInstance();
hgs
parents:
diff changeset
    64
    
hgs
parents:
diff changeset
    65
    /**
hgs
parents:
diff changeset
    66
    * returns plugin instance or leaves if failed to instantiate.
hgs
parents:
diff changeset
    67
    */
hgs
parents:
diff changeset
    68
    CFSMailPlugin* ClaimInstanceL();
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
    /**
hgs
parents:
diff changeset
    71
    *  Decreases access count of the plugin and deletes if reaches zero.
hgs
parents:
diff changeset
    72
    * Note! this should be called only aftre succesful ClaimInstance or 
hgs
parents:
diff changeset
    73
    * ClaimInstanceL.
hgs
parents:
diff changeset
    74
    */
hgs
parents:
diff changeset
    75
    void ReleaseInstance();
hgs
parents:
diff changeset
    76
    
hgs
parents:
diff changeset
    77
    /**
hgs
parents:
diff changeset
    78
    * Adds cleanup operation calling ReleaseInstance to cleanup stack
hgs
parents:
diff changeset
    79
    */                                                 
hgs
parents:
diff changeset
    80
    void ReleasePushL();
hgs
parents:
diff changeset
    81
    /**
hgs
parents:
diff changeset
    82
    * Cleanup operation for CleanupReleasePluginPushL
hgs
parents:
diff changeset
    83
    */
hgs
parents:
diff changeset
    84
    static void CleanupOperation( TAny* aAny );
hgs
parents:
diff changeset
    85
    
hgs
parents:
diff changeset
    86
    TUid Uid() const;
hgs
parents:
diff changeset
    87
    
hgs
parents:
diff changeset
    88
    TInt LoadResult() const;
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
private: 
hgs
parents:
diff changeset
    91
    /* only CEmailClientApi owns instances of this, it should make sure that
hgs
parents:
diff changeset
    92
     * no duplicates exist, otherwise reference counting of plugins fail
hgs
parents:
diff changeset
    93
     * (this is not singleton class)
hgs
parents:
diff changeset
    94
     */
hgs
parents:
diff changeset
    95
    friend class CEmailClientApi;
hgs
parents:
diff changeset
    96
    friend class CEmailMailboxCache;
hgs
parents:
diff changeset
    97
    
hgs
parents:
diff changeset
    98
    CPluginData( TUid aUid );
hgs
parents:
diff changeset
    99
    ~CPluginData();
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
private:    
hgs
parents:
diff changeset
   102
    // plugin pointer and uid
hgs
parents:
diff changeset
   103
    TPluginData iData;
hgs
parents:
diff changeset
   104
    
hgs
parents:
diff changeset
   105
    TInt iPluginLoadError;
hgs
parents:
diff changeset
   106
        
hgs
parents:
diff changeset
   107
    // >0 when iPlugin is instantiated
hgs
parents:
diff changeset
   108
    TUint          iRefCount;
hgs
parents:
diff changeset
   109
    
hgs
parents:
diff changeset
   110
    // EFalse if shared from Email Framework (CFSMailClient). If true,
hgs
parents:
diff changeset
   111
    // ReleaseInstance() doesn't delete plugin
hgs
parents:
diff changeset
   112
    TBool          iOwned;
hgs
parents:
diff changeset
   113
};
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
/**
hgs
parents:
diff changeset
   116
* Constructs internal message id type from plugin data and mailbox/folder/message id 
hgs
parents:
diff changeset
   117
*/
hgs
parents:
diff changeset
   118
TFSMailMsgId FsMsgId( const CPluginData& aPluginData, const EmailInterface::TBaseId& aId );
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
/**
hgs
parents:
diff changeset
   121
* Cleanup support for pointer arrays
hgs
parents:
diff changeset
   122
*/
hgs
parents:
diff changeset
   123
template<class T>
hgs
parents:
diff changeset
   124
class CleanupResetAndDestroy
hgs
parents:
diff changeset
   125
{
hgs
parents:
diff changeset
   126
public:
hgs
parents:
diff changeset
   127
    inline static void PushL( T& aItem );
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
private:
hgs
parents:
diff changeset
   130
    inline static void ResetAndDestroy( TAny *aPtr );
hgs
parents:
diff changeset
   131
} ;
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
template <class T>
hgs
parents:
diff changeset
   134
inline void CleanupResetAndDestroyPushL( T& aRef )
hgs
parents:
diff changeset
   135
    {
hgs
parents:
diff changeset
   136
    CleanupResetAndDestroy<T>::PushL( aRef );
hgs
parents:
diff changeset
   137
    }
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
/**
hgs
parents:
diff changeset
   140
* Cleanup support for email interface objects.
hgs
parents:
diff changeset
   141
*/
hgs
parents:
diff changeset
   142
class CleanupReleasePush
hgs
parents:
diff changeset
   143
{
hgs
parents:
diff changeset
   144
public:
hgs
parents:
diff changeset
   145
    static void PushL( EmailInterface::MEmailInterface& aItem );
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
private:
hgs
parents:
diff changeset
   148
    static void Release( TAny *aPtr );
hgs
parents:
diff changeset
   149
} ;
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
#include "emailapiutils.inl"
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
#endif // EMAILAPIUTILS_H
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
// End of file