omads/omadsextensions/adapters/mediads/src/cmdemanager.cpp
author hgs
Tue, 13 Jul 2010 03:39:25 +0530
changeset 40 b63e67867dcd
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
40
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  CMdEManager implementation
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#include "cmdemanager.h"
hgs
parents:
diff changeset
    20
#include <mdeconstants.h>
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <mmf\common\mmfcontrollerpluginresolver.h>
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include "logger.h"
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
// Warning:  #940-D: missing return statement at end of non-void function
hgs
parents:
diff changeset
    27
#pragma  diag_remark 940
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
CMdEManager::CMdEManager( MMdEManagerObserver& aObserver ) :
hgs
parents:
diff changeset
    30
    iObserver(aObserver)
hgs
parents:
diff changeset
    31
    {
hgs
parents:
diff changeset
    32
    }
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
CMdEManager* CMdEManager::NewL( MMdEManagerObserver& aObserver )
hgs
parents:
diff changeset
    36
    {
hgs
parents:
diff changeset
    37
    CMdEManager* self = new (ELeave) CMdEManager( aObserver );
hgs
parents:
diff changeset
    38
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    39
    self->ConstructL();
hgs
parents:
diff changeset
    40
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    41
    return self;
hgs
parents:
diff changeset
    42
    }
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
void CMdEManager::ConstructL()
hgs
parents:
diff changeset
    45
    {
hgs
parents:
diff changeset
    46
    TRACE_FUNC;
hgs
parents:
diff changeset
    47
    iMde = CMdESession::NewL( *this );
hgs
parents:
diff changeset
    48
    }
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
CMdEManager::~CMdEManager()
hgs
parents:
diff changeset
    52
    {
hgs
parents:
diff changeset
    53
    TRACE_FUNC;
hgs
parents:
diff changeset
    54
    Cancel(); // Cancel any request, if outstanding
hgs
parents:
diff changeset
    55
    delete iAlbumQuery;
hgs
parents:
diff changeset
    56
    delete iObjectQuery;
hgs
parents:
diff changeset
    57
    delete iContainmentQuery;
hgs
parents:
diff changeset
    58
    delete iMde;
hgs
parents:
diff changeset
    59
    
hgs
parents:
diff changeset
    60
    iAlbumsInProgress.ResetAndDestroy();
hgs
parents:
diff changeset
    61
    iAlbums.ResetAndDestroy();
hgs
parents:
diff changeset
    62
    }
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
void CMdEManager::GetAlbumsL()
hgs
parents:
diff changeset
    65
    {
hgs
parents:
diff changeset
    66
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
    67
    iAlbumsInProgress.ResetAndDestroy();
hgs
parents:
diff changeset
    68
    iAlbums.ResetAndDestroy();
hgs
parents:
diff changeset
    69
    if ( !iMde )
hgs
parents:
diff changeset
    70
        {
hgs
parents:
diff changeset
    71
        LOGGER_WRITE("Session was not ready!");
hgs
parents:
diff changeset
    72
        iState = EUninitialized;
hgs
parents:
diff changeset
    73
        iMde = CMdESession::NewL( *this );
hgs
parents:
diff changeset
    74
        }
hgs
parents:
diff changeset
    75
    
hgs
parents:
diff changeset
    76
    if ( iState == EUninitialized)
hgs
parents:
diff changeset
    77
        {
hgs
parents:
diff changeset
    78
        LOGGER_WRITE("Starting processing albums after session is ready");
hgs
parents:
diff changeset
    79
        iState = EWaitingToEnumerateAlbums;
hgs
parents:
diff changeset
    80
        }
hgs
parents:
diff changeset
    81
    else if ( iState == EIdle )
hgs
parents:
diff changeset
    82
        {
hgs
parents:
diff changeset
    83
        StartProcessingAlbumsL();
hgs
parents:
diff changeset
    84
        }
hgs
parents:
diff changeset
    85
    else
hgs
parents:
diff changeset
    86
        {
hgs
parents:
diff changeset
    87
        LOGGER_WRITE_1("Wrong state: %d", iState);
hgs
parents:
diff changeset
    88
        User::Leave( KErrGeneral );
hgs
parents:
diff changeset
    89
        }
hgs
parents:
diff changeset
    90
    
hgs
parents:
diff changeset
    91
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
    92
    }
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
const CPlaylistItem& CMdEManager::AlbumL( TInt aAlbumId ) const
hgs
parents:
diff changeset
    95
    {
hgs
parents:
diff changeset
    96
    for ( TInt i=0; i<iAlbums.Count(); i++ )
hgs
parents:
diff changeset
    97
        {
hgs
parents:
diff changeset
    98
        if ( iAlbums[i]->Id() == aAlbumId )
hgs
parents:
diff changeset
    99
            {
hgs
parents:
diff changeset
   100
            LOGGER_WRITE("Album found");
hgs
parents:
diff changeset
   101
            return *iAlbums[i];
hgs
parents:
diff changeset
   102
            }
hgs
parents:
diff changeset
   103
        }
hgs
parents:
diff changeset
   104
    LOGGER_WRITE_1("CMdEManager::AlbumL - aAlbumId %d does not exist - Leaving KErrNotFound", aAlbumId);
hgs
parents:
diff changeset
   105
    User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   106
    }
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
void CMdEManager::CreateAlbumL( CPlaylistItem& aAlbum )
hgs
parents:
diff changeset
   109
    {
hgs
parents:
diff changeset
   110
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
   111
    if ( !iMde || iState != EIdle )
hgs
parents:
diff changeset
   112
        {
hgs
parents:
diff changeset
   113
        LOGGER_WRITE("Not ready!");
hgs
parents:
diff changeset
   114
        User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   115
        }
hgs
parents:
diff changeset
   116
    CMdENamespaceDef& defaultNamespaceDef = iMde->GetDefaultNamespaceDefL();
hgs
parents:
diff changeset
   117
    CMdEObjectDef& albumObjDef = defaultNamespaceDef.GetObjectDefL( MdeConstants::Album::KAlbumObject );
hgs
parents:
diff changeset
   118
    
hgs
parents:
diff changeset
   119
    CMdEPropertyDef& titlePropDef = albumObjDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty );   
hgs
parents:
diff changeset
   120
    
hgs
parents:
diff changeset
   121
    // Validate album name
hgs
parents:
diff changeset
   122
    TInt albumLength = aAlbum.Title().Length();
hgs
parents:
diff changeset
   123
    if ( albumLength < titlePropDef.MinTextLengthL() || 
hgs
parents:
diff changeset
   124
         albumLength > titlePropDef.MaxTextLengthL() )
hgs
parents:
diff changeset
   125
        {
hgs
parents:
diff changeset
   126
        LOGGER_WRITE("Album length is not on valid range!");
hgs
parents:
diff changeset
   127
        User::Leave( KErrBadName );
hgs
parents:
diff changeset
   128
        }
hgs
parents:
diff changeset
   129
    
hgs
parents:
diff changeset
   130
    CMdEObject* albumObject = iMde->NewObjectLC( albumObjDef, KNullDesC );
hgs
parents:
diff changeset
   131
    
hgs
parents:
diff changeset
   132
    CMdEPropertyDef& sizePropDef = albumObjDef.GetPropertyDefL( MdeConstants::Object::KSizeProperty );
hgs
parents:
diff changeset
   133
    albumObject->AddUint32PropertyL(sizePropDef, 0);
hgs
parents:
diff changeset
   134
    CMdEPropertyDef& creationDatePropDef = albumObjDef.GetPropertyDefL( MdeConstants::Object::KCreationDateProperty );
hgs
parents:
diff changeset
   135
    CMdEPropertyDef& lastModifiedDatePropDef = albumObjDef.GetPropertyDefL( MdeConstants::Object::KLastModifiedDateProperty );
hgs
parents:
diff changeset
   136
    
hgs
parents:
diff changeset
   137
    TTime timeDate;
hgs
parents:
diff changeset
   138
    timeDate.UniversalTime();
hgs
parents:
diff changeset
   139
    
hgs
parents:
diff changeset
   140
    albumObject->AddTimePropertyL( creationDatePropDef, timeDate );
hgs
parents:
diff changeset
   141
    albumObject->AddTimePropertyL( lastModifiedDatePropDef, timeDate );
hgs
parents:
diff changeset
   142
    
hgs
parents:
diff changeset
   143
    CMdEPropertyDef& typePropDef = albumObjDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty );
hgs
parents:
diff changeset
   144
    albumObject->AddTextPropertyL( typePropDef,MdeConstants::Album::KAlbumItemType );
hgs
parents:
diff changeset
   145
    
hgs
parents:
diff changeset
   146
    albumObject->AddTextPropertyL( titlePropDef, aAlbum.Title() );
hgs
parents:
diff changeset
   147
    TItemId newAlbumId = iMde->AddObjectL( *albumObject );
hgs
parents:
diff changeset
   148
    
hgs
parents:
diff changeset
   149
    CleanupStack::PopAndDestroy( albumObject );
hgs
parents:
diff changeset
   150
    
hgs
parents:
diff changeset
   151
    if ( newAlbumId == KNoId )
hgs
parents:
diff changeset
   152
        {
hgs
parents:
diff changeset
   153
        LOGGER_WRITE("Adding album failed!");
hgs
parents:
diff changeset
   154
        User::Leave( KErrGeneral );
hgs
parents:
diff changeset
   155
        }
hgs
parents:
diff changeset
   156
    LOGGER_WRITE_1("New almbum created, id: %d", newAlbumId);
hgs
parents:
diff changeset
   157
    
hgs
parents:
diff changeset
   158
    CMdERelationDef& relationDef = defaultNamespaceDef.GetRelationDefL( MdeConstants::Relations::KContains );
hgs
parents:
diff changeset
   159
    TMdEObject mediaObject;
hgs
parents:
diff changeset
   160
    RPointerArray<CMdEInstanceItem> relations;
hgs
parents:
diff changeset
   161
    CleanupResetAndDestroyPushL( relations);
hgs
parents:
diff changeset
   162
    for ( TInt i=0; i<aAlbum.ItemCount(); i++ )
hgs
parents:
diff changeset
   163
        {
hgs
parents:
diff changeset
   164
        TRAPD(err, iMde->CheckObjectL( mediaObject, aAlbum.ItemAt(i) ));
hgs
parents:
diff changeset
   165
        LOGGER_WRITE_1("url: %S", &aAlbum.ItemAt(i));
hgs
parents:
diff changeset
   166
        LOGGER_WRITE_1("CheckObjectL err: %d", err);
hgs
parents:
diff changeset
   167
        if ( !err )
hgs
parents:
diff changeset
   168
            {
hgs
parents:
diff changeset
   169
            LOGGER_WRITE_1("object def: %S", &mediaObject.DefL().Name());
hgs
parents:
diff changeset
   170
            if ( mediaObject.DefL().Name().Compare( MdeConstants::Image::KImageObject ) == 0 
hgs
parents:
diff changeset
   171
                    || mediaObject.DefL().Name().Compare( MdeConstants::Video::KVideoObject ) == 0 )
hgs
parents:
diff changeset
   172
                {
hgs
parents:
diff changeset
   173
                CMdERelation* relation = iMde->NewRelationL( relationDef, newAlbumId, mediaObject.Id() );
hgs
parents:
diff changeset
   174
                relations.AppendL( relation );
hgs
parents:
diff changeset
   175
                }
hgs
parents:
diff changeset
   176
            else
hgs
parents:
diff changeset
   177
                {
hgs
parents:
diff changeset
   178
                LOGGER_WRITE("type not supported");
hgs
parents:
diff changeset
   179
                }
hgs
parents:
diff changeset
   180
            }
hgs
parents:
diff changeset
   181
        }
hgs
parents:
diff changeset
   182
    
hgs
parents:
diff changeset
   183
    if ( relations.Count() > 0 )
hgs
parents:
diff changeset
   184
        {
hgs
parents:
diff changeset
   185
        TInt err = iMde->AddItemsL( relations );
hgs
parents:
diff changeset
   186
        LOGGER_WRITE_1("AddItemsL first err: %d", err);
hgs
parents:
diff changeset
   187
        }
hgs
parents:
diff changeset
   188
    
hgs
parents:
diff changeset
   189
    CleanupStack::PopAndDestroy( &relations );
hgs
parents:
diff changeset
   190
    
hgs
parents:
diff changeset
   191
    aAlbum.SetId( newAlbumId );
hgs
parents:
diff changeset
   192
    
hgs
parents:
diff changeset
   193
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
   194
    }
hgs
parents:
diff changeset
   195
hgs
parents:
diff changeset
   196
void CMdEManager::ReplaceAlbumL( TInt aAlbumId, CPlaylistItem& aAlbum )
hgs
parents:
diff changeset
   197
    {
hgs
parents:
diff changeset
   198
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
   199
    if ( !iMde || iState != EIdle )
hgs
parents:
diff changeset
   200
        {
hgs
parents:
diff changeset
   201
        LOGGER_WRITE("Not ready!");
hgs
parents:
diff changeset
   202
        User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   203
        }
hgs
parents:
diff changeset
   204
    // get old album from local cache and check do we need to change album title
hgs
parents:
diff changeset
   205
    const CPlaylistItem& oldAlbum = AlbumL( aAlbumId );
hgs
parents:
diff changeset
   206
    CMdENamespaceDef& defaultNamespaceDef = iMde->GetDefaultNamespaceDefL();
hgs
parents:
diff changeset
   207
    if ( oldAlbum.Title().Compare( aAlbum.Title() ) != 0 )
hgs
parents:
diff changeset
   208
        {
hgs
parents:
diff changeset
   209
        // Title changed, open item from MdE and update it
hgs
parents:
diff changeset
   210
        
hgs
parents:
diff changeset
   211
        CMdEObjectDef& albumObjDef = defaultNamespaceDef.GetObjectDefL( MdeConstants::Album::KAlbumObject );
hgs
parents:
diff changeset
   212
        
hgs
parents:
diff changeset
   213
        CMdEPropertyDef& titlePropDef = albumObjDef.GetPropertyDefL( 
hgs
parents:
diff changeset
   214
                MdeConstants::Object::KTitleProperty );
hgs
parents:
diff changeset
   215
        
hgs
parents:
diff changeset
   216
        // Validate album name
hgs
parents:
diff changeset
   217
        TInt albumLength = aAlbum.Title().Length();
hgs
parents:
diff changeset
   218
        if ( albumLength < titlePropDef.MinTextLengthL() || 
hgs
parents:
diff changeset
   219
             albumLength > titlePropDef.MaxTextLengthL() )
hgs
parents:
diff changeset
   220
            {
hgs
parents:
diff changeset
   221
            LOGGER_WRITE("Album length is not on valid range!");
hgs
parents:
diff changeset
   222
            User::Leave( KErrBadName );
hgs
parents:
diff changeset
   223
            }
hgs
parents:
diff changeset
   224
        
hgs
parents:
diff changeset
   225
        CMdEObject* albumObject = iMde->OpenObjectL( aAlbumId, albumObjDef );
hgs
parents:
diff changeset
   226
        
hgs
parents:
diff changeset
   227
        CMdEProperty* titleProp = NULL;
hgs
parents:
diff changeset
   228
        TInt index = albumObject->Property( titlePropDef, titleProp );
hgs
parents:
diff changeset
   229
        if ( index == KErrNotFound )
hgs
parents:
diff changeset
   230
            {
hgs
parents:
diff changeset
   231
            LOGGER_WRITE("Cannot find title property");
hgs
parents:
diff changeset
   232
            User::Leave( KErrCorrupt );
hgs
parents:
diff changeset
   233
            }
hgs
parents:
diff changeset
   234
        
hgs
parents:
diff changeset
   235
        LOGGER_WRITE("Change title property");
hgs
parents:
diff changeset
   236
        titleProp->SetTextValueL( aAlbum.Title() );
hgs
parents:
diff changeset
   237
        
hgs
parents:
diff changeset
   238
        CMdEPropertyDef& lastModDatePropDef = albumObjDef.GetPropertyDefL(
hgs
parents:
diff changeset
   239
                MdeConstants::Object::KLastModifiedDateProperty );
hgs
parents:
diff changeset
   240
        CMdEProperty* lastModDateProp = NULL;
hgs
parents:
diff changeset
   241
        index = albumObject->Property( lastModDatePropDef, lastModDateProp );
hgs
parents:
diff changeset
   242
        
hgs
parents:
diff changeset
   243
        if ( index == KErrNotFound )
hgs
parents:
diff changeset
   244
            {
hgs
parents:
diff changeset
   245
            LOGGER_WRITE("Cannot find lastModDateProp property");
hgs
parents:
diff changeset
   246
            User::Leave( KErrCorrupt );
hgs
parents:
diff changeset
   247
            }
hgs
parents:
diff changeset
   248
        
hgs
parents:
diff changeset
   249
        TTime now;
hgs
parents:
diff changeset
   250
        now.UniversalTime();
hgs
parents:
diff changeset
   251
        lastModDateProp->SetTimeValueL( now );
hgs
parents:
diff changeset
   252
        
hgs
parents:
diff changeset
   253
        iMde->CommitObjectL( *albumObject );
hgs
parents:
diff changeset
   254
        }
hgs
parents:
diff changeset
   255
    
hgs
parents:
diff changeset
   256
    // Update album and content relations
hgs
parents:
diff changeset
   257
    // Search added relations
hgs
parents:
diff changeset
   258
    CMdERelationDef& containsRelationDef = defaultNamespaceDef.GetRelationDefL( MdeConstants::Relations::KContains );
hgs
parents:
diff changeset
   259
    TMdEObject mediaObject;
hgs
parents:
diff changeset
   260
    RPointerArray<CMdEInstanceItem> addedRelations;
hgs
parents:
diff changeset
   261
    CleanupResetAndDestroyPushL( addedRelations);
hgs
parents:
diff changeset
   262
    for ( TInt i=0; i< aAlbum.ItemCount(); i++)
hgs
parents:
diff changeset
   263
        {
hgs
parents:
diff changeset
   264
        TInt index(KErrNotFound);
hgs
parents:
diff changeset
   265
        TInt foundRes = oldAlbum.FindItem( aAlbum.ItemAt(i) ,index );
hgs
parents:
diff changeset
   266
        if ( foundRes != 0 )
hgs
parents:
diff changeset
   267
            {
hgs
parents:
diff changeset
   268
            // Item not found for old album -> Added relation
hgs
parents:
diff changeset
   269
            // Find object by uri
hgs
parents:
diff changeset
   270
            TRAPD( err, iMde->CheckObjectL( mediaObject, aAlbum.ItemAt(i) ));
hgs
parents:
diff changeset
   271
            LOGGER_WRITE_1("url: %S", &aAlbum.ItemAt(i));
hgs
parents:
diff changeset
   272
            LOGGER_WRITE_1("CheckObjectL err: %d", err);
hgs
parents:
diff changeset
   273
            if ( !err )
hgs
parents:
diff changeset
   274
                {
hgs
parents:
diff changeset
   275
                LOGGER_WRITE_1("object def: %S", &mediaObject.DefL().Name());
hgs
parents:
diff changeset
   276
                if ( mediaObject.DefL().Name().Compare( MdeConstants::Image::KImageObject ) == 0 
hgs
parents:
diff changeset
   277
                        || mediaObject.DefL().Name().Compare( MdeConstants::Video::KVideoObject ) == 0 )
hgs
parents:
diff changeset
   278
                    {
hgs
parents:
diff changeset
   279
                    CMdERelation* relation = iMde->NewRelationL( containsRelationDef, aAlbumId, mediaObject.Id() );
hgs
parents:
diff changeset
   280
                    addedRelations.AppendL( relation );
hgs
parents:
diff changeset
   281
                    }
hgs
parents:
diff changeset
   282
                else
hgs
parents:
diff changeset
   283
                    {
hgs
parents:
diff changeset
   284
                    LOGGER_WRITE("type not supported");
hgs
parents:
diff changeset
   285
                    }
hgs
parents:
diff changeset
   286
                }
hgs
parents:
diff changeset
   287
            
hgs
parents:
diff changeset
   288
            }
hgs
parents:
diff changeset
   289
        }
hgs
parents:
diff changeset
   290
    if ( addedRelations.Count() > 0 )
hgs
parents:
diff changeset
   291
        {
hgs
parents:
diff changeset
   292
        TInt err = iMde->AddItemsL( addedRelations );
hgs
parents:
diff changeset
   293
        LOGGER_WRITE_1("AddItemsL first err: %d", err);
hgs
parents:
diff changeset
   294
        }
hgs
parents:
diff changeset
   295
    
hgs
parents:
diff changeset
   296
    CleanupStack::PopAndDestroy( &addedRelations );
hgs
parents:
diff changeset
   297
    
hgs
parents:
diff changeset
   298
    // search removed relations
hgs
parents:
diff changeset
   299
    if ( iContainmentQuery )
hgs
parents:
diff changeset
   300
        {
hgs
parents:
diff changeset
   301
        delete iContainmentQuery;
hgs
parents:
diff changeset
   302
        iContainmentQuery = NULL;
hgs
parents:
diff changeset
   303
        }
hgs
parents:
diff changeset
   304
    iContainmentQuery = iMde->NewRelationQueryL( defaultNamespaceDef, this );
hgs
parents:
diff changeset
   305
    
hgs
parents:
diff changeset
   306
    CMdELogicCondition& rootCondition = iContainmentQuery->Conditions();
hgs
parents:
diff changeset
   307
    CMdERelationCondition& relationCondition =
hgs
parents:
diff changeset
   308
        rootCondition.AddRelationConditionL(containsRelationDef,
hgs
parents:
diff changeset
   309
                                            ERelationConditionSideLeft); // "AND"
hgs
parents:
diff changeset
   310
    
hgs
parents:
diff changeset
   311
    CMdELogicCondition& leftCondition = relationCondition.LeftL();
hgs
parents:
diff changeset
   312
    CMdELogicCondition& rightCondition = relationCondition.RightL();
hgs
parents:
diff changeset
   313
    
hgs
parents:
diff changeset
   314
    leftCondition.AddObjectConditionL( aAlbumId );
hgs
parents:
diff changeset
   315
    
hgs
parents:
diff changeset
   316
    CMdELogicCondition& objectDefLogicCond = 
hgs
parents:
diff changeset
   317
            rightCondition.AddLogicConditionL( ELogicConditionOperatorOr);
hgs
parents:
diff changeset
   318
    
hgs
parents:
diff changeset
   319
    TBool removingRelationsNeeded( EFalse );
hgs
parents:
diff changeset
   320
    for ( TInt i=0; i< oldAlbum.ItemCount(); i++)
hgs
parents:
diff changeset
   321
        {
hgs
parents:
diff changeset
   322
        TInt index(KErrNotFound);
hgs
parents:
diff changeset
   323
        TInt foundRes = aAlbum.FindItem( oldAlbum.ItemAt(i) ,index );
hgs
parents:
diff changeset
   324
        if ( foundRes != 0 )
hgs
parents:
diff changeset
   325
            {
hgs
parents:
diff changeset
   326
            removingRelationsNeeded = ETrue;
hgs
parents:
diff changeset
   327
            // Item not found from new album -> Removed relation (add uri to search condition)
hgs
parents:
diff changeset
   328
            LOGGER_WRITE_1("relation to be removed, uri: %S", &oldAlbum.ItemAt(i) );
hgs
parents:
diff changeset
   329
            objectDefLogicCond.AddObjectConditionL( EObjectConditionCompareUri, oldAlbum.ItemAt(i) );
hgs
parents:
diff changeset
   330
            }
hgs
parents:
diff changeset
   331
        }
hgs
parents:
diff changeset
   332
    
hgs
parents:
diff changeset
   333
    if ( removingRelationsNeeded )
hgs
parents:
diff changeset
   334
        {
hgs
parents:
diff changeset
   335
        // find all removed relation ID:s. HandleRelationQueryCompleted will be called when ready.
hgs
parents:
diff changeset
   336
        iContainmentQuery->SetResultMode( EQueryResultModeId );
hgs
parents:
diff changeset
   337
        iContainmentQuery->FindL();
hgs
parents:
diff changeset
   338
        iState = EReplacingAlbum;
hgs
parents:
diff changeset
   339
        }
hgs
parents:
diff changeset
   340
    else
hgs
parents:
diff changeset
   341
        {
hgs
parents:
diff changeset
   342
        // All done
hgs
parents:
diff changeset
   343
        iState = EIdle;
hgs
parents:
diff changeset
   344
        iObserver.AlbumReplaced( KErrNone );
hgs
parents:
diff changeset
   345
        }
hgs
parents:
diff changeset
   346
    
hgs
parents:
diff changeset
   347
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
   348
    }
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
void CMdEManager::DeleteAlbumL( TInt aAlbumId )
hgs
parents:
diff changeset
   351
    {
hgs
parents:
diff changeset
   352
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
   353
    if ( !iMde || iState != EIdle )
hgs
parents:
diff changeset
   354
        {
hgs
parents:
diff changeset
   355
        LOGGER_WRITE("Not ready!");
hgs
parents:
diff changeset
   356
        User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   357
        }
hgs
parents:
diff changeset
   358
    
hgs
parents:
diff changeset
   359
    CMdENamespaceDef& defaultNamespaceDef = iMde->GetDefaultNamespaceDefL();
hgs
parents:
diff changeset
   360
    CMdEObjectDef& albumObjDef = defaultNamespaceDef.GetObjectDefL( MdeConstants::Album::KAlbumObject );
hgs
parents:
diff changeset
   361
    
hgs
parents:
diff changeset
   362
    CMdEObject* albumObject = iMde->GetObjectL( aAlbumId, albumObjDef );
hgs
parents:
diff changeset
   363
    
hgs
parents:
diff changeset
   364
    CMdEPropertyDef& typePropDef = albumObjDef.GetPropertyDefL( 
hgs
parents:
diff changeset
   365
           MdeConstants::Album::KTypeProperty );
hgs
parents:
diff changeset
   366
    
hgs
parents:
diff changeset
   367
    CMdEProperty* typeProp = NULL;
hgs
parents:
diff changeset
   368
    TInt index = albumObject->Property( typePropDef, typeProp );
hgs
parents:
diff changeset
   369
    if ( index != KErrNotFound )
hgs
parents:
diff changeset
   370
        {
hgs
parents:
diff changeset
   371
        TUint16 typeVal = typeProp->Uint16ValueL();
hgs
parents:
diff changeset
   372
        if ( typeVal == MdeConstants::Album::EAlbumSystemFavourite )
hgs
parents:
diff changeset
   373
            {
hgs
parents:
diff changeset
   374
            LOGGER_WRITE("Item type is EAlbumSystemFavourite, deletion not allowed!");
hgs
parents:
diff changeset
   375
            User::Leave( KErrPermissionDenied );
hgs
parents:
diff changeset
   376
            }
hgs
parents:
diff changeset
   377
        }
hgs
parents:
diff changeset
   378
    
hgs
parents:
diff changeset
   379
    TItemId removedId(KNoId);
hgs
parents:
diff changeset
   380
    removedId = iMde->RemoveObjectL( aAlbumId );
hgs
parents:
diff changeset
   381
    if ( removedId == KNoId )
hgs
parents:
diff changeset
   382
        {
hgs
parents:
diff changeset
   383
        LOGGER_WRITE("Deletion failed!");
hgs
parents:
diff changeset
   384
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   385
        }
hgs
parents:
diff changeset
   386
    
hgs
parents:
diff changeset
   387
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
   388
    }
hgs
parents:
diff changeset
   389
hgs
parents:
diff changeset
   390
void CMdEManager::StartProcessingAlbumsL()
hgs
parents:
diff changeset
   391
    {
hgs
parents:
diff changeset
   392
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
   393
    CMdENamespaceDef& defaultNamespaceDef = iMde->GetDefaultNamespaceDefL();
hgs
parents:
diff changeset
   394
    CMdEObjectDef& albumObjDef = defaultNamespaceDef.GetObjectDefL( MdeConstants::Album::KAlbumObject );
hgs
parents:
diff changeset
   395
    if ( iAlbumQuery )
hgs
parents:
diff changeset
   396
        {
hgs
parents:
diff changeset
   397
        delete iAlbumQuery;
hgs
parents:
diff changeset
   398
        iAlbumQuery = NULL;
hgs
parents:
diff changeset
   399
        }
hgs
parents:
diff changeset
   400
    // query objects with object definition "Album"
hgs
parents:
diff changeset
   401
    iAlbumQuery = iMde->NewObjectQueryL( defaultNamespaceDef, albumObjDef, this );
hgs
parents:
diff changeset
   402
    
hgs
parents:
diff changeset
   403
    // Add order
hgs
parents:
diff changeset
   404
    CMdEObjectDef& objdef = defaultNamespaceDef.GetObjectDefL( MdeConstants::Object::KBaseObject );
hgs
parents:
diff changeset
   405
    CMdEPropertyDef& propDef = objdef.GetPropertyDefL( MdeConstants::Object::KTitleProperty );
hgs
parents:
diff changeset
   406
    TMdEOrderRule rule( propDef, ETrue );
hgs
parents:
diff changeset
   407
    iAlbumQuery->AppendOrderRuleL( rule );
hgs
parents:
diff changeset
   408
    
hgs
parents:
diff changeset
   409
    iAlbumQuery->FindL();
hgs
parents:
diff changeset
   410
    
hgs
parents:
diff changeset
   411
    iState = EEnumeratingAlbums;
hgs
parents:
diff changeset
   412
hgs
parents:
diff changeset
   413
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
   414
    }
hgs
parents:
diff changeset
   415
    
hgs
parents:
diff changeset
   416
hgs
parents:
diff changeset
   417
void CMdEManager::FindItemsOnAlbumL( TItemId aAlbumObjectId )
hgs
parents:
diff changeset
   418
    {
hgs
parents:
diff changeset
   419
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
   420
    if ( !iMde )
hgs
parents:
diff changeset
   421
        {
hgs
parents:
diff changeset
   422
        LOGGER_WRITE("Session was not ready!");
hgs
parents:
diff changeset
   423
        User::Leave( KErrNotReady );
hgs
parents:
diff changeset
   424
        }
hgs
parents:
diff changeset
   425
    CMdENamespaceDef& defaultNamespaceDef = iMde->GetDefaultNamespaceDefL();
hgs
parents:
diff changeset
   426
    CMdEObjectDef& objDef = defaultNamespaceDef.GetObjectDefL(  MdeConstants::Object::KBaseObject );
hgs
parents:
diff changeset
   427
    
hgs
parents:
diff changeset
   428
    CMdEPropertyDef& titlePropDef = objDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty );
hgs
parents:
diff changeset
   429
    
hgs
parents:
diff changeset
   430
    if ( iObjectQuery )
hgs
parents:
diff changeset
   431
        {
hgs
parents:
diff changeset
   432
        delete iObjectQuery;
hgs
parents:
diff changeset
   433
        iObjectQuery = NULL;
hgs
parents:
diff changeset
   434
        }
hgs
parents:
diff changeset
   435
    iObjectQuery = iMde->NewObjectQueryL( defaultNamespaceDef, objDef, this );
hgs
parents:
diff changeset
   436
    
hgs
parents:
diff changeset
   437
    // get only "Title" property
hgs
parents:
diff changeset
   438
    iObjectQuery->AddPropertyFilterL( &titlePropDef );
hgs
parents:
diff changeset
   439
    
hgs
parents:
diff changeset
   440
    CMdEObjectDef& objdef = defaultNamespaceDef.GetObjectDefL( MdeConstants::Object::KBaseObject );
hgs
parents:
diff changeset
   441
    CMdEPropertyDef& propDef = objdef.GetPropertyDefL( MdeConstants::Object::KTitleProperty );
hgs
parents:
diff changeset
   442
hgs
parents:
diff changeset
   443
    CMdELogicCondition& rootCond = iObjectQuery->Conditions();
hgs
parents:
diff changeset
   444
hgs
parents:
diff changeset
   445
    CMdERelationDef& containsRelDef = defaultNamespaceDef.GetRelationDefL( 
hgs
parents:
diff changeset
   446
        MdeConstants::Relations::KContains );
hgs
parents:
diff changeset
   447
hgs
parents:
diff changeset
   448
    // query right side objects from relations
hgs
parents:
diff changeset
   449
    CMdERelationCondition& relCond = rootCond.AddRelationConditionL( 
hgs
parents:
diff changeset
   450
        containsRelDef, ERelationConditionSideRight );
hgs
parents:
diff changeset
   451
hgs
parents:
diff changeset
   452
    // left side object of relation must be defined album object
hgs
parents:
diff changeset
   453
    CMdELogicCondition& leftRelCond = relCond.LeftL();
hgs
parents:
diff changeset
   454
    leftRelCond.AddObjectConditionL( aAlbumObjectId );
hgs
parents:
diff changeset
   455
    
hgs
parents:
diff changeset
   456
    iObjectQuery->FindL();
hgs
parents:
diff changeset
   457
hgs
parents:
diff changeset
   458
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
   459
    }
hgs
parents:
diff changeset
   460
hgs
parents:
diff changeset
   461
/**
hgs
parents:
diff changeset
   462
 * Called to notify the observer that opening the session has been 
hgs
parents:
diff changeset
   463
 * completed and, if the opening succeeded, the session is ready for use.
hgs
parents:
diff changeset
   464
 *
hgs
parents:
diff changeset
   465
 * @param aSession session
hgs
parents:
diff changeset
   466
 * @param aError   <code>KErrNone</code>, if opening the session succeeded;
hgs
parents:
diff changeset
   467
 *                 or one of the system-wide error codes, if opening the 
hgs
parents:
diff changeset
   468
 *                 session failed
hgs
parents:
diff changeset
   469
 */
hgs
parents:
diff changeset
   470
void CMdEManager::HandleSessionOpened(CMdESession& /*aSession*/, TInt aError)
hgs
parents:
diff changeset
   471
    {
hgs
parents:
diff changeset
   472
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
   473
    if ( !aError )
hgs
parents:
diff changeset
   474
        {
hgs
parents:
diff changeset
   475
        LOGGER_WRITE("Session opened");
hgs
parents:
diff changeset
   476
        if ( iState == EWaitingToEnumerateAlbums )
hgs
parents:
diff changeset
   477
            {
hgs
parents:
diff changeset
   478
            iState = EIdle;
hgs
parents:
diff changeset
   479
            TRAPD(err, StartProcessingAlbumsL());
hgs
parents:
diff changeset
   480
            if ( err )
hgs
parents:
diff changeset
   481
                {
hgs
parents:
diff changeset
   482
                iObserver.AlbumsReaded( err );
hgs
parents:
diff changeset
   483
                }
hgs
parents:
diff changeset
   484
            }
hgs
parents:
diff changeset
   485
        else
hgs
parents:
diff changeset
   486
            {
hgs
parents:
diff changeset
   487
            iState = EIdle;
hgs
parents:
diff changeset
   488
            }
hgs
parents:
diff changeset
   489
        }
hgs
parents:
diff changeset
   490
    else
hgs
parents:
diff changeset
   491
        {
hgs
parents:
diff changeset
   492
        LOGGER_WRITE_1("Error happened on opening session, aError: %d", aError);
hgs
parents:
diff changeset
   493
        if ( iState == EWaitingToEnumerateAlbums )
hgs
parents:
diff changeset
   494
            {
hgs
parents:
diff changeset
   495
            iObserver.AlbumsReaded( aError );
hgs
parents:
diff changeset
   496
            }
hgs
parents:
diff changeset
   497
        iState = EUninitialized;
hgs
parents:
diff changeset
   498
        delete iMde;
hgs
parents:
diff changeset
   499
        iMde = NULL;
hgs
parents:
diff changeset
   500
        }
hgs
parents:
diff changeset
   501
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
   502
    }
hgs
parents:
diff changeset
   503
hgs
parents:
diff changeset
   504
/**
hgs
parents:
diff changeset
   505
 * Called to notify the observer about errors, which are not a direct 
hgs
parents:
diff changeset
   506
 * consequence of the operations initiated by the client but caused by 
hgs
parents:
diff changeset
   507
 * some external source (e.g., other clients). The error cannot be 
hgs
parents:
diff changeset
   508
 * recovered and all on-going operations initiated by the client have been 
hgs
parents:
diff changeset
   509
 * aborted. Any attempts to continue using the session will cause a panic. 
hgs
parents:
diff changeset
   510
 * The client should close the session immediately and try to open a new 
hgs
parents:
diff changeset
   511
 * session, if it needs to continue using the metadata engine.
hgs
parents:
diff changeset
   512
 *
hgs
parents:
diff changeset
   513
 * @param aSession session
hgs
parents:
diff changeset
   514
 * @param aError one of the system-wide error codes
hgs
parents:
diff changeset
   515
 */
hgs
parents:
diff changeset
   516
void CMdEManager::HandleSessionError(CMdESession& /*aSession*/, TInt aError)
hgs
parents:
diff changeset
   517
    {
hgs
parents:
diff changeset
   518
    // Something went wrong. Handle the error and delete the old session.
hgs
parents:
diff changeset
   519
    LOGGER_WRITE_1("CMdEManager::HandleSessionError - aError: %d", aError)
hgs
parents:
diff changeset
   520
    iState = EUninitialized;
hgs
parents:
diff changeset
   521
    delete iMde;
hgs
parents:
diff changeset
   522
    iMde = NULL;
hgs
parents:
diff changeset
   523
    }
hgs
parents:
diff changeset
   524
hgs
parents:
diff changeset
   525
/**
hgs
parents:
diff changeset
   526
 * Called to notify the observer that new results have been received 
hgs
parents:
diff changeset
   527
 * in the query.
hgs
parents:
diff changeset
   528
 *
hgs
parents:
diff changeset
   529
 * @param aQuery              Query instance that received new results.
hgs
parents:
diff changeset
   530
 * @param aFirstNewItemIndex  Index of the first new item that was added
hgs
parents:
diff changeset
   531
 *                            to the result item array.
hgs
parents:
diff changeset
   532
 * @param aNewItemCount       Number of items added to the result item 
hgs
parents:
diff changeset
   533
 *                            array.
hgs
parents:
diff changeset
   534
 */
hgs
parents:
diff changeset
   535
void CMdEManager::HandleQueryNewResults(CMdEQuery& /*aQuery*/,
hgs
parents:
diff changeset
   536
                                   TInt /*aFirstNewItemIndex*/,
hgs
parents:
diff changeset
   537
                                   TInt /*aNewItemCount*/)
hgs
parents:
diff changeset
   538
    {
hgs
parents:
diff changeset
   539
    }
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
void CMdEManager::ProcessNextAlbumL()
hgs
parents:
diff changeset
   542
    {
hgs
parents:
diff changeset
   543
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
   544
    if ( iAlbumsInProgress.Count() == 0 )
hgs
parents:
diff changeset
   545
        {
hgs
parents:
diff changeset
   546
        LOGGER_WRITE("All ready");
hgs
parents:
diff changeset
   547
        // all ready
hgs
parents:
diff changeset
   548
        return;
hgs
parents:
diff changeset
   549
        }
hgs
parents:
diff changeset
   550
    
hgs
parents:
diff changeset
   551
    FindItemsOnAlbumL( iAlbumsInProgress[0]->Id() );
hgs
parents:
diff changeset
   552
    
hgs
parents:
diff changeset
   553
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
   554
    }
hgs
parents:
diff changeset
   555
hgs
parents:
diff changeset
   556
        
hgs
parents:
diff changeset
   557
/**
hgs
parents:
diff changeset
   558
 * Called to notify the observer that the query has been completed,
hgs
parents:
diff changeset
   559
 * or that an error has occured.
hgs
parents:
diff changeset
   560
 *
hgs
parents:
diff changeset
   561
 * @param aQuery  Query instance.
hgs
parents:
diff changeset
   562
 * @param aError  <code>KErrNone</code>, if the query was completed
hgs
parents:
diff changeset
   563
 *                successfully. Otherwise one of the system-wide error 
hgs
parents:
diff changeset
   564
 *                codes.
hgs
parents:
diff changeset
   565
 */
hgs
parents:
diff changeset
   566
void CMdEManager::HandleQueryCompleted(CMdEQuery& aQuery, TInt aError)
hgs
parents:
diff changeset
   567
    {
hgs
parents:
diff changeset
   568
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
   569
    TInt err( aError );
hgs
parents:
diff changeset
   570
    
hgs
parents:
diff changeset
   571
    if ( iState == EEnumeratingAlbums )
hgs
parents:
diff changeset
   572
        {
hgs
parents:
diff changeset
   573
        CMdEObjectQuery& query = (CMdEObjectQuery&)aQuery;
hgs
parents:
diff changeset
   574
        if ( !err && &aQuery == iAlbumQuery )
hgs
parents:
diff changeset
   575
            {
hgs
parents:
diff changeset
   576
            LOGGER_WRITE("Album query");
hgs
parents:
diff changeset
   577
            TRAP( err, HandleAlbumQueryCompletedL( query ));
hgs
parents:
diff changeset
   578
            }
hgs
parents:
diff changeset
   579
        else if ( !err && &aQuery == iObjectQuery )
hgs
parents:
diff changeset
   580
            {
hgs
parents:
diff changeset
   581
            LOGGER_WRITE("Object query");
hgs
parents:
diff changeset
   582
            TRAP( err, HandleObjectQueryCompletedL( query ));
hgs
parents:
diff changeset
   583
            }
hgs
parents:
diff changeset
   584
        else
hgs
parents:
diff changeset
   585
            {
hgs
parents:
diff changeset
   586
            LOGGER_WRITE("unknown query or error happened");
hgs
parents:
diff changeset
   587
            }
hgs
parents:
diff changeset
   588
        
hgs
parents:
diff changeset
   589
        if ( err )
hgs
parents:
diff changeset
   590
            {
hgs
parents:
diff changeset
   591
            LOGGER_WRITE_1("Error happened: %d", err);
hgs
parents:
diff changeset
   592
            iState = EIdle;
hgs
parents:
diff changeset
   593
            iAlbumsInProgress.ResetAndDestroy();
hgs
parents:
diff changeset
   594
            iAlbums.ResetAndDestroy();
hgs
parents:
diff changeset
   595
            iObserver.AlbumsReaded( err );
hgs
parents:
diff changeset
   596
            }
hgs
parents:
diff changeset
   597
        }
hgs
parents:
diff changeset
   598
    else if ( iState == EReplacingAlbum )
hgs
parents:
diff changeset
   599
        {
hgs
parents:
diff changeset
   600
        if ( !err && &aQuery == iContainmentQuery )
hgs
parents:
diff changeset
   601
            {
hgs
parents:
diff changeset
   602
            LOGGER_WRITE("relation query");
hgs
parents:
diff changeset
   603
            CMdERelationQuery& query = (CMdERelationQuery&)aQuery;
hgs
parents:
diff changeset
   604
            TRAP( err, HandleRelationQueryCompletedL( query ));
hgs
parents:
diff changeset
   605
            }
hgs
parents:
diff changeset
   606
        
hgs
parents:
diff changeset
   607
        iState = EIdle;
hgs
parents:
diff changeset
   608
        iObserver.AlbumReplaced( err );
hgs
parents:
diff changeset
   609
        
hgs
parents:
diff changeset
   610
        }
hgs
parents:
diff changeset
   611
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
   612
    }
hgs
parents:
diff changeset
   613
hgs
parents:
diff changeset
   614
hgs
parents:
diff changeset
   615
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   616
// CMdEManager::HandleAlbumQueryCompletedL
hgs
parents:
diff changeset
   617
// Callback function for find all albums. Save albums to iAlbumsInProgress array 
hgs
parents:
diff changeset
   618
// and start collecting objects on each album.
hgs
parents:
diff changeset
   619
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   620
void CMdEManager::HandleAlbumQueryCompletedL( CMdEObjectQuery& aQuery )
hgs
parents:
diff changeset
   621
    {
hgs
parents:
diff changeset
   622
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
   623
    // clear old items
hgs
parents:
diff changeset
   624
    iAlbumsInProgress.ResetAndDestroy();
hgs
parents:
diff changeset
   625
    iAlbums.ResetAndDestroy();
hgs
parents:
diff changeset
   626
    
hgs
parents:
diff changeset
   627
    for ( TInt i = 0; i < aQuery.Count(); i++ )
hgs
parents:
diff changeset
   628
        {
hgs
parents:
diff changeset
   629
        CPlaylistItem* albumItem = CPlaylistItem::NewLC();
hgs
parents:
diff changeset
   630
        CMdEObject& object = aQuery.Result(i);
hgs
parents:
diff changeset
   631
        LOGGER_WRITE_1("Id: %d", object.Id());
hgs
parents:
diff changeset
   632
        albumItem->SetId( object.Id() );
hgs
parents:
diff changeset
   633
        
hgs
parents:
diff changeset
   634
        CMdEPropertyDef& titlePropDef = object.Def().GetPropertyDefL( MdeConstants::Object::KTitleProperty );
hgs
parents:
diff changeset
   635
              
hgs
parents:
diff changeset
   636
        CMdEProperty* titleProp = NULL;
hgs
parents:
diff changeset
   637
        TInt index = object.Property( titlePropDef, titleProp );
hgs
parents:
diff changeset
   638
        if ( index != KErrNotFound )
hgs
parents:
diff changeset
   639
            {
hgs
parents:
diff changeset
   640
            const TDesC& title = titleProp->TextValueL();
hgs
parents:
diff changeset
   641
            LOGGER_WRITE_1("Title: %S", &title);
hgs
parents:
diff changeset
   642
            albumItem->SetTitleL( title );
hgs
parents:
diff changeset
   643
            }
hgs
parents:
diff changeset
   644
        else
hgs
parents:
diff changeset
   645
            {
hgs
parents:
diff changeset
   646
            // not found, might be default album
hgs
parents:
diff changeset
   647
            albumItem->SetTitleL( object.Uri() );
hgs
parents:
diff changeset
   648
            }
hgs
parents:
diff changeset
   649
        
hgs
parents:
diff changeset
   650
        LOGGER_WRITE("");
hgs
parents:
diff changeset
   651
        iAlbumsInProgress.AppendL( albumItem );
hgs
parents:
diff changeset
   652
        CleanupStack::Pop( albumItem );
hgs
parents:
diff changeset
   653
        }
hgs
parents:
diff changeset
   654
    
hgs
parents:
diff changeset
   655
    if ( aQuery.Count() > 0 )
hgs
parents:
diff changeset
   656
        {
hgs
parents:
diff changeset
   657
        // Start processing albums
hgs
parents:
diff changeset
   658
        ProcessNextAlbumL();
hgs
parents:
diff changeset
   659
        }
hgs
parents:
diff changeset
   660
    else
hgs
parents:
diff changeset
   661
        {
hgs
parents:
diff changeset
   662
        // no albums
hgs
parents:
diff changeset
   663
        iObserver.AlbumsReaded( KErrNone );
hgs
parents:
diff changeset
   664
        }
hgs
parents:
diff changeset
   665
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
   666
    }
hgs
parents:
diff changeset
   667
hgs
parents:
diff changeset
   668
void CMdEManager::HandleObjectQueryCompletedL( CMdEObjectQuery& aQuery )
hgs
parents:
diff changeset
   669
    {
hgs
parents:
diff changeset
   670
    if ( !iAlbumsInProgress.Count() )
hgs
parents:
diff changeset
   671
        {
hgs
parents:
diff changeset
   672
        LOGGER_WRITE("Error! No items on iAlbumsInProgress");
hgs
parents:
diff changeset
   673
        User::Leave( KErrGeneral );
hgs
parents:
diff changeset
   674
        }
hgs
parents:
diff changeset
   675
    for ( TInt i = 0; i < aQuery.Count(); i++ )
hgs
parents:
diff changeset
   676
        {
hgs
parents:
diff changeset
   677
        CMdEObject& object = aQuery.Result(i);
hgs
parents:
diff changeset
   678
        iAlbumsInProgress[0]->AddItemL( object.Uri() );
hgs
parents:
diff changeset
   679
        }
hgs
parents:
diff changeset
   680
    iAlbums.AppendL( iAlbumsInProgress[0] );
hgs
parents:
diff changeset
   681
    iAlbumsInProgress.Remove( 0 );
hgs
parents:
diff changeset
   682
    if ( iAlbumsInProgress.Count() > 0)
hgs
parents:
diff changeset
   683
        {
hgs
parents:
diff changeset
   684
        ProcessNextAlbumL();
hgs
parents:
diff changeset
   685
        }
hgs
parents:
diff changeset
   686
    else
hgs
parents:
diff changeset
   687
        {
hgs
parents:
diff changeset
   688
        // all albums processed
hgs
parents:
diff changeset
   689
        iState = EIdle;
hgs
parents:
diff changeset
   690
        iObserver.AlbumsReaded( KErrNone );
hgs
parents:
diff changeset
   691
        }
hgs
parents:
diff changeset
   692
    }
hgs
parents:
diff changeset
   693
hgs
parents:
diff changeset
   694
void CMdEManager::HandleRelationQueryCompletedL( CMdERelationQuery& aQuery )
hgs
parents:
diff changeset
   695
    {
hgs
parents:
diff changeset
   696
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
   697
    const RArray<TItemId>& res = aQuery.ResultIds();
hgs
parents:
diff changeset
   698
    LOGGER_WRITE_1("founded relations count: %d", res.Count())
hgs
parents:
diff changeset
   699
    for (TInt i=0; i<res.Count(); i++ )
hgs
parents:
diff changeset
   700
        {
hgs
parents:
diff changeset
   701
        LOGGER_WRITE_1(" %d", res[i]);
hgs
parents:
diff changeset
   702
        }
hgs
parents:
diff changeset
   703
    LOGGER_WRITE_1("q count: %d", aQuery.Count() );
hgs
parents:
diff changeset
   704
    RArray<TItemId> removed;
hgs
parents:
diff changeset
   705
    CMdENamespaceDef& defaultNameSpace = iMde->GetDefaultNamespaceDefL();
hgs
parents:
diff changeset
   706
    iMde->RemoveRelationsL( aQuery.ResultIds(),removed, &defaultNameSpace);
hgs
parents:
diff changeset
   707
    LOGGER_WRITE_1("Removed relations count: %d", removed.Count())
hgs
parents:
diff changeset
   708
    for (TInt i=0; i<removed.Count(); i++)
hgs
parents:
diff changeset
   709
        {
hgs
parents:
diff changeset
   710
        LOGGER_WRITE_1(" %d", removed[i]);
hgs
parents:
diff changeset
   711
        }
hgs
parents:
diff changeset
   712
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
   713
    }
hgs
parents:
diff changeset
   714
hgs
parents:
diff changeset
   715
void CMdEManager::Cancel()
hgs
parents:
diff changeset
   716
    {
hgs
parents:
diff changeset
   717
    TRACE_FUNC_ENTRY;
hgs
parents:
diff changeset
   718
    if ( iState == EWaitingToEnumerateAlbums )
hgs
parents:
diff changeset
   719
        {
hgs
parents:
diff changeset
   720
        // Cancel enumeration before it even begins
hgs
parents:
diff changeset
   721
        iState = EUninitialized;
hgs
parents:
diff changeset
   722
        iObserver.AlbumsReaded( KErrCancel );
hgs
parents:
diff changeset
   723
        }
hgs
parents:
diff changeset
   724
    
hgs
parents:
diff changeset
   725
    if ( iAlbumQuery )
hgs
parents:
diff changeset
   726
        {
hgs
parents:
diff changeset
   727
        LOGGER_WRITE("iAlbumQuery->Cancel()");
hgs
parents:
diff changeset
   728
        iAlbumQuery->Cancel();
hgs
parents:
diff changeset
   729
        }
hgs
parents:
diff changeset
   730
    if ( iObjectQuery )
hgs
parents:
diff changeset
   731
        {
hgs
parents:
diff changeset
   732
        LOGGER_WRITE("iObjectQuery->Cancel()");
hgs
parents:
diff changeset
   733
        iObjectQuery->Cancel();
hgs
parents:
diff changeset
   734
        }
hgs
parents:
diff changeset
   735
    if ( iContainmentQuery )
hgs
parents:
diff changeset
   736
        {
hgs
parents:
diff changeset
   737
        LOGGER_WRITE("iContainmentQuery->Cancel()");
hgs
parents:
diff changeset
   738
        iContainmentQuery->Cancel();
hgs
parents:
diff changeset
   739
        }
hgs
parents:
diff changeset
   740
    TRACE_FUNC_EXIT;
hgs
parents:
diff changeset
   741
    }