diff -r 000000000000 -r 96612d01cf9f videocollection/mpxmyvideoscollection/src/vcxmyvideosmdsdb.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideosmdsdb.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,1498 @@ +/* +* 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 the License "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: MPX My Videos collection plugin's MDS database class* +*/ + + + + +//#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "vcxmyvideosmdsdb.h" +#include "vcxmyvideoscollectionutil.h" + +_LIT( KVcxVideoObjectName, "Video" ); + //1 (ID) +_LIT( KVcxTitlePropertyName, "Title" ); //2 +_LIT( KVcxDescriptionPropertyName, "Description" ); //3 + //4 (file path = URI) +_LIT( KVcxSizePropertyName, "Size" ); //11 (5 also for compatibility) + +_LIT( KVcxCreationDatePropertyName, "CreationDate" ); //6 creation date is saved to 2 properties +_LIT( KVcxTimeOffsetPropertyName, "TimeOffset" ); //6 + +_LIT( KVcxFlagsPropertyName, "RecordingFlags" ); //7 flags are saved +_LIT( KVcxDrmPropertyName, "DRM"); //7 to both of these + +_LIT( KVcxCopyrightPropertyName, "Copyright" ); //8 +_LIT( KVcxItemTypePropertyName, "ItemType" ); //9 (mime type) +_LIT( KVcxLastModifiedDatePropertyName, "LastModifiedDate" ); //12 +_LIT( KVcxAgeProfilePropertyName, "AgeProfile" ); //13 +_LIT( KVcxAudioLanguagePropertyName, "AudioLanguage" ); //14 +_LIT( KVcxAuthorPropertyName, "Author" ); //15 +_LIT( KVcxOriginPropertyName, "Origin" ); //16 +_LIT( KVcxDurationPropertyName, "Duration" ); //17 +_LIT( KVcxLastPlayPositionPropertyName, "LastPlayPosition" ); //10 +_LIT( KVcxDownloadIdPropertyName, "DownloadID" ); //18 +_LIT( KVcxRatingPropertyName, "Rating" ); //19 +_LIT( KVcxBitratePropertyName, "Bitrate" ); //20 +_LIT( KVcxAudioFourCcPropertyName, "AudioFourCC" ); //21 +_LIT( KVcxWidthPropertyName, "Width" ); //22 +_LIT( KVcxHeightPropertyName, "Height" ); //23 +_LIT( KVcxArtistPropertyName, "Artist" ); //24 + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CVcxMyVideosMdsDb::CVcxMyVideosMdsDb( MVcxMyVideosMdsDbObserver* aObserver, RFs& aFs ) +: iFs( aFs ), iMdsDbObserver(aObserver) + { + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::ConstructL() + { + MPX_FUNC( "CVcxMyVideosMdsDb::ConstructL" ); + + iActiveSchedulerWait = new (ELeave) CActiveSchedulerWait; + + MPX_DEBUG1( "CVcxMyVideosMdsDb::ConstructL CMdESession::NewL" ); + + // Create session + iMDSError = KErrNone; + + iMDSSession = CMdESession::NewL( *this ); + if (!iMDSSession) + { + // Failed to create session, leave + User::Leave( iMDSError ); + } + + // Wait until session opened + iActiveSchedulerWait->Start(); + + MPX_DEBUG1( "CVcxMyVideosMdsDb::ConstructL iActiveSchedulerWait->Start done" ); + + if ( iMDSError != KErrNone ) + { + MPX_DEBUG2("Failed to create session to MDS: %d", iMDSError); + User::LeaveIfError( iMDSError ); + } + + // Get the schema definitions + iMDSError = KErrNone; + GetSchemaDefinitionsL(); + + // Is schema ok + if ( iMDSError != KErrNone ) + { + // Schema not loaded, abort + User::Leave( iMDSError ); + } + + MPX_DEBUG1( "CVcxMyVideosMdsDb::ConstructL Adding observers" ); + + // We order all object notifications. If we set video condition, then we wont + // receive remove notifications at all (mds feature). Extra notifications + // do not bother us much since we try to fetch the item from the db + // after the add notification anyways, and then we use video condition. + // Eventually extra events are ignored. + iMDSSession->AddObjectObserverL( *this, NULL ); + + iMDSSession->AddObjectPresentObserverL( *this ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::HandleObjectPresentNotification( CMdESession& /*aSession*/, + TBool aPresent, const RArray& aObjectIdArray) + { + MPX_DEBUG1( "CVcxMyVideosMdsDb::--------------------------------------------------------------." ); + MPX_DEBUG3( "CVcxMyVideosMdsDb::HandleObjectPresentNotification( aPresent = %1d, count = %3d) |", aPresent, aObjectIdArray.Count() ); + MPX_DEBUG1( "CVcxMyVideosMdsDb::--------------------------------------------------------------'" ); + //iMdsDbObserver->HandleObjectPresentNotification(); + + TObserverNotificationType type; + if ( aPresent ) + { + type = ENotifyAdd; + } + else + { + type = ENotifyRemove; + } + + TRAP_IGNORE( DoHandleObjectNotificationL( type, aObjectIdArray ) ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CVcxMyVideosMdsDb* CVcxMyVideosMdsDb::NewL( MVcxMyVideosMdsDbObserver* aObserver, RFs& aFs ) + { + CVcxMyVideosMdsDb* self = + CVcxMyVideosMdsDb::NewLC( aObserver, aFs ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CVcxMyVideosMdsDb* CVcxMyVideosMdsDb::NewLC( + MVcxMyVideosMdsDbObserver* aObserver, RFs& aFs ) + { + CVcxMyVideosMdsDb* self = new( ELeave ) CVcxMyVideosMdsDb( aObserver, aFs ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CVcxMyVideosMdsDb::~CVcxMyVideosMdsDb() + { + MPX_FUNC( "CVcxMyVideosMdsDb::~CVcxMyVideosMdsDb()" ); + + if ( iMDSSession ) + { + TRAP_IGNORE( iMDSSession->RemoveObjectObserverL( *this ) ); + } + + Cancel(); + + delete iVideoQuery; + delete iMDSSession; + delete iActiveSchedulerWait; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::Cancel +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::Cancel() + { + MPX_FUNC("CVcxMyVideosMdsDb::Cancel()"); + + if ( iVideoQuery ) + { + iVideoQuery->Cancel(); + } + iVideoListFetchingIsOngoing = EFalse; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::AddVideoL +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::AddVideoL( + CMPXMedia& aVideo, + TUint32& aMdsId ) + { + MPX_FUNC( "CVcxMyVideosMdsDb::AddVideoL" ); + + if ( !iMDSSession ) + { + MPX_DEBUG2("CVcxMyVideosMdsDb:: no mds session(%d), leaving", iMDSError); + User::Leave( iMDSError ); + } + + CMdEObject* object = iMDSSession->NewObjectLC( + *iVideoObjectDef, aVideo.ValueText( KMPXMediaGeneralUri ) ); // 1-> + + // check if the file exists and use the creation time from the file + + TTime time; + time.UniversalTime(); + TTimeIntervalSeconds timeOffset = User::UTCOffset(); + TTime localTime = time + timeOffset; + + object->AddTimePropertyL( *iCreationDatePropertyDef, localTime ); + object->AddInt16PropertyL( *iTimeOffsetPropertyDef, timeOffset.Int() / 60 ); + object->AddTimePropertyL( *iLastModifiedDatePropertyDef, localTime ); + object->AddUint8PropertyL( *iOriginPropertyDef, + aVideo.ValueTObjectL( KVcxMediaMyVideosOrigin ) ); + + CMdEProperty* property; + + // Type can not be modified normally, so set it here + if ( aVideo.IsSupported( KMPXMediaGeneralMimeType ) ) + { + if (KErrNotFound != object->Property( *iItemTypePropertyDef, property, 0 )) + { + static_cast(property)->SetValueL( + aVideo.ValueText( KMPXMediaGeneralMimeType ) ); + } + else + { + object->AddTextPropertyL( + *iItemTypePropertyDef, + aVideo.ValueText( KMPXMediaGeneralMimeType ) ); + } + } + + Media2ObjectL( aVideo, *object ); + TRAPD( err, aMdsId = iMDSSession->AddObjectL( *object ) ); + + if ( err != KErrNone ) + { + MPX_DEBUG2( "CVcxMyVideosMdsDb:: iMDSSession->AddObjectL leaved with error: %d", err ); + User::Leave( err ); + } + + if ( aMdsId == KNoId ) + { + MPX_DEBUG1( "CVcxMyVideosMdsDb::AddVideoL could not add new video" ); + User::Leave( KErrGeneral ); + } + else + { + MPX_DEBUG2( "CVcxMyVideosMdsDb::AddVideoL video created, mds id: %d", aMdsId ); + } + + CleanupStack::PopAndDestroy( object ); // <-1 + + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::RemoveVideo +// --------------------------------------------------------------------------- +// +TInt CVcxMyVideosMdsDb::RemoveVideo( TUint32 aMdsId ) + { + MPX_FUNC( "CVcxMyVideosMdsDb::RemoveVideoL" ); + + if ( !iMDSSession ) + { + MPX_DEBUG2("CVcxMyVideosMdsDb:: no mds session, returning %d", iMDSError); + return iMDSError; + } + + TInt retValue( KErrNone ); + TItemId id( 0 ); //init to avoid warning + + MPX_DEBUG2( "CVcxMyVideosMdsDb:: removing object %d", aMdsId ); + + TRAPD( err, id = iMDSSession->RemoveObjectL( aMdsId ) ); + + if ( err == KErrNone ) + { + if ( id == KNoId ) + { + MPX_DEBUG1( "CVcxMyVideosMdsDb:: video not found" ); + retValue = KErrNotFound; + } + else + { + MPX_DEBUG1( "CVcxMyVideosMdsDb:: remove successful" ); + } + } + else + { + MPX_DEBUG2( "CVcxMyVideosMdsDb:: iMDSSession->RemoveObjectL left: %d", err ); + retValue = err; + } + + return retValue; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::UpdateVideoL +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::UpdateVideoL( CMPXMedia& aVideo ) + { + MPX_FUNC( "CVcxMyVideosMdsDb::UpdateVideoL" ); + + if ( !iMDSSession ) + { + MPX_DEBUG2("CVcxMyVideosMdsDb:: no mds session(%d), leaving", iMDSError); + User::Leave( iMDSError ); + } + + TMPXItemId mpxId = aVideo.ValueTObjectL( KMPXMediaGeneralId ); + + MPX_DEBUG2("CVcxMyVideosMdsDb::UpdateVideoL updating object %d ", mpxId.iId1); + + CMdEObject* object = + iMDSSession->OpenObjectL( mpxId.iId1, *iVideoObjectDef ); + if ( object == NULL ) + { + // No object with this ID was found! + MPX_DEBUG1("CVcxMyVideosMdsDb::UpdateVideoL no object found"); + User::Leave( KErrNotFound ); + } + else + { + MPX_DEBUG1("CVcxMyVideosMdsDb::UpdateVideoL object found"); + + if ( object->OpenForModifications() ) + { + CleanupStack::PushL( object ); // 1-> + + Media2ObjectL( aVideo, *object ); + + iMDSSession->CommitObjectL(*object); + + CleanupStack::PopAndDestroy(object); + } + else + { + // Object is already locked! + MPX_DEBUG1("CVcxMyVideosMdsDb::UpdateVideoL object was locked!"); + delete object; + User::Leave( KErrInUse ); + } + } + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::CreateVideoListL +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::CreateVideoListL( TVcxMyVideosSortingOrder aSortingOrder, + TBool aAscending, TBool aFullDetails, CMPXMedia*& aVideoList ) + { + MPX_FUNC( "CVcxMyVideosMdsDb::CreateVideoListL" ); + + if ( !iMDSSession ) + { + MPX_DEBUG2("CVcxMyVideosMdsDb:: no mds session(%d), leaving", iMDSError); + User::Leave( iMDSError ); + } + + if ( iVideoListFetchingIsOngoing ) + { + MPX_DEBUG1("CVcxMyVideosMdsDb:: video list fetching already going on, returning current list"); + aVideoList = iVideoList; + } + + if ( !aVideoList ) + { + aVideoList = TVcxMyVideosCollectionUtil::CreateEmptyMediaListL(); + } + + CMPXMediaArray* mediaArray = aVideoList->Value( KMPXMediaArrayContents ); + + delete iVideoQuery; + iVideoQuery = NULL; + + iVideoQuery = iMDSSession->NewObjectQueryL( + *iNamespaceDef, + *iVideoObjectDef, + this); + + iVideoQuery->SetResultMode( EQueryResultModeItem ); + + TMdESortOrder direction; + + if ( aAscending ) + { + direction = ESortAscending; + } + else + { + direction = ESortDescending; + } + + switch ( aSortingOrder ) + { + case EVcxMyVideosSortingId: + { + MPX_DEBUG1("CVcxMyVideosMdsDb:: EVcxMyVideosSortingId"); + iVideoQuery->AppendOrderRuleL( + TMdEOrderRule( EOrderRuleTypeItemID, direction ) ); + } + break; + + case EVcxMyVideosSortingCreationDate: + { + MPX_DEBUG1("CVcxMyVideosMdsDb:: EVcxMyVideosSortingCreationDate"); + iVideoQuery->AppendOrderRuleL( + TMdEOrderRule( *iCreationDatePropertyDef/*EOrderRuleTypeCreationTime*/, direction ) ); + } + break; + + case EVcxMyVideosSortingModified: + { + MPX_DEBUG1("CVcxMyVideosMdsDb:: EVcxMyVideosSortingModified"); + iVideoQuery->AppendOrderRuleL( + TMdEOrderRule( *iLastModifiedDatePropertyDef/*EOrderRuleTypeLastModifiedDate*/, direction ) ); + } + break; + + case EVcxMyVideosSortingName: + { + MPX_DEBUG1("CVcxMyVideosMdsDb:: EVcxMyVideosSortingName"); + + TMdEOrderRule orderRule( *iTitlePropertyDef, direction ); + orderRule.SetCaseSensitive( EFalse /* insensitive */); + iVideoQuery->AppendOrderRuleL( orderRule ); + } + break; + + case EVcxMyVideosSortingSize: + { + MPX_DEBUG1("CVcxMyVideosMdsDb:: EVcxMyVideosSortingSize"); + iVideoQuery->AppendOrderRuleL( + TMdEOrderRule( *iSizePropertyDef, direction ) ); + } + break; + } + + iVideoListFetchingIsOngoing = ETrue; + + iFullDetails = aFullDetails; + + iVideoQuery->FindL(KMdEQueryDefaultMaxCount, 500); + + aVideoList->SetTObjectValueL( KMPXMediaGeneralType, EMPXGroup ); + aVideoList->SetTObjectValueL( KMPXMediaArrayCount, mediaArray->Count() ); + + iVideoList = aVideoList; // lets store the pointer, ownership stays at observer + } + +// --------------------------------------------------------------------------- +// From class MMdEQueryObserver. +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::HandleQueryNewResults( + CMdEQuery& aQuery, + TInt aFirstNewItemIndex, + TInt aNewItemCount ) + { + TRAPD( err, DoHandleQueryNewResultsL( aQuery, aFirstNewItemIndex, aNewItemCount )); + if ( err != KErrNone ) + { + MPX_DEBUG2("CVcxMyVideosMdsDb:: DoHandleQueryNewResultsL() left with error code: %d", err); + } + } + +// --------------------------------------------------------------------------- +// Leaving version of HandleQueryNewResults. +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::DoHandleQueryNewResultsL( + CMdEQuery& /*aQuery*/, + TInt aFirstNewItemIndex, +#ifdef _DEBUG + TInt aNewItemCount ) +#else + TInt /*aNewItemCount*/ ) +#endif + { + MPX_FUNC("CVcxMyVideosMdsDb::HandleQueryNewResults()"); + + if ( !iVideoList ) + { + MPX_DEBUG1("CVcxMyVideosMdsDb:: iVideoList is NULL, should never happen"); + return; + } + + MPX_DEBUG2("CVcxMyVideosMdsDb:: aFirstNewItemIndex = %d", aFirstNewItemIndex); + MPX_DEBUG2("CVcxMyVideosMdsDb:: aNewItemCount = %d", aNewItemCount); + + CMPXMediaArray* array = iVideoList->Value( KMPXMediaArrayContents ); + CMPXMedia* media; + TInt count = iVideoQuery->Count(); + + iVideoList->SetTObjectValueL( KMPXMediaArrayCount, count ); + + for ( TInt i = aFirstNewItemIndex; i < count; i++ ) + { + CMdEObject& object = iVideoQuery->Result( i ); + + media = CMPXMedia::NewL(); + CleanupStack::PushL( media ); // 1-> + + Object2MediaL( object, *media, iFullDetails ); + array->AppendL( media ); + + CleanupStack::Pop( media ); // <-1 + } + + iMdsDbObserver->HandleCreateVideoListResp( iVideoList, aFirstNewItemIndex, + EFalse /* not complete yet */); + } + + + +// --------------------------------------------------------------------------- +// From class MMdEQueryObserver. +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::HandleQueryCompleted( +#if _DEBUG + CMdEQuery& aQuery, +#else + CMdEQuery& /*aQuery*/, +#endif + TInt /*aError*/) + { + MPX_FUNC( "CVcxMyVideosMdsDb::HandleQueryCompleted" ); + + if ( !iVideoList ) + { + MPX_DEBUG1("CVcxMyVideosMdsDb:: iVideoList is NULL, should never happen"); + return; + } + +#ifdef _DEBUG + CMPXMediaArray* array = iVideoList->Value( KMPXMediaArrayContents ); +#endif + + MPX_DEBUG2("CVcxMyVideosMdsDb:: query contains %d items", aQuery.Count()); + MPX_DEBUG2("CVcxMyVideosMdsDb:: iVideoList contains %d items", array->Count()); + + if (iActiveSchedulerWait->IsStarted()) + { + iActiveSchedulerWait->AsyncStop(); + } + + iVideoListFetchingIsOngoing = EFalse; + iMdsDbObserver->HandleCreateVideoListResp( iVideoList, KErrNotFound /* KErrNotFound = no new items */, + ETrue /* complete */); + + iVideoList = NULL; // not owned by us -> just clear + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::CreateVideoL +// --------------------------------------------------------------------------- +// +CMPXMedia* CVcxMyVideosMdsDb::CreateVideoL( TUint32 aId, TBool aFullDetails ) + { + MPX_FUNC( "CVcxMyVideosMdsDb::CreateVideoL" ); + + CMdEObject* object = ObjectL( aId ); + + CMPXMedia* video = NULL; + + if ( object ) + { + CleanupStack::PushL( object ); // 1-> + + video = CMPXMedia::NewL( ); + CleanupStack::PushL( video ); // 2-> + + Object2MediaL( *object, *video, aFullDetails ); + + CleanupStack::Pop( video ); // <-2 + CleanupStack::PopAndDestroy( object ); // <-1 + } + + return video; + } + +// --------------------------------------------------------------------------- +// From class MMdESessionObserver. +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::HandleSessionOpened( + CMdESession& /*aSession*/, + TInt aError) + { + MPX_FUNC( "CVcxMyVideosMdsDb::HandleSessionOpened" ); + + iActiveSchedulerWait->AsyncStop(); + + if ( aError != KErrNone ) + { + MPX_DEBUG2( "CVcxMyVideosMdsDb::HandleSessionOpened: %d", aError ); + + iMDSError = aError; + delete iMDSSession; + iMDSSession = NULL; + } + } + +// --------------------------------------------------------------------------- +// From class MMdESessionObserver. +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::HandleSessionError( + CMdESession& /*aSession*/, + TInt aError) + { + MPX_FUNC( "CVcxMyVideosMdsDb::HandleSessionError" ); + + if (iActiveSchedulerWait->IsStarted()) + { + MPX_DEBUG1( "CVcxMyVideosMdsDb:: Session opening was going on"); + iActiveSchedulerWait->AsyncStop(); + } + + if ( iVideoListFetchingIsOngoing ) + { + MPX_DEBUG1( "CVcxMyVideosMdsDb:: Videolist fetching was going on"); + iVideoListFetchingIsOngoing = EFalse; +// delete iVideoQuery; +// iVideoQuery = NULL; + iMdsDbObserver->HandleCreateVideoListResp( iVideoList, -1 /* -1 = no new items */, + ETrue /* complete */); + } + + MPX_DEBUG2( "CVcxMyVideosMdsDb::HandleSessionError: %d", aError ); + + iMDSError = aError; + delete iMDSSession; + iMDSSession = NULL; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::HandleObjectNotification +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::HandleObjectNotification( + CMdESession& /*aSession*/, + TObserverNotificationType aType, + const RArray& aObjectIdArray) + { + TRAP( iMDSError, DoHandleObjectNotificationL( aType, aObjectIdArray )); + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::ObjectL +// --------------------------------------------------------------------------- +// +CMdEObject* CVcxMyVideosMdsDb::ObjectL( const TItemId aId ) + { + if ( !iMDSSession ) + { + MPX_DEBUG2("CVcxMyVideosMdsDb:: no mds session(%d), leaving", iMDSError); + User::Leave( iMDSError ); + } + + // If the id is not valid, just return NULL, because + // iMDSSession->GetObjectL leaves in that case + if ( aId == KNoId ) + { + return NULL; + } + + CMdEObject* object = iMDSSession->GetObjectL( aId, *iVideoObjectDef ); + + if ( object ) + { + MPX_DEBUG2( "CVcxMyVideosMdsDb::ObjectL found, id: %d", aId ); + } + else + { + MPX_DEBUG2( "CVcxMyVideosMdsDb::ObjectL not found, id: %d", aId ); + } + + return object; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::Object2MediaL +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::Object2MediaL( + CMdEObject& aObject, + CMPXMedia& aVideo, + TBool aFullDetails ) + { + aVideo.SetTObjectValueL(KMPXMediaGeneralType, EMPXItem ); + + CMdEProperty* property = NULL; + + //1. ID, KMPXMediaGeneralId (BRIEF) + TMPXItemId mpxId; + mpxId.iId1 = aObject.Id(); + aVideo.SetTObjectValueL( KMPXMediaGeneralId, mpxId ); + + //2. TITLE (BRIEF) + if ( aObject.Property( *iTitlePropertyDef, property, 0 ) != KErrNotFound ) + { + aVideo.SetTextValueL( KMPXMediaGeneralTitle, + static_cast(property)->Value()); + } + + // This is a fix for setting the title always + if ( !property || static_cast(property)->Value().Length() == 0 ) + { + TEntry entry; + TParse parse; + + if ( iFs.Entry( aObject.Uri(), entry ) == KErrNone ) + { + parse.Set( entry.iName, NULL, NULL ); + } + else + { + parse.Set( aObject.Uri(), NULL, NULL ); + } + aVideo.SetTextValueL( KMPXMediaGeneralTitle, + parse.Name()); + } + + //3. DESCRIPTION + if ( aObject.Property( *iDescriptionPropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + aVideo.SetTextValueL( KMPXMediaGeneralComment, + static_cast(property)->Value() ); + } + + //4. URI (= FILE PATH) (BRIEF) + aVideo.SetTextValueL( KMPXMediaGeneralUri, aObject.Uri() ); + + //5. FILE SIZE, KMPXMediaGeneralSize (BRIEF) + // With 64bit support the value will be copied after reading KMPXMediaGeneralExtSizeInt64 +#ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + if (KErrNotFound != + aObject.Property( *iSizePropertyDef, property, 0 )) + { + aVideo.SetTObjectValueL( KMPXMediaGeneralSize, + static_cast(property)->Value() ); + } + + // If the size was not found or it is 0, get it from the file + if ( !(aVideo.Value( KMPXMediaGeneralSize )) ) + { + TEntry entry; + TInt err = iFs.Entry( aObject.Uri(), entry ); + if ( err == KErrNone ) + { + aVideo.SetTObjectValueL( KMPXMediaGeneralSize, entry.iSize ); + } + } +#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + + //6. CREATION DATE, KMPXMediaGeneralDate + if ( aObject.Property( *iCreationDatePropertyDef, property, 0 ) != KErrNotFound ) + { + aVideo.SetTObjectValueL( KMPXMediaGeneralDate, + static_cast(property)->Value().Int64() ); + } + + //7. FLAGS, KMPXMediaGeneralFlags (BRIEF) + TUint32 flags = 0; + if ( aObject.Property( *iFlagsPropertyDef, property, 0 ) != KErrNotFound ) + { + flags = static_cast(property)->Value(); + } + else + { + // MDS didn't have flags variable set at all, so this is harvested video. + // Set new flag on. + flags |= EVcxMyVideosVideoNew; + } + if ( aObject.Property( *iDrmPropertyDef, property, 0 ) != KErrNotFound ) + { + TBool drmProtected = static_cast(property)->Value(); + if ( drmProtected ) + { + flags |= EVcxMyVideosVideoDrmProtected; + } + } + aVideo.SetTObjectValueL( KMPXMediaGeneralFlags, flags ); + + //8. COPYRIGHT, KMPXMediaGeneralCopyright + if ( aObject.Property( *iCopyrightPropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + aVideo.SetTextValueL( KMPXMediaGeneralCopyright, + static_cast(property)->Value() ); + } + + //9. KMPXMediaGeneralMimeType + if ( aObject.Property( *iItemTypePropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + aVideo.SetTextValueL( KMPXMediaGeneralMimeType, + static_cast(property)->Value() ); + } + + //11. FILE SIZE, KMPXMediaGeneralExtSizeInt64 (BRIEF) +#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + if (KErrNotFound != + aObject.Property( *iSizePropertyDef, property, 0 )) + { + TUint32 val = static_cast(property)->Value(); + aVideo.SetTObjectValueL( KMPXMediaGeneralExtSizeInt64, val ); + // Maintains compatibility + aVideo.SetTObjectValueL( KMPXMediaGeneralSize, val ); + } + + // If the size was not found or it is 0, get it from the file + if ( !(aVideo.Value( KMPXMediaGeneralExtSizeInt64 )) ) + { + TEntry entry; + TInt err = iFs.Entry( aObject.Uri(), entry ); + if ( err == KErrNone ) + { + aVideo.SetTObjectValueL( KMPXMediaGeneralExtSizeInt64, entry.FileSize() ); + // Maintains compatibility + aVideo.SetTObjectValueL( KMPXMediaGeneralSize, entry.iSize ); + } + } +#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + + //12. KVcxMediaMyVideosModifiedDate + if ( aObject.Property( *iLastModifiedDatePropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + aVideo.SetTObjectValueL( KVcxMediaMyVideosModifiedDate, + static_cast(property)->Value().Int64() ); + } + + //13. KVcxMediaMyVideosAgeProfile (BRIEF) + if ( aObject.Property( *iAgeProfilePropertyDef, property, 0 ) != KErrNotFound ) + { + aVideo.SetTObjectValueL( KVcxMediaMyVideosAgeProfile, + static_cast(property)->Value() ); + } + + //14. KVcxMediaMyVideosAudioLanguage + if ( aObject.Property( *iAudioLanguagePropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + aVideo.SetTextValueL( KVcxMediaMyVideosAudioLanguage, + static_cast(property)->Value() ); + } + + //15. AUTHOR, KVcxMediaMyVideosAuthor + if ( aObject.Property( *iAuthorPropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + aVideo.SetTextValueL( KVcxMediaMyVideosAuthor, + static_cast(property)->Value() ); + } + + //16. ORIGIN, KVcxMediaMyVideosOrigin + if ( aObject.Property( *iOriginPropertyDef, property, 0 ) != KErrNotFound ) + { + aVideo.SetTObjectValueL( KVcxMediaMyVideosOrigin, + static_cast(property)->Value() ); + } + + //17. DURATION, (KMPXMediaGeneralDuration can't be used since it is TInt + // and we need TReal32 ) (BRIEF) + if ( aObject.Property( *iDurationPropertyDef, property, 0 ) != KErrNotFound ) + { + aVideo.SetTObjectValueL( KVcxMediaMyVideosDuration, + static_cast(property)->Value() ); + } + + //10. LAST PLAYBACK POSITION + // KMPXMediaGeneralLastPlaybackPosition + if ( aObject.Property( *iLastPlayPositionPropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + TInt pos = static_cast(property)->Value(); + + aVideo.SetTObjectValueL( KMPXMediaGeneralLastPlaybackPosition, pos ); + } + + //18. DOWNLOAD ID (BRIEF) + if ( aObject.Property( *iDownloadIdPropertyDef, property, 0 ) != KErrNotFound ) + { + aVideo.SetTObjectValueL( KVcxMediaMyVideosDownloadId, + static_cast(property)->Value() ); + } + else + { + aVideo.SetTObjectValueL( KVcxMediaMyVideosDownloadId, 0 ); + } + + //19. RATING (FULL) + if ( aObject.Property( *iRatingPropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + aVideo.SetTObjectValueL( KVcxMediaMyVideosRating, + static_cast(property)->Value() ); + } + else + { + aVideo.SetTObjectValueL( KVcxMediaMyVideosRating, 0 ); + } + + //20. BITRATE (FULL) + if ( aObject.Property( *iBitratePropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + TUint16 bitrate = static_cast(property)->Value(); + aVideo.SetTObjectValueL( KMPXMediaVideoBitRate, bitrate ); + } + + //21. AUDIOFOURCC (BRIEF) + if ( aObject.Property( *iAudioFourCcPropertyDef, property, 0 ) != KErrNotFound ) + { + aVideo.SetTObjectValueL( KVcxMediaMyVideosAudioFourCc, + static_cast(property)->Value() ); + } + else + { + aVideo.SetTObjectValueL( KVcxMediaMyVideosAudioFourCc, 0 ); + } + + //22. WIDTH (FULL) + if ( aObject.Property( *iWidthPropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + aVideo.SetTObjectValueL( KMPXMediaVideoWidth, + static_cast(property)->Value() ); + } + + //23. Height (FULL) + if ( aObject.Property( *iHeightPropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + aVideo.SetTObjectValueL( KMPXMediaVideoHeight, + static_cast(property)->Value() ); + } + + //24. ARTIST (FULL) + if ( aObject.Property( *iArtistPropertyDef, property, 0 ) != KErrNotFound + && aFullDetails ) + { + aVideo.SetTextValueL( KMPXMediaVideoArtist, + static_cast(property)->Value()); + } + + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::Media2ObjectL +// Called by AddVideoL() +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::Media2ObjectL( + CMPXMedia& aVideo, + CMdEObject& aObject) + { + CMdEProperty* property; + + // 1. MDS ID + + // 2. TITLE (NAME) + if ( aVideo.IsSupported( KMPXMediaGeneralTitle ) ) + { + if ( aObject.Property( *iTitlePropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( + aVideo.ValueText( KMPXMediaGeneralTitle ) ); + } + else + { + aObject.AddTextPropertyL( + *iTitlePropertyDef, aVideo.ValueText( KMPXMediaGeneralTitle ) ); + } + } + + // 3. DESC + if ( aVideo.IsSupported( KMPXMediaGeneralComment ) ) + { + if ( aObject.Property( *iDescriptionPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( + aVideo.ValueText( KMPXMediaGeneralComment ) ); + } + else + { + aObject.AddTextPropertyL( + *iDescriptionPropertyDef, aVideo.ValueText( KMPXMediaGeneralComment ) ); + } + } + + // 4. URI ( = file path ) + if ( aVideo.IsSupported( KMPXMediaGeneralUri ) ) + { + aObject.SetUriL( aVideo.ValueText( KMPXMediaGeneralUri ) ); + TVolumeInfo volInfo; + // 4.1 MEDIA ID ( = drive number ) + if ( iFs.Volume( volInfo, TVcxMyVideosCollectionUtil::DriveLetter2DriveNumber( + aObject.Uri() ) ) == KErrNone) + { + aObject.SetMediaId( volInfo.iUniqueID ); + } + } + + // 5. With 64bit support KMPXMediaGeneralSize is not used, see KMPXMediaGeneralExtSizeInt64 +#ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + if ( aVideo.IsSupported( KMPXMediaGeneralSize ) ) + { + TUint32 size = 0; + TInt sizeInMediaObject = aVideo.ValueTObjectL( KMPXMediaGeneralSize ); + size = static_cast( sizeInMediaObject ); + + if ( aObject.Property( *iSizePropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast( property )->SetValueL( size ); + } + else + { + aObject.AddUint32PropertyL( *iSizePropertyDef, size ); + } + } +#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + +#if 0 + // 6. KMPXMediaGeneralDate ( creation date ) + if ( aVideo.IsSupported( KMPXMediaGeneralDate ) ) + { + TInt64 creationDateInt64 = 0; + creationDateInt64 = aVideo.ValueTObjectL( KMPXMediaGeneralDate ); + TTime creationDate( creationDateInt64 ); + if ( aObject.Property( *iCreationDatePropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( creationDate ); + } + else + { + aObject.AddTimePropertyL( *iCreationDatePropertyDef, creationDate ); + } + } +#endif + + // 7. KMPXMediaGeneralFlags (including DRM flag) + if ( aVideo.IsSupported( KMPXMediaGeneralFlags ) ) + { + TUint32 flags = aVideo.ValueTObjectL( KMPXMediaGeneralFlags ); + if ( aObject.Property( *iFlagsPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( flags ); + } + else + { + aObject.AddUint32PropertyL( *iFlagsPropertyDef, flags ); + } + + TBool drmProtected; + if ( flags & EVcxMyVideosVideoDrmProtected ) + { + drmProtected = ETrue; + } + else + { + drmProtected = EFalse; + } + + if ( aObject.Property( *iDrmPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( drmProtected ); + } + else + { + aObject.AddBoolPropertyL( *iDrmPropertyDef, drmProtected ); + } + } + + // 8. KMPXMediaGeneralCopyright + if ( aVideo.IsSupported( KMPXMediaGeneralCopyright )) + { + if ( aObject.Property( *iCopyrightPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( + aVideo.ValueText( KMPXMediaGeneralCopyright ) ); + } + else + { + if ( aVideo.ValueText( KMPXMediaGeneralCopyright ).Length() ) + { + aObject.AddTextPropertyL( + *iCopyrightPropertyDef, + aVideo.ValueText( KMPXMediaGeneralCopyright ) ); + } + } + } + +#if 0 + // 9. KMPXMediaGeneralMimeType + if ( aVideo.IsSupported( KMPXMediaGeneralMimeType )) + { + if ( aObject.Property( *iItemTypePropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( + aVideo.ValueText( KMPXMediaGeneralMimeType ) ); + } + else + { + aObject.AddTextPropertyL( + *iItemTypePropertyDef, + aVideo.ValueText( KMPXMediaGeneralMimeType ) ); + } + } +#endif + + // 11. KMPXMediaGeneralExtSizeInt64 +#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + if ( aVideo.IsSupported( KMPXMediaGeneralExtSizeInt64 ) ) + { + TUint32 size = 0; + TInt64 sizeInMediaObject = aVideo.ValueTObjectL( KMPXMediaGeneralExtSizeInt64 ); + size = static_cast( sizeInMediaObject ); + + if ( aObject.Property( *iSizePropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast( property )->SetValueL( size ); + } + else + { + aObject.AddUint32PropertyL( *iSizePropertyDef, size ); + } + } +#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + + // 12. KVcxMediaMyVideosModifiedDate + if ( aVideo.IsSupported( KVcxMediaMyVideosModifiedDate ) ) + { + TInt64 modifiedDateInt64 = aVideo.ValueTObjectL( KVcxMediaMyVideosModifiedDate ); + TTime modifiedDate( modifiedDateInt64 ); + if ( aObject.Property( *iLastModifiedDatePropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( modifiedDate ); + } + else + { + aObject.AddTimePropertyL( *iLastModifiedDatePropertyDef, modifiedDate ); + } + } + + // 13. KVcxMediaMyVideosAgeProfile + if ( aVideo.IsSupported( KVcxMediaMyVideosAgeProfile ) ) + { + TInt32 ageProfile = aVideo.ValueTObjectL(KVcxMediaMyVideosAgeProfile ); + if ( aObject.Property( *iAgeProfilePropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( ageProfile ); + } + else + { + aObject.AddInt32PropertyL( *iAgeProfilePropertyDef, ageProfile ); + } + } + + // 14. KVcxMediaMyVideosAudioLanguage + if ( aVideo.IsSupported( KVcxMediaMyVideosAudioLanguage ) ) + { + if ( aObject.Property( *iAudioLanguagePropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( + aVideo.ValueText( KVcxMediaMyVideosAudioLanguage ) ); + } + else + { + aObject.AddTextPropertyL( + *iAudioLanguagePropertyDef, + aVideo.ValueText( KVcxMediaMyVideosAudioLanguage ) ); + } + } + + // 15. KVcxMediaMyVideosAuthor + if ( aVideo.IsSupported( KVcxMediaMyVideosAuthor ) ) + { + if ( aObject.Property( *iAuthorPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( + aVideo.ValueText( KVcxMediaMyVideosAuthor ) ); + } + else + { + aObject.AddTextPropertyL( + *iAuthorPropertyDef, + aVideo.ValueText( KVcxMediaMyVideosAuthor ) ); + } + } + + // 16. KVcxMediaMyVideosOrigin + if ( aVideo.IsSupported( KVcxMediaMyVideosOrigin ) ) + { + TUint8 origin = aVideo.ValueTObjectL( KVcxMediaMyVideosOrigin ); + if ( aObject.Property( *iOriginPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( origin ); + } + else + { + aObject.AddUint8PropertyL( *iOriginPropertyDef, origin ); + } + } + + // 17. KVcxMediaMyVideosDuration + if ( aVideo.IsSupported( KVcxMediaMyVideosDuration )) + { + TReal32 duration = aVideo.ValueTObjectL( KVcxMediaMyVideosDuration ); + + if ( aObject.Property( *iDurationPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( duration ); + } + else + { + aObject.AddReal32PropertyL( *iDurationPropertyDef, duration ); + } + } + + // 10. KMPXMediaGeneralLastPlaybackPosition + if ( aVideo.IsSupported( KMPXMediaGeneralLastPlaybackPosition )) + { + TReal32 lastPlaybackPos = aVideo.ValueTObjectL( + KMPXMediaGeneralLastPlaybackPosition ); + + // Play pos is written only after playback. Reset new video flag + // now, so there's no need for changing the flag explitically + if ( aObject.Property( *iFlagsPropertyDef, property, 0 ) != KErrNotFound ) + { + TUint32 flags = static_cast(property)->Value(); + + flags &= ~EVcxMyVideosVideoNew; + + static_cast(property)->SetValueL( flags ); + } + + if ( aObject.Property( *iLastPlayPositionPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( lastPlaybackPos ); + } + else + { + aObject.AddReal32PropertyL( *iLastPlayPositionPropertyDef, lastPlaybackPos ); + } + } + + // 18. DOWNLOAD ID + if ( aVideo.IsSupported( KVcxMediaMyVideosDownloadId ) ) + { + TUint32 dlId = aVideo.ValueTObjectL( KVcxMediaMyVideosDownloadId ); + + if ( aObject.Property( *iDownloadIdPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( dlId ); + } + else + { + aObject.AddUint32PropertyL( *iDownloadIdPropertyDef, dlId ); + } + } + + // 19. RATING + if ( aVideo.IsSupported( KVcxMediaMyVideosRating ) ) + { + TUint8 rating = aVideo.ValueTObjectL( KVcxMediaMyVideosRating ); + + if ( aObject.Property( *iRatingPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( rating ); + } + else + { + aObject.AddUint8PropertyL( *iRatingPropertyDef, rating ); + } + } + // 20. BITRATE + if ( aVideo.IsSupported( KMPXMediaVideoBitRate ) ) + { + TUint16 bitrate = aVideo.ValueTObjectL( KMPXMediaVideoBitRate ); + + if ( aObject.Property( *iBitratePropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( bitrate ); + } + else + { + aObject.AddUint16PropertyL( *iBitratePropertyDef, bitrate ); + } + } + + // 21. AUDIOFOURCC + if ( aVideo.IsSupported( KVcxMediaMyVideosAudioFourCc ) ) + { + TUint32 audioFourCc = aVideo.ValueTObjectL( KVcxMediaMyVideosAudioFourCc ); + + if ( aObject.Property( *iAudioFourCcPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( audioFourCc ); + } + else + { + aObject.AddUint32PropertyL( *iAudioFourCcPropertyDef, audioFourCc ); + } + } + + //22. WIDTH (FULL) + if ( aVideo.IsSupported( KMPXMediaVideoWidth ) ) + { + TUint16 width = aVideo.ValueTObjectL( KMPXMediaVideoWidth ); + + if ( aObject.Property( *iWidthPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( width ); + } + else + { + aObject.AddUint16PropertyL( *iWidthPropertyDef, width ); + } + } + + //23. Height (FULL) + if ( aVideo.IsSupported( KMPXMediaVideoHeight ) ) + { + TUint16 width = aVideo.ValueTObjectL( KMPXMediaVideoHeight ); + + if ( aObject.Property( *iHeightPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( width ); + } + else + { + aObject.AddUint16PropertyL( *iHeightPropertyDef, width ); + } + } + + // 24. Artist + if ( aVideo.IsSupported( KMPXMediaVideoArtist ) ) + { + if ( aObject.Property( *iArtistPropertyDef, property, 0 ) != KErrNotFound ) + { + static_cast(property)->SetValueL( + aVideo.ValueText( KMPXMediaVideoArtist ) ); + } + else + { + aObject.AddTextPropertyL( + *iArtistPropertyDef, aVideo.ValueText( KMPXMediaVideoArtist ) ); + } + } + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::GetSchemaDefinitionsL +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::GetSchemaDefinitionsL() + { + MPX_FUNC( "CVcxMyVideosMdsDb::GetSchemaDefinitionsL" ); + + // Namespace + iNamespaceDef = &(iMDSSession->GetDefaultNamespaceDefL()); + + // Default object definitions + iVideoObjectDef = &(iNamespaceDef->GetObjectDefL( KVcxVideoObjectName )); + + // Base object property definitions + iTitlePropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxTitlePropertyName )); //2 + iSizePropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxSizePropertyName )); //11 (5 also) + iCreationDatePropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxCreationDatePropertyName )); //6 + iTimeOffsetPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxTimeOffsetPropertyName )); //6 + iItemTypePropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxItemTypePropertyName )); //9 + iLastModifiedDatePropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxLastModifiedDatePropertyName )); //12 + + // Media object property definitions + iDescriptionPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxDescriptionPropertyName)); //3 + iCopyrightPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxCopyrightPropertyName )); //8 + iAuthorPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxAuthorPropertyName )); //15 + iOriginPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxOriginPropertyName )); //16 + iDurationPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxDurationPropertyName )); //17 + iDrmPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxDrmPropertyName )); //part of flags (7) + iRatingPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxRatingPropertyName )); //19 + iBitratePropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxBitratePropertyName )); //20 + iAudioFourCcPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxAudioFourCcPropertyName )); //21 + iWidthPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxWidthPropertyName )); //22 + iHeightPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxHeightPropertyName )); //23 + iArtistPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxArtistPropertyName )); //24 + + // Video object property definitions + iLastPlayPositionPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxLastPlayPositionPropertyName )); //10 + + iFlagsPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxFlagsPropertyName )); //7 + + iAgeProfilePropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxAgeProfilePropertyName )); //13 + + iAudioLanguagePropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxAudioLanguagePropertyName )); //14 + + iDownloadIdPropertyDef = &(iVideoObjectDef->GetPropertyDefL( + KVcxDownloadIdPropertyName )); //18 + + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::DoHandleObjectNotificationL +// --------------------------------------------------------------------------- +// +void CVcxMyVideosMdsDb::DoHandleObjectNotificationL( + TObserverNotificationType aType, + const RArray& aObjectIdArray ) + { + MPX_FUNC( "CVcxMyVideosMdsDb::DoHandleObjectNotificationL" ); + + if ( iMdsDbObserver ) + { + RArray idArray; + CleanupClosePushL( idArray ); // 1-> + + for ( TInt i = 0; i < aObjectIdArray.Count(); i++ ) + { + idArray.Append( aObjectIdArray[i] ); + } + + if ( aType & ENotifyAdd ) + { + iMdsDbObserver->HandleMyVideosDbEvent( EMPXItemInserted, idArray ); + } + else if ( aType & ENotifyModify ) + { + iMdsDbObserver->HandleMyVideosDbEvent( EMPXItemModified, idArray ); + } + else if ( aType & ENotifyRemove ) + { + iMdsDbObserver->HandleMyVideosDbEvent( EMPXItemDeleted, idArray ); + } + + CleanupStack::PopAndDestroy( &idArray ); // <-1 + } + + } +