diff -r 000000000000 -r 7f85d04be362 homesync/contentmanager/mediaservant/src/msmetadatacollector.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homesync/contentmanager/mediaservant/src/msmetadatacollector.cpp Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,295 @@ +/* +* 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 +#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& aGenreArray, + RArray& aArtistArray, + RArray& aAlbumArray, + RArray& 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& aGenreArray, + RArray& aArtistArray, + RArray& aAlbumArray, + RArray& 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& aGenreArray, + RArray& aArtistArray, + RArray& aAlbumArray, + RArray& 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 +