00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "searchsortexample.h"
00017 #include "mAsyncWaiter.h"
00018 #include <msvsearchsortoperation.h>
00019
00020 void CSearchsortExample::HandleSessionEventL(TMsvSessionEvent aEvent, TAny*, TAny*, TAny*)
00021 {
00022
00023 switch (aEvent)
00024 {
00025 case MMsvSessionObserver::EMsvServerReady:
00026 break;
00027 case MMsvSessionObserver::EMsvEntriesCreated:
00028 break;
00029 default:
00030 break;
00031 }
00032 }
00033
00038 CSearchsortExample* CSearchsortExample::NewL()
00039 {
00040 CSearchsortExample* self=new(ELeave)CSearchsortExample;
00041 CleanupStack::PushL(self);
00042 self->ConstructL();
00043 CleanupStack::Pop();
00044 return self;
00045 }
00049 CSearchsortExample::CSearchsortExample()
00050 {
00051 }
00052
00053 void CSearchsortExample::ConstructL()
00054 {
00055 }
00056
00060 CSearchsortExample::~ CSearchsortExample()
00061 {
00062 if(iMtm)
00063 {
00064 delete iMtm;
00065 iMtm = NULL;
00066 }
00067 if(iClientRegistry)
00068 {
00069 delete iClientRegistry;
00070 iClientRegistry = NULL;
00071 }
00072 if(iSearch)
00073 {
00074 delete iSearch;
00075 iSearch = NULL;
00076 }
00077 if(iSession)
00078 {
00079 delete iSession;
00080 iSession = NULL;
00081 }
00082
00083 iQueryIdTable.Close();
00084 iTResultSummary.Close();
00085
00086 }
00087
00088
00094 void CSearchsortExample::CreateClientRegistryL()
00095 {
00096
00097 iSession = CMsvSession::OpenAsyncL(*this);
00098 CleanupStack::PushL(iSession);
00099
00100 iSearch = CMsvSearchSortOperation::NewL(*iSession);
00101 CleanupStack::PushL(iSearch);
00102
00103
00104 iClientRegistry = CClientMtmRegistry::NewL(*iSession,KMsvDefaultTimeoutMicroSeconds32);
00105 if (iClientRegistry != NULL && iClientRegistry->IsPresent(KUidMsgTypePOP3))
00106 {
00107 CleanupStack::PushL(iClientRegistry);
00108 }
00109
00110 iMtm = (CPop3ClientMtm*)iClientRegistry->NewMtmL(KUidMsgTypePOP3);
00111
00112 CleanupStack::Pop(3,iSession);
00113 }
00114
00121 void CSearchsortExample::CreatePopAndSmtpAccountL()
00122 {
00123 CEmailAccounts* emailAccounts = CEmailAccounts::NewLC();
00124 CImPop3Settings* settings = new(ELeave) CImPop3Settings();
00125 CleanupStack::PushL(settings);
00126
00127 CImIAPPreferences* popIAP = CImIAPPreferences::NewLC();
00128
00129
00130 settings->SetServerAddressL(KPopServer);
00131 settings->SetLoginNameL(KPopLoginName);
00132 settings->SetPasswordL(KPopPassword);
00133 settings->SetPort(KPortValue);
00134
00135
00136 iPopAccount = emailAccounts->CreatePopAccountL(KTxtAccountName, *settings,*popIAP,EFalse);
00137
00138 CImSmtpSettings *smtpSettings = new (ELeave) CImSmtpSettings();
00139 CleanupStack::PushL(smtpSettings);
00140
00141 emailAccounts->PopulateDefaultSmtpSettingsL(*smtpSettings, *popIAP);
00142
00143
00144 iSmtpAccount = emailAccounts->CreateSmtpAccountL(iPopAccount, *smtpSettings, *popIAP, EFalse);
00145
00146 emailAccounts->SetDefaultSmtpAccountL(iSmtpAccount);
00147
00148 smtpSettings->SetServerAddressL(KSmtpServerAddress);
00149 smtpSettings->SetEmailAliasL(KEmailAlias);
00150 smtpSettings->SetEmailAddressL(KSmtpEmailAddress);
00151 smtpSettings->SetReplyToAddressL(KSmtpEmailAddress);
00152 smtpSettings->SetReceiptAddressL(KSmtpEmailAddress);
00153 smtpSettings->SetPort(KSmtpPortValue);
00154
00155
00156 CImIAPPreferences* prefs = CImIAPPreferences::NewLC();
00157 TImIAPChoice iap;
00158 TInt iapID = 0;
00159 CMDBSession* dbSession = CMDBSession::NewL(KCDVersion1_1);
00160 CleanupStack::PushL(dbSession);
00161 CCDConnectionPrefsRecord *connPrefRecord = static_cast<CCDConnectionPrefsRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdConnectionPrefsRecord));
00162 CleanupStack::PushL(connPrefRecord);
00163
00164
00165 connPrefRecord->iDirection = ECommDbConnectionDirectionOutgoing;
00166 connPrefRecord->iRanking = 1;
00167 if(!connPrefRecord->FindL(*dbSession))
00168 {
00169 User::Leave(KErrNotFound);
00170 }
00171 iapID = connPrefRecord->iDefaultIAP;
00172 iap.iIAP = iapID;
00173 iap.iDialogPref = ECommDbDialogPrefDoNotPrompt;
00174 prefs->AddIAPL(iap);
00175
00176 emailAccounts->GetSmtpAccountL(iSmtpAccount.iSmtpService, iSmtpAccount);
00177 emailAccounts->SaveSmtpSettingsL(iSmtpAccount,*smtpSettings);
00178 emailAccounts->SaveSmtpIapSettingsL(iSmtpAccount, *prefs);
00179
00180
00181 DeleteSmtpMessageL();
00182
00183 CleanupStack::PopAndDestroy(7,emailAccounts);
00184 }
00185
00190 void CSearchsortExample::CreateSmtpMessageL(TInt aindex,TDes& aFrominfo,TDes& aToinfo,TDes& aSubjectinfo)
00191 {
00192
00193 TMsvId inboxId = KMsvGlobalInBoxIndexEntryId;
00194
00195
00196 CMsvEntry* entry = CMsvEntry::NewL(*iSession,inboxId,TMsvSelectionOrdering());
00197 CleanupStack::PushL(entry);
00198 entry->SetEntryL(inboxId);
00199
00200 CMessAsyncWaiter* waiter = CMessAsyncWaiter::NewL();
00201 CleanupStack::PushL(waiter);
00202
00203 TMsvEmailTypeList msvEmailTypeList = 0;
00204 TMsvPartList partList = (KMsvMessagePartBody | KMsvMessagePartAttachments|KMsvMessagePartTo|KMsvMessagePartFrom|KMsvMessagePartSubject);
00205
00206 CImEmailOperation* emailOperation = CImEmailOperation::CreateNewL(waiter->iStatus, *iSession,KMsvGlobalInBoxIndexEntryId, partList, msvEmailTypeList, KUidMsgTypeSMTP);
00207 CleanupStack::PushL(emailOperation);
00208 waiter->StartAndWait();
00209
00210 TMsvId temp;
00211 TPckgC<TMsvId> paramPack(temp);
00212 const TDesC8& progBuf = emailOperation->ProgressL();
00213
00214 paramPack.Set(progBuf);
00215 TMsvId newMessageId;
00216 newMessageId = paramPack();
00217
00218
00219 entry->SetEntryL(newMessageId);
00220
00221 CMsvStore* store = entry->EditStoreL();
00222 CleanupStack::PushL(store);
00223
00224
00225 CImHeader* emailEntry = CImHeader::NewLC();
00226 emailEntry->RestoreL(*store);
00227
00228
00229 switch(aindex)
00230 {
00231 case 0:
00232 {
00233 emailEntry->SetFromL((TDesC8&)KFrom1);
00234 emailEntry->SetSubjectL((TDesC&)KSubject1);
00235 emailEntry->ToRecipients().AppendL((TDesC&)KTo1);
00236 aToinfo.Copy(KTo1);
00237 }
00238 break;
00239 case 1:
00240 {
00241 emailEntry->SetFromL((TDesC8&)KFrom2);
00242 emailEntry->SetSubjectL((TDesC&)KSubject2);
00243 emailEntry->ToRecipients().AppendL((TDesC&)KTo2);
00244 aToinfo.Copy(KTo2);
00245 }
00246 break;
00247 case 2:
00248 {
00249 emailEntry->SetFromL((TDesC8&)KFrom3);
00250 emailEntry->SetSubjectL((TDesC&)KSubject3);
00251 emailEntry->ToRecipients().AppendL((TDesC&)KTo3);
00252 aToinfo.Copy(KTo3);
00253 }
00254 break;
00255 case 3:
00256 {
00257 emailEntry->SetFromL((TDesC8&)KFrom4);
00258 emailEntry->SetSubjectL((TDesC&)KSubject4);
00259 emailEntry->ToRecipients().AppendL((TDesC&)KTo4);
00260 aToinfo.Copy(KTo4);
00261 }
00262 break;
00263 case 4:
00264 {
00265 emailEntry->SetFromL((TDesC8&)KFrom5);
00266 emailEntry->SetSubjectL((TDesC&)KSubject5);
00267 emailEntry->ToRecipients().AppendL((TDesC&)KTo5);
00268 aToinfo.Copy(KTo5);
00269 }
00270 break;
00271 default:
00272 break;
00273 }
00274
00275 aFrominfo.Copy(emailEntry->From());
00276 aSubjectinfo.Copy(emailEntry->Subject());
00277
00278
00279 CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
00280 CleanupStack::PushL(paraFormatLayer);
00281
00282 CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
00283 CleanupStack::PushL(charFormatLayer);
00284
00285 CRichText* bodyText = CRichText::NewL(paraFormatLayer, charFormatLayer, CEditableText::EFlatStorage, 256);
00286 CleanupStack::PushL(bodyText);
00287
00288
00289 bodyText->InsertL(0, KBodyContents);
00290 store->StoreBodyTextL(*bodyText);
00291 emailEntry->StoreL(*store);
00292
00293 store->CommitL();
00294
00295
00296 CleanupStack::PopAndDestroy(8,entry);
00297 }
00298
00299
00303 void CSearchsortExample::SearchSortRequestWithoutIteratorL(TDes& aSearchtext,TBool aCaseSensitivity,TBool aWholeWordSearch,TBool aCombinedSearch,TInt& aResultCount)
00304 {
00305
00306
00307 CMessAsyncWaiter* waiter = CMessAsyncWaiter::NewL();
00308 CleanupStack::PushL(waiter);
00309
00310
00311 CMsvSearchSortQuery* searchQuery = CMsvSearchSortQuery::NewL();
00312 CleanupStack::PushL(searchQuery);
00313
00314
00315
00316 searchQuery->SetParentId(KMsvGlobalInBoxIndexEntryIdValue);
00317
00318 searchQuery->SetResultType(EMsvResultAsTMsvEntry);
00319 searchQuery->SetWholeWord(aWholeWordSearch);
00320 searchQuery->SetCaseSensitiveOption(aCaseSensitivity);
00321 searchQuery->SetWildCardSearch(EFalse);
00322
00323
00324 searchQuery->AddSearchOptionL(EMsvTo,aSearchtext, EMsvEqual);
00325
00326
00327 if(aCombinedSearch)
00328 {
00329 TInt size = KSize;
00330
00331 searchQuery->AddSearchOptionL(EMsvSize, size, EMsvLessThanOrEqual);
00332 searchQuery->AddSearchOptionL(EMsvSubject, KSubjectSearch, EMsvEqual);
00333
00334 }
00335
00336
00337 searchQuery->AddSortOptionL(EMsvDate, EMsvSortAscending);
00338
00339
00340
00341 CleanupStack::Pop(searchQuery);
00342
00343
00344 iSearch->RequestL(searchQuery, ETrue, waiter->iStatus);
00345 waiter->StartAndWait();
00346
00347
00348 RArray<TMsvEntry> resultArray;
00349
00350
00351
00352 TRAPD(ret, iSearch->GetResultsL(resultArray));
00353
00354 iTResultSummary.Reset();
00355
00356 TMsvId inboxId=KMsvGlobalInBoxIndexEntryId;
00357 CMsvEntry* entry = CMsvEntry::NewL(*iSession,inboxId,TMsvSelectionOrdering());
00358 CleanupStack::PushL(entry);
00359
00360 if(ret == KErrNone)
00361 {
00362
00363 for(TInt index=0;index<resultArray.Count();index++)
00364 {
00365 TResultSummary tempdata;
00366 TMsvEntry tempentry;
00367 TTime date;
00368
00369 tempentry=resultArray[index];
00370 entry->SetEntryL(tempentry.Id());
00371
00372
00373 CMsvStore* store = entry->ReadStoreL();
00374 CleanupStack::PushL(store);
00375 CImHeader* emailEntry = CImHeader::NewLC();
00376 emailEntry->RestoreL(*store);
00377
00378 tempdata.iSubjectText.Copy(emailEntry->Subject());
00379 tempdata.iToText.Copy((emailEntry->ToRecipients())[0]);
00380 tempdata.iSize=tempentry.iSize;
00381 date=tempentry.iDate;
00382 date.FormatL(tempdata.iDatestring,KFormat1);
00383 date.FormatL(tempdata.iTimestring,KFormat2);
00384 iTResultSummary.Append(tempdata);
00385
00386 CleanupStack::PopAndDestroy(2,store);
00387 }
00388 aResultCount=iSearch->GetResultCountL();
00389 }
00390
00391
00392 iQueryId = iSearch->GetQueryIdL();
00393
00394 iExampleTQueryTable.iQueryId=iQueryId;
00395 iExampleTQueryTable.iResultType=EMsvResultAsTMsvEntry;
00396 iQueryIdTable.Append(iExampleTQueryTable);
00397
00398 resultArray.Close();
00399 CleanupStack::PopAndDestroy(2,waiter);
00400 }
00401
00405 void CSearchsortExample::SearchSortRequestWithIteratorL(TInt& aResultCount)
00406 {
00407
00408
00409 CMessAsyncWaiter* waiter = CMessAsyncWaiter::NewL();
00410 CleanupStack::PushL(waiter);
00411
00412
00413 CMsvSearchSortQuery* searchQuery = CMsvSearchSortQuery::NewL();
00414 CleanupStack::PushL(searchQuery);
00415
00416
00417
00418 searchQuery->SetParentId(KMsvGlobalInBoxIndexEntryIdValue);
00419
00420 searchQuery->SetResultType(EMsvResultAsTMsvId);
00421 searchQuery->SetWholeWord(ETrue);
00422 searchQuery->SetCaseSensitiveOption(EFalse);
00423 searchQuery->SetWildCardSearch(EFalse);
00424
00425
00426 TInt size = KSize;
00427
00428 searchQuery->AddSearchOptionL(EMsvSize, size, EMsvLessThanOrEqual);
00429
00430
00431 searchQuery->AddSortOptionL(EMsvDate, EMsvSortAscending);
00432
00433
00434 TInt iterator = 1;
00435
00436
00437
00438 CleanupStack::Pop(searchQuery);
00439
00440 iSearch->RequestL(searchQuery, ETrue, waiter->iStatus,iterator);
00441 waiter->StartAndWait();
00442
00443
00444 RArray<TMsvId> resultArray;
00445 TMsvId resultAsTMsvId;
00446
00447
00448
00449
00450
00451 while(iSearch->GetNextResultL(resultAsTMsvId))
00452 {
00453 resultArray.AppendL(resultAsTMsvId);
00454 }
00455
00456 aResultCount=iSearch->GetResultCountL();
00457
00458 resultArray.Close();
00459 CleanupStack::PopAndDestroy(waiter);
00460 }
00461
00465 void CSearchsortExample::SearchSortRequestByQueryIdL(TInt& aResultCount)
00466 {
00467
00468
00469
00470 CMessAsyncWaiter* waiter = CMessAsyncWaiter::NewL();
00471 CleanupStack::PushL(waiter);
00472
00473
00474 iSearch->RequestL(iQueryId, waiter->iStatus);
00475 waiter->StartAndWait();
00476
00477
00478
00479 TInt count=iQueryIdTable.Count();
00480 TQueryTable tempdata;
00481
00482 TMsvId inboxId=KMsvGlobalInBoxIndexEntryId;
00483 CMsvEntry* entry = CMsvEntry::NewL(*iSession,inboxId,TMsvSelectionOrdering());
00484 CleanupStack::PushL(entry);
00485
00486 iTResultSummary.Reset();
00487 for(TInt index=0;index<count;index++)
00488 {
00489 tempdata=iQueryIdTable[index];
00490 if(tempdata.iQueryId==iQueryId)
00491 {
00492 if(tempdata.iResultType==EMsvResultAsTMsvId)
00493 {
00494 RArray<TMsvId> resultArray;
00495 TRAPD(ret, iSearch->GetResultsL(resultArray));
00496 if(ret == KErrNone)
00497 {
00498 TInt count = resultArray.Count();
00499 aResultCount=count;
00500 }
00501 resultArray.Close();
00502 }
00503 else if(tempdata.iResultType==EMsvResultAsTMsvEntry)
00504 {
00505 RArray<TMsvEntry> resultArray;
00506 TRAPD(ret, iSearch->GetResultsL(resultArray));
00507 if(ret == KErrNone)
00508 {
00509 TInt count = resultArray.Count();
00510 aResultCount=count;
00511
00512
00513 for(TInt index=0;index<count;index++)
00514 {
00515 TResultSummary tempdata;
00516 TMsvEntry tempentry;
00517 TTime date;
00518
00519
00520 tempentry=resultArray[index];
00521 entry->SetEntryL(tempentry.Id());
00522
00523
00524 CMsvStore* store = entry->ReadStoreL();
00525 CleanupStack::PushL(store);
00526 CImHeader* emailEntry = CImHeader::NewLC();
00527 emailEntry->RestoreL(*store);
00528
00529
00530 tempdata.iSubjectText.Copy(emailEntry->Subject());
00531 tempdata.iToText.Copy((emailEntry->ToRecipients())[0]);
00532 tempdata.iSize=tempentry.iSize;
00533 date=tempentry.iDate;
00534 date.FormatL(tempdata.iDatestring,KFormat1);
00535 date.FormatL(tempdata.iTimestring,KFormat2);
00536 iTResultSummary.Append(tempdata);
00537
00538 CleanupStack::PopAndDestroy(2,store);
00539 }
00540 }
00541 resultArray.Close();
00542 }
00543 }
00544 }
00545 CleanupStack::PopAndDestroy(2,waiter);
00546 }
00547
00551 void CSearchsortExample::DeleteSmtpMessageL()
00552 {
00553
00554
00555 CMessAsyncWaiter* waiter = CMessAsyncWaiter::NewL();
00556 CleanupStack::PushL(waiter);
00557
00558 TInt mycount;
00559 TMsvId inboxId = KMsvGlobalInBoxIndexEntryId;
00560 CMsvEntry* messagingEntry = CMsvEntry::NewL(*iSession,inboxId,TMsvSelectionOrdering());
00561 CleanupStack::PushL(messagingEntry);
00562 messagingEntry->SetEntryL(inboxId);
00563
00564 CMsvEntrySelection* filteredMessageIds =messagingEntry->ChildrenL();
00565 CleanupStack::PushL( filteredMessageIds);
00566 mycount=filteredMessageIds->Count();
00567 if(mycount)
00568 {
00569 CMsvOperation* operation = messagingEntry->DeleteL(*filteredMessageIds,waiter->iStatus);
00570 CleanupStack::PushL(operation);
00571 waiter->StartAndWait();
00572 CleanupStack::PopAndDestroy();
00573 }
00574 CleanupStack::PopAndDestroy(3,waiter);
00575 }
00576
00577 void CSearchsortExample::DeleteAccountsL()
00578 {
00579
00580 CEmailAccounts* accounts = CEmailAccounts::NewLC();
00581
00582 RArray<TPopAccount> pop3Accounts;
00583 CleanupClosePushL(pop3Accounts);
00584 accounts->GetPopAccountsL(pop3Accounts);
00585 TInt count = pop3Accounts.Count();
00586 TInt index=0;
00587 for( index = 0; index < count; index++ )
00588 {
00589 TPopAccount id = pop3Accounts[index];
00590
00591 TRAPD(err,accounts->DeletePopAccountL( id ));
00592 if(err!=KErrNone)
00593 {
00594 User::Panic(KUserPanic, err);
00595 }
00596 }
00597
00598 RArray<TImapAccount> imap4Accounts;
00599 CleanupClosePushL(imap4Accounts);
00600 accounts->GetImapAccountsL(imap4Accounts);
00601 count = imap4Accounts.Count();
00602 for( TInt index = 0; index < count; index++ )
00603 {
00604 TImapAccount id = imap4Accounts[index];
00605 TRAPD(err,accounts->DeleteImapAccountL( id ));
00606 if(err!=KErrNone)
00607 {
00608 User::Panic(KUserPanic, err);
00609 }
00610 }
00611
00612 RArray<TSmtpAccount> smtpAccounts;
00613 CleanupClosePushL(smtpAccounts);
00614 accounts->GetSmtpAccountsL(smtpAccounts);
00615
00616 count = smtpAccounts.Count();
00617 for( TInt index = 0; index < count; index++ )
00618 {
00619 TSmtpAccount id = smtpAccounts[index];
00620
00621 TRAPD(err,accounts->DeleteSmtpAccountL( id ));
00622 if(err!=KErrNone)
00623 {
00624 User::Panic(KUserPanic, err);
00625 }
00626 }
00627 CleanupStack::PopAndDestroy(4, accounts);
00628 }
00629