contentstorage/casrv/cawidgetscanner/src/cawidgetstoragehandler.cpp
author hgs
Fri, 06 Aug 2010 13:40:46 +0300
changeset 107 b34d53f6acdf
parent 106 e78d6e055a5b
child 119 50e220be30d1
permissions -rw-r--r--
201031
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
 *
93
hgs
parents: 92
diff changeset
    14
 * Description:
85
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>
94
hgs
parents: 93
diff changeset
    20
#include <usif/scr/screntries.h>
98
hgs
parents: 96
diff changeset
    21
#include <hbtextresolversymbian.h>
hgs
parents: 96
diff changeset
    22
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    23
#include "widgetscannerutils.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    24
#include "cawidgetstoragehandler.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    25
#include "cadef.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    26
#include "cainnerentry.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    27
#include "cainnerquery.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    28
#include "castorageproxy.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    29
#include "caarraycleanup.inl"
96
hgs
parents: 94
diff changeset
    30
#include "calocalizationentry.h"
98
hgs
parents: 96
diff changeset
    31
#include "cawidgetscannerparser.h"
96
hgs
parents: 94
diff changeset
    32
#include "cawidgetscannerdef.h"
hgs
parents: 94
diff changeset
    33
94
hgs
parents: 93
diff changeset
    34
using namespace Usif;
hgs
parents: 93
diff changeset
    35
98
hgs
parents: 96
diff changeset
    36
// ============================ MEMBER FUNCTIONS ============================z===
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    37
7feec50967db 201003_02
hgs
parents:
diff changeset
    38
// -----------------------------------------------------------------------------
98
hgs
parents: 96
diff changeset
    39
// 
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    40
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    41
//
98
hgs
parents: 96
diff changeset
    42
CCaWidgetStorageHandler::CCaWidgetStorageHandler( CCaStorageProxy* aStorage,
102
hgs
parents: 99
diff changeset
    43
        Usif::RSoftwareComponentRegistry& aSoftwareRegistry, RFs& aFs ) :
hgs
parents: 99
diff changeset
    44
            iSoftwareRegistry(aSoftwareRegistry)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    45
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    46
    iStorage = aStorage;
7feec50967db 201003_02
hgs
parents:
diff changeset
    47
    iFs = aFs;
7feec50967db 201003_02
hgs
parents:
diff changeset
    48
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    49
7feec50967db 201003_02
hgs
parents:
diff changeset
    50
// -----------------------------------------------------------------------------
98
hgs
parents: 96
diff changeset
    51
// 
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    52
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    53
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    54
void CCaWidgetStorageHandler::ConstructL()
7feec50967db 201003_02
hgs
parents:
diff changeset
    55
    {
98
hgs
parents: 96
diff changeset
    56
    iParser = CCaWidgetScannerParser::NewL( iFs );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    57
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    58
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
// -----------------------------------------------------------------------------
98
hgs
parents: 96
diff changeset
    60
// 
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    61
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    62
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    63
CCaWidgetStorageHandler* CCaWidgetStorageHandler::NewL(
102
hgs
parents: 99
diff changeset
    64
        CCaStorageProxy* aStorage,
hgs
parents: 99
diff changeset
    65
        Usif::RSoftwareComponentRegistry& aSoftwareRegistry, RFs& aFs )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    66
    {
102
hgs
parents: 99
diff changeset
    67
    CCaWidgetStorageHandler* self = NewLC( aStorage, aSoftwareRegistry, aFs );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    68
    CleanupStack::Pop( self );
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
    return self;
7feec50967db 201003_02
hgs
parents:
diff changeset
    70
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    71
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
// -----------------------------------------------------------------------------
98
hgs
parents: 96
diff changeset
    73
// 
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    74
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    75
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    76
CCaWidgetStorageHandler* CCaWidgetStorageHandler::NewLC(
102
hgs
parents: 99
diff changeset
    77
        CCaStorageProxy* aStorage,
hgs
parents: 99
diff changeset
    78
        Usif::RSoftwareComponentRegistry& aSoftwareRegistry, RFs& aFs )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
    CCaWidgetStorageHandler* self = new ( ELeave ) CCaWidgetStorageHandler(
102
hgs
parents: 99
diff changeset
    81
            aStorage, aSoftwareRegistry, aFs );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
    CleanupStack::PushL( self );
7feec50967db 201003_02
hgs
parents:
diff changeset
    83
    self->ConstructL();
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
    return self;
7feec50967db 201003_02
hgs
parents:
diff changeset
    85
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    86
7feec50967db 201003_02
hgs
parents:
diff changeset
    87
// -----------------------------------------------------------------------------
98
hgs
parents: 96
diff changeset
    88
// 
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    89
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    90
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    91
CCaWidgetStorageHandler::~CCaWidgetStorageHandler()
7feec50967db 201003_02
hgs
parents:
diff changeset
    92
    {
98
hgs
parents: 96
diff changeset
    93
    delete iParser;
107
hgs
parents: 106
diff changeset
    94
    iWidgetDBCache.ResetAndDestroy();
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    95
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    96
7feec50967db 201003_02
hgs
parents:
diff changeset
    97
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
    98
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    99
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   100
//
98
hgs
parents: 96
diff changeset
   101
void CCaWidgetStorageHandler::SynchronizeL()
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   102
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   103
    FetchWidgetsL();
107
hgs
parents: 106
diff changeset
   104
    AddWidgetsL( iParser->WidgetsScanL( iWidgetDBCache ) );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   105
    RemoveWidgetsL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   106
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   107
7feec50967db 201003_02
hgs
parents:
diff changeset
   108
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   109
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   110
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   111
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   112
void CCaWidgetStorageHandler::AddL( const CCaWidgetDescription* aWidget )
7feec50967db 201003_02
hgs
parents:
diff changeset
   113
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   114
    CCaInnerEntry* entry = aWidget->GetEntryLC();
106
hgs
parents: 102
diff changeset
   115
    UpdateCompIdAndRemovableFlagL( aWidget->GetManifestFilePathName(), *entry );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   116
    iStorage->AddL( entry );
96
hgs
parents: 94
diff changeset
   117
hgs
parents: 94
diff changeset
   118
    SetLocalizationsL( aWidget, entry->GetId() );
98
hgs
parents: 96
diff changeset
   119
hgs
parents: 96
diff changeset
   120
    if ( entry->GetFlags() & ERemovable )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   121
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   122
        AddWidgetToDownloadCollectionL( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   123
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   124
    CleanupStack::PopAndDestroy( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   125
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   126
7feec50967db 201003_02
hgs
parents:
diff changeset
   127
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   128
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   130
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
void CCaWidgetStorageHandler::UpdateL( const CCaWidgetDescription* aWidget,
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
        TUint aEntryId )
7feec50967db 201003_02
hgs
parents:
diff changeset
   133
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
    CCaInnerEntry* entry = aWidget->GetEntryLC();
106
hgs
parents: 102
diff changeset
   135
    UpdateCompIdAndRemovableFlagL( aWidget->GetManifestFilePathName(), *entry );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   136
    entry->SetId( aEntryId );
98
hgs
parents: 96
diff changeset
   137
    if ( !aWidget->IsMissing() && aWidget->IsUsed() )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   138
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   139
        entry->SetFlags( entry->GetFlags() & ~EUsed );
7feec50967db 201003_02
hgs
parents:
diff changeset
   140
        }
93
hgs
parents: 92
diff changeset
   141
    TItemAppearance itemAppearanceChange = EItemAppearanceNotChanged;
98
hgs
parents: 96
diff changeset
   142
    if ( ( entry->GetFlags() & EMissing ) || !( entry->GetFlags() & EVisible ) )
87
hgs
parents: 85
diff changeset
   143
        {
93
hgs
parents: 92
diff changeset
   144
        itemAppearanceChange = EItemAppeared;
87
hgs
parents: 85
diff changeset
   145
        }
93
hgs
parents: 92
diff changeset
   146
    entry->SetFlags( entry->GetFlags() & ~EMissing | EVisible );
hgs
parents: 92
diff changeset
   147
    iStorage->AddL( entry, EFalse, itemAppearanceChange );
98
hgs
parents: 96
diff changeset
   148
96
hgs
parents: 94
diff changeset
   149
    SetLocalizationsL( aWidget, entry->GetId() );
98
hgs
parents: 96
diff changeset
   150
106
hgs
parents: 102
diff changeset
   151
    if ( !aWidget->IsMissing() && ( entry->GetFlags() & ERemovable ) )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   152
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   153
        AddWidgetToDownloadCollectionL( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   154
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   155
    CleanupStack::PopAndDestroy( entry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   156
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   157
7feec50967db 201003_02
hgs
parents:
diff changeset
   158
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   159
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   160
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   161
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   162
void CCaWidgetStorageHandler::AddWidgetsL( const RWidgetArray& aWidgets )
7feec50967db 201003_02
hgs
parents:
diff changeset
   163
    {
107
hgs
parents: 106
diff changeset
   164
    const TInt newWidgetsCount = aWidgets.Count();
hgs
parents: 106
diff changeset
   165
    
hgs
parents: 106
diff changeset
   166
    for ( TInt i = 0; i < newWidgetsCount; ++i )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   167
        {
107
hgs
parents: 106
diff changeset
   168
        CCaWidgetDescription *const newWidget = aWidgets[i];
hgs
parents: 106
diff changeset
   169
        
hgs
parents: 106
diff changeset
   170
        newWidget->LocalizeTextsL();
hgs
parents: 106
diff changeset
   171
        
hgs
parents: 106
diff changeset
   172
        const TInt dbCacheIndex = 
hgs
parents: 106
diff changeset
   173
            iWidgetDBCache.Find( 
hgs
parents: 106
diff changeset
   174
                newWidget, CCaWidgetDescription::CompareUri );
hgs
parents: 106
diff changeset
   175
        
hgs
parents: 106
diff changeset
   176
        if ( dbCacheIndex != KErrNotFound )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   177
            {
107
hgs
parents: 106
diff changeset
   178
            CCaWidgetDescription *const cachedWidget = 
hgs
parents: 106
diff changeset
   179
                iWidgetDBCache[dbCacheIndex];
hgs
parents: 106
diff changeset
   180
            
hgs
parents: 106
diff changeset
   181
            cachedWidget->SetValid( ETrue );
hgs
parents: 106
diff changeset
   182
            
hgs
parents: 106
diff changeset
   183
            const TBool cachedDifferentThanNew = 
hgs
parents: 106
diff changeset
   184
                !cachedWidget->Compare( *newWidget );
hgs
parents: 106
diff changeset
   185
            
hgs
parents: 106
diff changeset
   186
            if ( cachedDifferentThanNew || cachedWidget->IsMissing() )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   187
                {
107
hgs
parents: 106
diff changeset
   188
                newWidget->SetFlag( EMissing, cachedWidget->IsMissing() );
hgs
parents: 106
diff changeset
   189
                newWidget->SetFlag( EUsed,  cachedWidget->IsUsed() );
hgs
parents: 106
diff changeset
   190
                newWidget->SetFlag( EVisible, cachedWidget->IsVisible() );
hgs
parents: 106
diff changeset
   191
                
hgs
parents: 106
diff changeset
   192
                UpdateL( newWidget, cachedWidget->GetEntryId() );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   193
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   194
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   195
        else
7feec50967db 201003_02
hgs
parents:
diff changeset
   196
            {
107
hgs
parents: 106
diff changeset
   197
            AddL( newWidget );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   198
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   199
        }
98
hgs
parents: 96
diff changeset
   200
    HbTextResolverSymbian::Init( _L(""), KLocalizationFilepathZ );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   201
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   202
7feec50967db 201003_02
hgs
parents:
diff changeset
   203
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   204
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   205
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   206
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   207
void CCaWidgetStorageHandler::RemoveWidgetsL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   208
    {
107
hgs
parents: 106
diff changeset
   209
    const TInt cacheCount = iWidgetDBCache.Count();
hgs
parents: 106
diff changeset
   210
    for ( TInt i = 0; i < cacheCount; ++i)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   211
        {
107
hgs
parents: 106
diff changeset
   212
        CCaWidgetDescription *const cachedWidget = iWidgetDBCache[i];
hgs
parents: 106
diff changeset
   213
        if ( !cachedWidget->IsValid() )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   214
            {
107
hgs
parents: 106
diff changeset
   215
            if ( cachedWidget->GetMmcId() != KNullDesC )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   216
                {
93
hgs
parents: 92
diff changeset
   217
                RBuf currentMmcId;
hgs
parents: 92
diff changeset
   218
                currentMmcId.CreateL( KMassStorageIdLength );
hgs
parents: 92
diff changeset
   219
                currentMmcId.CleanupClosePushL();
hgs
parents: 92
diff changeset
   220
                WidgetScannerUtils::CurrentMmcId( iFs, currentMmcId );
107
hgs
parents: 106
diff changeset
   221
                if( cachedWidget->GetMmcId() == currentMmcId ||
hgs
parents: 106
diff changeset
   222
                        ( cachedWidget->GetMmcId() == KCaMassStorage() &&
93
hgs
parents: 92
diff changeset
   223
                        MassStorageNotInUse() ) )
hgs
parents: 92
diff changeset
   224
                    {
hgs
parents: 92
diff changeset
   225
                    //item was uninstalled so we remove its mmc id
107
hgs
parents: 106
diff changeset
   226
                    cachedWidget->RemoveMmcId();
hgs
parents: 106
diff changeset
   227
                    ClearVisibleFlagL( cachedWidget );
93
hgs
parents: 92
diff changeset
   228
                    }
hgs
parents: 92
diff changeset
   229
                else
hgs
parents: 92
diff changeset
   230
                    {
107
hgs
parents: 106
diff changeset
   231
                    SetMissingFlagL( cachedWidget );
93
hgs
parents: 92
diff changeset
   232
                    }
98
hgs
parents: 96
diff changeset
   233
                CleanupStack::PopAndDestroy( &currentMmcId );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   234
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   235
            else
7feec50967db 201003_02
hgs
parents:
diff changeset
   236
                {
93
hgs
parents: 92
diff changeset
   237
                //item was uninstalled so we remove its mmc id
107
hgs
parents: 106
diff changeset
   238
                ClearVisibleFlagL( cachedWidget );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   239
                }
7feec50967db 201003_02
hgs
parents:
diff changeset
   240
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   241
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   242
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   243
7feec50967db 201003_02
hgs
parents:
diff changeset
   244
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   245
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   246
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   247
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   248
void CCaWidgetStorageHandler::AddWidgetToDownloadCollectionL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   249
        const CCaInnerEntry* aEntry )
7feec50967db 201003_02
hgs
parents:
diff changeset
   250
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   251
    CCaInnerQuery* queryDownload = CCaInnerQuery::NewLC();
7feec50967db 201003_02
hgs
parents:
diff changeset
   252
    CDesC16ArrayFlat* downloadType = new ( ELeave ) CDesC16ArrayFlat(
7feec50967db 201003_02
hgs
parents:
diff changeset
   253
            KGranularityOne );
7feec50967db 201003_02
hgs
parents:
diff changeset
   254
    CleanupStack::PushL( downloadType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   255
    downloadType->AppendL( KCaTypeCollectionDownload );
7feec50967db 201003_02
hgs
parents:
diff changeset
   256
    queryDownload->SetEntryTypeNames( downloadType );//query takes ownership
7feec50967db 201003_02
hgs
parents:
diff changeset
   257
    CleanupStack::Pop( downloadType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   258
    queryDownload->SetRole( EGroupEntryRole );
7feec50967db 201003_02
hgs
parents:
diff changeset
   259
7feec50967db 201003_02
hgs
parents:
diff changeset
   260
    RArray<TInt> idsGroup;
7feec50967db 201003_02
hgs
parents:
diff changeset
   261
    CleanupClosePushL( idsGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   262
    iStorage->GetEntriesIdsL( queryDownload, idsGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   263
7feec50967db 201003_02
hgs
parents:
diff changeset
   264
    TCaOperationParams operParams;
7feec50967db 201003_02
hgs
parents:
diff changeset
   265
    operParams.iOperationType = TCaOperationParams::EPrepend;
7feec50967db 201003_02
hgs
parents:
diff changeset
   266
    operParams.iGroupId = idsGroup[0];
7feec50967db 201003_02
hgs
parents:
diff changeset
   267
    operParams.iBeforeEntryId = 0;
7feec50967db 201003_02
hgs
parents:
diff changeset
   268
    CleanupStack::PopAndDestroy( &idsGroup );
7feec50967db 201003_02
hgs
parents:
diff changeset
   269
7feec50967db 201003_02
hgs
parents:
diff changeset
   270
    RArray<TInt> idsEntry;
7feec50967db 201003_02
hgs
parents:
diff changeset
   271
    CleanupClosePushL( idsEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   272
    idsEntry.Append( aEntry->GetId() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   273
    iStorage->OrganizeL( idsEntry, operParams );
7feec50967db 201003_02
hgs
parents:
diff changeset
   274
7feec50967db 201003_02
hgs
parents:
diff changeset
   275
    CleanupStack::PopAndDestroy( &idsEntry );
7feec50967db 201003_02
hgs
parents:
diff changeset
   276
    CleanupStack::PopAndDestroy( queryDownload );
7feec50967db 201003_02
hgs
parents:
diff changeset
   277
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   278
7feec50967db 201003_02
hgs
parents:
diff changeset
   279
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   280
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   281
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   282
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   283
void CCaWidgetStorageHandler::FetchWidgetsL()
7feec50967db 201003_02
hgs
parents:
diff changeset
   284
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   285
    CCaInnerQuery* query = CCaInnerQuery::NewLC();
7feec50967db 201003_02
hgs
parents:
diff changeset
   286
    CDesC16ArrayFlat* widgetType = new ( ELeave ) CDesC16ArrayFlat(
7feec50967db 201003_02
hgs
parents:
diff changeset
   287
            KGranularityOne );
7feec50967db 201003_02
hgs
parents:
diff changeset
   288
    CleanupStack::PushL( widgetType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   289
    widgetType->AppendL( KCaTypeWidget );
7feec50967db 201003_02
hgs
parents:
diff changeset
   290
    query->SetEntryTypeNames( widgetType );//transfers ownership to query
7feec50967db 201003_02
hgs
parents:
diff changeset
   291
    CleanupStack::Pop( widgetType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   292
7feec50967db 201003_02
hgs
parents:
diff changeset
   293
    RPointerArray<CCaInnerEntry> entries;
7feec50967db 201003_02
hgs
parents:
diff changeset
   294
    CleanupResetAndDestroyPushL( entries );
7feec50967db 201003_02
hgs
parents:
diff changeset
   295
    iStorage->GetEntriesL( query, entries );
98
hgs
parents: 96
diff changeset
   296
107
hgs
parents: 106
diff changeset
   297
    iWidgetDBCache.ResetAndDestroy();
98
hgs
parents: 96
diff changeset
   298
    for ( TInt i = 0; i < entries.Count(); i++ )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   299
        {
98
hgs
parents: 96
diff changeset
   300
        CCaWidgetDescription* widget = CCaWidgetDescription::NewLC( entries[i] );
107
hgs
parents: 106
diff changeset
   301
        iWidgetDBCache.AppendL( widget ); //iWidgets takes ownership
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   302
        CleanupStack::Pop( widget );
7feec50967db 201003_02
hgs
parents:
diff changeset
   303
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   304
    CleanupStack::PopAndDestroy( &entries );
7feec50967db 201003_02
hgs
parents:
diff changeset
   305
    CleanupStack::PopAndDestroy( query );
7feec50967db 201003_02
hgs
parents:
diff changeset
   306
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   307
7feec50967db 201003_02
hgs
parents:
diff changeset
   308
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   309
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   310
// ----------------------------------------------------------------------------
93
hgs
parents: 92
diff changeset
   311
//
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   312
void CCaWidgetStorageHandler::SetMissingFlagL(
7feec50967db 201003_02
hgs
parents:
diff changeset
   313
        const CCaWidgetDescription* aWidget )
7feec50967db 201003_02
hgs
parents:
diff changeset
   314
    {
98
hgs
parents: 96
diff changeset
   315
    if ( !aWidget->IsMissing() )
87
hgs
parents: 85
diff changeset
   316
        {
93
hgs
parents: 92
diff changeset
   317
        CCaInnerEntry* entry = aWidget->GetEntryLC();
98
hgs
parents: 96
diff changeset
   318
        entry->SetFlags( ( entry->GetFlags() | EMissing ) & ~EUninstall );
hgs
parents: 96
diff changeset
   319
        if ( aWidget->IsUsed() )
93
hgs
parents: 92
diff changeset
   320
            {
hgs
parents: 92
diff changeset
   321
            entry->SetFlags( entry->GetFlags() | EUsed );
hgs
parents: 92
diff changeset
   322
            }
hgs
parents: 92
diff changeset
   323
        iStorage->AddL( entry, EFalse, EItemDisappeared );
hgs
parents: 92
diff changeset
   324
        CleanupStack::PopAndDestroy( entry );
87
hgs
parents: 85
diff changeset
   325
        }
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   326
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   327
93
hgs
parents: 92
diff changeset
   328
// ----------------------------------------------------------------------------
hgs
parents: 92
diff changeset
   329
//
hgs
parents: 92
diff changeset
   330
// ----------------------------------------------------------------------------
hgs
parents: 92
diff changeset
   331
//
hgs
parents: 92
diff changeset
   332
void CCaWidgetStorageHandler::ClearVisibleFlagL(
hgs
parents: 92
diff changeset
   333
        const CCaWidgetDescription* aWidget )
hgs
parents: 92
diff changeset
   334
    {
98
hgs
parents: 96
diff changeset
   335
    if ( aWidget->IsVisible() )
hgs
parents: 96
diff changeset
   336
        {
hgs
parents: 96
diff changeset
   337
        CCaInnerEntry* entry = aWidget->GetEntryLC();
hgs
parents: 96
diff changeset
   338
        entry->SetFlags( entry->GetFlags()
hgs
parents: 96
diff changeset
   339
                & ~EUninstall
hgs
parents: 96
diff changeset
   340
                & ~EVisible 
hgs
parents: 96
diff changeset
   341
                & ~EMissing 
hgs
parents: 96
diff changeset
   342
                & ~EUsed );
hgs
parents: 96
diff changeset
   343
        iStorage->AddL( entry, EFalse, EItemDisappeared );
hgs
parents: 96
diff changeset
   344
        CleanupStack::PopAndDestroy( entry );
hgs
parents: 96
diff changeset
   345
        }
93
hgs
parents: 92
diff changeset
   346
    }
hgs
parents: 92
diff changeset
   347
hgs
parents: 92
diff changeset
   348
// ----------------------------------------------------------------------------
hgs
parents: 92
diff changeset
   349
//
hgs
parents: 92
diff changeset
   350
// ----------------------------------------------------------------------------
hgs
parents: 92
diff changeset
   351
//
hgs
parents: 92
diff changeset
   352
TBool CCaWidgetStorageHandler::MassStorageNotInUse()
hgs
parents: 92
diff changeset
   353
    {
hgs
parents: 92
diff changeset
   354
    TBool massStorageNotInUse( ETrue );
hgs
parents: 92
diff changeset
   355
    TInt drive;
hgs
parents: 92
diff changeset
   356
    if( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ==
hgs
parents: 92
diff changeset
   357
        KErrNone )
hgs
parents: 92
diff changeset
   358
        {
hgs
parents: 92
diff changeset
   359
        TUint status;
hgs
parents: 92
diff changeset
   360
        if( DriveInfo::GetDriveStatus( iFs, drive, status ) == KErrNone &&
hgs
parents: 92
diff changeset
   361
            ( status & DriveInfo::EDriveInUse ) )
hgs
parents: 92
diff changeset
   362
            {
hgs
parents: 92
diff changeset
   363
            massStorageNotInUse = EFalse;
hgs
parents: 92
diff changeset
   364
            }
hgs
parents: 92
diff changeset
   365
        }
hgs
parents: 92
diff changeset
   366
    return massStorageNotInUse;
hgs
parents: 92
diff changeset
   367
    }
96
hgs
parents: 94
diff changeset
   368
// ----------------------------------------------------------------------------
hgs
parents: 94
diff changeset
   369
//
hgs
parents: 94
diff changeset
   370
// ----------------------------------------------------------------------------
hgs
parents: 94
diff changeset
   371
//
hgs
parents: 94
diff changeset
   372
98
hgs
parents: 96
diff changeset
   373
void CCaWidgetStorageHandler::SetLocalizationsL(
hgs
parents: 96
diff changeset
   374
        const CCaWidgetDescription* aWidget, TInt aEntryId )
96
hgs
parents: 94
diff changeset
   375
    {
hgs
parents: 94
diff changeset
   376
    RBuf filename;
99
hgs
parents: 98
diff changeset
   377
    filename.CreateL( aWidget->GetTranslationFileName().Length() + 1 ); //1 for _
96
hgs
parents: 94
diff changeset
   378
    CleanupClosePushL( filename );
99
hgs
parents: 98
diff changeset
   379
    filename.Copy( aWidget->GetTranslationFileName() );
96
hgs
parents: 94
diff changeset
   380
    filename.Append( KWidgetScannerUnderline );
98
hgs
parents: 96
diff changeset
   381
96
hgs
parents: 94
diff changeset
   382
    // prepare localizations
98
hgs
parents: 96
diff changeset
   383
    if ( aWidget->GetTitle().Length() > 0 && aWidget->GetTitle().Compare(
hgs
parents: 96
diff changeset
   384
            aWidget->GetStringIdTitle() ) )
hgs
parents: 96
diff changeset
   385
    // lets do not add localization when key and value are identical
96
hgs
parents: 94
diff changeset
   386
        {
hgs
parents: 94
diff changeset
   387
        CCaLocalizationEntry* titleEntry = CCaLocalizationEntry::NewL();
hgs
parents: 94
diff changeset
   388
        CleanupStack::PushL( titleEntry );
98
hgs
parents: 96
diff changeset
   389
        titleEntry->SetTableNameL( KLocalizationCaEntry );
hgs
parents: 96
diff changeset
   390
        titleEntry->SetAttributeNameL( KLocalizationEnText );
96
hgs
parents: 94
diff changeset
   391
        titleEntry->SetStringIdL( aWidget->GetStringIdTitle() );
hgs
parents: 94
diff changeset
   392
        titleEntry->SetQmFilenameL( filename );
hgs
parents: 94
diff changeset
   393
        titleEntry->SetRowId( aEntryId );
hgs
parents: 94
diff changeset
   394
        iStorage->AddLocalizationL( *titleEntry );
hgs
parents: 94
diff changeset
   395
        CleanupStack::PopAndDestroy( titleEntry );
hgs
parents: 94
diff changeset
   396
        }
hgs
parents: 94
diff changeset
   397
    if ( aWidget->GetDescription().Length() > 0 &&
hgs
parents: 94
diff changeset
   398
            aWidget->GetDescription().Compare(
hgs
parents: 94
diff changeset
   399
                    aWidget->GetStringIdDescription() ) )
98
hgs
parents: 96
diff changeset
   400
    // lets do not add localization when key and value are identical
96
hgs
parents: 94
diff changeset
   401
        {
hgs
parents: 94
diff changeset
   402
        CCaLocalizationEntry* descEntry = CCaLocalizationEntry::NewL();
hgs
parents: 94
diff changeset
   403
        CleanupStack::PushL( descEntry );
98
hgs
parents: 96
diff changeset
   404
        descEntry->SetTableNameL( KLocalizationCaEntry );
hgs
parents: 96
diff changeset
   405
        descEntry->SetAttributeNameL( KLocalizationEnDescription );
96
hgs
parents: 94
diff changeset
   406
        descEntry->SetStringIdL( aWidget->GetStringIdDescription() );
hgs
parents: 94
diff changeset
   407
        descEntry->SetQmFilenameL( filename );
hgs
parents: 94
diff changeset
   408
        descEntry->SetRowId( aEntryId );
hgs
parents: 94
diff changeset
   409
        iStorage->AddLocalizationL( *descEntry );
hgs
parents: 94
diff changeset
   410
        CleanupStack::PopAndDestroy( descEntry );
hgs
parents: 94
diff changeset
   411
        }
hgs
parents: 94
diff changeset
   412
    CleanupStack::PopAndDestroy( &filename );
hgs
parents: 94
diff changeset
   413
    }
93
hgs
parents: 92
diff changeset
   414
94
hgs
parents: 93
diff changeset
   415
// ----------------------------------------------------------------------------
hgs
parents: 93
diff changeset
   416
//
hgs
parents: 93
diff changeset
   417
// ----------------------------------------------------------------------------
hgs
parents: 93
diff changeset
   418
//
hgs
parents: 93
diff changeset
   419
106
hgs
parents: 102
diff changeset
   420
void CCaWidgetStorageHandler::UpdateCompIdAndRemovableFlagL(
98
hgs
parents: 96
diff changeset
   421
        const TDesC& aManifestFilePathName, CCaInnerEntry& aEntry ) const
94
hgs
parents: 93
diff changeset
   422
    {
hgs
parents: 93
diff changeset
   423
    RArray<TComponentId> componentIds;
hgs
parents: 93
diff changeset
   424
    CleanupClosePushL( componentIds );
98
hgs
parents: 96
diff changeset
   425
94
hgs
parents: 93
diff changeset
   426
    CComponentFilter* const fileNameFilter = CComponentFilter::NewLC();
hgs
parents: 93
diff changeset
   427
    fileNameFilter->SetFileL( aManifestFilePathName );
hgs
parents: 93
diff changeset
   428
    iSoftwareRegistry.GetComponentIdsL( componentIds, fileNameFilter );
hgs
parents: 93
diff changeset
   429
hgs
parents: 93
diff changeset
   430
    CleanupStack::PopAndDestroy( fileNameFilter );
98
hgs
parents: 96
diff changeset
   431
106
hgs
parents: 102
diff changeset
   432
    if( componentIds.Count() == 1 )
94
hgs
parents: 93
diff changeset
   433
        {
hgs
parents: 93
diff changeset
   434
        RBuf newComponentId;
hgs
parents: 93
diff changeset
   435
        newComponentId.CleanupClosePushL();
hgs
parents: 93
diff changeset
   436
        newComponentId.CreateL( sizeof(TComponentId) + 1 );
hgs
parents: 93
diff changeset
   437
        newComponentId.AppendNum( componentIds[0] );
98
hgs
parents: 96
diff changeset
   438
94
hgs
parents: 93
diff changeset
   439
        RBuf oldComponentId;
hgs
parents: 93
diff changeset
   440
        oldComponentId.CleanupClosePushL();
hgs
parents: 93
diff changeset
   441
        oldComponentId.CreateL( KCaMaxAttrValueLen );
98
hgs
parents: 96
diff changeset
   442
hgs
parents: 96
diff changeset
   443
        const TBool componentIdAttributeFound = aEntry.FindAttribute(
hgs
parents: 96
diff changeset
   444
                KCaComponentId, oldComponentId );
hgs
parents: 96
diff changeset
   445
106
hgs
parents: 102
diff changeset
   446
        if( !componentIdAttributeFound || oldComponentId.Compare(
98
hgs
parents: 96
diff changeset
   447
                newComponentId ) != 0 )
94
hgs
parents: 93
diff changeset
   448
            {
hgs
parents: 93
diff changeset
   449
            // 'add' or 'update' the component id attribute value
98
hgs
parents: 96
diff changeset
   450
            aEntry.AddAttributeL( KCaComponentId, newComponentId );
94
hgs
parents: 93
diff changeset
   451
            }
106
hgs
parents: 102
diff changeset
   452
        CComponentEntry* entry = CComponentEntry::NewLC();
hgs
parents: 102
diff changeset
   453
        iSoftwareRegistry.GetComponentL( componentIds[0] , *entry );
hgs
parents: 102
diff changeset
   454
        if( entry->IsRemovable() )
hgs
parents: 102
diff changeset
   455
            {
hgs
parents: 102
diff changeset
   456
            aEntry.SetFlags( aEntry.GetFlags() | ERemovable );
hgs
parents: 102
diff changeset
   457
            }
hgs
parents: 102
diff changeset
   458
        CleanupStack::PopAndDestroy( entry );
94
hgs
parents: 93
diff changeset
   459
        CleanupStack::PopAndDestroy( &oldComponentId );
hgs
parents: 93
diff changeset
   460
        CleanupStack::PopAndDestroy( &newComponentId );
hgs
parents: 93
diff changeset
   461
        }
hgs
parents: 93
diff changeset
   462
hgs
parents: 93
diff changeset
   463
    CleanupStack::PopAndDestroy( &componentIds );
hgs
parents: 93
diff changeset
   464
    }
hgs
parents: 93
diff changeset
   465
93
hgs
parents: 92
diff changeset
   466
//  End of File