diff -r d45095c2f4f3 -r bee149131e4b mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp --- a/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp Tue Feb 02 00:27:58 2010 +0200 +++ b/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp Fri Feb 19 23:18:32 2010 +0200 @@ -36,6 +36,7 @@ #include "mmmtpdputility.h" #include "mmmtpdpfiledefs.h" +#include "tobjectdescription.h" #include "mmmtpdplogger.h" using namespace ContentAccess; @@ -68,23 +69,26 @@ if ( file.Ext().CompareF( KTxtExtensionWMA ) == 0 ) return EMTPFormatCodeWMA; #endif // __WINDOWS_MEDIA - - if ( ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionM4A ) == 0 ) ) + + if ( ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 ) + || ( file.Ext().CompareF( KTxtExtensionM4A ) == 0 ) ) return EMTPFormatCodeMP4Container; - if ( ( file.Ext().CompareF( KTxtExtension3GP ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionO4A ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionO4V ) == 0 ) ) + if ( ( file.Ext().CompareF( KTxtExtension3GP ) == 0 ) + || ( file.Ext().CompareF( KTxtExtensionO4A ) == 0 ) + || ( file.Ext().CompareF( KTxtExtensionO4V ) == 0 ) ) return EMTPFormatCode3GPContainer; if ( file.Ext().CompareF( KTxtExtensionAAC ) == 0 ) return EMTPFormatCodeAAC; - + if ( file.Ext().CompareF( KTxtExtensionWAV ) == 0 ) return EMTPFormatCodeWAV; - + #ifdef __WINDOWS_MEDIA if ( file.Ext().CompareF( KTxtExtensionWMV ) == 0 ) return EMTPFormatCodeWMV; - + if ( file.Ext().CompareF( KTxtExtensionASF ) == 0 ) return EMTPFormatCodeASF; @@ -144,6 +148,21 @@ } // ----------------------------------------------------------------------------- +// MmMtpDpUtility::HasReference +// Utility function to decide if there is any reference +// ----------------------------------------------------------------------------- +// +TBool MmMtpDpUtility::HasReference( TUint16 aObjFormatCode ) + { + if ( aObjFormatCode == EMTPFormatCodeAbstractAudioAlbum + || aObjFormatCode == EMTPFormatCodeAbstractAudioVideoPlaylist + || aObjFormatCode == EMTPFormatCodeM3UPlaylist ) + return ETrue; + else + return EFalse; + } + +// ----------------------------------------------------------------------------- // MmMtpDpUtility::IsVideoL (Slow Version) // Utility function to determine whether a format is Video or not // ----------------------------------------------------------------------------- @@ -170,28 +189,28 @@ } else if ( ext.CompareF( KTxtExtensionMP4 ) == 0 || ext.CompareF( KTxtExtension3GP ) == 0 - || ext.CompareF( KTxtExtensionODF ) == 0 + || ext.CompareF( KTxtExtensionODF ) == 0 || ext.CompareF( KTxtExtensionASF ) == 0 ) - { - HBufC8* mimetype = ContainerMimeType( aFullFileName ); - User::LeaveIfNull( mimetype ); + { + HBufC8* mimetype = ContainerMimeType( aFullFileName ); + User::LeaveIfNull( mimetype ); - CleanupStack::PushL( mimetype ); // + mimetype + CleanupStack::PushL( mimetype ); // + mimetype - TMmMtpSubFormatCode subFormatCode; + TMmMtpSubFormatCode subFormatCode; - User::LeaveIfError( SubFormatCodeFromMime( *mimetype, subFormatCode ) ); - CleanupStack::PopAndDestroy( mimetype ); // - mimetype + User::LeaveIfError( SubFormatCodeFromMime( *mimetype, subFormatCode ) ); + CleanupStack::PopAndDestroy( mimetype ); // - mimetype - if ( subFormatCode == EMTPSubFormatCodeVideo ) - { - return ETrue; - } - else - { - return EFalse; - } + if ( subFormatCode == EMTPSubFormatCodeVideo ) + { + return ETrue; } + else + { + return EFalse; + } + } else if ( ext.CompareF( KTxtExtensionO4V ) == 0 ) return ETrue; @@ -204,11 +223,11 @@ // Utility function to determine whether a format is Video or not // ----------------------------------------------------------------------------- // -TBool MmMtpDpUtility::IsVideoL( const TDesC& aFullFileName, +TBool MmMtpDpUtility::IsVideoL( const TDesC& aFullFileName, const MMTPDataProviderFramework& aFramework ) { PRINT1( _L( "MM MTP => MmMtpDpUtility::IsVideoL (Fast Version) aFullFileName = %S" ), &aFullFileName ); - + CMTPObjectMetaData* info = CMTPObjectMetaData::NewLC(); // + info aFramework.ObjectMgr().ObjectL( aFullFileName, *info ); @@ -216,20 +235,33 @@ TUint subFormatCode = info->Uint( CMTPObjectMetaData::EFormatSubCode ); CleanupStack::PopAndDestroy( info ); // - info - - if ( formatCode == EMTPFormatCodeWMV ) + + return MmMtpDpUtility::IsVideoL( formatCode, subFormatCode ); + } + +// ----------------------------------------------------------------------------- +// MmMtpDpUtility::IsVideoL (Fast Version) +// Utility function to determine whether a format is Video or not +// ----------------------------------------------------------------------------- +// +TBool MmMtpDpUtility::IsVideoL( TUint aFormatCode, TUint aSubFormatCode ) + { + if ( aFormatCode == KMTPFormatsAll ) + User::Leave( KErrArgument ); + + if ( aFormatCode == EMTPFormatCodeWMV ) { return ETrue; } - else if ( ( formatCode == EMTPFormatCodeMP4Container ) - || ( formatCode == EMTPFormatCode3GPContainer ) - || ( formatCode == EMTPFormatCodeASF ) ) + else if ( ( aFormatCode == EMTPFormatCodeMP4Container ) + || ( aFormatCode == EMTPFormatCode3GPContainer ) + || ( aFormatCode == EMTPFormatCodeASF ) ) { - if ( subFormatCode == EMTPSubFormatCodeAudio ) + if ( aSubFormatCode == EMTPSubFormatCodeAudio ) { return EFalse; } - else if ( subFormatCode == EMTPSubFormatCodeVideo ) + else if ( aSubFormatCode == EMTPSubFormatCodeVideo ) { return ETrue; } @@ -269,7 +301,7 @@ TEntry fileInfo; // Shouldn't leave User::LeaveIfError( aFs.Entry( aFileName, fileInfo ) ); - return fileInfo.iSize; + return fileInfo.FileSize(); } // ----------------------------------------------------------------------------- @@ -306,6 +338,10 @@ protectionStatus = EMTPProtectionReadOnly; } + PRINT2( _L( "MM MTP <> MmMtpDpUtility::GetProtectionStatusL aFullFileName = %S, protectionStatus = 0x%x" ), + &aFullFileName, + protectionStatus ); + return protectionStatus; } @@ -316,8 +352,8 @@ // TMTPResponseCode MmMtpDpUtility::CheckPropType(TUint16 aPropertyCode, TUint16 aDataType) { - PRINT2( _L( "MM MTP => MmMtpDpUtility::CheckPropCode aPropertyCode = 0x%x, aDataType = 0x%x" ), - aPropertyCode, + PRINT2( _L( "MM MTP => MmMtpDpUtility::CheckPropCode aPropertyCode = 0x%x, aDataType = 0x%x" ), + aPropertyCode, aDataType ); TMTPResponseCode responseCode = EMTPRespCodeOK; @@ -333,7 +369,6 @@ case EMTPObjectPropCodeDateCreated: case EMTPObjectPropCodeDateModified: case EMTPObjectPropCodeDateAdded: - case EMTPObjectPropCodeNonConsumable: case EMTPObjectPropCodeVideoBitRate: { responseCode = EMTPRespCodeAccessDenied; @@ -399,13 +434,24 @@ } break; + // Uint8 properties + case EMTPObjectPropCodeNonConsumable: + case EMTPExtObjectPropCodeOmaDrmStatus: // 0xDB01 + { + if ( aDataType != EMTPTypeUINT8 ) + { + responseCode = EMTPRespCodeInvalidObjectPropFormat; + } + } + break; + default: { responseCode = EMTPRespCodeInvalidObjectPropCode; } break; } - PRINT1( _L( "MM MTP <= MmMtpDpUtility::CheckPropCode responseCode = 0x%x" ), + PRINT1( _L( "MM MTP <= MmMtpDpUtility::CheckPropCode responseCode = 0x%x" ), responseCode ); return responseCode; } @@ -435,7 +481,7 @@ return aFs.Rename( aFullFileName, aNewName ); } - + // ----------------------------------------------------------------------------- // MetadataAccessWrapper::ContainerMimeType // Get mime type from file @@ -484,7 +530,7 @@ PRINT1( _L("MM MTP <> MmMtpDpUtility::ContainerMimeType, AsfMimeTypeL err = %d"), err ); } #endif - + PRINT( _L( "MM MTP <= MmMtpDpUtility::ContainerMimeType" ) ); return mimebuf; } @@ -499,7 +545,7 @@ PRINT( _L( "MM MTP => MmMtpDpUtility::Mp4MimeTypeL" ) ); HBufC8* mimebuf = NULL; TParsePtrC file( aFullPath ); - + if ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 || file.Ext().CompareF( KTxtExtension3GP ) == 0 ) { @@ -573,7 +619,7 @@ { User::Leave( KErrNotSupported ); } - + if ( mimebuf == NULL ) { User::Leave( KErrNotFound ); @@ -591,38 +637,38 @@ { PRINT( _L( "MM MTP => MmMtpDpUtility::OdfMimeTypeL" ) ); HBufC8* mimebuf = NULL; - + TParsePtrC file( aFullPath ); - + if ( file.Ext().CompareF( KTxtExtensionODF ) == 0 ) - { + { CContent* content = CContent::NewL( aFullPath ); CleanupStack::PushL( content ); // + content - + HBufC* buffer = HBufC::NewL( KMimeTypeMaxLength ); CleanupStack::PushL( buffer ); // + buffer - + TPtr data = buffer->Des(); TInt err = content->GetStringAttribute( EMimeType, data ); - + if ( err == KErrNone ) { mimebuf = HBufC8::New( buffer->Length() ); - + if (mimebuf == NULL) { User::LeaveIfError( KErrNotFound ); } - + mimebuf->Des().Copy( *buffer ); } - + // leave if NULL if ( mimebuf == NULL ) { User::Leave( KErrNotFound ); } - + CleanupStack::PopAndDestroy( buffer ); // - buffer CleanupStack::PopAndDestroy( content ); // - content } @@ -630,7 +676,7 @@ { User::Leave( KErrNotSupported ); } - + PRINT( _L( "MM MTP <= MmMtpDpUtility::OdfMimeTypeL" ) ); return mimebuf; } @@ -643,32 +689,32 @@ HBufC8* MmMtpDpUtility::AsfMimeTypeL( const TDesC& aFullPath ) { PRINT( _L( "MM MTP => MmMtpDpUtility::AsfMimeTypeL" ) ); - + HBufC8* mimebuf = NULL; - + #ifdef __WINDOWS_MEDIA TParsePtrC file( aFullPath ); - + if ( file.Ext().CompareF( KTxtExtensionASF ) == 0 ) { CHXMetaDataUtility *hxUtility = CHXMetaDataUtility::NewL(); CleanupStack::PushL( hxUtility ); - + hxUtility->OpenFileL( aFullPath ); - + HXMetaDataKeys::EHXMetaDataId id; TUint count = 0; TBool isAudio = EFalse; hxUtility->GetMetaDataCount( count ); for ( TUint i = 0; i < count; i++ ) - { + { HBufC* buf = NULL; - hxUtility->GetMetaDataAt( i, id, buf ); + hxUtility->GetMetaDataAt( i, id, buf ); if ( id == HXMetaDataKeys::EHXMimeType ) { TPtr des = buf->Des(); - + if ( des.Find( KHxMimeTypeWma() ) != KErrNotFound ) { isAudio = ETrue; @@ -695,7 +741,7 @@ } hxUtility->ResetL(); - CleanupStack::PopAndDestroy( hxUtility ); + CleanupStack::PopAndDestroy( hxUtility ); } else { @@ -705,7 +751,7 @@ #else User::Leave( KErrNotSupported ); #endif - + PRINT( _L( "MM MTP <= MmMtpDpUtility::AsfMimeTypeL" ) ); return mimebuf; } @@ -715,7 +761,7 @@ // Get subformat code from mime string // ----------------------------------------------------------------------------- // -TInt MmMtpDpUtility::SubFormatCodeFromMime( const TDesC8& aMimeType, +TInt MmMtpDpUtility::SubFormatCodeFromMime( const TDesC8& aMimeType, TMmMtpSubFormatCode& aSubFormatCode ) { PRINT( _L( "MM MTP => MmMtpDpUtility::SubFormatCodeFromMime" ) ); @@ -791,8 +837,8 @@ } PRINT1( _L( "MM MTP <= MmMtpDpUtility::GetDrmStatus, drmStatus: %d" ), drmStatus ); - + return drmStatus; } -//end of file +// end of file