searchfw/plugins/contactsplugin/inc/contactssearcher.h
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/searchfw/plugins/contactsplugin/inc/contactssearcher.h	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,573 @@
+/*
+* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   ECom search interface definition
+*
+*/
+
+
+
+
+#ifndef C_CCONTACTSSEARCHER_H
+#define C_CCONTACTSSEARCHER_H
+
+//SYSTEM INCLUDES
+#include <f32file.h>
+#include <badesca.h>
+#include <searchcontentsearcher.h>
+#include <searchcondition.h>
+
+#include <MVPbkContactStoreListObserver.h>
+#include <MVPbkSingleContactOperationObserver.h>
+#include <MVPbkContactViewObserver.h>
+
+// FORWARD DECLARATIONS
+class CSearchCondition;
+class CVPbkContactManager;
+class CVPbkContactStoreUriArray;
+class CVPbkContactLinkArray;
+class MVPbkContactOperationBase;
+class MVPbkContactLinkArray;
+class MVPbkBaseContact;
+class CSearchFScanRegistryEntry;
+class CSearchTextSearcher;
+class MSearchPluginObserver;
+class CVPbkFieldTypeRefsList;
+class MVPbkContactViewBase;
+
+
+/**
+ *  This class is the searcher class for the contacts
+ *
+ *  This class searches the contacts using the virtual phonebook2 apis
+ *
+ *  @lib contactssearchplugin.lib
+ */
+class CContactsSearcher : public CActive, 
+                          public MSearchContentSearcher, 
+	                      public MVPbkContactStoreListObserver,
+                          public MVPbkSingleContactOperationObserver,
+                          public MVPbkContactViewObserver
+{	
+public:
+	
+	
+   /**
+    * 1st phase constructor 
+    *
+
+  	* @param aContentIdArray - content id
+	* @param aCondition - condition
+	* @param aPluginId - Implementation id
+	* @return returns pointer to the constructed object of type CContactsSearcher
+	*/
+	static CContactsSearcher* NewL( const RArray<TUid>& aContentIdArray, 
+                                const CSearchCondition& aCondition, 
+                                const TUid& aPluginId,
+                                MSearchPluginObserver& aObserver );
+   /**
+    * Destructor
+    */
+    virtual ~CContactsSearcher();
+   
+    /**
+    * A function that returns the contact link at given index
+    * of the iContactLinkArray
+    *
+    *
+    * @param aIndex
+    */
+    MVPbkContactLink* GetContactLinkAtIndexLC(TInt aIndex);
+    
+public: //from base class MSearchContentSearcher    
+    /**
+    * From MSearchContentSearcher
+    * Releses the object.
+    *
+    */
+    void Destroy();
+    
+    
+    /**
+     * From MSearchContentSearcher
+     * Starts the search. Progress of the search is notified through aObserver. 
+     * Notice that this call must be asynchronous.
+     *
+     * @param aObserver Observer for search progress.
+     */
+     void SearchL();
+    
+     /**
+     * From MSearchContentSearcher 
+     * Function returning ETrue when a search is ongoing.  EFalse otherwise.
+     * 
+     * @return ETrue when a search is ongoing.  EFalse otherwise.
+     */
+     TBool IsSearching();
+    
+     /**
+     * From MSearchContentSearcher 
+     * Cancels the ongoing search. This call must complete synchronously and no calls for
+     * observers must be made after this call.
+     *
+     */
+     void CancelSearch();
+    
+    /**
+     * From MSearchContentSearcher 
+     * Gets the results indicated by the given document ids. Asynchronous. Results will be given
+     * through callback in MSearchPlugInObserver given in Search request.
+     * 
+     * @param aResults Results of the search process. Ownership transfers to caller.
+     */
+     void GetResultsL( const RPointerArray<CSearchDocumentId>& aDocumentIdArray );
+    
+    /**
+     * From MSearchContentSearcher 
+     * Cancels the result retrieval process.
+     *
+     */
+     void CancelResultsRetrieve();
+    
+    /**
+     * From MSearchContentSearcher 
+     * Gets the current search progress. 
+     *
+     * @param aContentClassId On return contains the content class id, which is currently searched.
+     * @param aCurrentDocument On return contains the index document that is currently being searched.
+     * @param aTotalDocuments On return contains the total count of documents to be searched.
+     */         
+     void GetSearchProgressL( TUid& aContentClassId, TInt& aCurrentDocument, TInt& aTotalDocuments );
+
+
+    /**
+    * From MSearchContentSearcher , through MSearchTextSearcherObserver
+    * Called when all search criteria are met.
+    *
+    * @param aCharPos The character position of the keyword match within the original text.
+    */
+    void HitL( TInt aCharPos );
+  
+    HBufC8* LaunchInfoL( const CSearchDocumentId& aDocumentID );
+
+    
+public:
+     // from base class MVPbkContactStoreListObserver
+     
+     /**
+      * From MVPbkContactStoreListObserver  
+      * Called when the opening process is complete, ie. all stores have been reported
+      * either failed or successful open.
+      *
+      */
+      void OpenComplete();  
+      
+     /**
+      * From MVPbkContactStoreListObserver  
+      * Called when a contact store is ready to use.
+      */
+      void StoreReady(MVPbkContactStore& aContactStore);
+
+     /**
+      * From MVPbkContactStoreListObserver  
+      * Called when a contact store becomes unavailable.
+      * Client may inspect the reason of the unavailability and decide whether or not
+      * it will keep the store opened (ie. listen to the store events).
+      *
+      *
+      * @param aContactStore The store that became unavailable.
+      * @param aReason The reason why the store is unavailable.
+      *                This is one of the system wide error codes.
+      */
+      void StoreUnavailable(MVPbkContactStore& aContactStore, TInt aReason);
+
+     /**
+      * From MVPbkContactStoreListObserver  
+      * Called when changes occur in the contact store.
+      * @see TVPbkContactStoreEvent
+      * @param aContactStore The store the event occurred in.
+      * @param aStoreEvent   Event that has occured.
+      */
+      void HandleStoreEventL(
+                MVPbkContactStore& aContactStore, 
+                TVPbkContactStoreEvent aStoreEvent);
+
+    
+public:
+      // From base class MVPbkSingleContactOperationObserver
+          
+      /**
+       * From MVPbkSingleContactOperationObserver
+       * Called when operation is completed.
+       *
+       *
+       * @param aOperation the completed operation.
+       * @param aContact  the contact returned by the operation.
+       *                  Client must take the ownership immediately.
+       *
+       *                  !!! NOTICE !!!
+       *                  If you use Cleanupstack for MVPbkStoreContact
+       *                  Use MVPbkStoreContact::PushL or
+       *                  CleanupDeletePushL from e32base.h.
+       *                  (Do Not Use CleanupStack::PushL(TAny*) because
+       *                  then the virtual destructor of the M-class
+       *                  won't be called when the object is deleted).
+       */
+       void VPbkSingleContactOperationComplete(
+                MVPbkContactOperationBase& aOperation,
+                MVPbkStoreContact* aContact );
+
+      /**
+       * From MVPbkSingleContactOperationObserver
+       * Called if the operation fails.
+       *
+       * @param aOperation    the failed operation.
+       * @param aError        error code of the failure.
+       */
+       void VPbkSingleContactOperationFailed(
+                MVPbkContactOperationBase& aOperation, 
+                TInt aError );
+       
+public:
+       void ContactViewReadyL(
+                          MVPbkContactViewBase& aView );
+       //From MVPbkContactViewObserver
+       /**
+        * Called when a view is ready for use. 
+        * 
+        * This function may also be called if view is already ready. Then
+        * it means that the view has been updated and the observer have
+        * to take this into account.
+        *
+        * @param aView A contact view sending the event.
+        */
+       void ContactViewReady(
+                      MVPbkContactViewBase& aView );
+
+       /**
+        * Called when a view is unavailable for a while. 
+        * 
+        * When the view is again available ContactViewReady will be called.
+        * The contents of the view may change completely while it is
+        * unavailable.
+        *
+        * @param aView A contact view sending the event.
+        */
+       void ContactViewUnavailable(
+                      MVPbkContactViewBase& aView );
+       
+       /**
+        * Called when a contact has been added to the view.
+        *
+        * @param aView A contact view sending the event.
+        * @param aIndex An index of the contact in the view.
+        * @param aContactLink A link to the added contact that is
+        *                     valid only during the functio call.
+        */
+       void ContactAddedToView(
+                      MVPbkContactViewBase& aView, 
+                      TInt aIndex, 
+                      const MVPbkContactLink& aContactLink );
+       
+       /**
+        * Called when a contact has been removed from a view.
+        *
+        * @param aView A contact view sending the event.
+        * @param aIndex An index of the removed contact.
+        * @param aContactLink A link to the removed contact that is
+        *                      valid only during this function call.
+        */
+       void ContactRemovedFromView(
+                      MVPbkContactViewBase& aView, 
+                      TInt aIndex, 
+                      const MVPbkContactLink& aContactLink );
+       
+       /**
+        * Called when an error occurs in the view.
+        *
+        * If client decides to destroy the view then it should do
+        * it asynchronously because the view can access member data
+        * after a call to this.
+        *
+        * @param aView A contact view sending the event.
+        * @param aError An error code of the failure.
+        * @param aErrorNotified  ETrue if the implementation has already 
+        *                        notified user about the error using e.g
+        *                        an ECOM plug-in, EFalse otherwise.
+        */
+       void ContactViewError(
+                      MVPbkContactViewBase& aView, 
+                      TInt aError, 
+                      TBool aErrorNotified );
+       
+    
+protected: // From base class CActive
+    
+    /**
+    * From CActive
+    * Implements cancellation of an outstanding request.
+	*
+	* This function is called as part of the active object's Cancel().
+	*/
+	void DoCancel() ;
+    
+   /**
+    * From CActive
+	* Handles an active object's request completion event.
+	*
+	* The function is called by the active scheduler when a request
+	* completion event occurs, i.e. after the active scheduler's
+	* WaitForAnyRequest() function completes.
+	*
+	* Before calling this active object's RunL() function, the active scheduler 
+	* has:
+    * 	
+	* 1. decided that this is the highest priority active object with
+	*   a completed request
+	*
+    * 2. marked this active object's request as complete (i.e. the request is no 
+	*   longer outstanding)
+	*
+	* RunL() runs under a trap harness in the active scheduler. If it leaves,
+	* then the active scheduler calls RunError() to handle the leave.
+	*
+	* Note that once the active scheduler's Start() function has been called, 
+	* all user code is run under one of the program's active object's RunL() or 
+	* RunError() functions.
+	*
+	*/
+	void RunL();
+    
+    	
+   /**
+	* From CActive 
+	* If the RunL function leaves,
+	* then the active scheduler calls RunError() to handle the leave.
+	*
+	*/
+	TInt RunError( TInt aError );
+	
+	
+private:	
+   /**
+    * Constructor
+    *
+    *
+    * @param aPluginId
+    */
+    CContactsSearcher( const TUid& aPluginId );
+    
+   /** 
+    * 2nd phase constructor
+    *
+    * @param aContentIdArray
+    * @param aCondition
+    */
+    void ConstructL( const RArray<TUid>& aContentIdArray, 
+	                 const CSearchCondition& aCondition,
+	                 MSearchPluginObserver& aObserver );
+	
+  /**
+    * Notifies the observer about the search complete
+    *
+    */
+    void ReportFinishedL();
+    
+    /**
+    * Cleans up the memory held
+    *
+    */
+    void CleanUp();
+ 
+	/**
+	* Does actual search
+	*
+	*
+	*/
+	TBool DoActualSearchL();
+
+
+	/**
+    * Fetches the contact items from the database.
+    *
+    */
+	void FetchContactItemsFromDbAndSearchL();
+    
+    /**
+    * Handles the operations for a single contact after it is fetched
+    *
+	*
+	* @param aContact - The contact from database 
+    */
+    void HandleRetrievedContactL(MVPbkStoreContact* aContact );
+    
+    /**
+    * Fetches the data from a particular contact 
+    *
+    *	
+	* @param aContact - The contact from database 
+    * 
+    */
+    void  GetDataForSingleContactL ( MVPbkBaseContact& aContact );
+    
+    /**
+    * Add the data from contact fields
+    *
+	*
+	* @param aContact - The contact from database 
+    * @param afieldtype- Field to be added 
+    */
+    void AddContactFieldsL(MVPbkBaseContact& aContact,TInt afieldtype);
+
+   
+   
+private: // Data
+    
+    /**
+     *PluginId of contacts plugin
+     */ 
+    TUid iPluginId;         
+    
+    /**
+     * Number of contacts searched 
+     */
+    TInt iTotalNumOfContactsSearched; 
+    
+    /**
+     *Total Number of matches
+     */
+    TInt iTotalHits;        
+    /**
+     * Flags for  store operations
+     */
+    TBool iStoreReadyForAccessing ;
+    TBool iAtLeastOneStoreReady;
+    TBool iAllContactsSearched;
+    TBool iNoContactStoreAvailable;
+    TBool iSearchStarted;
+    TBool iSearchCancelled;
+    
+    
+    
+    /**
+     * Text searcher
+     * Own.  
+     */
+     CSearchTextSearcher* iTextSearcher; // Text searcher
+    
+    /**
+     * Search Plugin Observer
+     * Own.  
+     */
+     MSearchPluginObserver*      iObserver;
+   	
+   	
+    /**
+     * Contact Link array containing the contact links of all the contacts in the database
+     * Own.  
+     */
+    CVPbkContactLinkArray* iAllContactItemsFromDb;
+    
+    /**
+     * The contact manager for accessing the phone contacts
+     * Own.  
+     */
+    CVPbkContactManager*  iContactManager;
+    
+    /**
+     * The contact Uri Array 
+     * Own.  
+     */
+     CVPbkContactStoreUriArray* iCurrentlyOpenStores;
+    
+     /**
+     * The contact operation. Used during Find operation
+     * Own.  
+     */
+     MVPbkContactOperationBase* iVPbkOperation;
+    
+    /**
+     * The Field types to be searched.Used during Find operation
+     * Own.  
+     */
+     CVPbkFieldTypeRefsList* iFieldTypeRefList ;
+    
+    /**
+    * The contact data to be searched
+    * Own.  
+    */
+    HBufC* iContactsDataTobeSearched ;	
+    
+    /**
+    * The file session
+    */
+	RFs ifSession;
+	
+
+	/**
+     * Title,snippet,current contact data buffers
+     */
+    HBufC* iCurrentTitle;
+    HBufC8* iCurrentSnippet;
+    HBufC* iCurrentContactDataString;
+    HBufC* iBufferForQuery;
+   /**
+    * The contact link currently being accessed
+    * Own
+    */
+    TInt iCurrentContactLinkIndex;
+      
+   /**
+    * The array containing the heavy results data
+    * Own
+    */
+    RPointerArray<CSearchResult> iHeavyResultsArray;
+    
+   /**
+    * The search strings used for searching in the contacts database 
+    * Own
+    */
+    CDesCArrayFlat* iSearchStrings;
+    
+    /**
+    * The array containing the map data from iHeavyResultsArray to
+    * iAllContactItemsFromDb
+    * 
+    */
+    RArray<TInt>    iContactArrayMapper;
+
+    /**
+    * The array containing data for deleted contacts
+    * 
+    */
+    RArray<TBool> iCotnactDeletedList;
+    
+    /**
+    * The current database item in use
+    * 
+    */
+    TBool iIsFilterView;
+    
+    MVPbkContactViewBase* iContactViewBase;
+    MVPbkContactViewBase* iFilterView;
+    TInt iCurrentDatatBaseItemIndex; 
+};
+
+
+
+
+
+#endif //C_CCONTACTSSEARCHER_H
+
+
+