emailservices/nmclientapi/src/nmapimessagesearch_p.cpp
changeset 68 83cc6bae1de8
child 74 6c59112cfd31
equal deleted inserted replaced
67:459da34cdb45 68:83cc6bae1de8
       
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *       Email messages search private implementation.
       
    16 */ 
       
    17 
       
    18 #include "nmapiheaders.h"
       
    19 
       
    20 /*!
       
    21     \class NmApiMessageSearchPrivate
       
    22     \brief A Qt wrapper class for MFSMailBoxSearchObserver.
       
    23 */
       
    24 
       
    25 /*!
       
    26     Class constructor.
       
    27 */
       
    28 NmApiMessageSearchPrivate::NmApiMessageSearchPrivate(const quint64 mailboxId, QObject *parent) 
       
    29 : QObject(parent), 
       
    30   mMailBox(NULL),
       
    31   mIsRunning(false),
       
    32   mEngine(NULL)
       
    33 {
       
    34     NM_FUNCTION;
       
    35     NmId mailBoxId(mailboxId);
       
    36     mMailBoxId = TFSMailMsgId(mailBoxId);
       
    37     mEngine = NmApiEngine::instance();
       
    38 }
       
    39 
       
    40 /*!
       
    41     Class destructor.
       
    42 */
       
    43 NmApiMessageSearchPrivate::~NmApiMessageSearchPrivate()
       
    44 {
       
    45     NM_FUNCTION;
       
    46     
       
    47     mSearchStrings.ResetAndDestroy();
       
    48 
       
    49     if (isRunning()) {
       
    50         cancel();
       
    51     }
       
    52 
       
    53     if (mMailBox){
       
    54         delete mMailBox;
       
    55         mMailBox = NULL;
       
    56     }
       
    57     
       
    58     NmApiEngine::releaseInstance(mEngine);
       
    59 }
       
    60 
       
    61 /*!
       
    62  \fn isRunning 
       
    63  \return true if search operation is running otherwise returns false.
       
    64  
       
    65  Returns information about search operation running.
       
    66  */
       
    67 bool NmApiMessageSearchPrivate::isRunning() const
       
    68 {
       
    69     return mIsRunning;
       
    70 }
       
    71 
       
    72 /*!
       
    73  \fn start 
       
    74  \return true if operation was started otherwise returns false.
       
    75  
       
    76  Starts search operation for given criterias if operation is not running. Only one search can be performed at a time. 
       
    77  Each found message signaled with messageFound(NmApiMessage &message).
       
    78  Search completed signaled with searchComplete(int result).
       
    79  Cancellation signalled with canceled().
       
    80  */
       
    81 bool NmApiMessageSearchPrivate::start()
       
    82 {
       
    83     NM_FUNCTION;
       
    84     
       
    85     bool ret = false;
       
    86 
       
    87     if (!isRunning() && mSearchStrings.Count() > 0) {
       
    88         if (!mMailBox) {
       
    89             initialiseMailbox();
       
    90         }
       
    91         
       
    92         if (mMailBox) {
       
    93             TRAPD(err, mMailBox->SearchL(mSearchStrings, mSortCriteria, *this));
       
    94             if (err == KErrNone) {
       
    95                 mIsRunning = true;
       
    96                 ret = true;
       
    97             }
       
    98         }
       
    99     }
       
   100  
       
   101     return ret;
       
   102 }
       
   103 
       
   104 /*!
       
   105     From MFSMailBoxSearchObserver.
       
   106     Converts the ID of the received message into NmId and emits it with the
       
   107     signal notifying that a match was found.
       
   108 
       
   109     \param aMatchMessage A message that matches the search criteria. This class
       
   110                          takes the ownership of the given instance.
       
   111 */
       
   112 void NmApiMessageSearchPrivate::MatchFoundL(CFSMailMessage *aMatchMessage)
       
   113 {
       
   114     NM_FUNCTION;
       
   115     
       
   116     if (aMatchMessage) {
       
   117         NmMessage *nmmessage = aMatchMessage->GetNmMessage();
       
   118         EmailClientApi::NmApiMessage message = NmToApiConverter::NmMessage2NmApiMessage(*nmmessage);
       
   119         emit messageFound(message);
       
   120         delete aMatchMessage;
       
   121         aMatchMessage = NULL;
       
   122      }
       
   123 }
       
   124 
       
   125 
       
   126 /*!
       
   127     From MFSMailBoxSearchObserver.
       
   128     Emits a signal to notify that the search is complete.
       
   129 */
       
   130 void NmApiMessageSearchPrivate::SearchCompletedL()
       
   131 {
       
   132     NM_FUNCTION;
       
   133     mIsRunning = false;
       
   134     emit searchComplete(EmailClientApi::NmApiNoError); 
       
   135 }
       
   136 
       
   137 
       
   138 /*!
       
   139     From MFSMailBoxSearchObserver.
       
   140 */
       
   141 void NmApiMessageSearchPrivate::ClientRequiredSearchPriority(
       
   142     TInt *apRequiredSearchPriority)
       
   143 {
       
   144     Q_UNUSED(apRequiredSearchPriority);
       
   145 }
       
   146 
       
   147 /*!
       
   148  \fn cancel 
       
   149  
       
   150  Cancels current search operation. If operation is not running, nothing happens.  
       
   151  Cancellation signalled with canceled().
       
   152  */
       
   153 void NmApiMessageSearchPrivate::cancel()
       
   154 {
       
   155     NM_FUNCTION;
       
   156     
       
   157     if (isRunning()){
       
   158         if (mMailBox) {
       
   159             mMailBox->CancelSearch();
       
   160             mMailBox->ClearSearchResultCache();
       
   161 
       
   162             mSearchStrings.ResetAndDestroy();
       
   163             mSortCriteria.iField = EFSMailDontCare;
       
   164             mSortCriteria.iOrder = EFSMailAscending;
       
   165             mIsRunning = false;
       
   166             emit canceled();
       
   167         }
       
   168     }
       
   169 }
       
   170 
       
   171 /*!
       
   172  \fn initialise 
       
   173  \param searchStrings List of search criteria strings.
       
   174  \param sortCriteria Sort criteria for search.
       
   175  \return true if initializing is successfully completed otherwise returns false.
       
   176  
       
   177  Initialize search criterias.  
       
   178  */
       
   179 bool NmApiMessageSearchPrivate::initialise(const QList<QString> &searchStrings, EmailClientApi::NmApiMailSortCriteria sortCriteria)
       
   180 {
       
   181     NM_FUNCTION;
       
   182     bool ret = false;
       
   183 
       
   184     if (!isRunning() && searchStrings.count() > 0) {
       
   185         bool appendError = false;
       
   186         mSortCriteria.iField = TFSMailSortField(sortCriteria.iField);
       
   187         mSortCriteria.iOrder = TFSMailSortOrder(sortCriteria.iOrder);
       
   188        
       
   189         mSearchStrings.ResetAndDestroy();
       
   190         
       
   191         for (int i = 0; i < searchStrings.count() && !appendError; ++i) {
       
   192             HBufC *buffer = XQConversions::qStringToS60Desc(searchStrings.at(i));
       
   193             TRAPD(err, mSearchStrings.AppendL(buffer));
       
   194             if (err != KErrNone) {
       
   195                 appendError = true;
       
   196             }
       
   197         }
       
   198         
       
   199         if (!appendError) {
       
   200             ret = true;
       
   201         }
       
   202         else {
       
   203             mSearchStrings.ResetAndDestroy();
       
   204         }
       
   205     }
       
   206     
       
   207     return ret;
       
   208 }
       
   209 
       
   210 /*!
       
   211  \fn initialiseMailbox 
       
   212  
       
   213  Initializes mailbox.  
       
   214  */
       
   215 void NmApiMessageSearchPrivate::initialiseMailbox()
       
   216 {
       
   217     NM_FUNCTION;
       
   218     RPointerArray<CFSMailPlugin> mailPlugins;
       
   219     if (mEngine) {
       
   220         mEngine->listMailPlugins(mailPlugins);
       
   221     }
       
   222     CFSMailPlugin *plugin = NULL;
       
   223     for (int i = 0; i < mailPlugins.Count() && !mMailBox; i++){
       
   224         plugin = mailPlugins[i];
       
   225         if (plugin) {
       
   226             QT_TRY {
       
   227                 mMailBox = plugin->GetMailBoxByUidL(mMailBoxId);
       
   228             }
       
   229             QT_CATCH(...){}            
       
   230         }
       
   231     }
       
   232 }
       
   233 // End of file.