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". |
22 #include <vwsdefpartner.h> |
22 #include <vwsdefpartner.h> |
23 #else |
23 #else |
24 #include <viewcli.h> |
24 #include <viewcli.h> |
25 #include <vwsdef.h> |
25 #include <vwsdef.h> |
26 #endif // SYMBIAN_ENABLE_SPLIT_HEADERS |
26 #endif // SYMBIAN_ENABLE_SPLIT_HEADERS |
27 #include <coemain.h> // CCoeEnv |
|
28 #include <coeaui.h> // CCoeAppUi |
|
29 #include <centralrepository.h> |
27 #include <centralrepository.h> |
30 #include "emailclientapiimpl.h" |
28 #include "emailclientapiimpl.h" |
31 #include "emailapiutils.h" |
29 #include "emailapiutils.h" |
32 #include "emailmailbox.h" |
30 #include "emailmailbox.h" |
33 #include <memailaddress.h> |
31 #include <memailaddress.h> |
34 #include "cfsmailplugin.h" |
32 #include "CFSMailPlugin.h" |
35 #include "cfsclientapi.h" |
33 #include "CFSMailClient.h" |
36 #include "emailclientapiimpldefs.h" |
34 #include "emailclientapiimpldefs.h" |
37 #include "emailmailboxcache.h" |
35 #include "emailmailboxcache.h" |
38 #include "FreestyleEmailUiConstants.h" |
|
39 #include "emailclientapi.hrh" |
36 #include "emailclientapi.hrh" |
40 #include "freestyleemailcenrepkeys.h" |
37 |
41 #include "FreestyleEmailUiConstants.h" |
|
42 |
|
43 // --------------------------------------------------------------------------- |
|
44 // CEmailClientApi::MailboxL |
|
45 // --------------------------------------------------------------------------- |
38 // --------------------------------------------------------------------------- |
46 // |
39 // |
|
40 // --------------------------------------------------------------------------- |
47 MEmailMailbox* CEmailClientApi::MailboxL( const TMailboxId& aId ) |
41 MEmailMailbox* CEmailClientApi::MailboxL( const TMailboxId& aId ) |
48 { |
42 { |
49 UpdateMailboxInfoCacheL(); |
43 UpdateMailboxInfoCacheL(); |
50 CPluginData* pluginData = MailboxInfoCacheL().PluginDataL( aId ); |
44 CPluginData* pluginData = MailboxInfoCacheL().PluginDataL( aId ); |
51 MEmailMailbox* mailbox = NULL; |
45 MEmailMailbox* mailbox = NULL; |
114 // ----------------------------------------------------------------------------- |
107 // ----------------------------------------------------------------------------- |
115 TInt CEmailClientApi::GetMailboxesL( RMailboxPtrArray& aMailboxes ) |
108 TInt CEmailClientApi::GetMailboxesL( RMailboxPtrArray& aMailboxes ) |
116 { |
109 { |
117 REmailMailboxIdArray mailboxIdArray; |
110 REmailMailboxIdArray mailboxIdArray; |
118 CleanupClosePushL( mailboxIdArray ); |
111 CleanupClosePushL( mailboxIdArray ); |
119 |
112 |
120 // note! GetMailboxIdsL loads plugin and keeps loaded if it contains at |
113 // GetMailboxIdsL loads plugin and keeps loaded if it contains at |
121 // least one mailbox |
114 // least one mailbox |
122 TInt count = GetMailboxIdsL( mailboxIdArray ); |
115 TInt count = GetMailboxIdsL( mailboxIdArray ); |
123 while ( count-- ) |
116 while ( count-- ) |
124 { |
117 { |
125 // mailbox creation increases plugin ref count by one |
118 // mailbox creation increases plugin ref count by one |
130 } |
123 } |
131 // Created mailboxes still hold plugin references so we can decrease |
124 // Created mailboxes still hold plugin references so we can decrease |
132 // ref count. |
125 // ref count. |
133 ReleaseAllPlugins(); |
126 ReleaseAllPlugins(); |
134 |
127 |
135 CleanupStack::PopAndDestroy(); // mailboxIdArray |
128 CleanupStack::PopAndDestroy( &mailboxIdArray ); |
136 return aMailboxes.Count(); |
129 return aMailboxes.Count(); |
137 } |
130 } |
138 |
131 |
139 // ----------------------------------------------------------------------------- |
132 // ----------------------------------------------------------------------------- |
140 // implement this |
133 // |
141 // ----------------------------------------------------------------------------- |
134 // ----------------------------------------------------------------------------- |
142 void CEmailClientApi::LaunchEmailL( const TLaunchPolicy aPolicy ) |
135 void CEmailClientApi::LaunchEmailL( const TLaunchPolicy /*aPolicy*/ ) |
143 { |
136 { |
144 if ( aPolicy == EShowLastUnseenMailbox) |
137 User::Leave(KErrNotSupported); |
145 { |
138 } |
146 CRepository* emailRepository = CRepository::NewL( KFreestyleEmailCenRep ); |
|
147 CleanupStack::PushL(emailRepository); |
|
148 TInt numberOfMailboxes(0); |
|
149 TInt inboxId(0); |
|
150 TInt pluginId(0); |
|
151 emailRepository->Get(KNumberOfMailboxesWithNewEmails,numberOfMailboxes); |
|
152 if(numberOfMailboxes > 0) |
|
153 { |
|
154 emailRepository->Get(KNumberOfMailboxesWithNewEmails+(numberOfMailboxes*2-1),pluginId); |
|
155 emailRepository->Get(KNumberOfMailboxesWithNewEmails+(numberOfMailboxes*2),inboxId); |
|
156 |
|
157 TUid pluginUid = {pluginId}; |
|
158 TMailListActivationData activationData; |
|
159 |
|
160 activationData.iMailBoxId.SetId(inboxId); |
|
161 activationData.iMailBoxId.SetPluginId(pluginUid); |
|
162 activationData.iFolderId.SetPluginId(pluginUid); |
|
163 TPckgBuf<TMailListActivationData> pkgBuf(activationData); |
|
164 |
|
165 CCoeEnv::Static()->AppUi()->CreateActivateViewEventL( |
|
166 TVwsViewId(KFSEmailUiUid, MailListId), KStartListWithFolderId, |
|
167 pkgBuf ); |
|
168 } |
|
169 else |
|
170 { |
|
171 // We should never come here since the mailbox count should be more than 0 if launchemailL is called |
|
172 // but just to be safe launch the email in launchergrid if something went wrong with the repository |
|
173 const TUid dummy = {0}; |
|
174 CCoeEnv::Static()->AppUi()->CreateActivateViewEventL(TVwsViewId(KFSEmailUiUid, AppGridId), |
|
175 dummy, KNullDesC8() ); |
|
176 } |
|
177 CleanupStack::PopAndDestroy();//emailRepository |
|
178 } |
|
179 else if ( aPolicy == EDefault ) |
|
180 { |
|
181 const TUid dummy = {0}; |
|
182 CCoeEnv::Static()->AppUi()->CreateActivateViewEventL(TVwsViewId(KFSEmailUiUid, AppGridId), |
|
183 dummy, KNullDesC8() ); |
|
184 } |
|
185 } |
|
186 |
139 |
187 // ----------------------------------------------------------------------------- |
140 // ----------------------------------------------------------------------------- |
188 // |
141 // |
189 // ----------------------------------------------------------------------------- |
142 // ----------------------------------------------------------------------------- |
190 CPluginData* CEmailClientApi::TPluginIterator::Next() |
143 CPluginData* CEmailClientApi::TPluginIterator::Next() |
201 // |
154 // |
202 // ----------------------------------------------------------------------------- |
155 // ----------------------------------------------------------------------------- |
203 CEmailClientApi* CEmailClientApi::NewL() |
156 CEmailClientApi* CEmailClientApi::NewL() |
204 { |
157 { |
205 CEmailClientApi* instance = static_cast<CEmailClientApi*>( Dll::Tls() ); |
158 CEmailClientApi* instance = static_cast<CEmailClientApi*>( Dll::Tls() ); |
206 |
159 |
207 if ( instance == NULL ) |
160 if ( !instance ) |
208 { |
161 { |
209 instance = new ( ELeave ) CEmailClientApi(); |
162 instance = new ( ELeave ) CEmailClientApi(); |
210 CleanupStack::PushL( instance ); |
163 CleanupStack::PushL( instance ); |
211 instance->ConstructL(); |
164 instance->ConstructL(); |
212 User::LeaveIfError( Dll::SetTls( instance ) ); |
165 User::LeaveIfError( Dll::SetTls( instance ) ); |
213 CleanupStack::Pop(); |
166 CleanupStack::Pop( instance ); |
214 } |
167 } |
215 |
168 |
216 instance->iInstanceCounter++; |
169 instance->iInstanceCounter++; |
217 |
170 |
218 return instance; |
171 return instance; |
219 } |
172 } |
220 |
173 |
221 // ----------------------------------------------------------------------------- |
174 // ----------------------------------------------------------------------------- |
222 // |
175 // |
233 delete iPluginDataArray[count]; |
186 delete iPluginDataArray[count]; |
234 } |
187 } |
235 iPluginDataArray.Close(); |
188 iPluginDataArray.Close(); |
236 iLoadedPluginsArray.Close(); |
189 iLoadedPluginsArray.Close(); |
237 delete iMailboxCache; |
190 delete iMailboxCache; |
238 delete iClientAPI; |
191 |
239 Dll::FreeTls(); |
192 Dll::FreeTls(); |
240 } |
193 } |
241 |
194 |
242 // ----------------------------------------------------------------------------- |
195 // ----------------------------------------------------------------------------- |
243 // |
196 // |
244 // ----------------------------------------------------------------------------- |
197 // ----------------------------------------------------------------------------- |
245 CEmailClientApi::CEmailClientApi() : iInstanceCounter( 0 ) |
198 CEmailClientApi::CEmailClientApi() : iInstanceCounter( 0 ) |
246 { |
199 { |
247 } |
200 } |
248 |
201 |
249 // ----------------------------------------------------------------------------- |
202 // ----------------------------------------------------------------------------- |
250 // |
203 // |
251 // ----------------------------------------------------------------------------- |
204 // ----------------------------------------------------------------------------- |
287 // failed to append, give up |
240 // failed to append, give up |
288 delete pluginData; |
241 delete pluginData; |
289 count = 0; |
242 count = 0; |
290 } |
243 } |
291 } |
244 } |
292 iClientAPI = CFSClientAPI::NewL(this); |
245 iMailClient = CFSMailClient::NewL(); |
293 CleanupStack::PopAndDestroy(); // CleanupImplInfoPushL |
246 CleanupStack::PopAndDestroy( &implInfoArray ); |
294 User::LeaveIfError( err ); |
247 User::LeaveIfError( err ); |
295 } |
248 } |
296 |
249 |
297 |
|
298 // ----------------------------------------------------------------------------- |
250 // ----------------------------------------------------------------------------- |
299 // |
251 // |
300 // ----------------------------------------------------------------------------- |
252 // ----------------------------------------------------------------------------- |
301 TEmailTypeId CEmailClientApi::InterfaceId() const |
253 TEmailTypeId CEmailClientApi::InterfaceId() const |
302 { |
254 { |
315 else |
267 else |
316 { |
268 { |
317 this->iInstanceCounter--; |
269 this->iInstanceCounter--; |
318 } |
270 } |
319 } |
271 } |
320 |
272 |
321 // ----------------------------------------------------------------------------- |
273 // ----------------------------------------------------------------------------- |
322 // Returns plugin instance from plugin data. If we already have "claimed" |
274 // Returns plugin instance from plugin data. If we already have "claimed" |
323 // instance once, prevent increment of reference count |
275 // instance once, prevent increment of reference count |
324 // ----------------------------------------------------------------------------- |
276 // ----------------------------------------------------------------------------- |
325 CFSMailPlugin* CEmailClientApi::UsePlugin( CPluginData& aPluginData ) |
277 CFSMailPlugin* CEmailClientApi::UsePlugin( CPluginData& aPluginData ) |
343 // already in use, obtain plugin pointer from the array |
295 // already in use, obtain plugin pointer from the array |
344 pluginDataPtr = &iLoadedPluginsArray[index]; |
296 pluginDataPtr = &iLoadedPluginsArray[index]; |
345 } |
297 } |
346 return pluginDataPtr->iPlugin; |
298 return pluginDataPtr->iPlugin; |
347 } |
299 } |
348 |
300 |
349 // ----------------------------------------------------------------------------- |
301 // ----------------------------------------------------------------------------- |
350 // |
302 // |
351 // ----------------------------------------------------------------------------- |
303 // ----------------------------------------------------------------------------- |
352 void CEmailClientApi::ReleasePlugin( CPluginData& aPluginData ) |
304 void CEmailClientApi::ReleasePlugin( CPluginData& aPluginData ) |
353 { |
305 { |
426 // don't continue if OOM |
378 // don't continue if OOM |
427 User::Leave( KErrNoMemory ); |
379 User::Leave( KErrNoMemory ); |
428 } |
380 } |
429 pluginData = iter.Next(); |
381 pluginData = iter.Next(); |
430 } |
382 } |
431 mbcache.EndCachingPop(); |
383 mbcache.EndCachingPop(); |
432 } |
384 } |
433 } |
385 } |
434 |
386 |
435 // ----------------------------------------------------------------------------- |
387 // ----------------------------------------------------------------------------- |
436 // |
388 // |
437 // ----------------------------------------------------------------------------- |
389 // ----------------------------------------------------------------------------- |
443 aPlugin.ListMailBoxesL( pluginMailboxes ); |
395 aPlugin.ListMailBoxesL( pluginMailboxes ); |
444 TInt mailboxCount = pluginMailboxes.Count(); |
396 TInt mailboxCount = pluginMailboxes.Count(); |
445 while ( mailboxCount-- ) |
397 while ( mailboxCount-- ) |
446 { |
398 { |
447 const TFSMailMsgId& mailboxId = pluginMailboxes[mailboxCount]; |
399 const TFSMailMsgId& mailboxId = pluginMailboxes[mailboxCount]; |
448 TMailboxId id( mailboxId.Id() ); |
400 TMailboxId id( mailboxId.Id() ); |
449 MailboxInfoCacheL().AddMailboxL( aPluginData, id ); |
401 MailboxInfoCacheL().AddMailboxL( aPluginData, id ); |
450 containsMailbox = ETrue; |
402 containsMailbox = ETrue; |
451 } |
403 } |
452 CleanupStack::PopAndDestroy(); // pluginMailboxes |
404 CleanupStack::PopAndDestroy( &pluginMailboxes ); |
453 return containsMailbox; |
405 return containsMailbox; |
454 } |
406 } |
455 |
407 |
456 // ----------------------------------------------------------------------------- |
408 // ----------------------------------------------------------------------------- |
457 // |
409 // |
458 // ----------------------------------------------------------------------------- |
410 // ----------------------------------------------------------------------------- |
459 TInt CEmailClientApi::IndexOfLoadedPluginData( const TPluginData& aPluginData ) const |
411 TInt CEmailClientApi::IndexOfLoadedPluginData( const TPluginData& aPluginData ) const |
460 { |
412 { |
461 TIdentityRelation<TPluginData> relation( CEmailClientApi::PluginDataEquals ); |
413 TIdentityRelation<TPluginData> relation( CEmailClientApi::PluginDataEquals ); |
462 return iLoadedPluginsArray.Find( aPluginData, relation ); |
414 return iLoadedPluginsArray.Find( aPluginData, relation ); |
463 } |
415 } |
464 |
416 |
465 // ----------------------------------------------------------------------------- |
417 // ----------------------------------------------------------------------------- |
466 // |
418 // |