diff -r efda7c0771b9 -r 7b66bc3c6dc9 contentstorage/castorage/src/casqlitestorage.cpp --- a/contentstorage/castorage/src/casqlitestorage.cpp Wed Oct 13 12:59:22 2010 +0300 +++ b/contentstorage/castorage/src/casqlitestorage.cpp Mon Oct 18 10:44:15 2010 +0300 @@ -44,18 +44,15 @@ { User::LeaveIfError( iRfs.Connect() ); - User::LeaveIfError( CreatePrivateDirPath( iPrivatePathCDriveDb, KCDrive, - KDbName ) ); - - User::LeaveIfError( CreatePrivateDirPath( iPrivatePathZDriveDb, KZDrive, - KDbName ) ); - - User::LeaveIfError( CreatePrivateDirPath( iPrivatePathCDrive, KCDrive, - KNullDesC ) ); - - User::LeaveIfError( CreatePrivateDirPath( iPrivatePathCDriveDbBackup, KCDrive, - KDbNameBackup ) ); - + User::LeaveIfError( + CreatePrivateDirPath( iPrivatePathCDriveDb, KCDrive, KDbName ) ); + User::LeaveIfError( + CreatePrivateDirPath( iPrivatePathZDriveDb, KZDrive, KDbName ) ); + User::LeaveIfError( + CreatePrivateDirPath( iPrivatePathCDrive, KCDrive, KNullDesC ) ); + User::LeaveIfError( + CreatePrivateDirPath( + iPrivatePathCDriveDbBackup, KCDrive, KDbNameBackup ) ); if( iSqlDb.Open( iPrivatePathCDriveDb, &KSqlDbConfig ) ) { @@ -65,8 +62,8 @@ else { TBuf versionValue; - DbPropertyL(KCaDbPropVersion, versionValue); - ASSERT(versionValue.Length()>0); + DbPropertyL( KCaDbPropVersion, versionValue ); + ASSERT( versionValue.Length() > 0 ); if( versionValue.CompareC( KCaDbVersion ) ) { // database loaded from C: is obsolete, load from Z: @@ -74,6 +71,141 @@ LoadDataBaseFromRomL(); } } + TBuf restoreValue; + DbPropertyL( KCaDbPropRestore, restoreValue ); + if( restoreValue.CompareC( KCaDbPropRestoreVal ) == KErrNone ) + { + RestoreDatabaseL(); + } + } + +// --------------------------------------------------------------------------- +// CCASqLiteStorage::GetDownloadedApplicationsArrayL() +// +// --------------------------------------------------------------------------- +// +void CCaSqLiteStorage::GetDownloadedApplicationsArrayL( + RPointerArray& aResultArray ) +{ + iCollectionDownloadId = GetCollectionDownloadIdL(); + CCaInnerQuery* downloadedQuery = CCaInnerQuery::NewLC(); + downloadedQuery->SetParentId( iCollectionDownloadId ); + GetEntriesL( downloadedQuery, aResultArray ); + CleanupStack::PopAndDestroy( downloadedQuery ); +} + +// --------------------------------------------------------------------------- +// CCASqLiteStorage::GetDownloadedApplicationsArrayL() +// +// --------------------------------------------------------------------------- +// +void CCaSqLiteStorage::GetDownloadedApplicationsArrayL( + RArray& aResultArray ) +{ + iCollectionDownloadId = GetCollectionDownloadIdL(); + CCaInnerQuery* downloadedQuery = CCaInnerQuery::NewLC(); + downloadedQuery->SetParentId( iCollectionDownloadId ); + GetEntriesIdsL( downloadedQuery, aResultArray ); + CleanupStack::PopAndDestroy( downloadedQuery ); +} + +// --------------------------------------------------------------------------- +// CCASqLiteStorage::RestoreDownloadedApplications() +// +// --------------------------------------------------------------------------- +// +void CCaSqLiteStorage::SetDownloadedApplicationsArrayL( + RPointerArray& aResultArray ) +{ + //remove all entries from downloaded collection + RArray entryIds; + CleanupClosePushL( entryIds ); + GetDownloadedApplicationsArrayL( entryIds ); + + TCaOperationParams params; + params.iOperationType = TCaOperationParams::ERemove; + params.iGroupId = iCollectionDownloadId; + params.iBeforeEntryId = 0; // Not Used + ExecuteOrganizeL( entryIds, params ); + CleanupStack::PopAndDestroy( &entryIds ); + + //get current downloaded applications list + for( TInt i = aResultArray.Count() - 1; i >= 0; i-- ) + { + CCaInnerQuery* downloadedQuery = CCaInnerQuery::NewLC(); + RArray entryIds; + CleanupClosePushL( entryIds ); + entryIds.AppendL( aResultArray[i]->GetId() ); + downloadedQuery->SetIdsL( entryIds ); + + RArray resultEntryIds; + CleanupClosePushL( resultEntryIds ); + GetEntriesIdsL( downloadedQuery, resultEntryIds ); + if( !resultEntryIds.Count() ) + { + //its in case of application that was installed after backup + aResultArray[i]->SetId(0); + } + //there could be some icon added to db aster backup + //( after update or installation of applicatiotion ) + aResultArray[i]->SetIconId(0); + + CleanupStack::PopAndDestroy( &resultEntryIds ); + CleanupStack::PopAndDestroy( &entryIds ); + CleanupStack::PopAndDestroy( downloadedQuery ); + } + + //add applications to downloaded collection + for( TInt i = 0; i < aResultArray.Count(); i++ ) + { + AddL( aResultArray[i] ); + } + params.iOperationType = TCaOperationParams::EAppend; + ExecuteOrganizeL( aResultArray, params ); +} + +// --------------------------------------------------------- +// +// --------------------------------------------------------- +// +void CCaSqLiteStorage::ExecuteOrganizeL( + const RPointerArray & aResultArray, + TCaOperationParams params) +{ + RArray restoredEntryIds; + CleanupClosePushL(restoredEntryIds); + for( TInt i = 0; i < aResultArray.Count(); i++ ) + { + restoredEntryIds.AppendL( aResultArray[i]->GetId() ); + } + ExecuteOrganizeL( restoredEntryIds, params ); + CleanupStack::PopAndDestroy( &restoredEntryIds ); +} + +// --------------------------------------------------------- +// +// --------------------------------------------------------- +// +TInt CCaSqLiteStorage::GetCollectionDownloadIdL() + { + TInt downloadId( KErrNotFound ); + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + CCaInnerQuery* allAppQuery = CCaInnerQuery::NewLC(); + CDesC16ArrayFlat* appType = + new ( ELeave ) CDesC16ArrayFlat( KGranularityOne ); + CleanupStack::PushL( appType ); + appType->AppendL( KCaTypeCollectionDownload ); + allAppQuery->SetEntryTypeNames( appType ); + CleanupStack::Pop( appType ); + GetEntriesL( allAppQuery, resultArray ); + CleanupStack::PopAndDestroy( allAppQuery ); + if( resultArray.Count() ) + { + downloadId = resultArray[0]->GetId(); + } + CleanupStack::PopAndDestroy( &resultArray ); + return downloadId; } // --------------------------------------------------------------------------- @@ -111,7 +243,7 @@ } // --------------------------------------------------------------------------- -// +// // // --------------------------------------------------------------------------- // @@ -120,28 +252,39 @@ if( ( BaflUtils::FileExists( iRfs, iPrivatePathCDriveDb ) ) ) { iSqlDb.Close(); - User::LeaveIfError( BaflUtils::CopyFile( iRfs, - iPrivatePathCDriveDb, iPrivatePathCDriveDbBackup ) ); - User::LeaveIfError( iSqlDb.Open( iPrivatePathCDriveDb, - &KSqlDbConfig ) ); + User::LeaveIfError( BaflUtils::CopyFile( + iRfs, iPrivatePathCDriveDb, iPrivatePathCDriveDbBackup ) ); + User::LeaveIfError( iSqlDb.Open( + iPrivatePathCDriveDb, &KSqlDbConfig ) ); } } // --------------------------------------------------------------------------- -// +// // // --------------------------------------------------------------------------- // void CCaSqLiteStorage::RestoreDatabaseL() { - if( ( BaflUtils::FileExists( iRfs, iPrivatePathCDriveDbBackup ) ) ) + if( BaflUtils::FileExists( iRfs, iPrivatePathCDriveDbBackup ) ) { + RPointerArray resultArray; + CleanupResetAndDestroyPushL( resultArray ); + //get current downloaded applications list + GetDownloadedApplicationsArrayL( resultArray ); + iSqlDb.Close(); - User::LeaveIfError( BaflUtils::CopyFile( iRfs, - iPrivatePathCDriveDbBackup, iPrivatePathCDriveDb ) ); - User::LeaveIfError( iSqlDb.Open( iPrivatePathCDriveDb, - &KSqlDbConfig ) ); + User::LeaveIfError( BaflUtils::CopyFile( + iRfs, iPrivatePathCDriveDbBackup, iPrivatePathCDriveDb ) ); + User::LeaveIfError( iSqlDb.Open( + iPrivatePathCDriveDb, &KSqlDbConfig ) ); + + //set current downloaded applications list to backuped + //downloaded collection + SetDownloadedApplicationsArrayL( resultArray ); + CleanupStack::PopAndDestroy( &resultArray ); } + SetDBPropertyL( KCaDbPropRestore, KCaDbPropNoRestoreVal ); } // --------------------------------------------------------------------------- @@ -236,7 +379,7 @@ CCaSqlQuery::EAttribute ); CleanupStack::PopAndDestroy( sqlGetAttributesQuery ); } - + // set entries if proper order if they were fetched by ids if( aQuery->GetIds().Count() > 0 ) { @@ -392,7 +535,7 @@ // // --------------------------------------------------------------------------- // -void CCaSqLiteStorage::AddL( CCaInnerEntry* aEntry, TBool aUpdate) +void CCaSqLiteStorage::AddL( CCaInnerEntry* aEntry, TBool aUpdate ) { RPointerArray sqlQueries; CleanupResetAndDestroyPushL( sqlQueries ); @@ -536,14 +679,14 @@ { entryIds.AppendL(aEntryIds[j]); } - + RArray oldIds; CleanupClosePushL( oldIds ); CCaInnerQuery* innerQuery = CCaInnerQuery::NewLC(); innerQuery->SetParentId( aGroupId ); - + GetEntriesIdsL( innerQuery, oldIds ); - + if( oldIds.Count() != entryIds.Count() ) { for( TInt i=0; i constEntryIds( entryIds ); - + RPointerArray sqlQueries; - CleanupResetAndDestroyPushL( sqlQueries ); + CleanupResetAndDestroyPushL( sqlQueries ); CaSqlQueryCreator::CreateCustomSortQueryL( constEntryIds, sqlQueries, iSqlDb ); @@ -695,7 +838,7 @@ aSqlQuery[i]->CloseStatement(); isAttributeDeleted = ETrue; } - else if( aSqlQuery[i]->Type()==CCaSqlQuery::EAttributeTable ) + else if( aSqlQuery[i]->Type() == CCaSqlQuery::EAttributeTable ) { // add new attribute(s) if it's neccesery aSqlQuery[i]->PrepareL(); @@ -834,13 +977,10 @@ CaSqlQueryCreator::CreateTouchQueryL( sqlQuery, iSqlDb, aRemovable ); - TTime time; - time.UniversalTime(); - for( TInt i = 0; i < sqlQuery.Count(); i++ ) { sqlQuery[i]->PrepareL(); - sqlQuery[i]->BindValuesForLaunchL( aEntryId, time.Int64() ); + sqlQuery[i]->BindValuesForTouchL( aEntryId ); sqlQuery[i]->ExecuteL(); sqlQuery[i]->CloseStatement(); } @@ -882,27 +1022,6 @@ CleanupStack::PopAndDestroy( sqlQuery ); } - -// --------------------------------------------------------------------------- -// CCASqLiteStorage::RemoveOldEntriesFromLaunchTableL( TInt aDays ) -// -// --------------------------------------------------------------------------- -// -void CCaSqLiteStorage::RemoveOldEntriesFromLaunchTableL( TInt aDays ) - { - TTime presentTime; - presentTime.UniversalTime(); - TTime borderTime = presentTime - ( TTimeIntervalDays( aDays ) ); - - CCaSqlQuery* sqlQuery = CCaSqlQuery::NewLC( iSqlDb ); - sqlQuery->SetQueryL( KSQLDeleteOldFromLaunch ); - sqlQuery->PrepareL(); - sqlQuery->BindValuesForLaunchL( 0, borderTime.Int64() ); - sqlQuery->ExecuteL(); - - CleanupStack::PopAndDestroy( sqlQuery ); - } - // --------------------------------------------------------------------------- // CCASqLiteStorage::VerifyOrganizeParamsL( const RArray& aEntryIds, // TCaOperationParams aParams); @@ -925,6 +1044,7 @@ TInt dbEntryCount; query->ExecuteL( dbEntryCount ); query->CloseStatement(); + if( dbEntryCount < aEntryIds.Count() ) { User::Leave( KErrArgument );