contentstorage/casrv/cawidgetscanner/src/cawidgetstoragehandler.cpp
changeset 125 26079c1bb561
parent 119 50e220be30d1
--- a/contentstorage/casrv/cawidgetscanner/src/cawidgetstoragehandler.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetstoragehandler.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -103,6 +103,7 @@
     FetchWidgetsL();
     AddWidgetsL( iParser->WidgetsScanL( iWidgetDBCache ) );
     RemoveWidgetsL();
+    MakeNotEmptyCollectionsVisibleL();
     }
 
 // ----------------------------------------------------------------------------
@@ -368,7 +369,6 @@
 //
 // ----------------------------------------------------------------------------
 //
-
 void CCaWidgetStorageHandler::SetLocalizationsL(
         const CCaWidgetDescription* aWidget, TInt aEntryId )
     {
@@ -415,7 +415,6 @@
 //
 // ----------------------------------------------------------------------------
 //
-
 void CCaWidgetStorageHandler::UpdateCompIdAndRemovableFlagL(
         const TDesC& aManifestFilePathName, CCaInnerEntry& aEntry ) const
     {
@@ -462,4 +461,61 @@
     CleanupStack::PopAndDestroy( &componentIds );
     }
 
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void CCaWidgetStorageHandler::MakeNotEmptyCollectionsVisibleL()
+    {
+    RPointerArray<CCaInnerEntry> resultArray;
+    CleanupResetAndDestroyPushL( resultArray );
+    CCaInnerQuery* hiddenCollectionsQuery = CCaInnerQuery::NewLC();
+    CDesC16ArrayFlat* entryType = new ( ELeave ) CDesC16ArrayFlat(
+            KGranularityOne );
+    CleanupStack::PushL( entryType );
+    entryType->AppendL( KCaTypeCollection );
+    hiddenCollectionsQuery->SetEntryTypeNames( entryType );
+    hiddenCollectionsQuery->SetFlagsOff( EVisible );
+    iStorage->GetEntriesL( hiddenCollectionsQuery, resultArray );
+    CleanupStack::Pop( entryType );
+    CleanupStack::PopAndDestroy( hiddenCollectionsQuery );
+    if( resultArray.Count()>0 )
+        {
+        for( TInt i=0; i<resultArray.Count(); i++ )
+            {
+            // for any not visible collection
+            MakeCollectionVisibleIfHasVisibleEntryL( resultArray[i] );
+            }
+        }
+    CleanupStack::PopAndDestroy( &resultArray );
+   }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void CCaWidgetStorageHandler::MakeCollectionVisibleIfHasVisibleEntryL(
+        CCaInnerEntry* aEntry )
+    {
+    RPointerArray<CCaInnerEntry> resultEntriesArray;
+    CleanupResetAndDestroyPushL( resultEntriesArray );
+    CCaInnerQuery* visibleEntriesQuery = CCaInnerQuery::NewLC();
+    visibleEntriesQuery->SetParentId( aEntry->GetId() );
+    visibleEntriesQuery->SetFlagsOn( EVisible );
+    visibleEntriesQuery->SetFlagsOff( EMissing );
+    iStorage->GetEntriesL( visibleEntriesQuery, resultEntriesArray );
+    if( resultEntriesArray.Count()>0 )
+        {
+        // set collection visible if hidden
+        if( !( aEntry->GetFlags() & EVisible ) )
+            {
+            aEntry->SetFlags( aEntry->GetFlags() | EVisible );
+            // update here this collection
+            iStorage->AddL( aEntry );
+            }
+        }
+    CleanupStack::PopAndDestroy( visibleEntriesQuery );
+    CleanupStack::PopAndDestroy( &resultEntriesArray );
+    }
+
 //  End of File