phonebookengines/VirtualPhonebook/VPbkVCardEng/src/CVPbkVCardPropertyExporter.cpp
branchRCL_3
changeset 23 5586b4d2ec3e
parent 0 e686773b3f54
child 26 0d28c1c5b6dd
--- a/phonebookengines/VirtualPhonebook/VPbkVCardEng/src/CVPbkVCardPropertyExporter.cpp	Wed Mar 31 21:13:53 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkVCardEng/src/CVPbkVCardPropertyExporter.cpp	Wed Apr 14 15:45:35 2010 +0300
@@ -47,12 +47,16 @@
 #include <VPbkDebug.h>
 
 #include <centralrepository.h> 
+#include <MVPbkStoreContactProperties.h>
 
 // CONSTANTS
 const TInt KNsmlDsGeoField = 0x0000;  //  defined in DS cenrep
 const TUid KCRUidGeoFieldInternalKeys = { 0x20022EE1 };  // 0x20022EE1 defined in DS cenrep
 
 _LIT8(KGEO, "GEO");
+_LIT8(KREV, "REV");
+
+
 
 namespace
     {
@@ -630,6 +634,10 @@
 	    TRAP( err, HandleOwnCardL() );
             if(err == KErrNone ) 
                 TRAP( err, HandleGroupCardL() );
+            
+            // Parse the REV (Revision) field if any
+            if(err == KErrNone ) 
+            	TRAP( err, AddRevL() ); 
 	    }
     return err;
     }
@@ -720,5 +728,45 @@
         }
     }
 
+void CVPbkVCardPropertyExporter::AddRevL()
+    {
+    MVPbkStoreContact* tempContact = const_cast<MVPbkStoreContact*>(iContact);
+    if( tempContact )
+        {	
+        MVPbkStoreContact2* tempContact2 = 	reinterpret_cast<MVPbkStoreContact2*>
+            (tempContact->StoreContactExtension (KMVPbkStoreContactExtension2Uid) );	    
+        if(tempContact2)
+            {
+            MVPbkStoreContactProperties* propreties = tempContact2->PropertiesL();
+            CleanupDeletePushL(propreties);
+            
+            // Convert the last_modified field defined in Contact Model database 
+            // to REV (Revision) field in vCard Specification 2.1
+            CParserPropertyValueDateTime* valueDateTime = 
+            		CreateDateTimePropertyL(
+                		propreties->LastModifiedL(), 
+                		TVersitDateTime::EIsUTC ); 
+            CleanupStack::PopAndDestroy(propreties);
+            
+            CleanupStack::PushL(valueDateTime);
+            CParserProperty* property = 
+            		CParserGroupedProperty::NewL(*valueDateTime, KREV, NULL, NULL);	
+            
+            CleanupStack::PushL( property );            
+            iParser->AddPropertyL(property); //takes ownership
+            CleanupStack::Pop(2);//valueDateTime and property
+            }
+        }
+    }	
+	
+CParserPropertyValueDateTime* CVPbkVCardPropertyExporter::CreateDateTimePropertyL
+    (const TTime& aDateTime, TVersitDateTime::TRelativeTime aRelativeTime)
+    {
+    TVersitDateTime* dateTime= new(ELeave)TVersitDateTime(aDateTime.DateTime(), aRelativeTime);
+    CleanupStack::PushL(dateTime);
+    CParserPropertyValueDateTime* dateTimeValue=new(ELeave) CParserPropertyValueDateTime(dateTime);
+    CleanupStack::Pop(dateTime);	
+    return dateTimeValue;
+    }
 
 // End of file