diff -r 989d2f495d90 -r fc9cf246af83 serviceproviders/sapi_calendar/calendarservice/src/addentry.cpp --- a/serviceproviders/sapi_calendar/calendarservice/src/addentry.cpp Fri Jul 03 15:51:24 2009 +0100 +++ b/serviceproviders/sapi_calendar/calendarservice/src/addentry.cpp Thu Aug 27 07:43:07 2009 +0300 @@ -73,7 +73,9 @@ void CCalendarAddEntry::AddL( TUIDSet*& aGuidAdded ) { if ( iCalendarEntry->ModifiedAttributes() & CEntryAttributes::ELocalUid ) - UpdateEntryL( aGuidAdded ); + UpdateEntryL( aGuidAdded ); + else if( iCalendarEntry->ModifiedAttributes() & CEntryAttributes::EGlobalUid ) + UpdateEntryL( aGuidAdded ); else AddNewEntryL( aGuidAdded ); } @@ -164,7 +166,10 @@ { aGuidAdded = new(ELeave) TUIDSet; - CleanupStack::PushL( aGuidAdded ); + CleanupStack::PushL( aGuidAdded ); + + TPtrC8 globaluid(KNullDesC8); + globaluid.Set( iCalendarEntry->GlobalUid()); // Instance Modification as the instance start time has been specified if( iCalendarEntry->ModifiedAttributes() & CEntryAttributes::EInsStartTime ) @@ -173,9 +178,21 @@ User::Leave( KErrArgument ); TCalTime instanceStTime = iCalendarEntry->InstanceStartTime(); + + CCalInstance* instance; + - // Fetch instance having start time specified - CCalInstance* instance = GetInstanceL( instanceStTime, iCalendarEntry->LocalUid() ); + // Fetch instance having start time and LocalUid specified and GlobalUid specified + if(iCalendarEntry->ModifiedAttributes() & CEntryAttributes::ELocalUid) + { + instance = GetInstanceL( instanceStTime, iCalendarEntry->LocalUid() ); + } + else if(iCalendarEntry->ModifiedAttributes() & CEntryAttributes::EGlobalUid) + { + instance = GetGlobalInstanceL(instanceStTime, globaluid); + } + + ///add code here if ( !instance ) User::Leave( KErrArgument ); @@ -245,8 +262,22 @@ else { // Fetch entry to be modified - CCalEntry* entry = iSessionInfo->EntryView()->FetchL( iCalendarEntry->LocalUid() ); - + CCalEntry* entry ; + + if(iCalendarEntry->ModifiedAttributes() & CEntryAttributes::ELocalUid) + { + entry = iSessionInfo->EntryView()->FetchL( iCalendarEntry->LocalUid() ); + } + else if(iCalendarEntry->ModifiedAttributes() & CEntryAttributes::EGlobalUid) + { + RPointerArray entryList; + CleanupStack::PushL( TCleanupItem(CleanupCCalEntryArray, &entryList) ); + iSessionInfo->EntryView()->FetchL( globaluid, entryList); + entry = entryList[0]; + entryList[0] = NULL; + CleanupStack::PopAndDestroy( &entryList ); + } + //Invalid LocalUID if( !entry ) User::Leave( KErrArgument ); @@ -644,7 +675,40 @@ return instance; } +// --------------------------------------------------------------------------- +// CCalendarAddEntry::GetGlobalInstanceL +// Retrieves the Instance for the given global Uid +// --------------------------------------------------------------------------- +// +CCalInstance* CCalendarAddEntry::GetGlobalInstanceL( const TCalTime& aInsStTime, + const TDesC8& aUid ) + { + CCalInstance* instance = NULL; + RPointerArray insArray( KArrayGran ); + + CleanupStack::PushL( TCleanupItem(CleanupCCalInstanceArray, &insArray) ); + + // Find instance having the instance start time specified + iSessionInfo->InstanceView()->FindInstanceL(insArray, CalCommon::EIncludeAll, + CalCommon::TCalTimeRange(aInsStTime, aInsStTime)); + + TInt count = insArray.Count(); + + for( TInt index = 0 ; index < count; index++ ) + { + if ( insArray[index]->Entry().UidL() == aUid ) + { + instance = insArray[index]; + insArray[index] = NULL; + break; + } + } + CleanupStack::PopAndDestroy( &insArray ); + + return instance; + + } // --------------------------------------------------------------------------- // CCalendarAddEntry::SetStartEndTimeL // Set instance start and end time