pimappservices/calendar/shared/src/agmdebug.cpp
changeset 0 f979ecb2b13e
child 18 c198609911f9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/shared/src/agmdebug.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,400 @@
+// Copyright (c) 2006-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:
+//
+
+#include "agmdebug.h"
+#include "agmentry.h"
+#include "agmserv.h"
+#include "agmrptdef.h"
+#include "agsalarm.h"
+#include "agmfilter.h"
+#include <utf.h>
+
+#if defined(_DEBUG)
+const TInt KMaxLogLength = 0x100;
+
+EXPORT_C void AgmDebug::DebugLog(const char* aFmt,...)
+	{
+	VA_LIST list = {NULL};
+	VA_START(list,aFmt);
+
+	TPtrC8 fmt8((const TText8*)aFmt);
+		
+	TBuf<KMaxLogLength> fmt16;
+	fmt16.Copy(fmt8);
+
+	TBuf<KMaxLogLength> logBuf16;
+	TTruncateOverflow16 overflow;
+	logBuf16.AppendFormatList(fmt16,list,&overflow);
+	
+	TBuf8<0x100> logBuf8;
+	
+	TInt err = CnvUtfConverter::ConvertFromUnicodeToUtf8(logBuf8,logBuf16);
+	if(err==KErrNone)
+		{
+		RDebug::Printf("CAL_LOG: %S", &logBuf8);
+		}
+	}
+
+EXPORT_C void AgmDebug::DebugLogTimeStampL(const char* aFmt,...)
+	{
+	VA_LIST list = {NULL};
+	VA_START(list,aFmt);
+
+	TPtrC8 fmt8((const TText8*)aFmt);
+		
+	TBuf<KMaxLogLength> fmt16;
+	fmt16.Copy(fmt8);
+
+	TBuf<KMaxLogLength> logBuf16;
+	TTruncateOverflow16 overflow;
+	logBuf16.AppendFormatList(fmt16,list,&overflow);
+	
+	TBuf8<0x100> logBuf8;
+	
+	TInt err = CnvUtfConverter::ConvertFromUnicodeToUtf8(logBuf8,logBuf16);
+	
+	TTime timeNow;
+	timeNow.HomeTime();
+	TBuf<KMinTTimeStrLength> timeNowBuf16;
+	TTimeStrL(timeNow, timeNowBuf16);
+	
+	TBuf8<0x100> timeBuf8;
+	
+	TInt timeErr = CnvUtfConverter::ConvertFromUnicodeToUtf8(timeBuf8,timeNowBuf16);
+	
+	if(err==KErrNone)
+		{
+		RDebug::Printf("CAL_LOG: %S: %S\n", &timeBuf8, &logBuf8);
+		}
+	}
+
+EXPORT_C  void AgmDebug::TTimeStrL(const TTime& aTTime, TDes& aTimeStr)
+	{
+	if(aTTime==Time::NullTTime())
+		{
+		_LIT(KNullTimeDes,"NULL");
+		aTimeStr.Copy(KNullTimeDes);
+		}
+	else
+		{
+		_LIT(KTTimeDateFormat,"Time: %H:%T:%S:%*C3 Date:%*1/%2/%3");
+		aTTime.FormatL(aTimeStr,KTTimeDateFormat);
+		}
+	}
+
+#if defined (__CAL_VERBOSE_LOGGING__) || (__CAL_ENTRY_LOGGING__)
+EXPORT_C void AgmDebug::DebugLogEntryL(CAgnEntry& aEntry, TAgmEntryDumpLevel aEntryDumpLevel)
+	{
+	const TInt KMaxEntryTimeModeStrLength = 12;
+	const TInt KMaxEntryTypeStrLength = 12;
+
+	TBuf<KMaxLogLength> logBuf;
+	TBuf<KMaxEntryTimeModeStrLength> entryModeBuf;
+	TBuf<KMaxEntryTypeStrLength> entryTypeBuf;
+
+	TBool entryTimeModeUTC;
+	
+	logBuf.Append(_L("Dumping Entry: "));
+	if(aEntryDumpLevel & EDumpEntryIDs) logBuf.Append(_L("Ids | "));
+	if(aEntryDumpLevel & EDumpEntryTimes) logBuf.Append(_L("Times | "));
+	if(aEntryDumpLevel & EDumpEntryRptInfo) logBuf.Append(_L("Repeat Info | "));
+	if(aEntryDumpLevel & EDumpEntryStrData) logBuf.Append(_L("String Info"));
+	
+	DebugLog("%S", &logBuf);
+	
+	// Entry Type
+	switch (aEntry.Type())
+		{
+		case CCalEntry::EAppt: 		entryTypeBuf.Copy(_L("Appointment")); break;
+		case CCalEntry::EReminder: 	entryTypeBuf.Copy(_L("Reminder")); break;
+		case CCalEntry::ETodo: 		entryTypeBuf.Copy(_L("Todo")); break;
+		case CCalEntry::EEvent: 		entryTypeBuf.Copy(_L("Event")); break;
+		case CCalEntry::EAnniv: 		entryTypeBuf.Copy(_L("Anniversary")); break;
+		}
+		
+	// Entry Time Mode
+	if (aEntry.TimeMode() == MAgnCalendarTimeMode::EFloating)
+		{
+		entryTimeModeUTC = ETrue;
+		_LIT(KFloatingDes, "Floating");
+		entryModeBuf.Copy(KFloatingDes());
+		}
+	else
+		{
+		entryTimeModeUTC = EFalse;
+		_LIT(KUTCDes, "UTC");
+		entryModeBuf.Copy(KUTCDes());
+		}
+	
+	// Entry IDs
+	if (aEntryDumpLevel & EDumpEntryIDs)
+		{
+		// == GUID and Local ID
+		logBuf.Copy(aEntry.Guid());
+		DebugLog("%S: Local UID=%d, GUID=%S, Mode =%S", &entryTypeBuf, aEntry.LocalUid(), &logBuf,&entryModeBuf);
+
+		// == Recurrence ID
+		TBuf<KMinTTimeStrLength> recIdTimeBuf;
+		if(entryTimeModeUTC)
+			{
+			TTimeStrL(aEntry.RecurrenceId().UtcL(), recIdTimeBuf);
+			}
+		else
+			{
+			TTimeStrL(aEntry.RecurrenceId().LocalL(), recIdTimeBuf);
+			}
+		DebugLog("%S: Recurrence ID is %S", &entryTypeBuf, &recIdTimeBuf);
+		
+		// == Recurrence Range
+		switch (aEntry.RecurrenceRange())
+			{
+			case CalCommon::EThisAndFuture:
+				logBuf.Copy(_L("This And Future"));
+				break;
+			case CalCommon::EThisAndPrior:
+				logBuf.Copy(_L("This And Prior"));
+				break;
+			default:
+				logBuf.Copy(_L("Not Valid"));
+				break;
+			}
+		DebugLog("%S: Recurrence Range - %S",&entryTypeBuf, &logBuf);
+		}
+
+	// Entry Times
+	if (aEntryDumpLevel & EDumpEntryTimes)
+		{
+		TBuf<KMinTTimeStrLength> startTimeBuf;
+		TBuf<KMinTTimeStrLength> endTimeBuf;
+		
+		if(entryTimeModeUTC)
+			{
+			TTimeStrL(aEntry.StartTime().UtcL(), startTimeBuf);
+			TTimeStrL(aEntry.EndTime().UtcL(), endTimeBuf);
+			}
+		else
+			{
+			TTimeStrL(aEntry.StartTime().LocalL(), startTimeBuf);
+			TTimeStrL(aEntry.EndTime().LocalL(), endTimeBuf);
+			}
+		DebugLog("%S: Start Time - %S %S", &entryTypeBuf, &startTimeBuf, &entryModeBuf);
+		DebugLog("%S: End Time - %S %S", &entryTypeBuf, &endTimeBuf, &entryModeBuf);
+		}
+	
+	// Entry Repeat Info
+	if (aEntryDumpLevel & EDumpEntryRptInfo)
+		{
+		if (aEntry.RptDef())
+			{
+			switch (aEntry.RptDef()->HasRepeatRule())
+				{
+				case TAgnRpt::EDaily:			logBuf.Copy(_L("Daily")); break;
+				case TAgnRpt::EWeekly:			logBuf.Copy(_L("Weekly")); break;
+				case TAgnRpt::EMonthlyByDates:
+				case TAgnRpt::EMonthlyByDays:	logBuf.Copy(_L("Monthly")); break;
+				case TAgnRpt::EYearlyByDate:
+				case TAgnRpt::EYearlyByDay:		logBuf.Copy(_L("Yearly")); break;
+				default:						logBuf.Copy(_L("Repeat Rule - NOT SET"));
+				}
+			
+			if(aEntry.RptDef()->HasRepeatRule())
+				{
+				DebugLog("%S: Repeats - %S, Interval - %d", &entryTypeBuf, &logBuf,aEntry.RptDef()->RRule()->Interval());
+						
+				TBuf<KMinTTimeStrLength> untilTimeBuf;
+				if(entryTimeModeUTC)
+					{
+					TTimeStrL(aEntry.RptDef()->RRule()->UntilTimeL().UtcL(), untilTimeBuf);
+					}
+				else
+					{
+					TTimeStrL(aEntry.RptDef()->RRule()->UntilTimeL().LocalL(), untilTimeBuf);
+					}		
+					
+				DebugLog("%S: Repeat Until Time - %S %S",&entryTypeBuf, &untilTimeBuf, &entryModeBuf);
+				}
+				
+			if (aEntry.RptDef()->HasSporadicDates())
+				{
+				TTime sporadicTTime;
+				TBuf<KMinTTimeStrLength> sopradicTimeBuf;
+				const TInt KRDateCount =aEntry.RptDef()->SporadicDateList()->Count();
+				
+				DebugLog("%S: Number of sporadic dates: %d",&entryTypeBuf,KRDateCount);
+				
+				for (TInt i = 0; i < KRDateCount; ++i)
+					{
+					if(entryTimeModeUTC)
+						{
+						sporadicTTime = (*aEntry.RptDef()->SporadicDateList())[i].UtcL();
+						}
+					else
+						{
+						sporadicTTime = (*aEntry.RptDef()->SporadicDateList())[i].LocalL();
+						}
+					TTimeStrL(sporadicTTime, sopradicTimeBuf);
+					DebugLog("%S: RDate %d %S",&entryTypeBuf, i+1,&sopradicTimeBuf);
+					}
+				}
+			else
+				{
+				DebugLog("%S: No sporadic dates", &entryTypeBuf);
+				}
+			}
+		else
+			{
+			DebugLog("%S: No repeat definition",&entryTypeBuf);
+			}
+		}
+
+	// Entry Info
+	if (aEntryDumpLevel & EDumpEntryStrData)
+		{
+		if (aEntry.Summary()!=KNullDesC && aEntry.Summary().Length())
+			{
+			DebugLog("%S: Summary='%S'",&entryTypeBuf, &aEntry.Summary());
+			}
+		if (aEntry.Description()!=KNullDesC && aEntry.Description().Length())
+			{
+			DebugLog("%S: Description='%S'", &entryTypeBuf, &aEntry.Description());
+			}
+		if (aEntry.Location()!=KNullDesC && aEntry.Location().Length())
+			{
+			DebugLog("%S: Location='%S'\n", &entryTypeBuf, &aEntry.Location());
+			}
+		}
+	}
+#else
+	EXPORT_C void AgmDebug::DebugLogEntryL(CAgnEntry& /*aEntry*/, TAgmEntryDumpLevel /*aEntryDumpLevel*/) {}
+#endif
+
+#if defined (__CAL_VERBOSE_LOGGING__) || (__CAL_IPC_LOGGING__)
+#define NM_CASE(x) case x: enumStr = _S(#x); break;
+EXPORT_C void AgmDebug::DebugLogIPCL(TInt aOpCode, TUint aSessionId, TInt aErrCode)
+	{
+	const TText* enumStr;
+
+	switch (aOpCode)
+		{//case EOpenAgenda: enumStr = _S("EOpenAgenda");
+		NM_CASE(EOpenAgenda);			
+		NM_CASE(ECloseAgenda);						
+		NM_CASE(ETransmitBuffer);					
+		NM_CASE(EGetInstanceExtractor);	
+		NM_CASE(EPreviousInstances);			
+		NM_CASE(ENextInstances);				
+		NM_CASE(ECreateEntryIterator);				
+		NM_CASE(EEntryIteratorNext);					
+		NM_CASE(EEntryIteratorPosition);		
+		NM_CASE(EGetEntryUidsSinceDate);				
+		NM_CASE(EGetFileId);							
+		NM_CASE(EGetCategoryListCount);				
+		NM_CASE(ECategoryFilter);					
+		NM_CASE(EStartBuildIndex);					
+		NM_CASE(EGetListFileNames);	
+		NM_CASE(ECancelTask);				
+		NM_CASE(EAgnResourceCount);	//	test 		
+		NM_CASE(EAgnSetHeapFailure);	//	test 
+		NM_CASE(EAgendaFileExists);
+	 	NM_CASE(EDisableChangeBroadcast);
+		NM_CASE(EEnableChangeBroadcast);
+		NM_CASE(ERequestChangeNotificationParameters);
+		NM_CASE(ERequestChangeNotification);
+		NM_CASE(ECancelChangeNotification);
+		NM_CASE(ERequestProgress);
+		NM_CASE(ESetUpdateAlarm);
+		NM_CASE(ESetEnablePubSubNotification);
+		NM_CASE(ERestoreAlarmAction);
+		NM_CASE(ETzDbChangedTime);
+		// ReadUserData required 
+		NM_CASE(EFetchEntry); 						
+		NM_CASE(EFetchSimpleEntry);	
+		NM_CASE(EFetchSimpleEntries);					
+		NM_CASE(EFetchEntryByUID);					
+		NM_CASE(ERestoreText);					
+		NM_CASE(EGetCategoryListItem);
+		NM_CASE(EGetChangesSinceLastNotification);
+		NM_CASE(EFindInstances);
+		NM_CASE(EFetchEntryByGuid);
+		NM_CASE(ETransferAttachmentFileToClient);
+		NM_CASE(EMoveFileToServer);
+		NM_CASE(EFetchSortedAttachments);
+		NM_CASE(EEntriesWithAttachment);
+		NM_CASE(EFetchAttachmentById);
+			
+		// WriteUserData required 
+		NM_CASE(EUpdateEntry);						
+		NM_CASE(EAddEntry);							
+		NM_CASE(EDeleteEntry);				
+		NM_CASE(EAddCategoryToList);					
+		NM_CASE(EDeleteAgendaFile);
+		NM_CASE(ETidyByDateReadParams);
+		NM_CASE(ETidyByDateStart);
+		NM_CASE(ECategoryStart);
+		NM_CASE(ECategoryStartAsyn);
+		NM_CASE(ECreateAgendaFile);	
+		NM_CASE(EDeleteEntriesByLocalUid);
+		NM_CASE(EDeleteEntryByGuid);
+		NM_CASE(ECommit);
+		NM_CASE(ERollback);
+		NM_CASE(ETransferAttachmentFileToServer);
+		NM_CASE(ETransferFileToClientToWrite);
+		NM_CASE(EAgnNotSupported);
+		default: enumStr = _S("UnsupportedIPC, OpCode is: %d"), aOpCode;
+		}
+
+	DebugLog("IPC: %s, Session Id: %d, ErrCode: %d", enumStr, aSessionId, aErrCode);
+	}
+#else
+	EXPORT_C void AgmDebug::DebugLogIPCL(TInt /*aOpCode*/, TUint /*aSessionId*/, TInt /*aErrCode*/) {}
+#endif
+
+#if defined (__CAL_VERBOSE_LOGGING__) || (__CAL_ALARM_LOGGING__)
+EXPORT_C void AgmDebug::DebugLogAlarmL(const TAgnAlarmEntry& aAlarmEntry)
+	{
+	DebugLog("Logging Alarm details");
+	
+	TBuf<KMinTTimeStrLength> dueDateTimeBuf;
+	AgmDebug::TTimeStrL(aAlarmEntry.iDueDateTimeLocal,dueDateTimeBuf);
+	
+	// Print instance of entry time in local time	
+	DebugLog("Entry Instance Due Date Time: %S - LOCAL", &dueDateTimeBuf );
+	
+	TBuf<KMinTTimeStrLength> alarmTimeBuf;
+	AgmDebug::TTimeStrL(aAlarmEntry.iAlarmTime.LocalL(),alarmTimeBuf);
+	
+	// Print alarm time in local time (as the instance time is in local time)
+	DebugLog("Alarm Time: %S - LOCAL", &alarmTimeBuf);
+
+	DebugLog("Alarm Message: %S", &aAlarmEntry.iMessage);
+	DebugLog("Alarm SoundName: %S", &aAlarmEntry.iSound);
+	
+	TBuf<KMinTTimeStrLength> instanceTimeBuf;
+	AgmDebug::TTimeStrL(aAlarmEntry.iInstanceId.Date().LocalL(),instanceTimeBuf);
+	
+	DebugLog("Alarm Instance EntryId: %d Instance Time: %S", aAlarmEntry.iInstanceId.Value(),&instanceTimeBuf);
+	}
+#else
+	EXPORT_C void AgmDebug::DebugLogAlarmL(const TAgnAlarmEntry& /*aAlarmEntry*/) {}
+#endif
+#else
+	// Avoid linking errors for exported APIs
+	EXPORT_C void AgmDebug::DebugLog(const char* /*aFmt*/,...){	}
+	EXPORT_C void AgmDebug::DebugLogTimeStampL(const char* /*aFmt*/,...){}
+	EXPORT_C void AgmDebug::DebugLogEntryL(CAgnEntry& /*aEntry*/, TAgmEntryDumpLevel /*aEntryDumpLevel*/) {}
+	EXPORT_C void AgmDebug::DebugLogIPCL(TInt /*aOpCode*/, TUint /*aSessionId*/, TInt /*aErrCode*/) {}
+	EXPORT_C void AgmDebug::DebugLogAlarmL(const TAgnAlarmEntry& /*aAlarmEntry*/) {}
+	EXPORT_C  void AgmDebug::TTimeStrL(const TTime& /*aTTime*/, TDes& /*aTimeStr*/) {}
+#endif
+