diff -r aba12c885d83 -r 96907930389d calendarui/server/CalenSvr/src/CalenServer.cpp --- a/calendarui/server/CalenSvr/src/CalenServer.cpp Thu Jul 15 18:37:27 2010 +0300 +++ b/calendarui/server/CalenSvr/src/CalenServer.cpp Thu Aug 19 09:53:43 2010 +0300 @@ -26,6 +26,7 @@ #include #include #include +#include //debug #include "calendarui_debug.h" @@ -101,6 +102,12 @@ CCalenServer::~CCalenServer() { TRACE_ENTRY_POINT; + if( iSession ) + { + // stop listening for calendar file change notifications + iSession->StopFileChangeNotification(); + delete iSession; + } //delete iAlarmManager; delete iDBManager; @@ -136,6 +143,13 @@ iDBManager = CCalenSvrDBManager::NewL(); //iAlarmManager = CCalenSvrAlarmManager::NewL(); iMissedAlarmHandler = CCalenSvrMissedAlarmManager::NewL(); + + + // create cal session + iSession = CCalSession::NewL(); + // start listening for calendar file change notifications + iSession->StartFileChangeNotificationL(*this); + StartL( KCalendarServerName ); TRACE_EXIT_POINT; @@ -562,4 +576,120 @@ TRACE_EXIT_POINT } +// ---------------------------------------------------------------------------- +// CCalenServer::CalendarInfoChangeNotificationL +// Handle calendar file change notifications +// ---------------------------------------------------------------------------- +void CCalenServer::CalendarInfoChangeNotificationL( + RPointerArray& aCalendarInfoChangeEntries) + { + TRACE_ENTRY_POINT; + + // get the file change count + TInt calenInfoChangeCount = aCalendarInfoChangeEntries.Count(); + RArray calendarColors; + // read calendar colors from central repository + ReadCalendarColorsFromCenrepL(calendarColors); + + for(TInt index = 0;index < calenInfoChangeCount;index++) + { + // default calendar is deleted/updated. + if( !aCalendarInfoChangeEntries[index]->FileNameL().CompareF(KCalendarDatabaseFilePath) ) + { + MCalFileChangeObserver::TChangeType changeType = + aCalendarInfoChangeEntries[index]->ChangeType(); + switch(changeType) + { + case MCalFileChangeObserver::ECalendarFileDeleted: + { + // create cal session + CCalSession* session = CCalSession::NewL(); + CleanupStack::PushL(session); + + // create and set metadata information from central repository + CCalCalendarInfo* calendarInfo = CCalCalendarInfo::NewL(); + CleanupStack::PushL(calendarInfo); + + // EFolderLUID + TBuf8 keyBuff; + keyBuff.AppendNum(EFolderLUID); + TRAPD(err,calendarInfo->PropertyValueL(keyBuff)); + + //First set the folder uid as 100000 for default calendar. + // Later set the other properties + if (KErrNotFound == err) + { + TUint calValue = 0; + //Get the available offset value and set as property value. + calValue = 100000; + TPckgC calValuePckg(calValue); + calendarInfo->SetPropertyL(keyBuff, calValuePckg); + } + SetCalendarAddPropertiesL(*calendarInfo); + calendarInfo->SetNameL(KCalendarDatabaseFilePath); + calendarInfo->SetColor(TRgb(calendarColors[0])); + calendarInfo->SetEnabled(ETrue); + TBuf calendarFileName; + calendarFileName.Append(KCalendarDatabaseFilePath); + //create the default calendar. + TRAPD(error,session->CreateCalFileL(calendarFileName,*calendarInfo)); + User::LeaveIfError(error); + CleanupStack::PopAndDestroy(calendarInfo); + CleanupStack::PopAndDestroy(session); + } + break; + case MCalFileChangeObserver::ECalendarInfoUpdated: + { + // create cal session + CCalSession* session = CCalSession::NewL(); + CleanupStack::PushL(session); + session->OpenL(KCalendarDatabaseFilePath); + + CCalCalendarInfo* calendarInfo = session->CalendarInfoL(); + CleanupStack::PushL(calendarInfo); + + TBuf8 keyBuff; + keyBuff.AppendNum(EMarkAsDelete); + + TBool markAsdelete; + TPckgC pkgMarkAsDelete(markAsdelete); + TRAPD(err,pkgMarkAsDelete.Set(calendarInfo->PropertyValueL(keyBuff))); + markAsdelete = pkgMarkAsDelete(); + if( markAsdelete ) + { + // Mark the CalFile as visible. + calendarInfo->SetEnabled( ETrue ); + TBuf8 keyBuff; + + // Set the modification time as home time. + keyBuff.Zero(); + keyBuff.AppendNum(EModificationTime); + TTime modificationTime; + modificationTime.HomeTime(); + TPckgC pkgModificationTime(modificationTime); + calendarInfo->SetPropertyL(keyBuff, pkgModificationTime); + + // Set the SyncStatus to ETrue + keyBuff.Zero(); + keyBuff.AppendNum( ESyncStatus ); + TBool syncstatus( ETrue ); + TPckgC pckgSyncStatusValue( syncstatus ); + calendarInfo->SetPropertyL( keyBuff, pckgSyncStatusValue ); + + // Mark the meta property as SoftDeleted + keyBuff.Zero(); + keyBuff.AppendNum(EMarkAsDelete); + TPckgC pkgSoftDelete( EFalse ); + calendarInfo->SetPropertyL(keyBuff, pkgSoftDelete); + + session->SetCalendarInfoL( *calendarInfo ); + } + CleanupStack::PopAndDestroy(calendarInfo); + CleanupStack::PopAndDestroy(session); + } + } + } + } + TRACE_EXIT_POINT; + } // End of File