diff -r 5e1df1b52eb3 -r 72396548277c engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsattribute.cpp --- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsattribute.cpp Mon May 17 13:35:26 2010 +0530 +++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsattribute.cpp Fri May 28 21:11:54 2010 +0530 @@ -57,7 +57,7 @@ #include #include #include - +#include #include "glxdatasourcemds.h" #include "glxdatasourcemds.hrh" #include "glxdatasourcemdsutility.h" @@ -83,7 +83,9 @@ // Constructor // ---------------------------------------------------------------------------- // -CGlxDataSourceTaskMdeAttributeMde::CGlxDataSourceTaskMdeAttributeMde(CGlxGetRequest* aRequest, MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource) +CGlxDataSourceTaskMdeAttributeMde::CGlxDataSourceTaskMdeAttributeMde( + CGlxGetRequest* aRequest,MGlxDataSourceRequestObserver& aObserver, + CGlxDataSource* aDataSource) : CGlxDataSourceTaskMde(aRequest, aObserver, aDataSource) { TRACER("CGlxDataSourceTaskMdeAttribute::CGlxDataSourceTaskMdeAttribute()") @@ -108,16 +110,14 @@ void CGlxDataSourceTaskMdeAttributeMde::ExecuteRequestL() { TRACER("CGlxDataSourceTaskMdeAttribute::ExecuteRequestL()") - GLX_LOG_ENTRY_EXIT("CGlxDataSourceTaskMdeAttribute::ExecuteRequestL"); +#ifdef _DEBUG + iStartTime.HomeTime(); +#endif CGlxGetRequest* request = static_cast(iRequest); __ASSERT_DEBUG(request->MediaIds().Count() > 0, User::Invariant()); - - GLX_LOG_INFO("==> CGlxDataSourceTaskMdeAttributeMde::ExecuteRequestL"); -#ifdef _DEBUG - iStartTime.HomeTime(); // Get home time -#endif + if (request->MediaIds().Count() > 1) { iMediaArray = CMPXMediaArray::NewL(); @@ -130,26 +130,8 @@ } else { - - /* __ASSERT_DEBUG(dynamic_cast(iRequest), Panic(EGlxPanicLogicError)); - CGlxGetRequest* request = static_cast(iRequest); - - QueueImageVideoObjectQueriesL(request->MediaIds(), iFilterProperties); - QueueAlbumObjectQueryL(request->MediaIds()); - QueueTagObjectQueryL(request->MediaIds()); - QueueMonthObjectQueryL(request->MediaIds()); - - if (LocationAttributeRequested()) - { - QueueLocaitonQueryL(); - } - - */ - __ASSERT_DEBUG(dynamic_cast(iRequest), Panic(EGlxPanicLogicError)); CGlxGetRequest* request = static_cast(iRequest); -// Not used anywhere, commenting out this line to avoid BAD warning -// const RArray& mediaIds = reinterpret_cast&>(request->MediaIds()); switch(iFilterProperties.iItemType) { @@ -211,6 +193,11 @@ Panic(EGlxPanicLogicError); break; } +#ifdef _DEBUG + iStopTime.HomeTime(); + GLX_DEBUG2("CGlxDataSourceTaskMdeAttributeMde:DoHandleQueryCompletedL() took %d us", + (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64()); +#endif } // ---------------------------------------------------------------------------- @@ -292,7 +279,8 @@ { if ( request->Attributes()[i] == KMPXMediaGeneralId ) { - aEntry->SetTObjectValueL(KMPXMediaGeneralId, (TMPXItemId)request->CollectionPluginUid().iUid); + aEntry->SetTObjectValueL(KMPXMediaGeneralId, ( + TMPXItemId)request->CollectionPluginUid().iUid); } else if ( request->Attributes()[i] == KMPXMediaGeneralType ) { @@ -323,12 +311,14 @@ { case KGlxCollectionPluginCameraImplementationUid: { -#if 0 /// @todo AB camera album +#if 0 /// AB camera album container = DataSource()->CameraAlbumId(); objectDef = &DataSource()->AlbumDef(); #endif filterProperties.iItemType = EGlxFilterImage; - QueueObjectQueryL(*objectDef, isContent, EAttributeQuery, EQueryResultModeCount, container, request->Attributes()[i], aEntry, filterProperties); + QueueObjectQueryL(*objectDef, isContent, EAttributeQuery, + EQueryResultModeCount, container, + request->Attributes()[i], aEntry, filterProperties); break; } default: @@ -350,12 +340,14 @@ { case KGlxCollectionPluginCameraImplementationUid: { -#if 0 /// @todo AB camera album +#if 0 /// AB camera album container = DataSource()->CameraAlbumId(); objectDef = &DataSource()->AlbumDef(); #endif filterProperties.iItemType = EGlxFilterVideo; - QueueObjectQueryL(*objectDef, isContent, EAttributeQuery, EQueryResultModeCount, container, request->Attributes()[i], aEntry, filterProperties); + QueueObjectQueryL(*objectDef, isContent, EAttributeQuery, + EQueryResultModeCount, container, + request->Attributes()[i],aEntry, filterProperties); break; } default: @@ -366,7 +358,8 @@ } - else if ( ( request->Attributes()[i] == KMPXMediaGeneralCount ) || ( request->Attributes()[i] == KGlxMediaCollectionInternalUsageCount ) ) + else if ( ( request->Attributes()[i] == KMPXMediaGeneralCount ) || + ( request->Attributes()[i] == KGlxMediaCollectionInternalUsageCount ) ) { TGlxMediaId container = TGlxMediaId(KGlxCollectionRootId); CMdEObjectDef* objectDef = &DataSource()->ObjectDef(); @@ -395,39 +388,51 @@ } case KGlxCollectionPluginMonthsImplementationUid: { - filterProperties.iOrigin = EGlxFilterOriginCamera; + filterProperties.iOrigin = EGlxFilterOriginAll; break; } - /* case KGlxCollectionPluginDownloadsImplementationUid: - { - filterProperties.iOrigin = EGlxFilterOriginDownload; - break; - }*/ default: { // default gallery query returns all objects as per filter break; } } - QueueObjectQueryL(*objectDef, isContent, EAttributeQuery, EQueryResultModeCount, container, request->Attributes()[i], aEntry, filterProperties); + QueueObjectQueryL(*objectDef, isContent, EAttributeQuery, + EQueryResultModeCount, container, request->Attributes()[i], + aEntry, filterProperties); } else if ( request->Attributes()[i] == KMPXMediaColDetailSpaceId ) { - aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, KGlxDataSourceMdeImplementationUid); + aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, + KGlxDataSourceMdeImplementationUid); } else if ( request->Attributes()[i] == KGlxMediaCollectionInternalStartDate ) { + GLX_DEBUG1("CGlxDataSourceTaskMdeAttributeMde::AddCollectionAttributesL - KGlxMediaCollectionInternalStartDate"); TGlxMediaId container = TGlxMediaId(KGlxCollectionRootId); TGlxFilterProperties filterProperties = iFilterProperties; filterProperties.iSortOrder = EGlxFilterSortOrderCaptureDate; filterProperties.iSortDirection = EGlxFilterSortDirectionAscending; - filterProperties.iOrigin = EGlxFilterOriginCamera; + filterProperties.iOrigin = EGlxFilterOriginAll; + filterProperties.iMaxCount = 1 ; - QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, EQueryResultModeObjectWithFreetexts,container, KGlxMediaCollectionInternalStartDate, aEntry, filterProperties); + QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, + EQueryResultModeItem, container, + KGlxMediaCollectionInternalStartDate, aEntry, filterProperties); } else if ( request->Attributes()[i] == KGlxMediaCollectionInternalEndDate ) { - // not necessary to be requested, returned when StartDate requested + GLX_DEBUG1("CGlxDataSourceTaskMdeAttributeMde::AddCollectionAttributesL - KGlxMediaCollectionInternalEndDate"); + TGlxMediaId container = TGlxMediaId(KGlxCollectionRootId); + TGlxFilterProperties filterProperties = iFilterProperties; + filterProperties.iSortOrder = EGlxFilterSortOrderCaptureDate; + filterProperties.iSortDirection = EGlxFilterSortDirectionDescending; + filterProperties.iOrigin = EGlxFilterOriginAll; + filterProperties.iMaxCount = 1 ; + + QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, + EQueryResultModeItem, container, + KGlxMediaCollectionInternalEndDate, aEntry, filterProperties); } else if ( request->Attributes()[i] == KGlxMediaGeneralSlideshowableContent ) { @@ -456,7 +461,8 @@ // CGlxDataSourceTaskMdeAttribute::AddContainerAttributesL // ---------------------------------------------------------------------------- // -void CGlxDataSourceTaskMdeAttributeMde::AddContainerAttributesL(CMPXMedia* aEntry, CMdEObject* aContainer, CGlxDataSource::TContainerType aType) +void CGlxDataSourceTaskMdeAttributeMde::AddContainerAttributesL(CMPXMedia* aEntry, + CMdEObject* aContainer, CGlxDataSource::TContainerType aType) { TRACER("CGlxDataSourceTaskMdeAttribute::AddContainerAttributesL()") __ASSERT_DEBUG(aEntry, Panic(EGlxPanicLogicError)); @@ -464,12 +470,13 @@ __ASSERT_DEBUG(dynamic_cast(iRequest), Panic(EGlxPanicLogicError)); CGlxGetRequest* request = static_cast(iRequest); - /// @todo check property defs are valid and type is correct + /// check property defs are valid and type is correct for ( TInt i = 0; i < request->Attributes().Count(); i++ ) { if ( request->Attributes()[i] == KMPXMediaGeneralId ) { - aEntry->SetTObjectValueL(KMPXMediaGeneralId, (TMPXItemId)aContainer->Id()); + aEntry->SetTObjectValueL(KMPXMediaGeneralId, + (TMPXItemId)aContainer->Id()); } else if ( request->Attributes()[i] == KMPXMediaGeneralType ) { @@ -501,7 +508,8 @@ else if ( request->Attributes()[i] == KMPXMediaGeneralTitle ) { CMdEProperty* title; - CMdEPropertyDef& titleProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameTitle); + CMdEPropertyDef& titleProperty = aContainer->Def().GetPropertyDefL( + KPropertyDefNameTitle); TInt titleIndex = aContainer->Property(titleProperty, title); if(titleIndex == KErrNotFound) { @@ -510,22 +518,26 @@ } else { - aEntry->SetTextValueL(KMPXMediaGeneralTitle, static_cast(title)->Value()); + aEntry->SetTextValueL(KMPXMediaGeneralTitle, static_cast + (title)->Value()); } switch (aType) { case CGlxDataSource::EContainerTypeAlbum: { CMdEProperty* albumType; - CMdEPropertyDef& albumTypeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameAlbumType); + CMdEPropertyDef& albumTypeProperty = + aContainer->Def().GetPropertyDefL( KPropertyDefNameAlbumType); TInt albumTypeIndex = aContainer->Property(albumTypeProperty, albumType); if( KErrNotFound != albumTypeIndex ) { - TUint16 albumTypeValue = static_cast(albumType)->Value(); + TUint16 albumTypeValue = + static_cast(albumType)->Value(); if ( albumTypeValue != MdeConstants::Album::EAlbumUser ) { request->AppendCpiAttributeL(KMPXMediaGeneralTitle); - aEntry->SetTObjectValueL(KGlxMediaCollectionInternalSystemItemType, albumTypeValue); + aEntry->SetTObjectValueL(KGlxMediaCollectionInternalSystemItemType, + albumTypeValue); } } break; @@ -538,14 +550,16 @@ { request->AppendCpiAttributeL(KMPXMediaGeneralTitle); CMdEProperty* time; - CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameCreationDate); + CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL( + KPropertyDefNameCreationDate); TInt timeIndex = aContainer->Property(timeProperty, time); if( KErrNotFound == timeIndex ) { User::Leave(KErrCorrupt); } - aEntry->SetTObjectValueL(KGlxMediaCollectionInternalStartDate, static_cast(time)->Value()); + aEntry->SetTObjectValueL(KGlxMediaCollectionInternalStartDate, + static_cast(time)->Value()); break; } } @@ -553,21 +567,24 @@ else if ( request->Attributes()[i] == KMPXMediaGeneralDate ) { CMdEProperty* time; - CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameCreationDate); + CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL( + KPropertyDefNameCreationDate); TInt timeIndex = aContainer->Property(timeProperty, time); if( KErrNotFound == timeIndex ) { User::Leave(KErrCorrupt); } - aEntry->SetTObjectValueL(KMPXMediaGeneralDate, static_cast(time)->Value()); + aEntry->SetTObjectValueL(KMPXMediaGeneralDate, + static_cast(time)->Value()); } else if ( request->Attributes()[i] == KMPXMediaGeneralSize ) { CMdEProperty* size; - CMdEPropertyDef& sizeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameSize); + CMdEPropertyDef& sizeProperty = aContainer->Def().GetPropertyDefL( + KPropertyDefNameSize); TInt sizeIndex = aContainer->Property(sizeProperty, size); - TInt sizeValue; + TUint sizeValue; if(sizeIndex == KErrNotFound) { sizeValue = 0; @@ -586,7 +603,8 @@ else if ( request->Attributes()[i] == KMPXMediaGeneralMimeType ) { CMdEProperty* mimeType; - CMdEPropertyDef& mimeTypeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameItemType); + CMdEPropertyDef& mimeTypeProperty = aContainer->Def().GetPropertyDefL( + KPropertyDefNameItemType); TInt mimeTypeIndex = aContainer->Property(mimeTypeProperty, mimeType); if( KErrNotFound == mimeTypeIndex) { @@ -594,10 +612,12 @@ } else { - aEntry->SetTextValueL(KMPXMediaGeneralMimeType, static_cast(mimeType)->Value()); + aEntry->SetTextValueL(KMPXMediaGeneralMimeType, + static_cast(mimeType)->Value()); } } - else if ( ( request->Attributes()[i] == KMPXMediaGeneralCount ) || ( request->Attributes()[i] == KGlxMediaCollectionInternalUsageCount ) ) + else if ( ( request->Attributes()[i] == KMPXMediaGeneralCount ) || + ( request->Attributes()[i] == KGlxMediaCollectionInternalUsageCount ) ) { switch (aType) { @@ -610,10 +630,12 @@ } case CGlxDataSource::EContainerTypeMonth: { - iFilterProperties.iOrigin = EGlxFilterOriginCamera; + iFilterProperties.iOrigin = EGlxFilterOriginAll; TGlxFilterProperties filterProperties = iFilterProperties; AddMonthFilterL(aContainer, filterProperties); - QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, EQueryResultModeCount, TGlxMediaId(KGlxCollectionRootId), request->Attributes()[i], aEntry, filterProperties); + QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, + EQueryResultModeCount, TGlxMediaId(KGlxCollectionRootId), + request->Attributes()[i], aEntry, filterProperties); break; } } @@ -626,13 +648,16 @@ case CGlxDataSource::EContainerTypeAlbum: { CMdEProperty* albumType; - CMdEPropertyDef& albumTypeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameAlbumType); - TInt albumTypeIndex = aContainer->Property(albumTypeProperty, albumType); + CMdEPropertyDef& albumTypeProperty = + aContainer->Def().GetPropertyDefL( KPropertyDefNameAlbumType); + TInt albumTypeIndex = aContainer->Property(albumTypeProperty, + albumType); if( KErrNotFound != albumTypeIndex ) { - TInt albumTypeValue = static_cast(albumType)->Value(); - - if( (albumTypeValue == MdeConstants::Album::EAlbumSystemCamera) || (albumTypeValue == MdeConstants::Album::EAlbumSystemFavourite ) ) + TInt albumTypeValue = + static_cast(albumType)->Value(); + if( (albumTypeValue == MdeConstants::Album::EAlbumSystemCamera) || + (albumTypeValue == MdeConstants::Album::EAlbumSystemFavourite ) ) { systemItem = ETrue; } @@ -663,8 +688,10 @@ TGlxFilterProperties filterProperties = iFilterProperties; AddMonthFilterL(aContainer, filterProperties); filterProperties.iItemType = EGlxFilterImage; -#if 0 /// @todo AB camera album - QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, EQueryResultModeCount, DataSource()->CameraAlbumId(), request->Attributes()[i], aEntry, filterProperties); +#if 0 /// AB camera album + QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, + EQueryResultModeCount, DataSource()->CameraAlbumId(), + request->Attributes()[i], aEntry, filterProperties); #endif break; } @@ -685,8 +712,10 @@ TGlxFilterProperties filterProperties = iFilterProperties; AddMonthFilterL(aContainer, filterProperties); filterProperties.iItemType = EGlxFilterVideo; -#if 0 /// @todo AB camera album - QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, EQueryResultModeCount, DataSource()->CameraAlbumId(), request->Attributes()[i], aEntry, filterProperties); +#if 0 /// AB camera album + QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, + EQueryResultModeCount, DataSource()->CameraAlbumId(), + request->Attributes()[i], aEntry, filterProperties); #endif break; } @@ -699,7 +728,8 @@ else if ( request->Attributes()[i] == KMPXMediaColDetailSpaceId ) { - aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, KGlxDataSourceMdeImplementationUid); + aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, + KGlxDataSourceMdeImplementationUid); } else if ( request->Attributes()[i] == KGlxMediaCollectionInternalStartDate ) { @@ -734,14 +764,18 @@ case CGlxDataSource::EContainerTypeAlbum: case CGlxDataSource::EContainerTypeTag: { - QueueObjectQueryL(aContainer->Def(), ETrue, EAttributeQuery, EQueryResultModeCount, TGlxMediaId(aContainer->Id()), request->Attributes()[i], aEntry, filterProperties); + QueueObjectQueryL(aContainer->Def(), ETrue, EAttributeQuery, + EQueryResultModeCount, TGlxMediaId(aContainer->Id()), + request->Attributes()[i], aEntry, filterProperties); break; } case CGlxDataSource::EContainerTypeMonth: { - filterProperties.iOrigin = EGlxFilterOriginCamera; + filterProperties.iOrigin = EGlxFilterOriginAll; AddMonthFilterL(aContainer, filterProperties); - QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, EQueryResultModeCount, TGlxMediaId(KGlxCollectionRootId), request->Attributes()[i], aEntry, filterProperties); + QueueObjectQueryL(DataSource()->AlbumDef(), ETrue, EAttributeQuery, + EQueryResultModeCount, TGlxMediaId(KGlxCollectionRootId), + request->Attributes()[i], aEntry, filterProperties); break; } } @@ -749,13 +783,15 @@ else if ( request->Attributes()[i] == KGlxMediaGeneralLastModifiedDate ) { CMdEProperty* time; - CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL(KPropertyDefNameLastModifiedDate); + CMdEPropertyDef& timeProperty = aContainer->Def().GetPropertyDefL( + KPropertyDefNameLastModifiedDate); TInt timeIndex = aContainer->Property(timeProperty, time); if( KErrNotFound == timeIndex) { User::Leave(KErrCorrupt); } - aEntry->SetTObjectValueL(KGlxMediaGeneralLastModifiedDate, static_cast(time)->Value()); + aEntry->SetTObjectValueL(KGlxMediaGeneralLastModifiedDate, + static_cast(time)->Value()); } else if ( request->Attributes()[i] == KGlxMediaGeneralDimensions ) { @@ -778,7 +814,8 @@ // CGlxDataSourceTaskMdeAttribute::AddItemAttributesL // ---------------------------------------------------------------------------- // -void CGlxDataSourceTaskMdeAttributeMde::AddItemAttributesL(CMPXMedia* aEntry, CMdEObject* aItem, CGlxDataSource::TItemType aType) +void CGlxDataSourceTaskMdeAttributeMde::AddItemAttributesL(CMPXMedia* aEntry, + CMdEObject* aItem, CGlxDataSource::TItemType aType) { TRACER("CGlxDataSourceTaskMdeAttribute::AddItemAttributesL()") __ASSERT_DEBUG(aEntry, Panic(EGlxPanicLogicError)); @@ -786,12 +823,13 @@ __ASSERT_DEBUG(dynamic_cast(iRequest), Panic(EGlxPanicLogicError)); CGlxGetRequest* request = static_cast(iRequest); - /// @todo check property defs are valid and type is correct + /// check property defs are valid and type is correct for ( TInt i = 0; i < request->Attributes().Count(); i++ ) { if ( request->Attributes()[i] == KMPXMediaGeneralId ) { - aEntry->SetTObjectValueL(KMPXMediaGeneralId, (TMPXItemId)aItem->Id()); + aEntry->SetTObjectValueL(KMPXMediaGeneralId, + (TMPXItemId)aItem->Id()); } else if ( request->Attributes()[i] == KMPXMediaGeneralType ) { @@ -819,7 +857,8 @@ else if ( request->Attributes()[i] == KMPXMediaGeneralTitle ) { CMdEProperty* title; - CMdEPropertyDef& titleProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameTitle); + CMdEPropertyDef& titleProperty = aItem->Def().GetPropertyDefL( + KPropertyDefNameTitle); TInt titleIndex = aItem->Property(titleProperty, title); if( KErrNotFound == titleIndex ) { @@ -828,35 +867,41 @@ } else { - aEntry->SetTextValueL(KMPXMediaGeneralTitle, static_cast(title)->Value()); + aEntry->SetTextValueL(KMPXMediaGeneralTitle, + static_cast(title)->Value()); } } else if ( request->Attributes()[i] == KMPXMediaGeneralDate ) { CMdEProperty* time; - CMdEPropertyDef& timeProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameCreationDate); + CMdEPropertyDef& timeProperty = aItem->Def().GetPropertyDefL( + KPropertyDefNameCreationDate); TInt timeIndex = aItem->Property(timeProperty, time); if( KErrNotFound == timeIndex) { User::Leave(KErrCorrupt); } - aEntry->SetTObjectValueL(KMPXMediaGeneralDate, static_cast(time)->Value()); + aEntry->SetTObjectValueL(KMPXMediaGeneralDate, + static_cast(time)->Value()); } else if ( request->Attributes()[i] == KGlxMediaGeneralLastModifiedDate ) { CMdEProperty* time; - CMdEPropertyDef& timeProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameLastModifiedDate); + CMdEPropertyDef& timeProperty = aItem->Def().GetPropertyDefL( + KPropertyDefNameLastModifiedDate); TInt timeIndex = aItem->Property(timeProperty, time); if( KErrNotFound == timeIndex) { User::Leave(KErrCorrupt); } - aEntry->SetTObjectValueL(KGlxMediaGeneralLastModifiedDate, static_cast(time)->Value()); + aEntry->SetTObjectValueL(KGlxMediaGeneralLastModifiedDate, + static_cast(time)->Value()); } else if ( request->Attributes()[i] == KMPXMediaGeneralSize ) { CMdEProperty* size; - CMdEPropertyDef& sizeProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameSize); + CMdEPropertyDef& sizeProperty = aItem->Def().GetPropertyDefL( + KPropertyDefNameSize); TInt sizeIndex = aItem->Property(sizeProperty, size); User::LeaveIfError(sizeIndex); @@ -870,11 +915,34 @@ else if ( request->Attributes()[i] == KMPXMediaGeneralMimeType ) { CMdEProperty* mimeType; - CMdEPropertyDef& mimeTypeProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameItemType); + CMdEPropertyDef& mimeTypeProperty = aItem->Def().GetPropertyDefL( + KPropertyDefNameItemType); TInt mimeTypeIndex = aItem->Property(mimeTypeProperty, mimeType); - - User::LeaveIfError(mimeTypeIndex); - aEntry->SetTextValueL(KMPXMediaGeneralMimeType, static_cast(mimeType)->Value()); + if(mimeTypeIndex == KErrNotFound) + { + //MDS retrieves the Mimetype of the file the moment it is notified about + //the new file.But in case of new downloaded video file ,MDS is notified about + //it the moment download starts. As mimetype is available only after the download completes, + //so MDS fails to give the mimetype of the file. But mimetype can also be retrieved + //from CContent class once the download completes. + RBuf mimeTypeData; + CleanupClosePushL(mimeTypeData); + mimeTypeData.CreateL(KMaxFileName); + ContentAccess::CContent* content = ContentAccess::CContent::NewLC(aItem->Uri()); + TInt err = content->GetStringAttribute(ContentAccess::EMimeType, mimeTypeData); + CleanupStack::PopAndDestroy(content); + if(err != KErrNone) + { + mimeTypeData.Copy(KNullDesC); + } + aEntry->SetTextValueL(KMPXMediaGeneralMimeType,mimeTypeData); + CleanupStack::PopAndDestroy(&mimeTypeData); + } + else + { + aEntry->SetTextValueL(KMPXMediaGeneralMimeType, + static_cast(mimeType)->Value()); + } } else if ( request->Attributes()[i] == KMPXMediaGeneralDuration ) { @@ -885,11 +953,18 @@ else { CMdEProperty* duration; - CMdEPropertyDef& durationProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameDuration); + CMdEPropertyDef& durationProperty = aItem->Def().GetPropertyDefL( + KPropertyDefNameDuration); TInt durationIndex = aItem->Property(durationProperty, duration); - User::LeaveIfError(durationIndex); - - aEntry->SetTObjectValueL(KMPXMediaGeneralDuration, static_cast(duration)->Value()); + if(durationIndex == KErrNotFound) + { + aEntry->SetTObjectValueL(KMPXMediaGeneralDuration,0); + } + else + { + aEntry->SetTObjectValueL(KMPXMediaGeneralDuration, + static_cast(duration)->Value()); + } } } else if ( request->Attributes()[i] == KGlxMediaGeneralSystemItem) @@ -901,11 +976,12 @@ TSize dimensions(0,0); CMdEProperty* xDim; - CMdEPropertyDef& xDimProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameWidth); + CMdEPropertyDef& xDimProperty = aItem->Def().GetPropertyDefL( + KPropertyDefNameWidth); TInt xDimIndex = aItem->Property(xDimProperty, xDim); if( KErrNotFound == xDimIndex ) { - //User::Leave(KErrCorrupt); + //Do nothing } else { @@ -913,11 +989,12 @@ } CMdEProperty* yDim; - CMdEPropertyDef& yDimProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameHeight); + CMdEPropertyDef& yDimProperty = aItem->Def().GetPropertyDefL( + KPropertyDefNameHeight); TInt yDimIndex = aItem->Property(yDimProperty, yDim); if( KErrNotFound == yDimIndex ) { - //User::Leave(KErrCorrupt); + //Do nothing } else { @@ -930,7 +1007,9 @@ // EXIF header is corrupt, must read size from file. CImageDecoder* decoder = NULL; - TRAPD(err, decoder = CImageDecoder::FileNewL( DataSource()->FileServerSession(), aItem->Uri(), CImageDecoder::EOptionNone )); + TRAPD(err, decoder = CImageDecoder::FileNewL( + DataSource()->FileServerSession(), aItem->Uri(), + CImageDecoder::EOptionNone )); if (err == KErrNone) { dimensions = decoder->FrameInfo().iOverallSizeInPixels; @@ -945,9 +1024,10 @@ { CMdEProperty* framecount; TInt fcount = 1; - //@todo AB test this + // AB test this CMdEPropertyDef* framecountProperty = NULL; - TRAP_IGNORE(framecountProperty = &aItem->Def().GetPropertyDefL(KPropertyDefNameFrameCount)); + TRAP_IGNORE(framecountProperty = &aItem->Def().GetPropertyDefL( + KPropertyDefNameFrameCount)); if( framecountProperty ) { TInt framecountIndex = aItem->Property(*framecountProperty, framecount); @@ -961,7 +1041,8 @@ else if ( request->Attributes()[i] == KMPXMediaGeneralComment ) { CMdEProperty* comment; - CMdEPropertyDef& commentProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameComment); /// @todo using Exif Comment field for comment as spec is not clear + CMdEPropertyDef& commentProperty = aItem->Def().GetPropertyDefL( + KPropertyDefNameComment); /// using Exif Comment field for comment as spec is not clear TInt commentIndex = aItem->Property(commentProperty, comment); if( KErrNotFound == commentIndex) { @@ -969,13 +1050,15 @@ } else { - aEntry->SetTextValueL(KMPXMediaGeneralComment, static_cast(comment)->Value()); + aEntry->SetTextValueL(KMPXMediaGeneralComment, + static_cast(comment)->Value()); } } else if ( request->Attributes()[i] == KMPXMediaDrmProtected ) { CMdEProperty* drmProtected; - CMdEPropertyDef& drmProtectedProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameDRM); + CMdEPropertyDef& drmProtectedProperty = aItem->Def().GetPropertyDefL( + KPropertyDefNameDRM); TInt drmProtectedIndex = aItem->Property(drmProtectedProperty, drmProtected); if( KErrNotFound == drmProtectedIndex) { @@ -983,27 +1066,32 @@ } else { - aEntry->SetTObjectValueL(KMPXMediaDrmProtected, static_cast(drmProtected)->Value()); + aEntry->SetTObjectValueL(KMPXMediaDrmProtected, + static_cast(drmProtected)->Value()); } } else if ( request->Attributes()[i] == KGlxMediaGeneralDRMRightsValid ) { CMdEProperty* drmProtected; - CMdEPropertyDef& drmProtectedProperty = aItem->Def().GetPropertyDefL(KPropertyDefNameDRM); + CMdEPropertyDef& drmProtectedProperty = aItem->Def().GetPropertyDefL( + KPropertyDefNameDRM); TInt drmProtectedIndex = aItem->Property(drmProtectedProperty, drmProtected); if( KErrNotFound == drmProtectedIndex) { - aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, EGlxDrmRightsValidityUnknown); + aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, + EGlxDrmRightsValidityUnknown); } else { if( static_cast(drmProtected)->Value() ) { - aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, EGlxDrmRightsValidityUnknown); + aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, + EGlxDrmRightsValidityUnknown); } else { - aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, EGlxDrmRightsValid); + aEntry->SetTObjectValueL(KGlxMediaGeneralDRMRightsValid, + EGlxDrmRightsValid); } } } @@ -1013,7 +1101,8 @@ } else if ( request->Attributes()[i] == KMPXMediaColDetailSpaceId ) { - aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, KGlxDataSourceMdeImplementationUid); + aEntry->SetTObjectValueL(KMPXMediaColDetailSpaceId, + KGlxDataSourceMdeImplementationUid); } else if ( request->Attributes()[i] == KGlxMediaGeneralSlideshowableContent ) { @@ -1035,25 +1124,30 @@ // CGlxDataSourceTaskMde::AddLocationAttributeToMediaL // ---------------------------------------------------------------------------- // -void CGlxDataSourceTaskMdeAttributeMde::AddLocationAttributeToMediaL(CMPXMedia& aMedia, const TItemId& aLocationId) +void CGlxDataSourceTaskMdeAttributeMde::AddLocationAttributeToMediaL( + CMPXMedia& aMedia, const TItemId& aLocationId) { TRACER("CGlxDataSourceTaskMdeAttribute::AddLocationAttributeToMediaL()") - CMdEObject* location = DataSource()->Session().GetObjectL(aLocationId, DataSource()->LocationDef()); + CMdEObject* location = DataSource()->Session().GetObjectL(aLocationId, + DataSource()->LocationDef()); if(!location) { User::Leave(KErrNotFound); } CleanupStack::PushL(location); CMdEProperty* longitude = NULL; - CMdEPropertyDef& longitudePropertyDef = location->Def().GetPropertyDefL(KPropertyDefNameLongitude); + CMdEPropertyDef& longitudePropertyDef = location->Def().GetPropertyDefL( + KPropertyDefNameLongitude); TInt longitudeIndex = location->Property(longitudePropertyDef, longitude); CMdEProperty* latitude = NULL; - CMdEPropertyDef& latitudePropertyDef = location->Def().GetPropertyDefL(KPropertyDefNameLatitude); + CMdEPropertyDef& latitudePropertyDef = location->Def().GetPropertyDefL( + KPropertyDefNameLatitude); TInt latitudeIndex = location->Property(latitudePropertyDef, latitude); if (longitudeIndex > KErrNotFound && latitudeIndex > KErrNotFound) { - TCoordinate coordinate(static_cast< CMdEReal64Property *>(latitude)->Value(),static_cast< CMdEReal64Property *>(longitude)->Value()); + TCoordinate coordinate(static_cast< CMdEReal64Property *>(latitude)->Value(), + static_cast< CMdEReal64Property *>(longitude)->Value()); aMedia.SetTObjectValueL(KGlxMediaGeneralLocation, coordinate); } @@ -1070,41 +1164,63 @@ __ASSERT_DEBUG(iQueryAttributes.Count(), Panic(EGlxPanicIllegalState)); CMdEQuery* query = iQueries[0]; - if( query->ResultMode() == EQueryResultModeObjectWithFreetexts ) + if( query->ResultMode() == EQueryResultModeItem ) { - __ASSERT_DEBUG(( iQueryAttributes[0].iAttribute == KGlxMediaCollectionInternalStartDate ), Panic(EGlxPanicIllegalState)); - CMdEPropertyDef& creationDateDef = DataSource()->ObjectDef().GetPropertyDefL(KPropertyDefNameCreationDate); + __ASSERT_DEBUG(( iQueryAttributes[0].iAttribute == + KGlxMediaCollectionInternalStartDate || iQueryAttributes[0].iAttribute == + KGlxMediaCollectionInternalEndDate), Panic(EGlxPanicIllegalState)); + CMdEPropertyDef& creationDateDef = DataSource()->ObjectDef().GetPropertyDefL( + KPropertyDefNameCreationDate); if (creationDateDef.PropertyType() != EPropertyTime) { User::Leave(KErrCorrupt); } TTime startMonth(0); TTime endMonth(0); + GLX_DEBUG2("CGlxDataSourceTaskMdeAttributeMde::DoHandleAttributeQueryCompletedL iQueries[0]->Count()=%d", iQueries[0]->Count()); + TInt timeIndex(0) ; if(iQueries[0]->Count() ) { - CMdEProperty* startTime; - CMdEObject& startObject = (CMdEObject&)query->ResultItem(0); - TInt timeIndex = startObject.Property(creationDateDef, startTime); - if( KErrNotFound == timeIndex ) - { - User::Leave(KErrCorrupt); - } - startMonth = static_cast(startTime)->Value(); - CMdEProperty* endTime; - CMdEObject& endObject = (CMdEObject&)query->ResultItem(query->Count()-1); - timeIndex = endObject.Property(creationDateDef, endTime); - if( KErrNotFound == timeIndex ) - { - User::Leave(KErrCorrupt); - } - endMonth = static_cast(endTime)->Value(); + GLX_DEBUG2("CGlxDataSourceTaskMdeAttributeMde::DoHandleAttributeQueryCompletedL query->Count()=%d", query->Count()); + if(iQueryAttributes[0].iAttribute == KGlxMediaCollectionInternalStartDate) + { + CMdEProperty* startTime; + CMdEObject& startObject = (CMdEObject&)query->ResultItem(0); + TInt timeIndex = startObject.Property(creationDateDef, startTime); + if( KErrNotFound == timeIndex ) + { + User::Leave(KErrCorrupt); + } + startMonth = static_cast(startTime)->Value(); + iQueryAttributes[0].iMedia->SetTObjectValueL( + KGlxMediaCollectionInternalStartDate, startMonth); + } + else if(iQueryAttributes[0].iAttribute == KGlxMediaCollectionInternalEndDate) + { + CMdEProperty* endTime; + CMdEObject& endObject = (CMdEObject&)query->ResultItem(0); + timeIndex = endObject.Property(creationDateDef, endTime); + if( KErrNotFound == timeIndex ) + { + User::Leave(KErrCorrupt); + } + endMonth = static_cast(endTime)->Value(); + iQueryAttributes[0].iMedia->SetTObjectValueL( + KGlxMediaCollectionInternalEndDate, endMonth); + } } - iQueryAttributes[0].iMedia->SetTObjectValueL(KGlxMediaCollectionInternalStartDate, startMonth); - iQueryAttributes[0].iMedia->SetTObjectValueL(KGlxMediaCollectionInternalEndDate, endMonth); + else + { + iQueryAttributes[0].iMedia->SetTObjectValueL( + KGlxMediaCollectionInternalStartDate, startMonth); + iQueryAttributes[0].iMedia->SetTObjectValueL( + KGlxMediaCollectionInternalEndDate, endMonth); + } } else if( EQueryResultModeCount == query->ResultMode() ) { - iQueryAttributes[0].iMedia->SetTObjectValueL(iQueryAttributes[0].iAttribute, query->Count()); + iQueryAttributes[0].iMedia->SetTObjectValueL( + iQueryAttributes[0].iAttribute, query->Count()); } else { @@ -1124,7 +1240,8 @@ for (TInt queryResultsPos = 0; queryResultsPos < queryResultsCount; queryResultsPos++) { - CMdERelation& relation = static_cast(iQueries[0]->ResultItem(queryResultsPos)); + CMdERelation& relation = static_cast( + iQueries[0]->ResultItem(queryResultsPos)); CMPXMedia* targetMedia = NULL; if (iMediaArray) { @@ -1165,14 +1282,9 @@ CMdEQuery* query = iQueries[0]; TInt queryResultsCount = query->Count(); - GLX_LOG_INFO1("==> CGlxDataSourceTaskMdeAttributeMde::DoHandleImageVideoQueryCompletedL - queryResultsCount=%d", queryResultsCount); -#ifdef _DEBUG - iStopTime.HomeTime(); // Get home time - if (queryResultsCount) - { - GLX_LOG_INFO1("==> CGlxDataSourceTaskMdeAttributeMde::DoHandleImageVideoQueryCompletedL took <%d> us", (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64()); - } -#endif + GLX_DEBUG2("CGlxDataSourceTaskMdeAttributeMde::DoHandleImageVideoQueryCompletedL()" + " queryResultsCount=%d", queryResultsCount); + if( ( queryResultsCount == 1 ) && ( !iMediaArray ) ) { CMdEObject& object = static_cast(query->ResultItem(0)); @@ -1188,10 +1300,11 @@ for (TInt i = 0; i < queryResultsCount; i++) { CMdEObject& object = static_cast(query->ResultItem(i)); + CMPXMedia* entry = CMPXMedia::NewL(); CleanupStack::PushL(entry); - iMediaArray->AppendL(*entry); - CleanupStack::PopAndDestroy(entry); + iMediaArray->AppendL(entry); + CleanupStack::Pop(entry); AddAttributesL(object, (*iMediaArray)[iMediaArray->Count() - 1]); } } @@ -1207,11 +1320,14 @@ __ASSERT_DEBUG(dynamic_cast(iRequest), Panic(EGlxPanicLogicError)); CGlxGetRequest* request = static_cast(iRequest); - CMdEQuery* query = DataSource()->Session().NewRelationQueryL(*DataSource()->NamespaceDef(), this); + CMdEQuery* query = DataSource()->Session().NewRelationQueryL( + *DataSource()->NamespaceDef(), this); CleanupStack::PushL(query); CMdELogicCondition& rootCondition = query->Conditions(); - CMdERelationCondition& containerRelationCondition = rootCondition.AddRelationConditionL(DataSource()->ContainsLocationDef(), ERelationConditionSideRight); + CMdERelationCondition& containerRelationCondition = + rootCondition.AddRelationConditionL(DataSource()->ContainsLocationDef(), + ERelationConditionSideRight); CMdELogicCondition& itemLogicCondition = containerRelationCondition.LeftL(); CMdELogicCondition& locationLogicCondition = containerRelationCondition.RightL(); locationLogicCondition.AddObjectConditionL(DataSource()->LocationDef()); @@ -1290,8 +1406,10 @@ // CGlxDataSourceTask::QueueObjectQueryL // ---------------------------------------------------------------------------- // -void CGlxDataSourceTaskMdeAttributeMde::QueueObjectQueryL(CMdEObjectDef& aObjectDef, TBool aIsContent, TGlxQueryType aQueryType, - TQueryResultMode aResultMode, const TGlxMediaId& aContainerId, TMPXAttribute aAttribute, CMPXMedia* aEntry, +void CGlxDataSourceTaskMdeAttributeMde::QueueObjectQueryL(CMdEObjectDef& aObjectDef, + TBool aIsContent, TGlxQueryType aQueryType, + TQueryResultMode aResultMode, const TGlxMediaId& aContainerId, + TMPXAttribute aAttribute, CMPXMedia* aEntry, const TGlxFilterProperties& aFilterProperties) { TRACER("CGlxDataSourceTaskMdeAttribute::QueueObjectQueryL()") @@ -1318,10 +1436,11 @@ } } - CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(), *queryBaseObject, this); + CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(), + *queryBaseObject, this); CleanupStack::PushL(query); + query->SetResultMode(aResultMode); SetQueryConditionsL(*query, aFilterProperties, aContainerId, aObjectDef); - query->SetResultMode(aResultMode); iQueryAttributes.AppendL(TGlxQueryAttribute(aAttribute, aEntry, aFilterProperties));