mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp
changeset 25 d881023c13eb
parent 0 a2952bb97e68
child 27 cbb1bfb7ebfb
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp	Fri Apr 16 15:28:14 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp	Mon May 03 12:58:40 2010 +0300
@@ -16,7 +16,6 @@
 */
 
 
-#include <mtp/mmtpdataproviderframework.h>
 #include <mtp/cmtptypestring.h>
 #include <mtp/cmtptypearray.h>
 #include <mtp/mmtpobjectmgr.h>
@@ -72,7 +71,8 @@
         sizeof(KMTPSetObjectPropValuePolicy) / sizeof(TMTPRequestElementInfo),
         KMTPSetObjectPropValuePolicy ),
     iObjectMgr( aFramework.ObjectMgr() ),
-    iDpConfig( aDpConfig )
+    iDpConfig( aDpConfig ),
+    iFs( aFramework.Fs() )
     {
     SetPSStatus();
     PRINT( _L( "Operation: SetObjectPropValue(0x9804)" ) );
@@ -107,13 +107,15 @@
         case EMTPObjectPropCodeObjectSize:
         case EMTPObjectPropCodeParentObject:
         case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
-        case EMTPObjectPropCodeNonConsumable:
         case EMTPObjectPropCodeDateAdded:
         case EMTPObjectPropCodeDateCreated:
         case EMTPObjectPropCodeDateModified:
         //case EMTPObjectPropCodeVideoBitRate:  // move to specific dp
             returnCode = ETrue;
             break;
+        case EMTPObjectPropCodeNonConsumable:
+            // It's settable, return EFalse here.
+            break;
 
         default:
             returnCode = IsSpecificPropCodeReadOnly(aPropCode);
@@ -133,43 +135,46 @@
     PRINT( _L( "MM MTP => CSetObjectPropValue::CheckRequestL" ) );
 
     TMTPResponseCode result = CRequestProcessor::CheckRequestL();
+    if ( result == EMTPRespCodeObjectWriteProtected )
+        {
+        // Return AccessDenied for P4S pass rate, instead of EMTPRespCodeObjectWriteProtected
+        result = EMTPRespCodeAccessDenied;
+        }
 
     // Check if property is supported
     if ( result == EMTPRespCodeOK )
         {
         iPropCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 );
         PRINT1( _L( "MM MTP <> CSetObjectPropValue::CheckRequestL iPropCode = 0x%x" ), iPropCode );
-        result = EMTPRespCodeInvalidObjectPropCode;
 
         TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
         CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( objectHandle );
-
-        if (!objectInfo)
+        if ( objectInfo == NULL )
             {
-            PRINT(_L("MM MTP <> CGetObjectPropValue::CheckRequestL, objectInfo is NULL"));
+            PRINT( _L("MM MTP <> CSetObjectPropValue::CheckRequestL, objectInfo is NULL" ) );
             return EMTPRespCodeInvalidObjectHandle;
             }
 
-        TFileName fileName = objectInfo->DesC(CMTPObjectMetaData::ESuid);
-        TUint32 formatCode = objectInfo->Uint(CMTPObjectMetaData::EFormatCode);
-
-        PRINT3( _L( "MM MTP <> CGetObjectPropValue::CheckRequestL, handle = 0x%x, filename = %S, formatCode = 0x%x" ),
-                objectHandle,
-                &fileName,
-                formatCode );
+        TFileName fileName = objectInfo->DesC( CMTPObjectMetaData::ESuid );
+        TUint32 formatCode = objectInfo->Uint( CMTPObjectMetaData::EFormatCode );
+        PRINT3( _L( "MM MTP <> CSetObjectPropValue::CheckRequestL, handle = 0x%x, filename = %S, formatCode = 0x%x" ),
+            objectHandle,
+            &fileName,
+            formatCode );
         const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( formatCode );
         TInt count = properties->Count();
+
+        result = EMTPRespCodeInvalidObjectPropCode;
         for ( TInt i = 0; i < count; i++ )
             {
             // Object property code is supported, but can not be set which is read only.
-            if ( (*properties)[i] == iPropCode
-                && IsPropCodeReadonly( iPropCode ) )
+            if ( ( *properties )[i] == iPropCode && IsPropCodeReadonly( iPropCode ) )
                 {
                 result = EMTPRespCodeAccessDenied;
                 break;
                 }
             // Object property code is supported and can be set.
-            else if ( iPropCode == (*properties)[i] )
+            else if ( iPropCode == ( *properties )[i] )
                 {
                 result = EMTPRespCodeOK;
                 break;
@@ -212,16 +217,20 @@
         case EMTPObjectPropCodeDateAdded:       // 0xDC4E
         case EMTPObjectPropCodeDateCreated:     // Date Created(0xDC08)
         case EMTPObjectPropCodeDateModified:    // Modified Date(0xDC09)
-        case EMTPObjectPropCodeNonConsumable:   // Non Consumable(0xDC4F)
         case EMTPObjectPropCodeVideoBitRate: // 0xDE9C
             {
             SendResponseL( EMTPRespCodeAccessDenied );
             }
             break;
 
+        case EMTPObjectPropCodeNonConsumable:   // Non Consumable(0xDC4F)
+            ReceiveDataL( iMTPTypeUint8 );
+            break;
+
         // Get Data for String objects
         case EMTPObjectPropCodeObjectFileName:  // 0xDC07
         case EMTPObjectPropCodeName: // 0xDC44
+        case EMTPObjectPropCodeAlbumArtist:
             {
             delete iMTPTypeString;
             iMTPTypeString = NULL;
@@ -252,33 +261,42 @@
 
     switch ( iPropCode )
         {
+        case EMTPObjectPropCodeNonConsumable:
+            iObjectInfo->SetUint( CMTPObjectMetaData::ENonConsumable, iMTPTypeUint8.Value() );
+            iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
+            break;
+
         case EMTPObjectPropCodeObjectFileName:
             {
             TPtrC suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
-            TBuf<KMaxFileName> newSuid( iMTPTypeString->StringChars() );
-            PRINT2( _L( "MM MTP <> old name = %S, new name = %S" ), &suid, &newSuid );
-            TInt err = KErrNone;
-            err = MmMtpDpUtility::UpdateObjectFileName( iFramework.Fs(),
-                suid,
-                newSuid );
-            PRINT1( _L( "MM MTP <> Update object file name err = %d" ), err );
-            if ( KErrOverflow == err ) // full path name is too long
-                {
+            TPtrC ptr ( iMTPTypeString->StringChars() );
+            if ( KMaxFileName < ptr.Length() )
                 responseCode = EMTPRespCodeInvalidDataset;
-                }
-            else if ( ( KErrNone == err ) || ( KErrAlreadyExists == err ) )
+            else
                 {
-                TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( suid, newSuid ) ); //Update MPX DB
-                PRINT1( _L( "MM MTP <> Rename MPX object file name err = %d" ), err );
-                // it is ok if file is not found in DB, following S60 solution
-                if ( KErrNotFound == err )
+                TFileName newSuid( ptr );
+                PRINT2( _L( "MM MTP <> old name = %S, new name = %S" ), &suid, &newSuid );
+                TInt err = KErrNone;
+                err = MmMtpDpUtility::UpdateObjectFileName( iFramework.Fs(),
+                    suid,
+                    newSuid );
+                // TODO: if the new name is the same with old name
+                PRINT1( _L( "MM MTP <> Update object file name err = %d" ), err );
+                if ( KErrOverflow == err ) // full path name is too long
                     {
-                    TRAP( err, iDpConfig.GetWrapperL().AddObjectL( newSuid ) );
-                    PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err );
+                    responseCode = EMTPRespCodeInvalidDataset;
                     }
+                else if ( KErrNone == err )
+                    {
+                    TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( *iObjectInfo, newSuid ) ); //Update MPX DB
+                    PRINT1( _L( "MM MTP <> Rename MPX object file name err = %d" ), err );
+                    // it is ok if file is not found in DB, following S60 solution
+                    if ( KErrNotFound == err )
+                        {
+                        TRAP( err, iDpConfig.GetWrapperL().AddObjectL( *iObjectInfo ) );
+                        PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err );
+                        }
 
-                if ( KErrNone == err )
-                    {
                     iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, newSuid );
                     iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
                     }
@@ -291,6 +309,7 @@
             break;
 
         case EMTPObjectPropCodeName: // 0xDC44
+        case EMTPObjectPropCodeAlbumArtist:
             {
             responseCode = ServiceMetaDataToWrapperL( iPropCode,
                 *iMTPTypeString,
@@ -343,12 +362,8 @@
         }
     else if ( err == KErrNotFound )
         {
-//        TMTPFormatCode formatCode =
-//            MmMtpDpUtility::FormatFromFilename( aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ) );
         if( MmMtpDpUtility::HasMetadata( aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ) ) )
             SendResponseL( EMTPRespCodeAccessDenied );
-        else
-            SendDataL( aNewData );
         }
     else
         {