diff -r a05c44bc3c61 -r d881023c13eb mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp --- 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 #include #include #include @@ -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* 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 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 {