mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp
branchRCL_3
changeset 17 780c925249c1
parent 9 bee149131e4b
child 55 6c1dfe4da5dd
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp	Mon Mar 15 12:42:31 2010 +0200
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp	Wed Mar 31 22:26:09 2010 +0300
@@ -16,6 +16,10 @@
 */
 
 
+#include <mtp/cmtptypeobjectproplist.h>
+#include <mtp/cmtptypearray.h>
+#include <f32file.h>
+
 #include "cabstractmediamtpdataprovidergetobjectproplist.h"
 #include "abstractmediamtpdataproviderconst.h"
 #include "mmmtpdplogger.h"
@@ -81,15 +85,70 @@
 // do nothing here, just leave, as this should never be invoked or invalid propcode
 // -----------------------------------------------------------------------------
 //
-TInt CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/,
-    TUint32 /*aHandle*/ )
+TInt CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL( TUint16 aPropCode,
+    TUint32 aHandle )
     {
-    PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL, leave with KErrNotSupported" ) );
+    PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL" ) );
+    TInt err = KErrNone;
+    switch ( aPropCode )
+        {
+        case EMTPObjectPropCodeRepresentativeSampleFormat:
+            {
+            iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+            iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, 0 );
+            }
+            break;
+        case EMTPObjectPropCodeRepresentativeSampleSize:
+        case EMTPObjectPropCodeRepresentativeSampleHeight:
+        case EMTPObjectPropCodeRepresentativeSampleWidth:
+            {
+            iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+            iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, 0 );
+            }
+            break;
+        case EMTPObjectPropCodeRepresentativeSampleData:
+            {
+            const TDesC& suid( iObject->DesC( CMTPObjectMetaData::ESuid ) );
+            CMTPTypeArray* desData = CMTPTypeArray::NewLC( EMTPTypeAUINT8 );    // + desData
+
+            RFile sampleFile;
+            TInt err = sampleFile.Open( iFramework.Fs(), suid, EFileShareReadersOnly );
+            PRINT2( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData open filename=%S, err=%d" ), &suid, err );
 
-    // Do nothing now.
-    // May need add implementation here for further extension.
+            CleanupClosePushL( sampleFile );    // + sampleFile
+            TInt size = 0;
+            if( err == KErrNone )
+                {
+                err = sampleFile.Size( size );
+                }
+            PRINT2( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData sampleFile.Size size=%d, err=%d" ), size, err );
+            if( err == KErrNone && size > 0 )
+                {
+                HBufC8* sampleData = HBufC8::NewLC( size * sizeof( TUint8 ) );    // + sampleData
+                TPtr8 samplePtr = sampleData->Des();
+                err = sampleFile.Read( samplePtr );
+                PRINT1( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData sampleFile.Read err=%d" ), err );
+                PRINT1( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData samplePtr.Size=%d" ), samplePtr.Size() );
+                if( err == KErrNone )
+                    {
+                    desData->SetByDesL( samplePtr );
+                    }
+                CleanupStack::PopAndDestroy( sampleData );    // - sampleData
+                }
+            iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
+            iPropertyElement->SetArrayL( CMTPTypeObjectPropListElement::EValue, *desData );
 
-    return KErrNotSupported;
+            CleanupStack::PopAndDestroy( &sampleFile );    // - sampleFile
+            CleanupStack::PopAndDestroy( desData );        // - desData
+            }
+            break;
+
+        default:
+            err = KErrNotSupported;
+        }
+
+    PRINT1( _L( "MM MTP <= CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL, err = %d" ), err );
+    return err;
     }
 
 // end of file