servicewidget/servicewidgetdatapublisher/inc/cservicewidgetpresencehandler.h
changeset 0 5e5d6b214f4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servicewidget/servicewidgetdatapublisher/inc/cservicewidgetpresencehandler.h	Tue Feb 02 10:12:18 2010 +0200
@@ -0,0 +1,242 @@
+/*
+* Copyright (c) 2008 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:  presene status handler 
+ *                
+ *
+*/
+
+
+#ifndef CSERVICEWIDGETPRESENCEHANDLER_H
+#define CSERVICEWIDGETPRESENCEHANDLER_H
+
+#include <presencecachereader2.h>
+#include <mpresencebuddyinfo2.h> // buddy info class
+#include <presenceinfo.h> //Presence info test
+#include <presencecachereadhandler2.h> // handling the presence cache events 
+#include <ximpcontextobserver.h>
+#include "servicewidgetenums.hrh"
+
+// farword declarations
+class MXIMPContext;
+class MXIMPClient;
+class MPresenceCacheReadHandler2;
+class MServiceWidgetPresenceObserver;
+class CActiveSchedulerWait;
+class MXIMPBase;
+class MPresenceFeatures;
+class CServiceWidgetBuddyPresence;
+class CFbsBitmap;
+
+// class defnitions
+class CServiceWidgetPresenceHandler  : public CBase,
+								  	   public MXIMPContextObserver,
+							      	   public MPresenceCacheReadHandler2
+							      	   
+{
+public:
+   	 
+    /**
+      * Two-phased constructor.
+      * @param aPresenceObserver, prsence observer
+      * @param aServiceName, service name
+      */
+     static CServiceWidgetPresenceHandler* NewL( MServiceWidgetPresenceObserver& aPresenceObserver,
+     										 const TDesC& aServiceName,
+     										 const TDesC& aOwnId );
+
+     /**
+      * Two-phased constructor.
+      * @param aPresenceObserver, prsence observer
+      * @param aServiceName, service name
+      */
+     static CServiceWidgetPresenceHandler* NewLC( MServiceWidgetPresenceObserver& aPresenceObserver,
+     										 const TDesC& aServiceName,
+     										 const TDesC& aOwnId );
+     
+     /**
+      * Standard C++ destructor
+      */    
+     ~CServiceWidgetPresenceHandler();
+      
+ public:
+		
+		/**
+		* @return online counts
+		*/
+		TInt OnlineBuddyCount();
+
+		/**
+		* @return  all friend count
+		*/
+		TInt AllBuddyCount();
+		
+		/**
+		* @return  all inviations count
+		*/
+		TInt GetInviteCounts();
+		
+		/**
+		* @return on going operation id
+		*/
+		TWServiceOperationId GetOngoingOperationId();
+
+		  /**
+         * get the connected session
+         * @param aProtocolUid, protocal to use
+         * @param aServiceId, service id to use
+          */ 
+        void GetConnectedSessionL(TInt aProtocolUid,
+        						  TInt aServiceId );
+        
+         /**
+         * release the connected session
+         */ 
+        void ReleaseConnectionL();
+        
+        /**
+         * release the connected session
+         */ 
+       	TWSPresenceStatus GetOwnStatus();
+       
+
+ private : // from MXIMPContextObserver
+		/**
+	     * HandleximpContextEvent method from context obsrver  
+	     * ximp framework
+	     * @param aContext
+	     * @param aEvent, event  
+	     */
+	     void HandlePresenceContextEvent(const MXIMPContext& aContext,
+	                                     const MXIMPBase& aEvent );      	
+		
+ private: // from prescachereadhandler
+		/**
+	     * Handler for AllBuddiesPresenceInService method of MPresenceCacheReader.
+	     *
+	     * @param aErrorCode 
+	     * @param aPresenceBuddyInfoList presence infos for all buddies requested. 
+	     *         Ownership of elements to callee. Can be empty if not found.
+	     */   
+	    void HandlePresenceReadL(TInt aErrorCode,
+	         			RPointerArray<MPresenceBuddyInfo2>& aPresenceBuddyInfoList) ;
+	                        
+	    /**
+	     * Handler for Buddy presence change notifications.
+	     *
+	     * @param aErrorCode 
+	     * @param aPresenceBuddyInfo presence info for buddy. 
+	     *         Ownership to callee. Can be NULL if aErrorCode exist.
+	     */    
+	    void HandlePresenceNotificationL(TInt aErrorCode,
+	        					MPresenceBuddyInfo2* aPresenceBuddyInfo);
+       
+private: // Implementation
+
+        /**
+         * Standard C++ constructor
+         */    
+        CServiceWidgetPresenceHandler( MServiceWidgetPresenceObserver& aPresenceObserver );
+        
+        /**
+         * Performs the 2nd phase of construction.
+         * @param aServiceName, service name
+          */        
+        void ConstructL(const TDesC& aServiceName, const TDesC& aOwnId );
+        
+        
+         /**
+         * subsribe the presence change notification
+          */ 
+        void RetrieveSubscribedListL();
+        
+         /**
+         * subsribe the presence change notification
+         */ 
+        void  SubscribeForAuthorizationL();
+        
+         /**
+         * subsribe the presence change notification
+         * @param aUserId, user  to use
+          */ 
+        void SubscribePresenceL( const TDesC& aUserId );
+        
+         /**
+         * read buddy presence from cache
+         */    
+        void  ReadPresenceFromCacheL();
+      
+      	/**
+         * helper method for bind complete 
+         */ 
+      	void DoHandleBindCompleteL();
+      	
+      	/**
+         * helper method  buddy fetch event
+         * @param aEvent, group list event
+         */ 
+      	void DoHandlePresentityGroupContentEventL( const MXIMPBase& aEvent );
+      	
+      	/**
+         * helper method  friend request fetch event
+         * @param aEvent, grand list event
+         */ 
+      	void DoHandlePresenceGrantRequestListEventL( const MXIMPBase& aEvent );
+      	
+      	/**
+         * helper method  for converting ximpstatus to local status
+         * @param aAvailabilityEnum, availability of contact
+         */ 
+      	TWSPresenceStatus ConvertPresenceCacheEnums(MPresenceBuddyInfo2::TAvailabilityValues aAvailabilityEnum,TPtrC aAvabilityText);
+      	
+      	/**
+         * method for maitain the unique information about status
+         * @param aUserId, a user id of contact
+         * @param aStatus, status of contact
+         */ 
+      	void CheckAndCacheBuddyAvailabilityL( const TDesC& aUserId, TWSPresenceStatus aStatus );
+
+private: // Data
+
+		 // not owns : reference to presence observer for notification
+        MServiceWidgetPresenceObserver& iPresenceObserver;
+	     // owns : service name 
+        HBufC* iServiceName;
+        // owns :  own user id 
+        HBufC* iOwnUserId;
+        // not own
+        TInt iServiceId;
+	     // own , client for presence framework
+        MXIMPClient*   iClient;
+        // own ,presence context to prsence framework
+        MXIMPContext* iPresenceCtx;
+	      //Stores the XIMPFw EventTypes Subscribed for      
+	    RArray< TInt32 > iAcceptedEventTypes;
+	    //owns : reference to presence cache reader
+		MPresenceCacheReader2* iPresenceCacheReader;
+	    // owns : total budy  count 
+        TInt iTotalCount;
+         // owned  pointer to presence plugin
+	    MPresenceFeatures* iFeatures;
+	 	// own : current ongoing operation
+  		TWServiceOperationId iOperationId;
+  		// owns : list of presence buddy
+  		RPointerArray<CServiceWidgetBuddyPresence> iOnlineBuddyArray;
+  		// owns : own status
+  		TWSPresenceStatus iOwnStatus;
+  		// owns : invitation count
+  		TInt iInvitationCount;
+ 
+};
+
+#endif /*CSERVICEWIDGETPRESENCEHANDLER_H*/