emailservices/emailclientapi/src/emailmailboxcache.cpp
branchRCL_3
changeset 24 d189ee25cf9d
parent 0 8466d47a6819
child 25 3533d4323edc
equal deleted inserted replaced
23:dcf0eedfc1a3 24:d189ee25cf9d
     1 /*
     1 /*
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    21 static const TInt KCacheGranularity = 2;
    21 static const TInt KCacheGranularity = 2;
    22 
    22 
    23 // ---------------------------------------------------------------------------
    23 // ---------------------------------------------------------------------------
    24 // 
    24 // 
    25 // ---------------------------------------------------------------------------
    25 // ---------------------------------------------------------------------------
    26 //
       
    27 CEmailMailboxCache* CEmailMailboxCache::NewL()
    26 CEmailMailboxCache* CEmailMailboxCache::NewL()
    28     {
    27     {
    29     CEmailMailboxCache* cache = new ( ELeave ) CEmailMailboxCache();
    28     CEmailMailboxCache* cache = new ( ELeave ) CEmailMailboxCache();
    30     return cache;
    29     return cache;
    31     }
    30     }
    32 
    31 
    33 // ---------------------------------------------------------------------------
    32 // ---------------------------------------------------------------------------
    34 // 
    33 // 
    35 // ---------------------------------------------------------------------------
    34 // ---------------------------------------------------------------------------
    36 //
       
    37 CEmailMailboxCache::~CEmailMailboxCache()
    35 CEmailMailboxCache::~CEmailMailboxCache()
    38     {
    36     {
    39     iEntries.Close();
    37     iEntries.Close();
    40     }
    38     }
    41 
    39 
    42 // ---------------------------------------------------------------------------
    40 // ---------------------------------------------------------------------------
    43 // Start of cache transaction with clenanup support
    41 // Start of cache transaction with clenanup support
    44 // ---------------------------------------------------------------------------
    42 // ---------------------------------------------------------------------------
    45 //
       
    46 void CEmailMailboxCache::StartCachingPushL()
    43 void CEmailMailboxCache::StartCachingPushL()
    47     {
    44     {
    48     TCleanupItem item( &CEmailMailboxCache::CleanupOp, this );
    45     TCleanupItem item( &CEmailMailboxCache::CleanupOp, this );
    49     CleanupStack::PushL( item );
    46     CleanupStack::PushL( item );
    50     iState = ECaching;
    47     iState = ECaching;
    51     iEntries.Reset();
    48     iEntries.Reset();
    52     }
    49     }
    53     
    50 
    54 // ---------------------------------------------------------------------------
    51 // ---------------------------------------------------------------------------
    55 //  End of cache transaction
    52 //  End of cache transaction
    56 // ---------------------------------------------------------------------------
    53 // ---------------------------------------------------------------------------
    57 //
       
    58 void CEmailMailboxCache::EndCachingPop()
    54 void CEmailMailboxCache::EndCachingPop()
    59     {
    55     {
    60     iState = EComplete;
    56     iState = EComplete;
    61     CleanupStack::Pop();
    57     CleanupStack::Pop();
    62     }
    58     }
    63 
    59 
    64 // ---------------------------------------------------------------------------
    60 // ---------------------------------------------------------------------------
    65 // 
    61 // 
    66 // ---------------------------------------------------------------------------
    62 // ---------------------------------------------------------------------------
    67 //
       
    68 TBool CEmailMailboxCache::IsCached() const
    63 TBool CEmailMailboxCache::IsCached() const
    69     {
    64     {
    70     return iState == EComplete;
    65     return iState == EComplete;
    71     }
    66     }
    72 
    67 
    73 // ---------------------------------------------------------------------------
    68 // ---------------------------------------------------------------------------
    74 // 
    69 // 
    75 // ---------------------------------------------------------------------------
    70 // ---------------------------------------------------------------------------
    76 //
       
    77 void CEmailMailboxCache::AddMailboxL( 
    71 void CEmailMailboxCache::AddMailboxL( 
    78     CPluginData& aPluginData, 
    72     CPluginData& aPluginData, 
    79     const TMailboxId& aMailboxId )
    73     const TMailboxId& aMailboxId )
    80     {
    74     {
    81     if ( iState != ECaching )
    75     if ( iState != ECaching )
    90     }
    84     }
    91 
    85 
    92 // ---------------------------------------------------------------------------
    86 // ---------------------------------------------------------------------------
    93 // 
    87 // 
    94 // ---------------------------------------------------------------------------
    88 // ---------------------------------------------------------------------------
    95 //
       
    96 CPluginData* CEmailMailboxCache::PluginDataL( const TMailboxId& aMailboxId ) const
    89 CPluginData* CEmailMailboxCache::PluginDataL( const TMailboxId& aMailboxId ) const
    97     {
    90     {
    98     CPluginData* pdata = NULL;
    91     CPluginData* pdata = NULL;
    99     const TInt index( FindById( aMailboxId ) );
    92     const TInt index( FindById( aMailboxId ) );
   100     if ( index != KErrNotFound )
    93     if ( index != KErrNotFound )
   106     }
    99     }
   107 
   100 
   108 // ---------------------------------------------------------------------------
   101 // ---------------------------------------------------------------------------
   109 // 
   102 // 
   110 // ---------------------------------------------------------------------------
   103 // ---------------------------------------------------------------------------
   111 //
       
   112 CPluginData* CEmailMailboxCache::PluginDataL( const TUid& aPluginId ) const
   104 CPluginData* CEmailMailboxCache::PluginDataL( const TUid& aPluginId ) const
   113     {
   105     {
   114     CPluginData* pdata = NULL;
   106     CPluginData* pdata = NULL;
   115     const TInt index( FindByPluginIdL( aPluginId ) );
   107     const TInt index( FindByPluginIdL( aPluginId ) );
   116     if ( index != KErrNotFound )
   108     if ( index != KErrNotFound )
   117         {
   109         {
   118         const TCacheEntry& entry = iEntries[ index ];
   110         const TCacheEntry& entry = iEntries[ index ];
   119         pdata = entry.iPluginData;
   111         pdata = entry.iPluginData;
   120         }    
   112         }
   121     return pdata;
   113     return pdata;
   122     }
   114     }
   123 
   115 
   124 // ---------------------------------------------------------------------------
   116 // ---------------------------------------------------------------------------
   125 // 
   117 // 
   126 // ---------------------------------------------------------------------------
   118 // ---------------------------------------------------------------------------
   127 //
       
   128 void CEmailMailboxCache::GetIdsL( REmailMailboxIdArray& aIdArray ) const
   119 void CEmailMailboxCache::GetIdsL( REmailMailboxIdArray& aIdArray ) const
   129     {
   120     {
   130     if ( iState != EComplete )
   121     if ( iState != EComplete )
   131         {
   122         {
   132         // cache not up to date
   123         // cache not up to date
   140     }
   131     }
   141 
   132 
   142 // ---------------------------------------------------------------------------
   133 // ---------------------------------------------------------------------------
   143 // 
   134 // 
   144 // ---------------------------------------------------------------------------
   135 // ---------------------------------------------------------------------------
   145 //
       
   146 TInt CEmailMailboxCache::FindById( const TMailboxId& aMailboxId ) const
   136 TInt CEmailMailboxCache::FindById( const TMailboxId& aMailboxId ) const
   147     {
   137     {
   148     TIdentityRelation<TCacheEntry> rel( CEmailMailboxCache::Equals );
   138     TIdentityRelation<TCacheEntry> rel( CEmailMailboxCache::Equals );
   149     
   139 
   150     // don't care about plugin data because this is seach key only and
   140     // don't care about plugin data because this is seach key only and
   151     // mailbox id is used for search
   141     // mailbox id is used for search
   152     TCacheEntry entry( NULL, aMailboxId );
   142     TCacheEntry entry( NULL, aMailboxId );
   153     return iEntries.Find( entry, rel );
   143     return iEntries.Find( entry, rel );
   154     }
   144     }
   155 
   145 
   156 // ---------------------------------------------------------------------------
   146 // ---------------------------------------------------------------------------
   157 // 
   147 // 
   158 // ---------------------------------------------------------------------------
   148 // ---------------------------------------------------------------------------
   159 //
       
   160 TInt CEmailMailboxCache::FindByPluginIdL( const TUid& aPluginId ) const
   149 TInt CEmailMailboxCache::FindByPluginIdL( const TUid& aPluginId ) const
   161     {
   150     {
   162     TIdentityRelation<TCacheEntry> rel( CEmailMailboxCache::PluginEquals );
   151     TIdentityRelation<TCacheEntry> rel( CEmailMailboxCache::PluginEquals );
   163     CPluginData* key = new ( ELeave ) CPluginData( aPluginId );
   152     CPluginData* key = new ( ELeave ) CPluginData( aPluginId );
   164     TCacheEntry entry( key, TMailboxId() );
   153     TCacheEntry entry( key, TMailboxId() );
   168     }
   157     }
   169 
   158 
   170 // ---------------------------------------------------------------------------
   159 // ---------------------------------------------------------------------------
   171 // 
   160 // 
   172 // ---------------------------------------------------------------------------
   161 // ---------------------------------------------------------------------------
   173 //
       
   174 TBool CEmailMailboxCache::Equals( const TCacheEntry& a1, const TCacheEntry& a2 )
   162 TBool CEmailMailboxCache::Equals( const TCacheEntry& a1, const TCacheEntry& a2 )
   175     {
   163     {
   176     return ( a1.iMailboxId == a2.iMailboxId );
   164     return ( a1.iMailboxId == a2.iMailboxId );
   177     }
   165     }
   178 
   166 
   179 // ---------------------------------------------------------------------------
   167 // ---------------------------------------------------------------------------
   180 // 
   168 // 
   181 // ---------------------------------------------------------------------------
   169 // ---------------------------------------------------------------------------
   182 //
       
   183 TBool CEmailMailboxCache::PluginEquals( const TCacheEntry& a1, const TCacheEntry& a2 )
   170 TBool CEmailMailboxCache::PluginEquals( const TCacheEntry& a1, const TCacheEntry& a2 )
   184     {
   171     {
   185     return ( a1.iPluginData->Uid() == a2.iPluginData->Uid() );
   172     return ( a1.iPluginData->Uid() == a2.iPluginData->Uid() );
   186     }
   173     }
   187 
   174 
   188 // ---------------------------------------------------------------------------
   175 // ---------------------------------------------------------------------------
   189 // Cleanup 
   176 // Cleanup 
   190 // ---------------------------------------------------------------------------
   177 // ---------------------------------------------------------------------------
   191 //
       
   192 void CEmailMailboxCache::CleanupOp( TAny* aAny )
   178 void CEmailMailboxCache::CleanupOp( TAny* aAny )
   193     {
   179     {
   194     CEmailMailboxCache* cache = reinterpret_cast<CEmailMailboxCache*>( aAny );
   180     CEmailMailboxCache* cache = reinterpret_cast<CEmailMailboxCache*>( aAny );
   195     cache->iEntries.Reset();
   181     cache->iEntries.Reset();
   196     cache->iState = EEmpty;
   182     cache->iState = EEmpty;
   197     }
   183     }
   198 
   184 
   199 // ---------------------------------------------------------------------------
   185 // ---------------------------------------------------------------------------
   200 // 
   186 // 
   201 // ---------------------------------------------------------------------------
   187 // ---------------------------------------------------------------------------
   202 //
       
   203 CEmailMailboxCache::CEmailMailboxCache() : 
   188 CEmailMailboxCache::CEmailMailboxCache() : 
   204     iState( EEmpty ), 
   189     iState( EEmpty ), 
   205     iEntries( KCacheGranularity )
   190     iEntries( KCacheGranularity )
   206     {
   191     {
   207     }
   192     }
   208 
   193 
   209 // End of file.
   194 // End of file