--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clfwrapper/ClientSrc/CCLFServerProxy.h Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,428 @@
+/*
+* Copyright (c) 2002-2009 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:
+*
+*/
+
+
+#ifndef CCLFSERVERPROXY_H
+#define CCLFSERVERPROXY_H
+
+// INCLUDES
+#include <e32std.h>
+#include <badesca.h>
+#include <f32file.h>
+#include <mdesession.h>
+#include <mdeobjectquery.h>
+#include <harvesterclient.h>
+#include <CLFContentListing.h>
+#include "CLFConsts.h"
+
+// FORWARD DECLARATIONS
+class CActiveSchedulerWait;
+
+// CLASS DECLARATION
+
+/**
+* Abstract base class for handling different types of UpdateItems requests.
+*
+* @lib ContentListingFramework.lib
+* @since Series 60 5.0
+*/
+NONSHARABLE_CLASS( CUpdateItemsHandler ) : public CBase
+ {
+ public:
+ virtual void StartHandlingL() = 0;
+
+ virtual void HandleObjectNotification( TItemId aId, TObserverNotificationType aType ) = 0;
+
+ virtual TBool WasNotificationHandled() const;
+
+ virtual TBool AllDone() const = 0;
+
+ virtual void StartScheduler();
+
+ virtual void AsyncStopScheduler();
+
+ virtual void SetRemoveObserverFlag( TBool aRemove );
+
+ public:
+
+ /**
+ * Destructor.
+ */
+ virtual ~CUpdateItemsHandler() {}
+
+ protected:
+
+ /**
+ * C++ default constructor.
+ */
+ inline CUpdateItemsHandler();
+
+ protected:
+ // Ref.
+ CActiveSchedulerWait iScheduler;
+ // Own.
+ TBool iWasNotificationHandled;
+ // Ref.
+ MMdEObjectObserver* iParentObserver;
+ // Ref.
+ MMdEObjectPresentObserver* iParentPresentObserver;
+ // Own
+ TBool iRemoveObserver;
+ };
+
+/**
+* ID-based UpdateItems request handler.
+*
+* @lib ContentListingFramework.lib
+* @since Series 60 5.0
+*/
+NONSHARABLE_CLASS( CUpdateIDsHandler ) : public CUpdateItemsHandler
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CUpdateIDsHandler* NewL( const TArray< TCLFItemId >& aItemIDArray );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CUpdateIDsHandler();
+
+ protected: // Functions from base classes
+
+ /**
+ * From CUpdateItemsHandler
+ */
+ virtual void StartHandlingL();
+
+ /**
+ * From CUpdateItemsHandler
+ */
+ void HandleObjectNotification( TItemId aId, TObserverNotificationType aType );
+
+ /**
+ * From CUpdateItemsHandler
+ */
+ TBool AllDone() const;
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ inline CUpdateIDsHandler( const TArray< TCLFItemId >& aItemIDArray );
+
+ private:
+ // Own.
+ RArray< TCLFItemId > iIdsPendingUpdate;
+ };
+
+/**
+* UpdateItems request handler for requests with KCLFItemsDeletedSemanticId.
+*
+* @lib ContentListingFramework.lib
+* @since Series 60 5.0
+*/
+NONSHARABLE_CLASS( CItemsDeletedHandler ) : public CUpdateItemsHandler
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CItemsDeletedHandler* NewL( CMdESession& aMdESession,
+ const CDesCArray& aUriArray,
+ MMdEObjectObserver* aParentObserver,
+ MMdEObjectPresentObserver* aParentPresentObserver );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CItemsDeletedHandler();
+
+ protected: // Functions from base classes
+
+ /**
+ * From CUpdateItemsHandler
+ */
+ virtual void StartHandlingL();
+
+ /**
+ * From CUpdateItemsHandler
+ */
+ void HandleObjectNotification( TItemId aId, TObserverNotificationType aType );
+
+ /**
+ * From CUpdateItemsHandler
+ */
+ TBool AllDone() const;
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ inline CItemsDeletedHandler( CMdESession& aMdESession );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ inline void ConstructL( const CDesCArray& aUriArray,
+ MMdEObjectObserver* aParentObserver,
+ MMdEObjectPresentObserver* aParentPresentObserver );
+
+ private:
+ // Own.
+ RPointerArray< CMdEObject > iObjectsPendingRemoval;
+ // Own.
+ RArray< TCLFItemId > iIdsPendingRemoval;
+ // Ref.
+ CMdESession& iMdESession;
+ };
+
+/**
+* UpdateItems request handler for requests with KCLFUpdateFoldersSemanticId.
+*
+* @lib ContentListingFramework.lib
+* @since Series 60 5.0
+*/
+NONSHARABLE_CLASS( CUpdateFoldersHandler ) : public CUpdateItemsHandler,
+ public MMdEQueryObserver,
+ public MHarvestObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CUpdateFoldersHandler* NewL( CMdESession& aMdESession,
+ const CDesCArray& aUriArray,
+ MMdEObjectObserver* aParentObserver,
+ MMdEObjectPresentObserver* aParentPresentObserver,
+ RFs& aFs,
+ RHarvesterClient& aHarvester,
+ CDesCArray* aSupportedTypes );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CUpdateFoldersHandler();
+
+ protected: // Functions from base classes
+
+ /**
+ * From CUpdateItemsHandler
+ */
+ virtual void StartHandlingL();
+
+ /**
+ * From CUpdateItemsHandler
+ */
+ void HandleObjectNotification( TItemId aId, TObserverNotificationType aType );
+
+ /**
+ * From CUpdateItemsHandler
+ */
+ TBool AllDone() const;
+
+ /**
+ * From MMdEQueryObserver
+ */
+ void HandleQueryNewResults( CMdEQuery& aQuery, TInt aFirstNewItemIndex, TInt aNewItemCount );
+
+ /**
+ * From MMdEQueryObserver
+ */
+ void HandleQueryCompleted( CMdEQuery& aQuery, TInt aError );
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ inline CUpdateFoldersHandler( CMdESession& aMdESession,
+ RFs& aFs,
+ RHarvesterClient& aHarvester,
+ CDesCArray* aSupportedTypes );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ inline void ConstructL( const CDesCArray& aUriArray,
+ MMdEObjectObserver* aParentObserver,
+ MMdEObjectPresentObserver* aParentPresentObserver );
+
+ void ScanNodeForUrisL( const TDesC16& aNodeName, CDesCArray& aUriArray, CDesCArray& aFolderArray );
+
+ void DetermineIdsToRemoveL ( const CMdEObjectQuery& aQuery );
+
+ void DetermineIdsToUpdateL ( const CDesCArray& aUriArray );
+
+ void DoQueryL( CMdEObjectQuery*& aQuery, const CDesCArray& aFolderArray );
+
+ void DoHarvestL( const TDesC& aUri );
+
+ void HarvestingComplete( TDesC& aURI, TInt aError );
+
+ TBool IsSupportedType( const TDesC& aExtension );
+
+ private:
+ // Ref.
+ RFs iFs;
+ // Own.
+ CDesCArraySeg iUrisFound;
+ // Own.
+ CDesCArraySeg iFoldersFound;
+ // Own.
+ RArray< TCLFItemId > iIdsPendingRemoval;
+ // Own
+ RArray< TCLFItemId > iIdsPendingUpdate;
+ // Own
+ RArray< TCLFItemId > iIdsHandled;
+ // Ref.
+ CMdESession& iMdESession;
+ // Ref.
+ RHarvesterClient iHarvester;
+ // Own.
+ TFileName iHarvestingFile;
+ // Own.
+ TInt iHarvestError;
+ // Own
+ TBool iStartingHandling;
+ // Not owned.
+ CDesCArray* iExtensionArray;
+
+ TBool iHarvestingOngoing;
+ };
+
+/**
+* Client-side proxy class for simulating the CLF server.
+*
+* @lib ContentListingFramework.lib
+* @since Series 60 5.0
+*/
+NONSHARABLE_CLASS( CCLFServerProxy ) : public CBase,
+ public MMdEObjectObserver,
+ public MHarvesterEventObserver,//clf_wrapper_improve add
+ public MMdEObjectPresentObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CCLFServerProxy* NewL( CMdESession& aMdESession );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CCLFServerProxy();
+
+ public:
+
+ void GetUpdateEndEvent( TRequestStatus& aRequestStatus );
+
+ TInt CancelGetEvent();
+
+ void GetUpdateStartEvent( TRequestStatus& aRequestStatus );
+
+ TInt CancelGetUpdateStartEvent();
+
+ TInt FetchItemListData( RArray< TCLFItemId >& aItemIDArray );
+
+ TInt UpdateItemsL( const TArray< TCLFItemId >& aItemIDArray );
+
+ TInt UpdateItemsL( TInt aSemanticId, const TDesC8& aOpaqueData );
+
+ TInt UpdateAllItemsL();
+
+ /**
+ * From MMdEObjectObserver
+ */
+ void HandleObjectNotification( CMdESession& aSession,
+ TObserverNotificationType aType,
+ const RArray<TItemId>& aObjectIdArray );
+
+ /**
+ * From MMdEObjectPresentObserver
+ */
+ void HandleObjectPresentNotification( CMdESession& aSession,
+ TBool aPresent,
+ const RArray<TItemId>& aObjectIdArray );
+ // clf_wrapper_improve add
+ void HarvestingUpdated(
+ HarvesterEventObserverType aHEObserverType,
+ HarvesterEventState aHarvesterEventState,
+ TInt aItemsLeft );
+ // clf_wrapper_improve end
+ private:
+ /**
+ * C++ default constructor.
+ */
+ inline CCLFServerProxy( CMdESession& aMdESession );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ inline void ConstructL();
+
+ void StartHandlingL( CUpdateItemsHandler* aHandler );
+
+ void NotifyUpdateEvent( const TCLFServerOpCodes aOpCode );
+
+ void DeSerializeL( const TDesC8& aData, CDesCArray& aDataArray );
+
+ void ProcessObjectId( const CMdEObject* aObject );
+
+ void GetEvent( TRequestStatus& aRequestStatus, TCLFServerOpCodes aOpcode );
+
+ void CancelGetEvent( TCLFServerOpCodes aOpcode );
+
+ void PopulateSupportedExtensionL();
+
+ private: // Data
+ // Own.
+ RPointerArray< TRequestStatus > iStatusArray;
+ // Own.
+ RArray< TCLFServerOpCodes > iOpCodeArray;
+ // Own.
+ RArray< TCLFItemId > iUpdatedIds;
+ // Own.
+ RPointerArray< CUpdateItemsHandler > iUpdateItemsHandlerArray;
+ // Ref.
+ CMdESession& iMdESession;
+ // Own.
+ CDesCArray* iUriArray;
+ // Own.
+ CDesCArray* iExtensionArray;
+ // Own.
+ RFs iFs;
+
+ RHarvesterClient iHC;
+
+ TBool iHEStateFinished;
+
+ TBool iNeedNotifyCLFGetUpdateEvent;
+
+ TInt iDelayNotifyCLFGetUpdateEventCount;
+ };
+
+#endif // CCLFSERVERPROXY_H
+
+// End of File