diff -r 000000000000 -r f979ecb2b13e pimappservices/calendar/shared/src/agmdebug.cpp --- /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 + +#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 fmt16; + fmt16.Copy(fmt8); + + TBuf 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 fmt16; + fmt16.Copy(fmt8); + + TBuf logBuf16; + TTruncateOverflow16 overflow; + logBuf16.AppendFormatList(fmt16,list,&overflow); + + TBuf8<0x100> logBuf8; + + TInt err = CnvUtfConverter::ConvertFromUnicodeToUtf8(logBuf8,logBuf16); + + TTime timeNow; + timeNow.HomeTime(); + TBuf 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 logBuf; + TBuf entryModeBuf; + TBuf 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 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 startTimeBuf; + TBuf 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 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 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 dueDateTimeBuf; + AgmDebug::TTimeStrL(aAlarmEntry.iDueDateTimeLocal,dueDateTimeBuf); + + // Print instance of entry time in local time + DebugLog("Entry Instance Due Date Time: %S - LOCAL", &dueDateTimeBuf ); + + TBuf 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 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 +