emailservices/emailclientapi/src/emailmessagesearch.cpp
author hgs
Thu, 30 Sep 2010 11:43:07 +0300
changeset 74 6c59112cfd31
parent 66 084b5b1f02a7
permissions -rw-r--r--
201039
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 class CEmailMessageSearchAsync
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <emailclientapi.hrh>
hgs
parents:
diff changeset
    19
#include "emailmessagesearch.h"
hgs
parents:
diff changeset
    20
#include "emailmessage.h"
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
/**
hgs
parents:
diff changeset
    23
 * Global semaphore name. Semaphore blocks parallel service access.
hgs
parents:
diff changeset
    24
 */
hgs
parents:
diff changeset
    25
_LIT( KGlobalSemaphoreToPreventParallelCall, "12mymessaging.nokia.com34" );
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    30
// CEmailMessageSearchAsync::NewL
hgs
parents:
diff changeset
    31
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    32
CEmailMessageSearchAsync* CEmailMessageSearchAsync::NewL(
hgs
parents:
diff changeset
    33
    CPluginData& aPluginData,
hgs
parents:
diff changeset
    34
    const TMailboxId& aMailboxId )
hgs
parents:
diff changeset
    35
    {
hgs
parents:
diff changeset
    36
    CEmailMessageSearchAsync* self = 
hgs
parents:
diff changeset
    37
        new ( ELeave ) CEmailMessageSearchAsync( aPluginData, aMailboxId );
hgs
parents:
diff changeset
    38
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    39
    self->ConstructL();
hgs
parents:
diff changeset
    40
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    41
    return self;
hgs
parents:
diff changeset
    42
    }
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    45
//
hgs
parents:
diff changeset
    46
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    47
void CEmailMessageSearchAsync::ConstructL()
hgs
parents:
diff changeset
    48
    {
hgs
parents:
diff changeset
    49
    iPlugin = iPluginData.ClaimInstanceL();
hgs
parents:
diff changeset
    50
    // Open existing semaphore, or create a new one
hgs
parents:
diff changeset
    51
    if ( KErrNone != iGate.OpenGlobal( KGlobalSemaphoreToPreventParallelCall, EOwnerProcess ) )
hgs
parents:
diff changeset
    52
        {
hgs
parents:
diff changeset
    53
        User::LeaveIfError( 
hgs
parents:
diff changeset
    54
            iGate.CreateGlobal( KGlobalSemaphoreToPreventParallelCall, 1, EOwnerProcess ) );
hgs
parents:
diff changeset
    55
        }
hgs
parents:
diff changeset
    56
    }
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
// 
hgs
parents:
diff changeset
    60
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    61
CEmailMessageSearchAsync::CEmailMessageSearchAsync(    
hgs
parents:
diff changeset
    62
    CPluginData& aPluginData,
hgs
parents:
diff changeset
    63
    const TMailboxId& aMailboxId )
hgs
parents:
diff changeset
    64
    : iPluginData( aPluginData ), iMailboxId( aMailboxId.iId ),
hgs
parents:
diff changeset
    65
    iCriteria(), iObserver( NULL ), iRemote( EFalse )
hgs
parents:
diff changeset
    66
    {
hgs
parents:
diff changeset
    67
    }
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    70
// 
hgs
parents:
diff changeset
    71
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    72
CEmailMessageSearchAsync::~CEmailMessageSearchAsync()
hgs
parents:
diff changeset
    73
    {
hgs
parents:
diff changeset
    74
    iSearchStrings.Close();
hgs
parents:
diff changeset
    75
    iPluginData.ReleaseInstance();
hgs
parents:
diff changeset
    76
    iGate.Close();
hgs
parents:
diff changeset
    77
    }
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    80
// 
hgs
parents:
diff changeset
    81
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    82
TEmailTypeId CEmailMessageSearchAsync::InterfaceId() const
hgs
parents:
diff changeset
    83
    {
hgs
parents:
diff changeset
    84
    return KEmailIFUidSearch;
hgs
parents:
diff changeset
    85
    }
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    88
// 
hgs
parents:
diff changeset
    89
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    90
void CEmailMessageSearchAsync::Release()
hgs
parents:
diff changeset
    91
    {
hgs
parents:
diff changeset
    92
    if (KErrNone != iGate.Wait(1))
hgs
parents:
diff changeset
    93
        {
74
hgs
parents: 66
diff changeset
    94
        this->CancelSearch();
47
hgs
parents:
diff changeset
    95
        }
hgs
parents:
diff changeset
    96
    delete this;
hgs
parents:
diff changeset
    97
    }
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   100
// Sets sort order for search results.
hgs
parents:
diff changeset
   101
// Leaves KErrNotReady if search is ongoing.
hgs
parents:
diff changeset
   102
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   103
void CEmailMessageSearchAsync::SetSortCriteriaL( const TEmailSortCriteria& aCriteria )
hgs
parents:
diff changeset
   104
    {
hgs
parents:
diff changeset
   105
    IsSearchGoingOnL();
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
    switch (aCriteria.iField)
hgs
parents:
diff changeset
   108
        {
hgs
parents:
diff changeset
   109
        case TEmailSortCriteria::EDontCare:
hgs
parents:
diff changeset
   110
            iCriteria.iField = EFSMailDontCare;
hgs
parents:
diff changeset
   111
            break;
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
        case TEmailSortCriteria::EByDate:
hgs
parents:
diff changeset
   114
            iCriteria.iField = EFSMailSortByDate;
hgs
parents:
diff changeset
   115
            break;
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
        case TEmailSortCriteria::EBySender:
hgs
parents:
diff changeset
   118
            iCriteria.iField = EFSMailSortBySender;
hgs
parents:
diff changeset
   119
            break;
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
        case TEmailSortCriteria::EByRecipient:
hgs
parents:
diff changeset
   122
            iCriteria.iField = EFSMailSortByRecipient;
hgs
parents:
diff changeset
   123
            break;
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
        case TEmailSortCriteria::EBySubject:
hgs
parents:
diff changeset
   126
            iCriteria.iField = EFSMailSortBySubject;
hgs
parents:
diff changeset
   127
            break;
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
        case TEmailSortCriteria::EByPriority:
hgs
parents:
diff changeset
   130
            iCriteria.iField = EFSMailSortByPriority;
hgs
parents:
diff changeset
   131
            break;
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
        case TEmailSortCriteria::EByFlagStatus:
hgs
parents:
diff changeset
   134
            iCriteria.iField = EFSMailSortByFlagStatus;
hgs
parents:
diff changeset
   135
            break;
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
        case TEmailSortCriteria::EByUnread:
hgs
parents:
diff changeset
   138
            iCriteria.iField = EFSMailSortByUnread;
hgs
parents:
diff changeset
   139
            break;
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
        case TEmailSortCriteria::EBySize:
hgs
parents:
diff changeset
   142
            iCriteria.iField = EFSMailSortBySize;
hgs
parents:
diff changeset
   143
            break;
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
        case TEmailSortCriteria::EByAttachment:
hgs
parents:
diff changeset
   146
            iCriteria.iField = EFSMailSortByAttachment;
hgs
parents:
diff changeset
   147
            break;
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
        default:
hgs
parents:
diff changeset
   150
            User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   151
            break;
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
        }
hgs
parents:
diff changeset
   154
    if (aCriteria.iAscending)
hgs
parents:
diff changeset
   155
        {
hgs
parents:
diff changeset
   156
        iCriteria.iOrder = EFSMailAscending;
hgs
parents:
diff changeset
   157
        }
hgs
parents:
diff changeset
   158
    else
hgs
parents:
diff changeset
   159
        {
hgs
parents:
diff changeset
   160
        iCriteria.iOrder = EFSMailDescending;
hgs
parents:
diff changeset
   161
        }
hgs
parents:
diff changeset
   162
    // Release gate
hgs
parents:
diff changeset
   163
    iGate.Signal();
hgs
parents:
diff changeset
   164
    }
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   167
// Adds a search key. Leaves KErrNotReady if search is ongoing.
hgs
parents:
diff changeset
   168
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   169
void CEmailMessageSearchAsync::AddSearchKeyL( const TDesC& aSearchKey ) 
hgs
parents:
diff changeset
   170
    {
hgs
parents:
diff changeset
   171
    IsSearchGoingOnL();
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
    iSearchStrings.AppendL(&aSearchKey);
hgs
parents:
diff changeset
   174
    // Release gate
hgs
parents:
diff changeset
   175
    iGate.Signal();
hgs
parents:
diff changeset
   176
    }
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
/// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   179
// Enables/disables search from remote email server.
hgs
parents:
diff changeset
   180
// Leaves KErrNotReady if search is ongoing.
hgs
parents:
diff changeset
   181
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   182
void CEmailMessageSearchAsync::SetRemoteSearchL( TBool aRemote )  
hgs
parents:
diff changeset
   183
    {    
hgs
parents:
diff changeset
   184
    IsSearchGoingOnL();
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
    iRemote = aRemote;
hgs
parents:
diff changeset
   187
    // Release gate
hgs
parents:
diff changeset
   188
    iGate.Signal();
hgs
parents:
diff changeset
   189
    // Currently plugins do not support this function
hgs
parents:
diff changeset
   190
    User::Leave( KErrNotSupported );    
hgs
parents:
diff changeset
   191
    }
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   194
// Indicates whether remote search is enabled.
hgs
parents:
diff changeset
   195
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   196
TBool CEmailMessageSearchAsync::IsRemoteSearch() const
hgs
parents:
diff changeset
   197
    {
hgs
parents:
diff changeset
   198
    // Currently plugins do not support this function
hgs
parents:
diff changeset
   199
    return EFalse; 
hgs
parents:
diff changeset
   200
    }
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   203
// Starts search, all methods affecting search attribures leave
hgs
parents:
diff changeset
   204
// KErrNotReady while search is ongoing.
hgs
parents:
diff changeset
   205
// @param aObserver called when results are available.
hgs
parents:
diff changeset
   206
//     
hgs
parents:
diff changeset
   207
void CEmailMessageSearchAsync::StartSearchL( MEmailSearchObserver& aObserver )
hgs
parents:
diff changeset
   208
    {
hgs
parents:
diff changeset
   209
    IsSearchGoingOnL();
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
    iObserver = &aObserver;
hgs
parents:
diff changeset
   212
    const TFSMailMsgId fsMailboxId( iPluginData.Uid(), iMailboxId.iId );
hgs
parents:
diff changeset
   213
    RArray <TFSMailMsgId> folderIds;
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
    /** Search API */
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
    /**
hgs
parents:
diff changeset
   218
     * Asyncronous call for starting search for given string. Only one search can be
hgs
parents:
diff changeset
   219
     * performed at a time.
hgs
parents:
diff changeset
   220
     *
hgs
parents:
diff changeset
   221
     *
hgs
parents:
diff changeset
   222
     * This function will search for message's containing the given search string.
hgs
parents:
diff changeset
   223
     * The search will be performed on the all message fields: To, Cc, Bcc, subject, body.
hgs
parents:
diff changeset
   224
     * The search client will be notified of each found message,
hgs
parents:
diff changeset
   225
     * and upon completion of the search.  Only one search can be performed at a time.  
hgs
parents:
diff changeset
   226
     *  
hgs
parents:
diff changeset
   227
     * To change the sort order in the search result, use the same search string in the
hgs
parents:
diff changeset
   228
     * but change the aSortCriteria parameter.  The store "caches" the search
hgs
parents:
diff changeset
   229
     * results generated by the same search string.
hgs
parents:
diff changeset
   230
     *    
hgs
parents:
diff changeset
   231
     * The function will leave with KErrInUse if a search is already in progress.
hgs
parents:
diff changeset
   232
     *
hgs
parents:
diff changeset
   233
     * /note Only works if the store is in an authenticated state,
hgs
parents:
diff changeset
   234
     *  otherwise this function leaves with KErrNotReady
hgs
parents:
diff changeset
   235
     * 
hgs
parents:
diff changeset
   236
     * @paran aMailBoxId id of the mailbox where messages are to be searched
hgs
parents:
diff changeset
   237
     * @param aFolderIds list of folders where messages are to be searched
hgs
parents:
diff changeset
   238
     *        global or folder specific search depends on the size of array is 0 or not.
hgs
parents:
diff changeset
   239
     * @param aSearchStrings text strings that will be searched from different message fields.
hgs
parents:
diff changeset
   240
     * @param aSortCriteria sort criteria for the results
hgs
parents:
diff changeset
   241
     * @param aSearchObserver client observer that will be notified about search status.
hgs
parents:
diff changeset
   242
     *
hgs
parents:
diff changeset
   243
     */
hgs
parents:
diff changeset
   244
    iPlugin->SearchL( fsMailboxId,
hgs
parents:
diff changeset
   245
        folderIds,
hgs
parents:
diff changeset
   246
        iSearchStrings,
hgs
parents:
diff changeset
   247
        iCriteria,
hgs
parents:
diff changeset
   248
        *this );
hgs
parents:
diff changeset
   249
    // Gate is kept closed as search is asynchronous. Gate will be reopen after search is completed, i.e.
hgs
parents:
diff changeset
   250
    // CEmailMessageSearchAsync::SearchCompleted.
hgs
parents:
diff changeset
   251
    }
hgs
parents:
diff changeset
   252
hgs
parents:
diff changeset
   253
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   254
// Cancels search.
hgs
parents:
diff changeset
   255
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   256
void CEmailMessageSearchAsync::Cancel()
hgs
parents:
diff changeset
   257
    {
hgs
parents:
diff changeset
   258
    if (KErrNone != iGate.Wait(1))
74
hgs
parents: 66
diff changeset
   259
        {        
hgs
parents: 66
diff changeset
   260
        CancelSearch();
47
hgs
parents:
diff changeset
   261
        }
74
hgs
parents: 66
diff changeset
   262
    
hgs
parents: 66
diff changeset
   263
    // Release gate
hgs
parents: 66
diff changeset
   264
    iGate.Signal();    
47
hgs
parents:
diff changeset
   265
    }
hgs
parents:
diff changeset
   266
hgs
parents:
diff changeset
   267
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   268
//  * @return search status:
hgs
parents:
diff changeset
   269
//  *     < 0 : Search has failed
hgs
parents:
diff changeset
   270
//  *     KRequestPending : search is ongoing. note that status may be
hgs
parents:
diff changeset
   271
//  *         KRequestPending after HandleResultL callback because results 
hgs
parents:
diff changeset
   272
//  *         may be given in chunks of results. Size of chunk depends on
hgs
parents:
diff changeset
   273
//  *         implementation and may vary.
hgs
parents:
diff changeset
   274
//  *     KErrNone : initial state, or search has finished
hgs
parents:
diff changeset
   275
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   276
TInt CEmailMessageSearchAsync::Status() const
hgs
parents:
diff changeset
   277
    {
66
hgs
parents: 47
diff changeset
   278
    TInt ret(KErrNone);
47
hgs
parents:
diff changeset
   279
    if (KErrNone != iGate.Wait(1))
hgs
parents:
diff changeset
   280
        {
hgs
parents:
diff changeset
   281
        // Search is going on
66
hgs
parents: 47
diff changeset
   282
        ret = KRequestPending;
47
hgs
parents:
diff changeset
   283
        }
hgs
parents:
diff changeset
   284
    else
hgs
parents:
diff changeset
   285
        {
hgs
parents:
diff changeset
   286
        // Release gate
hgs
parents:
diff changeset
   287
        iGate.Signal();       
hgs
parents:
diff changeset
   288
        }
74
hgs
parents: 66
diff changeset
   289
    //if we really locked iGate here, we release it in else 
hgs
parents: 66
diff changeset
   290
    //brach. If it was already locked, we must not release it here!
hgs
parents: 66
diff changeset
   291
    // coverity[missing_unlock]
66
hgs
parents: 47
diff changeset
   292
    return ret; 
47
hgs
parents:
diff changeset
   293
    }
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   296
// Resets all search attribures. Cancels search if ongoing. 
hgs
parents:
diff changeset
   297
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   298
void CEmailMessageSearchAsync::Reset()
hgs
parents:
diff changeset
   299
    {
hgs
parents:
diff changeset
   300
    if ( KErrNone != iGate.Wait( 1 ) )
hgs
parents:
diff changeset
   301
        {
74
hgs
parents: 66
diff changeset
   302
        this->CancelSearch();
47
hgs
parents:
diff changeset
   303
        }
hgs
parents:
diff changeset
   304
    
hgs
parents:
diff changeset
   305
    iCriteria = TFSMailSortCriteria();
hgs
parents:
diff changeset
   306
    iSearchStrings.Reset();
hgs
parents:
diff changeset
   307
    
hgs
parents:
diff changeset
   308
    // Release gate
hgs
parents:
diff changeset
   309
    iGate.Signal();
hgs
parents:
diff changeset
   310
    
hgs
parents:
diff changeset
   311
    };
hgs
parents:
diff changeset
   312
hgs
parents:
diff changeset
   313
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   314
// Notifies the email search API client that a match has been found
hgs
parents:
diff changeset
   315
// 
hgs
parents:
diff changeset
   316
// @param aMatchMessage contains a pointer to the matched message.
hgs
parents:
diff changeset
   317
//         Ownership is transfered to the observer.
hgs
parents:
diff changeset
   318
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   319
void CEmailMessageSearchAsync::MatchFoundL( CFSMailMessage* aMatchMessage )
hgs
parents:
diff changeset
   320
{
hgs
parents:
diff changeset
   321
    User::LeaveIfNull( iObserver );
hgs
parents:
diff changeset
   322
    CEmailMessage *result = CEmailMessage::NewL(iPluginData, aMatchMessage, EClientOwns );
hgs
parents:
diff changeset
   323
    iObserver->HandleResultL( result );
hgs
parents:
diff changeset
   324
}
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   327
// Notifies the email search API client that the search has completed
hgs
parents:
diff changeset
   328
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   329
 void CEmailMessageSearchAsync::SearchCompletedL()
hgs
parents:
diff changeset
   330
{
hgs
parents:
diff changeset
   331
    User::LeaveIfNull( iObserver );
hgs
parents:
diff changeset
   332
    iObserver->SearchCompletedL();
hgs
parents:
diff changeset
   333
    // Search is now complete, release gate.
hgs
parents:
diff changeset
   334
    iGate.Signal();
hgs
parents:
diff changeset
   335
}
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   338
// Asks client if search engine should change search priority 
hgs
parents:
diff changeset
   339
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   340
void CEmailMessageSearchAsync::ClientRequiredSearchPriority(TInt* /*apRequiredSearchPriority*/)
hgs
parents:
diff changeset
   341
    {
hgs
parents:
diff changeset
   342
    }
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   345
// Function leaves if search is going on. Otherwise it doesn't do anything.
hgs
parents:
diff changeset
   346
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   347
void CEmailMessageSearchAsync::IsSearchGoingOnL() const
hgs
parents:
diff changeset
   348
    {
hgs
parents:
diff changeset
   349
    if ( KErrNone != iGate.Wait( 1 ) )
hgs
parents:
diff changeset
   350
        {
hgs
parents:
diff changeset
   351
        // Leave now, search is going on
hgs
parents:
diff changeset
   352
        User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   353
        }
hgs
parents:
diff changeset
   354
    }
hgs
parents:
diff changeset
   355
74
hgs
parents: 66
diff changeset
   356
// -----------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   357
// Cancels search
hgs
parents: 66
diff changeset
   358
// -----------------------------------------------------------------------------
hgs
parents: 66
diff changeset
   359
void CEmailMessageSearchAsync::CancelSearch()
hgs
parents: 66
diff changeset
   360
    {
hgs
parents: 66
diff changeset
   361
    /**
hgs
parents: 66
diff changeset
   362
     * Cancels current search. Does nothing if there is not any search.
hgs
parents: 66
diff changeset
   363
     * The search client will not be called back after this function is called.
hgs
parents: 66
diff changeset
   364
     *
hgs
parents: 66
diff changeset
   365
     */
hgs
parents: 66
diff changeset
   366
    const TFSMailMsgId fsMailboxId( iPluginData.Uid(), iMailboxId.iId );
hgs
parents: 66
diff changeset
   367
    iPlugin->CancelSearch( fsMailboxId );
hgs
parents: 66
diff changeset
   368
    }
47
hgs
parents:
diff changeset
   369
// End of file