metadataengine/server/src/mdsmaintenanceengine.cpp
branchRCL_3
changeset 30 3e156c80c15d
parent 19 82c0024438c8
child 40 910a23996aa0
child 45 a93990e5815e
child 54 a3cc46f37772
--- a/metadataengine/server/src/mdsmaintenanceengine.cpp	Tue May 25 13:10:05 2010 +0300
+++ b/metadataengine/server/src/mdsmaintenanceengine.cpp	Wed Jun 09 10:09:20 2010 +0300
@@ -59,7 +59,7 @@
 // Constructor
 // ------------------------------------------------
 //
-CMdSMaintenanceEngine::CMdSMaintenanceEngine()
+CMdSMaintenanceEngine::CMdSMaintenanceEngine() : iPrivateSchemaFileInvalid( EFalse )
     {
     }
 
@@ -129,32 +129,50 @@
     	iMaintenance->CreateDatabaseL( );
 		const TUint KMdSServerUid = 0x0320e65f; // temporal uid
 
-		// try to read schema file from C drive
-		TRAPD( err, ImportSchemaL( aSchema, KSchemaImportFile, KMdSServerUid) );
+		TInt schemaError( KErrNone );
+		
+		if( iPrivateSchemaFileInvalid )
+		    {
+		    // if schema was updated in FOTA update, read the updated schema from ROM
+		    TRAP( schemaError, ImportSchemaL( aSchema, KSchemaRomImportFile, KMdSServerUid) );
+		    }
+		else
+		    {
+		    // try to read schema file from C drive
+		    TRAP( schemaError, ImportSchemaL( aSchema, KSchemaImportFile, KMdSServerUid) );
+		    }
 
-		if( err != KErrNone )
+		if( schemaError != KErrNone )
 			{
-			__LOG1( ELogAlways, "Schema reading error: %d", err );
+			__LOG1( ELogAlways, "Schema reading error: %d", schemaError );
 			// if schema file is not found, try to read from rom (Z) drive
-			if ( err == KErrNotFound || err == KErrPathNotFound )
+			if ( schemaError == KErrNotFound || schemaError == KErrPathNotFound )
 				{
-				TRAP( err, ImportSchemaL( aSchema, KSchemaRomImportFile, KMdSServerUid) );
+				TRAP( schemaError, ImportSchemaL( aSchema, KSchemaRomImportFile, KMdSServerUid) );
 				}
-			if( err != KErrNone )
+			else if( !iPrivateSchemaFileInvalid && schemaError == KErrCorrupt )
+			    {
+			    iPrivateSchemaFileInvalid = ETrue;
+			    }
+			else
+			    {
+			    schemaError = KErrUnknown;
+			    }
+			if( schemaError != KErrNone )
 				{
-				__LOG1( ELogAlways, "Schema reading error: %d", err );
+				__LOG1( ELogAlways, "Schema reading error: %d", schemaError );
 				DeleteDatabase();
-				User::Leave( err );
+				User::Leave( schemaError );
 				}
 			}
 
 		if ( FailedImports() != 0 )
   			{
-	       	User::Leave( KErrCorrupt );
+	       	User::Leave( KErrBadName );
        		}
 		
 		// try to read default import file from C drive
-       	TRAP( err, ImportMetadataL( aManipulate, aSchema, KMdsDefaultImportFile ) );
+       	TRAPD( err, ImportMetadataL( aManipulate, aSchema, KMdsDefaultImportFile ) );
        	if ( err == KErrNotFound || err == KErrPathNotFound )
        		{
        		// if default import file is not found, try to read from rom (Z) drive