mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp
branchRCL_3
changeset 67 16db3449d7ba
parent 53 e42293e811d8
equal deleted inserted replaced
63:91d5ad76f5c6 67:16db3449d7ba
   186         TUint16 protectionStatus = EMTPProtectionNoProtection;
   186         TUint16 protectionStatus = EMTPProtectionNoProtection;
   187         protectionStatus = MmMtpDpUtility::GetProtectionStatusL( iFs, object->DesC( CMTPObjectMetaData::ESuid ) );
   187         protectionStatus = MmMtpDpUtility::GetProtectionStatusL( iFs, object->DesC( CMTPObjectMetaData::ESuid ) );
   188         if ( protectionStatus != EMTPProtectionNoProtection )
   188         if ( protectionStatus != EMTPProtectionNoProtection )
   189             {
   189             {
   190             // NOTE: P4S expects AccessDenied response instead of ObjectWriteProtected
   190             // NOTE: P4S expects AccessDenied response instead of ObjectWriteProtected
   191             responseCode = EMTPRespCodeAccessDenied; // EMTPRespCodeObjectWriteProtected;
   191             return EMTPRespCodeAccessDenied; // EMTPRespCodeObjectWriteProtected;
   192             }
   192             }
   193         else
   193 
       
   194         switch ( propertyCode )
   194             {
   195             {
   195             switch ( propertyCode )
   196             case EMTPObjectPropCodeStorageID:
       
   197             case EMTPObjectPropCodeObjectFormat:
       
   198             case EMTPObjectPropCodeProtectionStatus:
       
   199             case EMTPObjectPropCodeObjectSize:
       
   200             case EMTPObjectPropCodeParentObject:
       
   201             case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
       
   202             case EMTPObjectPropCodeDateAdded:
       
   203             case EMTPObjectPropCodeDateCreated:
       
   204             case EMTPObjectPropCodeDateModified:
   196                 {
   205                 {
   197                 case EMTPObjectPropCodeStorageID:
   206                 responseCode = EMTPRespCodeAccessDenied;
   198                 case EMTPObjectPropCodeObjectFormat:
   207                 }
   199                 case EMTPObjectPropCodeProtectionStatus:
   208                 break;
   200                 case EMTPObjectPropCodeObjectSize:
   209 
   201                 case EMTPObjectPropCodeParentObject:
   210             case EMTPObjectPropCodeNonConsumable:
   202                 case EMTPObjectPropCodePersistentUniqueObjectIdentifier:
   211                 object->SetUint( CMTPObjectMetaData::ENonConsumable,
   203                 case EMTPObjectPropCodeDateAdded:
   212                     aPropListElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) );
   204                 case EMTPObjectPropCodeDateCreated:
   213                 // TODO: need to reconsider,
   205                 case EMTPObjectPropCodeDateModified:
   214                 // if propList comprise both non-consumable and objectFileName,
       
   215                 // ModifyObjectL would be called twice, need to investigate if it won't affect
       
   216                 // performance
       
   217                 iFramework.ObjectMgr().ModifyObjectL( *object );
       
   218                 break;
       
   219 
       
   220             case EMTPObjectPropCodeObjectFileName:
       
   221                 {
       
   222                 TPtrC suid( object->DesC( CMTPObjectMetaData::ESuid ) );
       
   223                 TPtrC ptr( aPropListElement.StringL( CMTPTypeObjectPropListElement::EValue ) );
       
   224                 if ( KMaxFileName < ptr.Length() )
       
   225                     responseCode = EMTPRespCodeInvalidDataset;
       
   226                 else
   206                     {
   227                     {
   207                     responseCode = EMTPRespCodeAccessDenied;
   228                     TFileName newSuid( ptr );
   208                     }
   229                     TInt err = MmMtpDpUtility::UpdateObjectFileName( iFramework.Fs(), suid, newSuid );
   209                     break;
   230                     PRINT1( _L( "MM MTP <> Update object file name err = %d" ), err );
   210 
   231                     if ( KErrOverflow == err ) // full path name is too long
   211                 case EMTPObjectPropCodeNonConsumable:
   232                         {
   212                     object->SetUint( CMTPObjectMetaData::ENonConsumable,
       
   213                         aPropListElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) );
       
   214                     // TODO: need to reconsider,
       
   215                     // if propList comprise both non-consumable and objectFileName,
       
   216                     // ModifyObjectL would be called twice, need to investigate if it won't affect
       
   217                     // performance
       
   218                     iFramework.ObjectMgr().ModifyObjectL( *object );
       
   219                     break;
       
   220 
       
   221                 case EMTPObjectPropCodeObjectFileName:
       
   222                     {
       
   223                     TPtrC suid( object->DesC( CMTPObjectMetaData::ESuid ) );
       
   224                     TPtrC ptr( aPropListElement.StringL( CMTPTypeObjectPropListElement::EValue ) );
       
   225                     if ( KMaxFileName < ptr.Length() )
       
   226                         responseCode = EMTPRespCodeInvalidDataset;
   233                         responseCode = EMTPRespCodeInvalidDataset;
       
   234                         }
       
   235                     else if ( KErrNone == err )    // TODO: ( KErrAlreadyExists == err )
       
   236                         {
       
   237                         TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( *object, newSuid ) ); //Update MPX DB
       
   238 
       
   239                         PRINT1( _L( "MM MTP <> Rename MPX object file name err = %d" ), err );
       
   240                         // it is ok if file is not found in DB, following S60 solution
       
   241                         if ( KErrNotFound == err )
       
   242                             {
       
   243                             TRAP( err, iDpConfig.GetWrapperL().AddObjectL( *object ) );
       
   244                             PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err );
       
   245                             }
       
   246 
       
   247                         object->SetDesCL( CMTPObjectMetaData::ESuid, newSuid );
       
   248                         iFramework.ObjectMgr().ModifyObjectL( *object );
       
   249                         }
       
   250                     else if ( KErrInUse == err ) // object file is being used by other program
       
   251                         {
       
   252                         responseCode = EMTPRespCodeDeviceBusy;
       
   253                         }
   227                     else
   254                     else
   228                         {
   255                         {
   229                         TFileName newSuid( ptr );
   256                         responseCode = EMTPRespCodeGeneralError;
   230                         TInt err = MmMtpDpUtility::UpdateObjectFileName( iFramework.Fs(), suid, newSuid );
       
   231                         PRINT1( _L( "MM MTP <> Update object file name err = %d" ), err );
       
   232                         if ( KErrOverflow == err ) // full path name is too long
       
   233                             {
       
   234                             responseCode = EMTPRespCodeInvalidDataset;
       
   235                             }
       
   236                         else if ( KErrNone == err )    // TODO: ( KErrAlreadyExists == err )
       
   237                             {
       
   238                             TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( *object, newSuid ) ); //Update MPX DB
       
   239     
       
   240                             PRINT1( _L( "MM MTP <> Rename MPX object file name err = %d" ), err );
       
   241                             // it is ok if file is not found in DB, following S60 solution
       
   242                             if ( KErrNotFound == err )
       
   243                                 {
       
   244                                 TRAP( err, iDpConfig.GetWrapperL().AddObjectL( *object ) );
       
   245                                 PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err );
       
   246                                 }
       
   247 
       
   248                             object->SetDesCL( CMTPObjectMetaData::ESuid, newSuid );
       
   249                             iFramework.ObjectMgr().ModifyObjectL( *object );
       
   250                             }
       
   251                         else if ( KErrInUse == err ) // object file is being used by other program
       
   252                             {
       
   253                             responseCode = EMTPRespCodeDeviceBusy;
       
   254                             }
       
   255                         else
       
   256                             {
       
   257                             responseCode = EMTPRespCodeGeneralError;
       
   258                             }
       
   259                         }
   257                         }
   260                     }
   258                     }
   261                     break;
       
   262 
       
   263                 case EMTPObjectPropCodeName:
       
   264                 case EMTPObjectPropCodeAlbumArtist:
       
   265                     {
       
   266                     CMTPTypeString* stringData = CMTPTypeString::NewLC(
       
   267                         aPropListElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData
       
   268 
       
   269                     responseCode = iDpConfig.PropSettingUtility()->SetMetaDataToWrapper( iDpConfig,
       
   270                         propertyCode,
       
   271                         *stringData,
       
   272                         *object );
       
   273 
       
   274                     CleanupStack::PopAndDestroy( stringData );// - stringData
       
   275                     }
       
   276                     break;
       
   277 
       
   278                 default:
       
   279                     {
       
   280                     responseCode = iDpConfig.PropSettingUtility()->SetSpecificObjectPropertyL( iDpConfig,
       
   281                         propertyCode,
       
   282                         *object,
       
   283                         aPropListElement );
       
   284                     }
       
   285                     break;
       
   286                 }
   259                 }
   287 
   260                 break;
   288             CleanupStack::PopAndDestroy( object ); // - object
   261 
       
   262             case EMTPObjectPropCodeName:
       
   263             case EMTPObjectPropCodeAlbumArtist:
       
   264                 {
       
   265                 CMTPTypeString* stringData = CMTPTypeString::NewLC(
       
   266                     aPropListElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData
       
   267 
       
   268                 responseCode = iDpConfig.PropSettingUtility()->SetMetaDataToWrapper( iDpConfig,
       
   269                     propertyCode,
       
   270                     *stringData,
       
   271                     *object );
       
   272 
       
   273                 CleanupStack::PopAndDestroy( stringData );// - stringData
       
   274                 }
       
   275                 break;
       
   276 
       
   277             default:
       
   278                 {
       
   279                 responseCode = iDpConfig.PropSettingUtility()->SetSpecificObjectPropertyL( iDpConfig,
       
   280                     propertyCode,
       
   281                     *object,
       
   282                     aPropListElement );
       
   283                 }
       
   284                 break;
   289             }
   285             }
       
   286 
       
   287         CleanupStack::PopAndDestroy( object ); // - object
   290         }
   288         }
   291 
   289 
   292     PRINT1( _L( "MM MTP <= CSetObjectPropList::SetObjectPropListL responseCode = 0x%x" ), responseCode );
   290     PRINT1( _L( "MM MTP <= CSetObjectPropList::SetObjectPropListL responseCode = 0x%x" ), responseCode );
   293     return responseCode;
   291     return responseCode;
   294     }
   292     }