homesync/contentmanager/mediaservant/src/msmetadatacollector.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:00 +0200
changeset 0 7f85d04be362
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/*
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Collects metadata based on user selections
*
*/


// INCLUDES
#include <e32std.h>
#include "cmsqlpropertycontainer.h"
#include "cmsqlpropertyitem.h"
#include "cmsqlpropertycollector.h"
#include "msmetadatacollector.h"
#include "msappui.h"
#include "msengine.h"
#include "msdebug.h"


// ---------------------------------------------------------------------------
// NewL
// ---------------------------------------------------------------------------
//
EXPORT_C CMSMetadataCollector* CMSMetadataCollector::NewL(
                                                    CMSAppUi& aMSAppUi,
                                                    TCmMediaType aMediaType,
                                                    RArray<TInt>& aGenreArray,
                                                    RArray<TInt>& aArtistArray,
                                                    RArray<TInt>& aAlbumArray,
                                                    RArray<TInt>& aTrackArray )
    {
    LOG(_L("[MediaServant]\t CMSMetadataCollector::NewL"));
    
    CMSMetadataCollector* self = CMSMetadataCollector::NewLC(
                                                        aMSAppUi,
                                                        aMediaType,
                                                        aGenreArray,
                                                        aArtistArray,
                                                        aAlbumArray,
                                                        aTrackArray );
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// NewLC
// ---------------------------------------------------------------------------
//
EXPORT_C CMSMetadataCollector* CMSMetadataCollector::NewLC(
                                                    CMSAppUi& aAppUi,
                                                    TCmMediaType aMediaType,
                                                    RArray<TInt>& aGenreArray,
                                                    RArray<TInt>& aArtistArray,
                                                    RArray<TInt>& aAlbumArray,
                                                    RArray<TInt>& aTrackArray )
    {
    LOG(_L("[MediaServant]\t CMSMetadataCollector::NewLC"));
    
    CMSMetadataCollector* self = new ( ELeave ) CMSMetadataCollector(
                                                        aAppUi,
                                                        aMediaType,
                                                        aGenreArray,
                                                        aArtistArray,
                                                        aAlbumArray,
                                                        aTrackArray );
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }

// ---------------------------------------------------------------------------
// Destructor
// ---------------------------------------------------------------------------
//
CMSMetadataCollector::~CMSMetadataCollector()
    {
    LOG(_L("[MediaServant]\t CMSMetadataCollector::~CMSMetadataCollector"));
    
    delete iMetadataCollector;
    }

// ---------------------------------------------------------------------------
// Default constructor
// ---------------------------------------------------------------------------
//
CMSMetadataCollector::CMSMetadataCollector( CMSAppUi& aMSAppUi,
                                            TCmMediaType aMediaType,
                                            RArray<TInt>& aGenreArray,
                                            RArray<TInt>& aArtistArray,
                                            RArray<TInt>& aAlbumArray,
                                            RArray<TInt>& aTrackArray ) :
    iMSAppUi( &aMSAppUi ),
    iMediaType( aMediaType ),
    iGenreArray( &aGenreArray ),
    iArtistArray( &aArtistArray ),
    iAlbumArray( &aAlbumArray ),
    iTrackArray( &aTrackArray )
    {
    }

// ---------------------------------------------------------------------------
// CMSMetadataCollector::ConstructL
// ---------------------------------------------------------------------------
//
void CMSMetadataCollector::ConstructL()
    {
    LOG(_L("[MediaServant]\t CMSMetadataCollector::ConstructL"));
    
    iMetadataCollector = CCmSqlPropertyCollector::NewL();
    AddContainersL();
    
    GetFilteredMetadataL();
    }


// ---------------------------------------------------------------------------
//CMSMetadataCollector::GetFilteredMetadataL
// ---------------------------------------------------------------------------
//
void CMSMetadataCollector::GetFilteredMetadataL()
    {
    LOG(_L("[MediaServant]\t CMSMetadataCollector::GetFilteredMetadataL"));
    
    DeleteAllItems();

    // TRACKS - this is both video titles and music tracks
    for ( TInt index = 0; index < iTrackArray->Count(); index++ )
        {
        CCmSqlPropertyItem* item = CCmSqlPropertyItem::NewLC();

        item->SetId( (*iTrackArray)[index] );


        CCmSqlPropertyContainer* container =
                        iMetadataCollector->PropertyContainer( ETracks );
        container->AddPropertyItemL( item );
        CleanupStack::Pop( item );
        }

    if ( iMediaType == ECmAudio )
        {
        // ARTISTS
        for ( TInt index = 0; index < iArtistArray->Count(); index++ )
            {
            CCmSqlPropertyItem* item = CCmSqlPropertyItem::NewLC();
            item->SetId( (*iArtistArray)[index] );

            CCmSqlPropertyContainer* container =
                        iMetadataCollector->PropertyContainer( EArtists );
            container->AddPropertyItemL( item );
            CleanupStack::Pop( item );
            }

        // GENRES
        for ( TInt index = 0; index < iGenreArray->Count(); index++ )
            {
            CCmSqlPropertyItem* item = CCmSqlPropertyItem::NewLC();
            item->SetId( (*iGenreArray)[index] );

            CCmSqlPropertyContainer* container =
                        iMetadataCollector->PropertyContainer( EGenres );
            container->AddPropertyItemL( item );

            CleanupStack::Pop( item );
            }

        // ALBUMS
        for ( TInt index = 0; index < iAlbumArray->Count(); index++ )
            {
            CCmSqlPropertyItem* item = CCmSqlPropertyItem::NewLC();
            item->SetId( (*iAlbumArray)[index] );

            CCmSqlPropertyContainer* container =
                        iMetadataCollector->PropertyContainer( EAlbums );
            container->AddPropertyItemL( item );

            CleanupStack::Pop( item );
            }
        }

    // Start asynchronous metadata query.
    // Engine observer's ReadyL will be called when ready
    iMSAppUi->MSEngine()->GetFilteredMetadataL( iMetadataCollector );
    }

// --------------------------------------------------------------------------
//CMSMetadataCollector::DeleteAllItems
// --------------------------------------------------------------------------
//
void CMSMetadataCollector::DeleteAllItems()
    {
    LOG(_L("[MediaServant]\t CMSMetadataCollector::DeleteAllItems"));
    
    for ( TInt index = 0;
          index < iMetadataCollector->PropertyContainerCount();
          index++ )
        {
        CCmSqlPropertyContainer* container =
                            iMetadataCollector->PropertyContainer( index );
        for ( TInt idx = 0; idx < container->PropertyItemCount(); idx++ )
            {
            container->DeletePropertyItem( idx-- );
            }
        }
    }

// --------------------------------------------------------------------------
//CMSMetadataCollector::AddContainersL
// --------------------------------------------------------------------------
//
void CMSMetadataCollector::AddContainersL()
    {
    LOG(_L("[MediaServant]\t CMSMetadataCollector::AddContainersL"));
    
    // tracks
    // this container is used both videos and music    
    CCmSqlPropertyContainer* trackContainer =
                                CCmSqlPropertyContainer::NewLC();
    trackContainer->SetType( ECmTitle );
    iMetadataCollector->AddPropertyContainerL( trackContainer );
    CleanupStack::Pop( trackContainer );

    if ( iMediaType == ECmAudio )
        {
        // artists  
        CCmSqlPropertyContainer* artistContainer =
                                CCmSqlPropertyContainer::NewLC();            
        artistContainer->SetType( ECmArtist );
        iMetadataCollector->AddPropertyContainerL( artistContainer );
        CleanupStack::Pop( artistContainer );

        // genres
        CCmSqlPropertyContainer* genreContainer =
                                CCmSqlPropertyContainer::NewLC();
        genreContainer->SetType( ECmGenre );
        iMetadataCollector->AddPropertyContainerL( genreContainer );
        CleanupStack::Pop( genreContainer );

        // albums
        CCmSqlPropertyContainer* albumContainer =
                                CCmSqlPropertyContainer::NewLC();
        albumContainer->SetType( ECmAlbum );
        iMetadataCollector->AddPropertyContainerL( albumContainer );
        CleanupStack::Pop( albumContainer );
        }
    }

// ---------------------------------------------------------------------------
//CMSMetadataCollector::Genres
// ---------------------------------------------------------------------------
//
CCmSqlPropertyContainer* CMSMetadataCollector::Genres()
    {
    return iMetadataCollector->PropertyContainer( EGenres );
    }

// ---------------------------------------------------------------------------
//CMSMetadataCollector::Artists
// ---------------------------------------------------------------------------
//
CCmSqlPropertyContainer* CMSMetadataCollector::Artists()
    {
    return iMetadataCollector->PropertyContainer( EArtists );
    }

// ---------------------------------------------------------------------------
//CMSMetadataCollector::Albums
// ---------------------------------------------------------------------------
//
CCmSqlPropertyContainer* CMSMetadataCollector::Albums()
    {
    return iMetadataCollector->PropertyContainer( EAlbums );
    }

// ---------------------------------------------------------------------------
//CMSMetadataCollector::Tracks
// ---------------------------------------------------------------------------
//
CCmSqlPropertyContainer* CMSMetadataCollector::Tracks()
    {
    return iMetadataCollector->PropertyContainer( ETracks );
    }

// End of file