diff -r 000000000000 -r 71ca22bcf22a mmserv/metadatautility/Src/MetaDataSourceFile.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/metadatautility/Src/MetaDataSourceFile.cpp Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,360 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: This class implements the interface specified in CMetaDataSource +* when audio source is from a file. +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include + +#include "MetaDataSourceFile.h" +#ifdef _DEBUG +#include +#endif + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMetaDataSourceFile::CMetaDataSourceFile +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CMetaDataSourceFile::CMetaDataSourceFile() + { + } + +// ----------------------------------------------------------------------------- +// CMetaDataSourceFile::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CMetaDataSourceFile::ConstructL( + const TDesC& aFileName ) + { + iFileName.Copy(aFileName); + TRAPD(err, iContent = CContent::NewL(aFileName, EContentShareReadWrite )); + if(err) + { + iContent = CContent::NewL(aFileName, EContentShareReadOnly ); + } + iData = iContent->OpenContentL(EPeek); + GetSourceAttributesL(); + +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataSourceFile::ConstructL - Done")); +#endif + } + +// ----------------------------------------------------------------------------- +// CMetaDataSourceFile::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CMetaDataSourceFile::ConstructL( + RFile& aFile ) + { + //iFileName.Copy(aFileName); + iContent = CContent::NewL(aFile); + iData = iContent->OpenContentL(EPeek); + GetSourceAttributesL(); +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataSourceFile::ConstructL - Done")); +#endif + } + +// ----------------------------------------------------------------------------- +// CMetaDataSourceFile::GetSourceAttributesL +// ----------------------------------------------------------------------------- +// +void CMetaDataSourceFile::GetSourceAttributesL() +{ +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataSourceFile::GetSourceAttributesL")); +#endif + + TInt value = 0; + TInt err = iContent->GetAttribute(EIsProtected, value); + if(err == KErrNone && value == 1) + { + iProtected = ETrue; + } + value = 0; err = 0; + err = iData->GetAttribute(ECanPlay, value); + if(err == KErrNone && value == 1) + { + iCanPlay = ETrue; + } + + iDRMType = -1; err = 0; + err = iData->GetAttribute(ContentAccess::EFileType, iDRMType); + if(err != KErrNone) + { + iDRMType = -1; + } + + + // Retrieve Content ID + TPtr cid( NULL, 0 ); + HBufC* uniqueId( HBufC::NewLC( ContentAccess::KMaxCafUniqueId ) ); + cid.Set( uniqueId->Des() ); + err = iData->GetStringAttribute(ContentAccess::EContentID, cid); + + // Verify key exist or not, if iCanPlay is false and cid is existed + iKeyExist = ETrue; // Assume key is exist + if (err == KErrNone && iCanPlay == EFalse) + { + DRM::CDrmRightsInfo* ri( DRM::CDrmRightsInfo::NewLC() ); + DRM::TDrmRightsInfo info( DRM::EURightsInfoValid ); + TRAP( err, ri->CheckRightsL( cid, ContentAccess::EPeek, info )) ; + + if (err != KErrNone || info == DRM::EURightsInfoMissing) + { + #ifdef _DEBUG + RDebug::Print(_L("CMetaDataSourceFile::GetSourceAttributesL-CheckRightsL-err=%d, info=%d"), err, info); + #endif + + iKeyExist = EFalse; + } + CleanupStack::PopAndDestroy( ri ); + } + CleanupStack::PopAndDestroy( uniqueId ); + +} + + +// ----------------------------------------------------------------------------- +// CMetaDataSourceFile::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CMetaDataSourceFile* CMetaDataSourceFile::NewL( + const TDesC& aFileName ) + { +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataSourceFile::NewL")); +#endif + CMetaDataSourceFile* self = new( ELeave ) CMetaDataSourceFile; + CleanupStack::PushL( self ); + self->ConstructL( aFileName ); + CleanupStack::Pop(); + return self; + } + + +// ----------------------------------------------------------------------------- +// CMetaDataSourceFile::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CMetaDataSourceFile* CMetaDataSourceFile::NewL( + RFile& aFile ) + { +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataSourceFile::NewL")); +#endif + CMetaDataSourceFile* self = new( ELeave ) CMetaDataSourceFile; + CleanupStack::PushL( self ); + self->ConstructL( aFile ); + CleanupStack::Pop(); + return self; + } + +// Destructor +CMetaDataSourceFile::~CMetaDataSourceFile() + { + delete iData; + delete iContent; + } + +// ----------------------------------------------------------------------------- +// CMetaDataSourceFile::ReadL +// ----------------------------------------------------------------------------- +// +void CMetaDataSourceFile::ReadL( + TDes8& aDes ) + { + User::LeaveIfError( iData->Read(aDes) ); + } + +// ----------------------------------------------------------------------------- +// CMetaDataSourceFile::ReadL +// ----------------------------------------------------------------------------- +// +void CMetaDataSourceFile::ReadL( + TDes8& aDes, + TInt aLength ) + { + User::LeaveIfError( iData->Read(aDes, aLength) ); + } + +// ----------------------------------------------------------------------------- +// CMetaDataSourceFile::ReadL +// ----------------------------------------------------------------------------- +// +void CMetaDataSourceFile::ReadL( + TInt aPos, + TDes8& aDes ) + { + User::LeaveIfError( iData->Seek(ESeekStart, aPos) ); + User::LeaveIfError( iData->Read(aDes) ); + } + +// ----------------------------------------------------------------------------- +// CMetaDataSourceFile::ReadL +// ----------------------------------------------------------------------------- +// +void CMetaDataSourceFile::ReadL( + TInt aPos, + TDes8& aDes, + TInt aLength ) + { + User::LeaveIfError( iData->Seek(ESeekStart, aPos) ); + User::LeaveIfError( iData->Read(aDes, aLength) ); + } + +// ----------------------------------------------------------------------------- +// CMetaDataSourceFile::Size +// ----------------------------------------------------------------------------- +// +TInt CMetaDataSourceFile::Size( + TInt& aSize ) const + { + TRAPD(err, iData->DataSizeL(aSize) ); + if(err) + { + return (KErrNotFound); + } + else + { + return err; + } + } + + +TInt CMetaDataSourceFile::Seek(TSeek aMode,TInt& aPos) const +{ + return iData->Seek(aMode, aPos); +} + + +TBool CMetaDataSourceFile::FileProtected() const +{ + return iProtected; +} + +TBool CMetaDataSourceFile::CanPlay() const +{ + return iCanPlay; +} + +TInt CMetaDataSourceFile::DrmType() const +{ + return iDRMType; +} + +TBool CMetaDataSourceFile::KeyExist() const +{ + return iKeyExist; +} + +TInt CMetaDataSourceFile::GetStringAttribute(TInt aAttribute, TDes& aValue) const +{ + if(aAttribute == ERecordingYear) + { + TInt year = 0; + TInt err = iData->GetAttribute(aAttribute, year); + if(err != KErrNone) + { + return err; + } + if(year >= 0) + { + aValue.AppendNum(year); + return KErrNone; + } + return KErrCorrupt; + } + return iData->GetStringAttribute(aAttribute, aValue); +} + + + +TInt CMetaDataSourceFile::GetAttributeL(TInt aAttribute, HBufC8** albumArt) +{ + TBuf<256> coverUriValue; + TInt err = KErrNone; + err = iContent->GetStringAttribute( aAttribute, coverUriValue ); + if(err != KErrNone) + { + return err; + } + + CData* albumArtPart = iContent->OpenContentL( EView, coverUriValue ); + if(albumArtPart == NULL) + { + return KErrNotFound; + } + CleanupStack::PushL(albumArtPart); + + TInt albumArtDataSize = 0; + albumArtPart->DataSizeL(albumArtDataSize); + (*albumArt) = HBufC8::NewL(albumArtDataSize); + TPtr8 albumArtData = (*albumArt)->Des(); + err = albumArtPart->Read(albumArtData); + CleanupStack::PopAndDestroy(); // albumArtPart + return err; +} + + +ContentAccess::CData* CMetaDataSourceFile::DataPtr() +{ + return iData; +} + +TDesC8& CMetaDataSourceFile::FileName() +{ + return iFileName; +} + +RFile CMetaDataSourceFile::FileHandler() +{ + return iFileHandler; +} + +void CMetaDataSourceFile::SetFileHandler(RFile aRFile) +{ + iFileHandler = aRFile; +} + +TBool CMetaDataSourceFile::IsFileHandler() +{ + return iIsFileHandler; +} + +void CMetaDataSourceFile::SetIsFileHandler(TBool aIsFileHandler) +{ + iIsFileHandler = aIsFileHandler; +} + + +// End of File