diff -r 7333d7932ef7 -r 8b7f4e561641 appinstaller/AppinstUi/Daemon/Src/previouslyInstalledAppsCache.cpp --- a/appinstaller/AppinstUi/Daemon/Src/previouslyInstalledAppsCache.cpp Tue Aug 31 15:21:33 2010 +0300 +++ b/appinstaller/AppinstUi/Daemon/Src/previouslyInstalledAppsCache.cpp Wed Sep 01 12:22:02 2010 +0100 @@ -18,9 +18,6 @@ #include #include #include -#include -#include -#include #include "sisregistrysession.h" #include "sisregistryentry.h" @@ -82,10 +79,7 @@ // End of code from swi/inc/cleanuputils.h // ---------------------------- -// ----------------------------------------------------------------------- -// CPreviouslyInstalledAppsCache::NewL -// ----------------------------------------------------------------------- -// + CPreviouslyInstalledAppsCache *CPreviouslyInstalledAppsCache::NewL() { CPreviouslyInstalledAppsCache *self = new(ELeave)CPreviouslyInstalledAppsCache; @@ -95,172 +89,122 @@ return self; } -// ----------------------------------------------------------------------- -// CPreviouslyInstalledAppsCache::~CPreviouslyInstalledAppsCache -// ----------------------------------------------------------------------- -// CPreviouslyInstalledAppsCache::~CPreviouslyInstalledAppsCache() { iPrevPkgUids.Reset(); } -// ----------------------------------------------------------------------- -// CPreviouslyInstalledAppsCache::UpdateAllL -// ----------------------------------------------------------------------- -// + void CPreviouslyInstalledAppsCache::UpdateAllL() { - FLOG( _L("Daemon: CPreviouslyInstalledAppsCache::UpdateAllL ") ); - RThread ourThread; // nb. Default constructor gives handle to current thread. - - if( !ourThread.HasCapability(ECapabilityReadUserData, 0) ) + if(!ourThread.HasCapability(ECapabilityReadUserData, 0)) { // Have not got ReadUserData - if we try and enumerate package // UIDs the registry server will panic us! User::Leave(KErrAccessDenied); } ourThread.Close(); + - // Let's use SisRegistry in this case since in SCR there is no - // simple way to retriev sisx pacakge UIDs in one call. - RSisRegistrySession registrySession; - User::LeaveIfError( registrySession.Connect() ); - CleanupClosePushL( registrySession ); - - RPointerArray packages; - registrySession.InstalledPackagesL( packages ); - CleanupResetAndDestroy< - RPointerArray >::PushL( packages ); - - for ( TInt i = 0; i < packages.Count(); ++i ) - { - (void)iPrevPkgUids.InsertInSignedKeyOrder( packages[i]->Uid() ); - - FLOG_1( _L("Daemon: UpdateAllL: Add UID = 0x%x"), - packages[i]->Uid().iUid ); - } - - CleanupStack::PopAndDestroy( &packages ); - CleanupStack::PopAndDestroy( ®istrySession ); + RSisRegistrySession registrySession; + User::LeaveIfError(registrySession.Connect()); + CleanupClosePushL(registrySession); + + RPointerArray packages; + registrySession.InstalledPackagesL(packages); + CleanupResetAndDestroy >::PushL(packages); + + for (TInt i=0; i< packages.Count(); ++i) + { + (void)iPrevPkgUids.InsertInSignedKeyOrder(packages[i]->Uid()); + } + + CleanupStack::PopAndDestroy(&packages); + CleanupStack::PopAndDestroy(®istrySession); } -// ----------------------------------------------------------------------- -// CPreviouslyInstalledAppsCache::UpdateAddL -// ----------------------------------------------------------------------- -// -void CPreviouslyInstalledAppsCache::UpdateAddL( TUid aUid ) +void CPreviouslyInstalledAppsCache::UpdateAddL(TUid aUid) { - FLOG( _L("Daemon: CPreviouslyInstalledAppsCache::UpdateAddL ") ); - - // Let's use SisRegistry in this case since in SCR there is no - // simple way to open entry with given package UIDs. - RSisRegistrySession registrySession; - User::LeaveIfError( registrySession.Connect() ); - CleanupClosePushL( registrySession ); - - RSisRegistryEntry registryEntry; - TInt err = registryEntry.Open( registrySession, aUid ); - - if( err == KErrNone ) - { - // Ok close entry and add UID to cache. - registryEntry.Close(); - (void)iPrevPkgUids.InsertInSignedKeyOrder( aUid ); - FLOG_1( _L("Daemon: UpdateAddL: Add UID = 0x%x"), aUid.iUid ); - } - - CleanupStack::PopAndDestroy( ®istrySession ); + RSisRegistrySession registrySession; + User::LeaveIfError(registrySession.Connect()); + CleanupClosePushL(registrySession); + + RSisRegistryEntry registryEntry; + TInt err = registryEntry.Open(registrySession, aUid); + if( err == KErrNone ) + { + registryEntry.Close(); + (void)iPrevPkgUids.InsertInSignedKeyOrder(aUid); + } + + FLOG_1( _L("Daemon: UpdateAddL: UID add error = %d"), err ); + + CleanupStack::PopAndDestroy(®istrySession); } -// ----------------------------------------------------------------------- -// CPreviouslyInstalledAppsCache::HasBeenPreviouslyInstalled -// ----------------------------------------------------------------------- -// -TBool CPreviouslyInstalledAppsCache::HasBeenPreviouslyInstalled( - TUid aPackageUid ) const +TBool CPreviouslyInstalledAppsCache::HasBeenPreviouslyInstalled(TUid aPackageUid) const { - if ( iPrevPkgUids.FindInSignedKeyOrder( aPackageUid ) == KErrNotFound ) + if(iPrevPkgUids.FindInSignedKeyOrder(aPackageUid) == KErrNotFound) { return EFalse; } return ETrue; } -// ----------------------------------------------------------------------- -// CPreviouslyInstalledAppsCache::CPreviouslyInstalledAppsCache -// ----------------------------------------------------------------------- -// CPreviouslyInstalledAppsCache::CPreviouslyInstalledAppsCache() { } -// ----------------------------------------------------------------------- -// CPreviouslyInstalledAppsCache::ConstructL -// ----------------------------------------------------------------------- -// void CPreviouslyInstalledAppsCache::ConstructL() { - FLOG( _L("Daemon: CPreviouslyInstalledAppsCache::ConstructL ") ); User::LeaveIfError(iFs.Connect()); TInt drive = 0; - iFs.CharToDrive( - TParsePtrC( PathInfo::PhoneMemoryRootPath() ).Drive()[0], - drive ); - + iFs.CharToDrive( TParsePtrC( PathInfo::PhoneMemoryRootPath() ).Drive()[0], drive ); iFs.CreatePrivatePath( drive ); // Read cache file TRAP_IGNORE(InitFromCacheFileL()); - -//TODO: Test if this is really needed. Let's not do updateall 2 time in boot. - // TRAPD( err, UpdateAllL() ); - // if(err == KErrNone) - // { - // TRAP_IGNORE(FlushToDiskL()); - // } + + TRAPD( err, UpdateAllL() ); + if(err == KErrNone) + { + // If we managed to scan the registry, and update the cache, flush to disk. + TRAP_IGNORE(FlushToDiskL()); + } } -// ----------------------------------------------------------------------- -// CPreviouslyInstalledAppsCache::InitFromCacheFileL -// ----------------------------------------------------------------------- -// + void CPreviouslyInstalledAppsCache::InitFromCacheFileL() { // Read in existing cache file. RFile cacheFile; - TInt err = cacheFile.Open( iFs, - KPreInstalledApps, - EFileStream|EFileRead); - if ( err != KErrNone ) + TInt err = cacheFile.Open(iFs, KPreInstalledApps, EFileStream|EFileRead); + if(err != KErrNone) { return; // No existing cache file to read. } - CleanupClosePushL( cacheFile ); + CleanupClosePushL(cacheFile); // Now read the cache - RFileReadStream cacheReadStream( cacheFile ); + RFileReadStream cacheReadStream(cacheFile); cacheReadStream.PushL(); iPrevPkgUids.Reset(); - TInt32 count( cacheReadStream.ReadInt32L() ); + TInt32 count(cacheReadStream.ReadInt32L()); - for ( TInt i = 0; i < count; i++ ) + for (TInt i = 0; i < count; i++) { TUid packageId; packageId.iUid = cacheReadStream.ReadInt32L(); - (void)iPrevPkgUids.InsertInSignedKeyOrder( packageId ); + (void)iPrevPkgUids.InsertInSignedKeyOrder(packageId); } CleanupStack::PopAndDestroy(&cacheReadStream); CleanupStack::PopAndDestroy(&cacheFile); } -// ----------------------------------------------------------------------- -// CPreviouslyInstalledAppsCache::FlushToDiskL -// ----------------------------------------------------------------------- -// void CPreviouslyInstalledAppsCache::FlushToDiskL() { // Write to disk