diff -r e78d6e055a5b -r b34d53f6acdf contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp --- a/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp Fri Jul 23 14:03:00 2010 +0300 +++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp Fri Aug 06 13:40:46 2010 +0300 @@ -154,12 +154,12 @@ { if ( ( *fileList )[i].iName.Find( KManifest ) != KErrNotFound ) { - RBuf fullFilePath; - CleanupClosePushL( fullFilePath ); - fullFilePath.CreateL( manifestDirectoryPath->Length() + RBuf manifestFilePathName; + CleanupClosePushL( manifestFilePathName ); + manifestFilePathName.CreateL( manifestDirectoryPath->Length() + ( *fileList )[i].iName.Length() ); - fullFilePath.Append( *manifestDirectoryPath ); - fullFilePath.Append( ( *fileList )[i].iName ); + manifestFilePathName.Append( *manifestDirectoryPath ); + manifestFilePathName.Append( ( *fileList )[i].iName ); TPtrC packageUidPtr = manifestDirectoryPath->Mid( manifestDirectoryPath->Length() - KPackageUidPosition, @@ -168,37 +168,46 @@ TLex lexer( packageUidPtr ); User::LeaveIfError( lexer.Val( packageUid, EHex ) ); - CCaWidgetDescription* compareWidget = NULL; + CCaWidgetDescription* currentWidget = NULL; for ( TInt j = 0; j < iFetchedWidgets.Count(); j++ ) { if ( iFetchedWidgets[j]->GetPackageUidL() == packageUid ) { - compareWidget = iFetchedWidgets[j]; - compareWidget->SetValid( ETrue ); //do not remove from db + currentWidget = iFetchedWidgets[j]; + currentWidget->SetValid( ETrue ); //do not remove from db break; // once found we dont iterate anymore } } - if ( compareWidget ) + if ( currentWidget ) { TTime modificationTime = ( *fileList )[i].iModified; TInt64 modificationIntTime = modificationTime.Int64(); - TLex lex( compareWidget->GetModificationTime() ); + TLex lex( currentWidget->GetModificationTime() ); TInt64 uintTimeDB( 0 ); User::LeaveIfError( lex.Val( uintTimeDB ) ); if ( uintTimeDB != modificationIntTime ) { - TRAP_IGNORE( ParseManifestFileL( fullFilePath, + TRAP_IGNORE( ParseManifestFileL( manifestFilePathName, aDirectoryName, aDrive ) ); } + else if ( currentWidget->IsMissing() ) + { + // manifest of missing widget found + CCaWidgetDescription* clone = currentWidget->CloneL(); + CleanupStack::PushL( clone ); + clone->SetManifestFilePathNameL( manifestFilePathName ); + iWidgets.AppendL( clone ); + CleanupStack::Pop( clone ); + } } else { - TRAP_IGNORE( ParseManifestFileL( fullFilePath, aDirectoryName, + TRAP_IGNORE( ParseManifestFileL( manifestFilePathName, aDirectoryName, aDrive ) ); } - CleanupStack::PopAndDestroy( &fullFilePath ); + CleanupStack::PopAndDestroy( &manifestFilePathName ); } } CleanupStack::PopAndDestroy( fileList ); @@ -304,7 +313,7 @@ SetModificationTimeL( aFilePath, widgetDescriptor ); TInt index = iWidgets.Find( widgetDescriptor, - CCaWidgetDescription::Compare ); + CCaWidgetDescription::CompareUri ); if ( index != KErrNotFound ) { delete iWidgets[index]; @@ -340,7 +349,7 @@ SetModificationTimeL( aFilePath, widget ); - TInt index = iWidgets.Find( widget, CCaWidgetDescription::Compare ); + TInt index = iWidgets.Find( widget, CCaWidgetDescription::CompareUri ); if ( index != KErrNotFound ) { delete iWidgets[index];