contentstorage/casrv/cawidgetscanner/src/cawidgetstoragehandler.cpp
author hgs
Tue, 23 Mar 2010 23:17:02 +0200
changeset 85 7feec50967db
child 87 9d806967057c
permissions -rw-r--r--
201003_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
85
7feec50967db 201003_02
hgs
parents:
diff changeset
     1
/*
7feec50967db 201003_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
7feec50967db 201003_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
7feec50967db 201003_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
7feec50967db 201003_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
7feec50967db 201003_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
7feec50967db 201003_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
7feec50967db 201003_02
hgs
parents:
diff changeset
     8
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
7feec50967db 201003_02
hgs
parents:
diff changeset
    11
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    12
 * Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    13
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    14
 * Description: 
7feec50967db 201003_02
hgs
parents:
diff changeset
    15
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    16
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    17
// INCLUDE FILES
7feec50967db 201003_02
hgs
parents:
diff changeset
    18
7feec50967db 201003_02
hgs
parents:
diff changeset
    19
#include <badesca.h>
7feec50967db 201003_02
hgs
parents:
diff changeset
    20
#include "widgetscannerutils.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    21
#include "cawidgetstoragehandler.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    22
#include "cadef.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    23
#include "cainnerentry.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    24
#include "cainnerquery.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    25
#include "castorageproxy.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    26
#include "caarraycleanup.inl"
7feec50967db 201003_02
hgs
parents:
diff changeset
    27
7feec50967db 201003_02
hgs
parents:
diff changeset
    28
// ============================ MEMBER FUNCTIONS ===============================
7feec50967db 201003_02
hgs
parents:
diff changeset
    29
7feec50967db 201003_02
hgs
parents:
diff changeset
    30
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    31
// CCaWidgetStorageHandler::CCaWidgetStorageHandler
7feec50967db 201003_02
hgs
parents:
diff changeset
    32
// C++ default constructor can NOT contain any code, that
7feec50967db 201003_02
hgs
parents:
diff changeset
    33
// might leave.
7feec50967db 201003_02
hgs
parents:
diff changeset
    34
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    35
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    36
CCaWidgetStorageHandler::CCaWidgetStorageHandler(
7feec50967db 201003_02
hgs
parents:
diff changeset
    37
        CCaStorageProxy* aStorage, RFs& aFs )
7feec50967db 201003_02
hgs
parents:
diff changeset
    38
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    39
    iStorage = aStorage;
7feec50967db 201003_02
hgs
parents:
diff changeset
    40
    iFs = aFs;
7feec50967db 201003_02
hgs
parents:
diff changeset
    41
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    42
7feec50967db 201003_02
hgs
parents:
diff changeset
    43
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    44
// CCaWidgetStorageHandler::ConstructL
7feec50967db 201003_02
hgs
parents:
diff changeset
    45
// Symbian 2nd phase constructor can leave.
7feec50967db 201003_02
hgs
parents:
diff changeset
    46
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    47
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    48
void CCaWidgetStorageHandler::ConstructL()
7feec50967db 201003_02
hgs
parents:
diff changeset
    49
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    50
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    51
7feec50967db 201003_02
hgs
parents:
diff changeset
    52
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    53
// CCaWidgetStorageHandler::NewL
7feec50967db 201003_02
hgs
parents:
diff changeset
    54
// Two-phased constructor.
7feec50967db 201003_02
hgs
parents:
diff changeset
    55
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    56
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    57
CCaWidgetStorageHandler* CCaWidgetStorageHandler::NewL(
7feec50967db 201003_02
hgs
parents:
diff changeset
    58
        CCaStorageProxy* aStorage, RFs& aFs )
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    60
    CCaWidgetStorageHandler* self = NewLC( aStorage, aFs );
7feec50967db 201003_02
hgs
parents:
diff changeset
    61
    CleanupStack::Pop( self );
7feec50967db 201003_02
hgs
parents:
diff changeset
    62
    return self;
7feec50967db 201003_02
hgs
parents:
diff changeset
    63
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    64
7feec50967db 201003_02
hgs
parents:
diff changeset
    65
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    66
// CCaWidgetStorageHandler::NewLC
7feec50967db 201003_02
hgs
parents:
diff changeset
    67
// Two-phased constructor.
7feec50967db 201003_02
hgs
parents:
diff changeset
    68
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    70
CCaWidgetStorageHandler* CCaWidgetStorageHandler::NewLC(
7feec50967db 201003_02
hgs
parents:
diff changeset
    71
        CCaStorageProxy* aStorage, RFs& aFs )
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    73
    CCaWidgetStorageHandler* self = new ( ELeave ) CCaWidgetStorageHandler(
7feec50967db 201003_02
hgs
parents:
diff changeset
    74
            aStorage, aFs );
7feec50967db 201003_02
hgs
parents:
diff changeset
    75
    CleanupStack::PushL( self );
7feec50967db 201003_02
hgs
parents:
diff changeset
    76
    self->ConstructL();
7feec50967db 201003_02
hgs
parents:
diff changeset
    77
    return self;
7feec50967db 201003_02
hgs
parents:
diff changeset
    78
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    81
// Destructor
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    83
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
CCaWidgetStorageHandler::~CCaWidgetStorageHandler()
7feec50967db 201003_02
hgs
parents:
diff changeset
    85
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    86
    iWidgets.ResetAndDestroy();
7feec50967db 201003_02
hgs
parents:
diff changeset
    87
    iUpdatedIndexes.Close();
7feec50967db 201003_02
hgs
parents:
diff changeset
    88
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    89
7feec50967db 201003_02
hgs
parents:
diff changeset
    90
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    91
// 
7feec50967db 201003_02
hgs
parents:
diff changeset
    92
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    93
//  
7feec50967db 201003_02
hgs
parents:
diff changeset
    94
void CCaWidgetStorageHandler::SynchronizeL( const RWidgetArray& aWidgets )
7feec50967db 201003_02
hgs
parents:
diff changeset
    95
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    96
    FetchWidgetsL();
7feec50967db 201003_02
hgs
parents:
diff changeset
    97
    AddWidgetsL( aWidgets );
7feec50967db 201003_02
hgs
parents:
diff changeset
    98
    RemoveWidgetsL();
7feec50967db 201003_02
hgs
parents:
diff changeset
    99
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   100
7feec50967db 201003_02
hgs
parents:
diff changeset
   101
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   102
// 
7feec50967db 201003_02
hgs
parents:
diff changeset
   103
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   104
//  
7feec50967db 201003_02
hgs
parents:
diff changeset
   105
void CCaWidgetStorageHandler::AddL( const CCaWidgetDescription* aWidget )
7feec50967db 201003_02
hgs
parents:
diff changeset
   106
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   107
    CCaInnerEntry* entry = aWidget->GetEntryLC();
7feec50967db 201003_02
hgs
parents:
diff changeset
   108
    iStorage->AddL( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   109
    if( ( entry->GetFlags() & ERemovable ) != 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   110
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   111
        AddWidgetToDownloadCollectionL( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   112
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   113
    CleanupStack::PopAndDestroy( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   114
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   115
7feec50967db 201003_02
hgs
parents:
diff changeset
   116
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   117
// 
7feec50967db 201003_02
hgs
parents:
diff changeset
   118
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   119
//  
7feec50967db 201003_02
hgs
parents:
diff changeset
   120
void CCaWidgetStorageHandler::UpdateL( const CCaWidgetDescription* aWidget,
7feec50967db 201003_02
hgs
parents:
diff changeset
   121
        TUint aEntryId )
7feec50967db 201003_02
hgs
parents:
diff changeset
   122
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   123
    CCaInnerEntry* entry = aWidget->GetEntryLC();
7feec50967db 201003_02
hgs
parents:
diff changeset
   124
    entry->SetId( aEntryId );
7feec50967db 201003_02
hgs
parents:
diff changeset
   125
    if( !aWidget->IsMissing() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   126
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   127
        entry->SetFlags( entry->GetFlags() & ~EUsed );
7feec50967db 201003_02
hgs
parents:
diff changeset
   128
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
    entry->SetFlags( entry->GetFlags() & ~EMissing );
7feec50967db 201003_02
hgs
parents:
diff changeset
   130
    iStorage->AddL( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
    if( !aWidget->IsMissing() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   133
        AddWidgetToDownloadCollectionL( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   135
    CleanupStack::PopAndDestroy( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   136
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   137
7feec50967db 201003_02
hgs
parents:
diff changeset
   138
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   139
// 
7feec50967db 201003_02
hgs
parents:
diff changeset
   140
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   141
//  
7feec50967db 201003_02
hgs
parents:
diff changeset
   142
void CCaWidgetStorageHandler::AddWidgetsL( const RWidgetArray& aWidgets )
7feec50967db 201003_02
hgs
parents:
diff changeset
   143
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   144
    iUpdatedIndexes.Reset();
7feec50967db 201003_02
hgs
parents:
diff changeset
   145
    for( TInt i = 0; i < aWidgets.Count(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   146
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   147
        TInt index = iWidgets.Find( 
7feec50967db 201003_02
hgs
parents:
diff changeset
   148
                aWidgets[i], CCaWidgetDescription::Compare );
7feec50967db 201003_02
hgs
parents:
diff changeset
   149
        if( index != KErrNotFound )
7feec50967db 201003_02
hgs
parents:
diff changeset
   150
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   151
            if( !iWidgets[index]->Compare( *aWidgets[i] ) || 
7feec50967db 201003_02
hgs
parents:
diff changeset
   152
                    iWidgets[index]->IsMissing() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   153
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   154
                aWidgets[i]->SetMissing( iWidgets[index]->IsMissing() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   155
                UpdateL( aWidgets[i], iWidgets[index]->GetEntryId() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   156
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   157
            iUpdatedIndexes.AppendL( index );
7feec50967db 201003_02
hgs
parents:
diff changeset
   158
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   159
        else
7feec50967db 201003_02
hgs
parents:
diff changeset
   160
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   161
            AddL( aWidgets[i] );
7feec50967db 201003_02
hgs
parents:
diff changeset
   162
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   163
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   164
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   165
7feec50967db 201003_02
hgs
parents:
diff changeset
   166
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   167
// 
7feec50967db 201003_02
hgs
parents:
diff changeset
   168
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   169
//  
7feec50967db 201003_02
hgs
parents:
diff changeset
   170
void CCaWidgetStorageHandler::RemoveWidgetsL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   171
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   172
    RArray<TInt> widgetsToRemove;
7feec50967db 201003_02
hgs
parents:
diff changeset
   173
    CleanupClosePushL( widgetsToRemove );
7feec50967db 201003_02
hgs
parents:
diff changeset
   174
    for( TInt i = 0; i < iWidgets.Count(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   175
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   176
        if( iUpdatedIndexes.Find( i ) == KErrNotFound )
7feec50967db 201003_02
hgs
parents:
diff changeset
   177
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   178
            if( iWidgets[i]->GetMmcId() && 
7feec50967db 201003_02
hgs
parents:
diff changeset
   179
                    ( iWidgets[i]->GetMmcId() != 
7feec50967db 201003_02
hgs
parents:
diff changeset
   180
                    WidgetScannerUtils::CurrentMmcId( iFs ) ) )
7feec50967db 201003_02
hgs
parents:
diff changeset
   181
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   182
                SetMissingFlagL( iWidgets[i] );
7feec50967db 201003_02
hgs
parents:
diff changeset
   183
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   184
            else
7feec50967db 201003_02
hgs
parents:
diff changeset
   185
                {
7feec50967db 201003_02
hgs
parents:
diff changeset
   186
                widgetsToRemove.AppendL( iWidgets[i]->GetEntryId() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   187
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   188
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   189
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   190
    if( widgetsToRemove.Count() > 0 )
7feec50967db 201003_02
hgs
parents:
diff changeset
   191
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   192
        iStorage->RemoveL( widgetsToRemove );
7feec50967db 201003_02
hgs
parents:
diff changeset
   193
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   194
    CleanupStack::PopAndDestroy( &widgetsToRemove );
7feec50967db 201003_02
hgs
parents:
diff changeset
   195
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   196
7feec50967db 201003_02
hgs
parents:
diff changeset
   197
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   198
// 
7feec50967db 201003_02
hgs
parents:
diff changeset
   199
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   200
// 
7feec50967db 201003_02
hgs
parents:
diff changeset
   201
void CCaWidgetStorageHandler::AddWidgetToDownloadCollectionL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   202
        const CCaInnerEntry* aEntry )
7feec50967db 201003_02
hgs
parents:
diff changeset
   203
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   204
    CCaInnerQuery* queryDownload = CCaInnerQuery::NewLC();
7feec50967db 201003_02
hgs
parents:
diff changeset
   205
    CDesC16ArrayFlat* downloadType = new ( ELeave ) CDesC16ArrayFlat(
7feec50967db 201003_02
hgs
parents:
diff changeset
   206
            KGranularityOne );
7feec50967db 201003_02
hgs
parents:
diff changeset
   207
    CleanupStack::PushL( downloadType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   208
    downloadType->AppendL( KCaTypeCollectionDownload );
7feec50967db 201003_02
hgs
parents:
diff changeset
   209
    queryDownload->SetEntryTypeNames( downloadType );//query takes ownership
7feec50967db 201003_02
hgs
parents:
diff changeset
   210
    CleanupStack::Pop( downloadType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   211
    queryDownload->SetRole( EGroupEntryRole );
7feec50967db 201003_02
hgs
parents:
diff changeset
   212
7feec50967db 201003_02
hgs
parents:
diff changeset
   213
    RArray<TInt> idsGroup;
7feec50967db 201003_02
hgs
parents:
diff changeset
   214
    CleanupClosePushL( idsGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   215
    iStorage->GetEntriesIdsL( queryDownload, idsGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   216
7feec50967db 201003_02
hgs
parents:
diff changeset
   217
    TCaOperationParams operParams;
7feec50967db 201003_02
hgs
parents:
diff changeset
   218
    operParams.iOperationType = TCaOperationParams::EPrepend;
7feec50967db 201003_02
hgs
parents:
diff changeset
   219
    operParams.iGroupId = idsGroup[0];
7feec50967db 201003_02
hgs
parents:
diff changeset
   220
    operParams.iBeforeEntryId = 0;
7feec50967db 201003_02
hgs
parents:
diff changeset
   221
    CleanupStack::PopAndDestroy( &idsGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   222
7feec50967db 201003_02
hgs
parents:
diff changeset
   223
    RArray<TInt> idsEntry;
7feec50967db 201003_02
hgs
parents:
diff changeset
   224
    CleanupClosePushL( idsEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   225
    idsEntry.Append( aEntry->GetId() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   226
    iStorage->OrganizeL( idsEntry, operParams );
7feec50967db 201003_02
hgs
parents:
diff changeset
   227
7feec50967db 201003_02
hgs
parents:
diff changeset
   228
    CleanupStack::PopAndDestroy( &idsEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   229
    CleanupStack::PopAndDestroy( queryDownload );
7feec50967db 201003_02
hgs
parents:
diff changeset
   230
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   231
7feec50967db 201003_02
hgs
parents:
diff changeset
   232
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   233
// 
7feec50967db 201003_02
hgs
parents:
diff changeset
   234
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   235
//  
7feec50967db 201003_02
hgs
parents:
diff changeset
   236
void CCaWidgetStorageHandler::FetchWidgetsL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   237
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   238
    CCaInnerQuery* query = CCaInnerQuery::NewLC();
7feec50967db 201003_02
hgs
parents:
diff changeset
   239
    CDesC16ArrayFlat* widgetType = new ( ELeave ) CDesC16ArrayFlat(
7feec50967db 201003_02
hgs
parents:
diff changeset
   240
            KGranularityOne );
7feec50967db 201003_02
hgs
parents:
diff changeset
   241
    CleanupStack::PushL( widgetType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   242
    widgetType->AppendL( KCaTypeWidget );
7feec50967db 201003_02
hgs
parents:
diff changeset
   243
    query->SetEntryTypeNames( widgetType );//transfers ownership to query
7feec50967db 201003_02
hgs
parents:
diff changeset
   244
    CleanupStack::Pop( widgetType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   245
7feec50967db 201003_02
hgs
parents:
diff changeset
   246
    RPointerArray<CCaInnerEntry> entries;
7feec50967db 201003_02
hgs
parents:
diff changeset
   247
    CleanupResetAndDestroyPushL( entries );
7feec50967db 201003_02
hgs
parents:
diff changeset
   248
    iStorage->GetEntriesL( query, entries );
7feec50967db 201003_02
hgs
parents:
diff changeset
   249
    iWidgets.ResetAndDestroy();
7feec50967db 201003_02
hgs
parents:
diff changeset
   250
    for( TInt i = 0; i < entries.Count(); i++ )
7feec50967db 201003_02
hgs
parents:
diff changeset
   251
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   252
        CCaWidgetDescription* widget = CCaWidgetDescription::NewLC(
7feec50967db 201003_02
hgs
parents:
diff changeset
   253
                entries[i] );
7feec50967db 201003_02
hgs
parents:
diff changeset
   254
        iWidgets.AppendL( widget ); //iWidgets takes ownership
7feec50967db 201003_02
hgs
parents:
diff changeset
   255
        CleanupStack::Pop( widget );
7feec50967db 201003_02
hgs
parents:
diff changeset
   256
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   257
    CleanupStack::PopAndDestroy( &entries );
7feec50967db 201003_02
hgs
parents:
diff changeset
   258
    CleanupStack::PopAndDestroy( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   259
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   260
7feec50967db 201003_02
hgs
parents:
diff changeset
   261
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   262
// 
7feec50967db 201003_02
hgs
parents:
diff changeset
   263
// ----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   264
//  
7feec50967db 201003_02
hgs
parents:
diff changeset
   265
void CCaWidgetStorageHandler::SetMissingFlagL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   266
        const CCaWidgetDescription* aWidget )
7feec50967db 201003_02
hgs
parents:
diff changeset
   267
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   268
    CCaInnerEntry* entry = aWidget->GetEntryLC();
7feec50967db 201003_02
hgs
parents:
diff changeset
   269
    entry->SetFlags( entry->GetFlags() | EMissing );
7feec50967db 201003_02
hgs
parents:
diff changeset
   270
    iStorage->AddL( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   271
    CleanupStack::PopAndDestroy( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   272
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   273
7feec50967db 201003_02
hgs
parents:
diff changeset
   274
//  End of File