pimappservices/calendar/shared/inc/agmtlsproxy.h
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/shared/inc/agmtlsproxy.h	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,169 @@
+// Copyright (c) 1998-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 __AGMTLSPROXY_H__
+#define __AGMTLSPROXY_H__
+
+#include <e32property.h>
+#include <tz.h>
+
+class TAgnCalendarFixedTimeMode;
+class TAgnCalendarFloatingTimeMode;
+class TAgnCalendarFixedUsingRulesTimeMode;
+class MAgnCalendarTimeMode;
+class CTzConverter;
+class CAgnTlsTzRules;
+class CAgnTlsProxy;
+
+class MAgnTzChangeObserver
+/** The interface for a system time zone change observer.
+If an object that implements this interface and supplied to 
+CAgnTlsProxy::AddSystemTimeObserverL(), its HandleCurrentTimeZoneChangeL() 
+function is called if the system time zone is changed.
+
+@internalAll
+@released
+*/
+	{
+public:
+	/** Observer interface that is called when system time zone has changed. */
+	virtual void HandleCurrentTimeZoneChangeL(const CTzId& aSystemTzId) = 0;
+	virtual void HandleTzRulesChangeL(const TTime& aTime) = 0;
+	};
+	
+NONSHARABLE_CLASS(CAgnTzChangeObserver ) : public CActive
+	{
+public:
+	static CAgnTzChangeObserver* NewL(CAgnTlsProxy& aTlsProxy, NTzUpdate::TPropertyKeys aTzChangePropertyKey);
+	~CAgnTzChangeObserver();
+
+	
+private:
+	CAgnTzChangeObserver(CAgnTlsProxy& aTlsProxy, NTzUpdate::TPropertyKeys aTzChangePropertyKey);
+	void ConstructL();
+	
+	void RunL();
+	void DoCancel();
+
+private:
+	CAgnTlsProxy&				iAgnTlsProxy;			
+	NTzUpdate::TPropertyKeys 	iTzChangePropertyKey;
+	RProperty 					iTzChangeProperty;
+	};
+/** Class for accessing time zone converter, and caching time zone rules and modes.
+
+This class is held in thread local storage in the Calendar client, server and shared DLLs 
+so it can be accessed easily from anywhere.
+*/
+NONSHARABLE_CLASS(CAgnTlsProxy) : public CBase
+	{
+public:
+	enum TAgnTlsTzRulesType
+		{
+		TAgnTlsTzRulesType_None,
+		TAgnTlsTzRulesType_Client,
+		TAgnTlsTzRulesType_Server,
+		};
+	
+	IMPORT_C static CAgnTlsProxy* CreateL(TAgnTlsTzRulesType aTzRulesType);
+	IMPORT_C static void Release(TAny* aRef);
+	
+	const TAgnCalendarFixedTimeMode& FixedTimeMode() const;
+	const TAgnCalendarFloatingTimeMode& FloatingTimeMode() const;
+	
+	IMPORT_C RTz& TzServer();
+	TUint16 CurrentTzId() const;
+	CTzRules* GetZoneForRulesL(const CTzRules& aRules);
+	void ReferenceRemoved(const CTzRules* aReference);
+	IMPORT_C void __dbgClearTzClientCacheL(TBool aRestartCaching);
+	
+	IMPORT_C void AddSystemTimeObserverL(MAgnTzChangeObserver* aObserver);
+	IMPORT_C void RemoveSystemTimeObserver(MAgnTzChangeObserver* aObserver);
+
+	IMPORT_C CTzRules* GetCurrentSystemTzRulesL();
+	void HandleTzPropertyChangeL(NTzUpdate::TPropertyKeys aTzChangePropertyKey);
+private:
+	CAgnTlsProxy();
+	void ConstructL(TAgnTlsTzRulesType aTzRulesType);
+	
+	static CAgnTlsProxy* NewL(TAgnTlsTzRulesType aTzRulesType);
+	~CAgnTlsProxy();	
+private:
+	TInt iRefCount;
+	TAgnCalendarFixedTimeMode* iFixedTimeMode;
+	TAgnCalendarFloatingTimeMode* iFloatingTimeMode;
+	RTz iTzServer;
+	CTzConverter* iTimeConverter;
+	CAgnTlsTzRules* iTlsTzRules;
+	RPointerArray<MAgnTzChangeObserver> iObservers;
+	CAgnTzChangeObserver*	iCurrentTzChangeObserver;
+	CAgnTzChangeObserver*	iTzRulesChangeObserver;
+	};
+
+NONSHARABLE_CLASS(CAgnTlsTzRules) : public CBase
+	{
+public:
+	CAgnTlsTzRules();
+	virtual ~CAgnTlsTzRules();
+	virtual CTzRules* GetSharedTzRulesL(const CTzRules& aTzRules) = 0;
+	virtual void ReferenceRemoved(const CTzRules* aReference) = 0;
+	virtual CTzRules* GetCurrentSystemTzRulesL(RTz& aTzServer) = 0;
+	virtual void SystemTzZoneChangedL(RTz& aTzServer, NTzUpdate::TPropertyKeys aTzChangePropertyKey) = 0;
+
+protected:
+	CTzRules* GetSystemTzFromTzServerL(RTz& aTzServer);
+
+protected:	
+	CTzRules* iCurrentSystemTzRules;
+	};
+
+NONSHARABLE_CLASS(CAgnServerTlsTzRules) : public CAgnTlsTzRules
+	{
+public:
+	virtual ~CAgnServerTlsTzRules();
+	virtual CTzRules* GetSharedTzRulesL(const CTzRules& aTzRules);
+	virtual void ReferenceRemoved(const CTzRules* aReference);
+	virtual CTzRules* GetCurrentSystemTzRulesL(RTz& aTzServer);
+	virtual void SystemTzZoneChangedL(RTz& aTzServer, NTzUpdate::TPropertyKeys aTzChangePropertyKey);
+	};
+
+NONSHARABLE_CLASS(CAgnClientTlsTzRules) : public CAgnTlsTzRules
+	{
+public:
+	virtual ~CAgnClientTlsTzRules();
+	virtual CTzRules* GetSharedTzRulesL(const CTzRules& aTzRules);
+	virtual void ReferenceRemoved(const CTzRules* aRefTzRules);
+	virtual CTzRules* GetCurrentSystemTzRulesL(RTz& aTzServer);
+	virtual void SystemTzZoneChangedL(RTz& aTzServer, NTzUpdate::TPropertyKeys aTzChangePropertyKey);
+
+private:
+	void AddReference(const CTzRules* aTzRules);
+	void SetCurrentSystemTzRulesL(CTzRules* aTzRules, TUint aTzId);
+	CTzRules* GetCurrentSystemTzFromTzServerL();
+	void UpdateCurrentSystemTzRulesL(RTz& aTzServer);
+	void UpdateCacheL(RTz& aTzServer);
+
+private:
+	//The following three arrays are conrespondent each other, i.e. 
+	//for each tz rule, there is a rule (CTzRules), a reference count 
+	//(The number of entries using it) and a Tz Id (It is the numerical id if the 
+	//rule is obtained from the TzServer, otherwise it is set to KInvalidTzId)
+	RPointerArray<CTzRules> iTzRules;
+	RArray<TInt> iTzRulesReferences;
+	RArray<TUint> iTzIds;
+	};
+
+
+#endif //