webengine/widgetengine/src/Preferences.cpp
changeset 65 5bfc169077b2
parent 37 cb62a4f66ebe
child 68 92a765b5b3e7
--- a/webengine/widgetengine/src/Preferences.cpp	Tue Feb 02 00:56:45 2010 +0200
+++ b/webengine/widgetengine/src/Preferences.cpp	Fri Mar 19 09:52:28 2010 +0200
@@ -34,8 +34,6 @@
 
 _LIT( KKeyFormat, "%d.%S" );
 _LIT( KPrefsFile,"prefs.dat" );
-_LIT( KPrefsTmpFile,"prefs.dat.tmp" );
-_LIT( KPrefsBakFile, "prefs.dat.bak" );
 
 
 // ----------------------------------------------------------------------------
@@ -266,11 +264,7 @@
         CleanupStack::Pop();   // k
 
         // Save update to persistent storage
-        TRAPD(err, saveL());
-        if(err!= KErrNone)
-            {
-            deleteAllPrefFiles();
-            }
+		saveL();
     }
 
 }
@@ -312,10 +306,7 @@
         CleanupStack::PopAndDestroy();   // k
 
         // Save update to persistent storage
-	TRAPD(err, saveL());
-    if(err!= KErrNone) {
-        deleteAllPrefFiles();
-        }
+		saveL();
     }
 }
 
@@ -332,180 +323,46 @@
 
     RFs fs;
 
-        
-    // Connect to file server
-    User::LeaveIfError(fs.Connect());
-    CleanupClosePushL( fs );
+    if ( fs.Connect() == KErrNone ) {
         
-    // Form filenames
-    HBufC* tmpFilePath = HBufC::NewLC( m_basepath->Length() + KPrefsTmpFile().Length() );
-    HBufC* bakFilePath = HBufC::NewLC( m_basepath->Length() + KPrefsBakFile().Length() );
-    HBufC* filePath = HBufC::NewLC( m_basepath->Length() + KPrefsFile().Length() );
-
-    TPtr fName( tmpFilePath->Des() );
-    fName.Append( *m_basepath );
-    fName.Append( KPrefsTmpFile );
-    
-    fName.Set( bakFilePath->Des() );
-    fName.Append( *m_basepath );
-    fName.Append( KPrefsBakFile );
-    
-    fName.Set( filePath->Des() );
-    fName.Append( *m_basepath );
-    fName.Append( KPrefsFile );
-
-	  RFileWriteStream writeStream;
-    writeStream.PushL();
-    
-	// Try to create the temp file
-	if(writeStream.Replace(fs, *tmpFilePath, EFileWrite|EFileShareExclusive) != KErrNone) {
-		// Make sure the private path exists
-		fs.CreatePrivatePath( EDriveC );
-		
-		// Try again to create the file
-		User::LeaveIfError(writeStream.Create(fs, *tmpFilePath, EFileWrite|EFileShareExclusive));
-	}
+        CleanupClosePushL( fs );
+        HBufC* filePath = HBufC::NewLC( m_basepath->Length() + KPrefsFile().Length() );
 
-    // Try to externalize the data to the stream
-    TRAPD(err, externalizeL(writeStream));
-    
-    // Close the stream
-    CleanupStack::PopAndDestroy(); // writeStream
-    	     
-    // If no error at this point then we're guaranteed to have a valid file
-    if(err!=KErrNone)
-    	{
-    	// Delete the temp file
-    	fs.Delete(*tmpFilePath);
-    	
-    	// And leave with the error code
-    	User::Leave(err);
-    	}
-    	
-    // Backup any old valid file just in case
-    fs.Delete(*bakFilePath);
-    fs.Rename(*filePath, *bakFilePath);
-    
-    // Rename the temp file to be the actual settings file
-    err = fs.Rename(*tmpFilePath, *filePath);
-    if(err!=KErrNone)
-    	{
-    	// If we had a backup settings file, try to return it
-    	fs.Rename(*bakFilePath, *filePath);
-    	User::Leave(err);
-    	}
+        TPtr fName( filePath->Des() );
+        fName.Append( *m_basepath );
+        fName.Append( KPrefsFile );
 
-	// Cleanup
-	CleanupStack::PopAndDestroy(4); // filePath, bakFilePath, tmpFilePath, fs
-
-}
+        RFileWriteStream writeStream;
+        TInt fileerror = writeStream.Replace( fs, *filePath, EFileWrite );
 
-// ----------------------------------------------------------------------------
-// WidgetPreferences::externalizeL
-//
-//
-// ----------------------------------------------------------------------------
-
-void WidgetPreferences::externalizeL(RWriteStream& aStream) const
-{
-    aStream.WriteInt32L( m_preferences->Count() );
-	
-    TPtrHashMapIter<TDesC,PrefElement> it( *m_preferences );
-    const TDesC* key;
-    const PrefElement* pref;
+        if ( fileerror != KErrNone ) {
+            fs.CreatePrivatePath( EDriveC );
+            fileerror = writeStream.Create( fs, *filePath, EFileWrite|EFileShareExclusive );
+        }
 
-    while ( ( key = it.NextKey() ) != 0 ) {
-        pref = it.CurrentValue();
-        aStream.WriteInt32L( key->Length() );
-        aStream.WriteL( *key );
-        aStream.WriteInt32L( pref->value().Length() );
-        aStream.WriteL( pref->value() );
-        aStream.WriteInt32L( pref->valueSize() );
-    }
-    aStream.CommitL();
-    
-}
+        if ( fileerror == KErrNone ) {
+            CleanupClosePushL( writeStream );
+            writeStream.WriteInt32L( m_preferences->Count() );
+            
+            TPtrHashMapIter<TDesC,PrefElement> it( *m_preferences );
+            const TDesC* key;
+            const PrefElement* pref;
 
-// ----------------------------------------------------------------------------
-// WidgetPreferences::internalizeL
-//
-//
-// ----------------------------------------------------------------------------
-void WidgetPreferences::internalizeL(RReadStream& aStream)
-{
-    TInt count( aStream.ReadInt32L() );
-    for( TInt i = 0; i < count; i++ ) {
-        
-        TInt len = aStream.ReadInt32L();
-
-        if ( len > 0 ) {
-            HBufC* key = HBufC::NewLC( len );
-            TPtr ptrkey = key->Des();
-            aStream.ReadL( ptrkey, len );
-            len = aStream.ReadInt32L();
-
-            if ( len <= KMaxKeyValueSize ) {
-                HBufC* value = HBufC::NewLC( len );
-                TPtr ptrvalue = value->Des();
-                aStream.ReadL( ptrvalue, len );
-                PrefElement* pref = new ( ELeave ) PrefElement;
-                CleanupStack::PushL( pref );
-                pref->setValueL( ptrvalue );
-                TInt size = aStream.ReadInt32L();
-                pref->setValueSize( size );
-                m_preferences->InsertL( key, pref );
-                CleanupStack::Pop(); //pref
-                CleanupStack::PopAndDestroy(); //value
-                CleanupStack::Pop(); //key
+            while ( ( key = it.NextKey() ) != 0 ) {
+                pref = it.CurrentValue();
+                writeStream.WriteInt32L( key->Length() );
+                writeStream.WriteL( *key );
+                writeStream.WriteInt32L( pref->value().Length() );
+                writeStream.WriteL( pref->value() );
+                writeStream.WriteInt32L( pref->valueSize() );
             }
-            else {
-                CleanupStack::PopAndDestroy( key );
-             }
-
-         }
-
-        else {
-            break;
-        }
-     }
-
- }
-
-// ----------------------------------------------------------------------------
-// WidgetPreferences::deleteAllPrefFiles
-//
-//
-// ----------------------------------------------------------------------------
-void WidgetPreferences::deleteAllPrefFiles(){
-
-   if ( !m_basepath || (m_basepath->Length() <= 0) ) 
-         return;
-
 
-   RFs fs;
-   // Deleting bkUp and main prefs file.
-   User::LeaveIfError(fs.Connect());
-   CleanupClosePushL( fs );
-   
-   HBufC* bkFilePath = HBufC::NewLC( m_basepath->Length() + KPrefsBakFile().Length() );
+            writeStream.CommitL();
+            CleanupStack::PopAndDestroy(); //writeStream
+        }
 
-   TPtr fName( bkFilePath->Des() );
-   fName.Append( *m_basepath );
-   fName.Append( KPrefsBakFile );
- 
-   fs.Delete( *bkFilePath  );
-         
-   CleanupStack::PopAndDestroy(); 
-
-   HBufC* prefFilePath = HBufC::NewLC( m_basepath->Length() + KPrefsFile().Length() );
-
-   TPtr fNamePr( prefFilePath->Des() );
-   fNamePr.Append( *m_basepath );
-   fNamePr.Append( KPrefsFile);
- 
-   fs.Delete( *prefFilePath  );
-         
-   CleanupStack::PopAndDestroy(2);
+        CleanupStack::PopAndDestroy( 2 ); //fs,filePath
+    }
 
 }
 
@@ -517,32 +374,61 @@
 // ----------------------------------------------------------------------------
 void WidgetPreferences::loadL()
 {
-   if ( !m_basepath || (m_basepath->Length() <= 0) ) 
-         return;
-    
-    // Try to connect to file server
     RFs fs;
-    User::LeaveIfError(fs.Connect());
-    CleanupClosePushL( fs );
-    
-    // Form settings file name
-    HBufC* filePath = HBufC::NewLC( m_basepath->Length() + KPrefsFile().Length() );
-    TPtr fName( filePath->Des() );
-    fName.Append( *m_basepath );
-    fName.Append( KPrefsFile );
+    if ( !m_basepath || (m_basepath->Length() <= 0) )
+        return;
+
+    if ( fs.Connect() == KErrNone ) {
+        CleanupClosePushL( fs );
+        HBufC* filePath = HBufC::NewLC( m_basepath->Length() + KPrefsFile().Length() );
+
+        TPtr fName( filePath->Des() );
+        fName.Append( *m_basepath );
+        fName.Append( KPrefsFile );
+
+        RFileReadStream readStream;
+
+        if ( readStream.Open( fs, *filePath, EFileRead ) == KErrNone ) {
+            CleanupClosePushL( readStream );
+            TInt count( readStream.ReadInt32L() );
+
+            for( TInt i = 0; i < count; i++ ) {
+                TInt len = readStream.ReadInt32L();
+
+                if ( len > 0 ) {
+                    HBufC* key = HBufC::NewLC( len );
+                    TPtr ptrkey = key->Des();
+                    readStream.ReadL( ptrkey, len );
+                    len = readStream.ReadInt32L();
 
-    // Open stream
-    RFileReadStream readStream;
-    readStream.PushL();
-    TInt err = readStream.Open( fs, *filePath, EFileRead );
-    if(err!=KErrNone) {
-        User::Leave(err);
+                    if ( len <= KMaxKeyValueSize ) {
+                        HBufC* value = HBufC::NewLC( len );
+                        TPtr ptrvalue = value->Des();
+                        readStream.ReadL( ptrvalue, len );
+                        PrefElement* pref = new ( ELeave ) PrefElement;
+                        CleanupStack::PushL( pref );
+                        pref->setValueL( ptrvalue );
+                        TInt size = readStream.ReadInt32L();
+                        pref->setValueSize( size );
+                        m_preferences->InsertL( key, pref );
+                        CleanupStack::Pop(); //pref 
+                        CleanupStack::PopAndDestroy(); //value
+                        CleanupStack::Pop(); //key
+                    }
+                    else {
+                        CleanupStack::PopAndDestroy( key );
+                    }
+                }
+                else {
+                    break;
+                }
+            }
+
+            CleanupStack::PopAndDestroy(); //readStream
+        }
+
+        CleanupStack::PopAndDestroy( 2 ); //fs,filePath
     }
-    
-    // Read the data from the stream
-    internalizeL(readStream);
-
-    CleanupStack::PopAndDestroy(3); // readStream, filePath, fs
 }
     
 // ----------------------------------------------------------------------------
@@ -602,4 +488,3 @@
 }
 
 
-