--- /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 <Oma2Agent.h>
+#include <caf/caferr.h>
+#include <drmrightsinfo.h>
+#include <drmutilitytypes.h>
+
+#include "MetaDataSourceFile.h"
+#ifdef _DEBUG
+#include <e32svr.h>
+#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