serviceproviders/sapi_calendar/calendarservice/src/addentry.cpp
changeset 22 fc9cf246af83
parent 19 989d2f495d90
child 33 50974a8b132e
--- 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<CCalEntry> 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<CCalInstance> 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