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 |