mmserv/metadatautility/Src/MetaDataSourceFile.cpp
changeset 0 71ca22bcf22a
equal deleted inserted replaced
-1:000000000000 0:71ca22bcf22a
       
     1 /*
       
     2 * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  This class implements the interface specified in CMetaDataSource
       
    15 *				 when audio source is from a file.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 
       
    21 // INCLUDE FILES
       
    22 #include <Oma2Agent.h>
       
    23 #include <caf/caferr.h>
       
    24 #include <drmrightsinfo.h>
       
    25 #include <drmutilitytypes.h>
       
    26 
       
    27 #include	"MetaDataSourceFile.h"
       
    28 #ifdef _DEBUG
       
    29 #include	<e32svr.h>
       
    30 #endif
       
    31 
       
    32    
       
    33 
       
    34 // ============================ MEMBER FUNCTIONS ===============================
       
    35 
       
    36 // -----------------------------------------------------------------------------
       
    37 // CMetaDataSourceFile::CMetaDataSourceFile
       
    38 // C++ default constructor can NOT contain any code, that
       
    39 // might leave.
       
    40 // -----------------------------------------------------------------------------
       
    41 //
       
    42 CMetaDataSourceFile::CMetaDataSourceFile()
       
    43     {
       
    44     }
       
    45 
       
    46 // -----------------------------------------------------------------------------
       
    47 // CMetaDataSourceFile::ConstructL
       
    48 // Symbian 2nd phase constructor can leave.
       
    49 // -----------------------------------------------------------------------------
       
    50 //
       
    51 void CMetaDataSourceFile::ConstructL(
       
    52 	const TDesC& aFileName )
       
    53     {
       
    54     iFileName.Copy(aFileName);
       
    55     TRAPD(err, iContent = CContent::NewL(aFileName, EContentShareReadWrite ));
       
    56     if(err)
       
    57     	{
       
    58     	iContent = CContent::NewL(aFileName, EContentShareReadOnly );
       
    59     	}
       
    60     iData = iContent->OpenContentL(EPeek);
       
    61     GetSourceAttributesL(); 
       
    62     
       
    63 #ifdef _DEBUG
       
    64 	RDebug::Print(_L("CMetaDataSourceFile::ConstructL - Done"));
       
    65 #endif
       
    66 	}
       
    67 
       
    68 // -----------------------------------------------------------------------------
       
    69 // CMetaDataSourceFile::ConstructL
       
    70 // Symbian 2nd phase constructor can leave.
       
    71 // -----------------------------------------------------------------------------
       
    72 //
       
    73 void CMetaDataSourceFile::ConstructL(
       
    74 	RFile& aFile )
       
    75     {
       
    76     //iFileName.Copy(aFileName);
       
    77     iContent = CContent::NewL(aFile);
       
    78     iData = iContent->OpenContentL(EPeek);
       
    79     GetSourceAttributesL();
       
    80 #ifdef _DEBUG
       
    81 	RDebug::Print(_L("CMetaDataSourceFile::ConstructL - Done"));
       
    82 #endif
       
    83 	}
       
    84 
       
    85 // -----------------------------------------------------------------------------
       
    86 // CMetaDataSourceFile::GetSourceAttributesL
       
    87 // -----------------------------------------------------------------------------
       
    88 //
       
    89 void CMetaDataSourceFile::GetSourceAttributesL()
       
    90 {
       
    91 #ifdef _DEBUG
       
    92     RDebug::Print(_L("CMetaDataSourceFile::GetSourceAttributesL"));
       
    93 #endif
       
    94 
       
    95     TInt value = 0;
       
    96 	TInt err = iContent->GetAttribute(EIsProtected, value);
       
    97 	if(err == KErrNone && value == 1)
       
    98 		{
       
    99 		iProtected = ETrue;
       
   100     	}
       
   101     value = 0; err = 0;
       
   102     err = iData->GetAttribute(ECanPlay, value);
       
   103     if(err == KErrNone && value == 1)
       
   104     	{
       
   105     	iCanPlay = ETrue;
       
   106     	}
       
   107     	
       
   108     iDRMType = -1; err = 0;	
       
   109     err = iData->GetAttribute(ContentAccess::EFileType, iDRMType);
       
   110     if(err != KErrNone)
       
   111     	{
       
   112     	iDRMType = -1;
       
   113     	}
       
   114 
       
   115 
       
   116    // Retrieve Content ID
       
   117     TPtr cid( NULL, 0 );
       
   118     HBufC* uniqueId( HBufC::NewLC( ContentAccess::KMaxCafUniqueId ) );
       
   119     cid.Set( uniqueId->Des() );
       
   120     err = iData->GetStringAttribute(ContentAccess::EContentID, cid);
       
   121 
       
   122    // Verify key exist or not, if iCanPlay is false and cid is existed
       
   123    iKeyExist = ETrue;  // Assume key is exist
       
   124    if (err == KErrNone && iCanPlay == EFalse)
       
   125        {
       
   126    	    DRM::CDrmRightsInfo* ri( DRM::CDrmRightsInfo::NewLC() );
       
   127         DRM::TDrmRightsInfo info( DRM::EURightsInfoValid );    
       
   128         TRAP( err, ri->CheckRightsL( cid, ContentAccess::EPeek, info )) ; 
       
   129               
       
   130         if (err != KErrNone || info == DRM::EURightsInfoMissing)
       
   131             {
       
   132             #ifdef _DEBUG
       
   133      	      RDebug::Print(_L("CMetaDataSourceFile::GetSourceAttributesL-CheckRightsL-err=%d, info=%d"), err, info);
       
   134             #endif
       
   135            
       
   136             iKeyExist = EFalse;
       
   137             }
       
   138         CleanupStack::PopAndDestroy( ri );
       
   139        }
       
   140     CleanupStack::PopAndDestroy( uniqueId );    
       
   141 
       
   142 }
       
   143 
       
   144 
       
   145 // -----------------------------------------------------------------------------
       
   146 // CMetaDataSourceFile::NewL
       
   147 // Two-phased constructor.
       
   148 // -----------------------------------------------------------------------------
       
   149 //
       
   150 CMetaDataSourceFile* CMetaDataSourceFile::NewL(
       
   151 	const TDesC& aFileName )
       
   152     {
       
   153 #ifdef _DEBUG
       
   154 	RDebug::Print(_L("CMetaDataSourceFile::NewL"));
       
   155 #endif
       
   156 	CMetaDataSourceFile* self = new( ELeave ) CMetaDataSourceFile;
       
   157     CleanupStack::PushL( self );
       
   158     self->ConstructL( aFileName );
       
   159     CleanupStack::Pop();
       
   160     return self;
       
   161     }
       
   162     
       
   163     
       
   164 // -----------------------------------------------------------------------------
       
   165 // CMetaDataSourceFile::NewL
       
   166 // Two-phased constructor.
       
   167 // -----------------------------------------------------------------------------
       
   168 //
       
   169 CMetaDataSourceFile* CMetaDataSourceFile::NewL(
       
   170 	RFile& aFile )
       
   171     {
       
   172 #ifdef _DEBUG
       
   173 	RDebug::Print(_L("CMetaDataSourceFile::NewL"));
       
   174 #endif
       
   175 	CMetaDataSourceFile* self = new( ELeave ) CMetaDataSourceFile;
       
   176     CleanupStack::PushL( self );
       
   177     self->ConstructL( aFile );
       
   178     CleanupStack::Pop();
       
   179     return self;
       
   180     }
       
   181 
       
   182 // Destructor
       
   183 CMetaDataSourceFile::~CMetaDataSourceFile()
       
   184 	{
       
   185 	delete iData;
       
   186 	delete iContent;
       
   187 	}
       
   188 
       
   189 // -----------------------------------------------------------------------------
       
   190 // CMetaDataSourceFile::ReadL
       
   191 // -----------------------------------------------------------------------------
       
   192 //
       
   193 void CMetaDataSourceFile::ReadL(
       
   194 	TDes8& aDes )
       
   195    	{
       
   196 	User::LeaveIfError( iData->Read(aDes) );
       
   197 	}
       
   198 
       
   199 // -----------------------------------------------------------------------------
       
   200 // CMetaDataSourceFile::ReadL
       
   201 // -----------------------------------------------------------------------------
       
   202 //
       
   203 void CMetaDataSourceFile::ReadL(
       
   204 	TDes8& aDes,
       
   205 	TInt aLength )
       
   206    	{
       
   207 	User::LeaveIfError( iData->Read(aDes, aLength) );
       
   208     }
       
   209 
       
   210 // -----------------------------------------------------------------------------
       
   211 // CMetaDataSourceFile::ReadL
       
   212 // -----------------------------------------------------------------------------
       
   213 //
       
   214 void CMetaDataSourceFile::ReadL(
       
   215 	TInt aPos,
       
   216 	TDes8& aDes )
       
   217     {
       
   218     User::LeaveIfError( iData->Seek(ESeekStart, aPos) );
       
   219 	User::LeaveIfError( iData->Read(aDes) );
       
   220     }
       
   221 
       
   222 // -----------------------------------------------------------------------------
       
   223 // CMetaDataSourceFile::ReadL
       
   224 // -----------------------------------------------------------------------------
       
   225 //
       
   226 void CMetaDataSourceFile::ReadL(
       
   227 	TInt aPos,
       
   228 	TDes8& aDes,
       
   229 	TInt aLength )
       
   230     {
       
   231     User::LeaveIfError( iData->Seek(ESeekStart, aPos) );
       
   232 	User::LeaveIfError( iData->Read(aDes, aLength) );
       
   233     }
       
   234 
       
   235 // -----------------------------------------------------------------------------
       
   236 // CMetaDataSourceFile::Size
       
   237 // -----------------------------------------------------------------------------
       
   238 //
       
   239 TInt CMetaDataSourceFile::Size(
       
   240 	TInt& aSize ) const
       
   241     {
       
   242     TRAPD(err, iData->DataSizeL(aSize) );
       
   243     if(err)
       
   244     	{
       
   245     	return (KErrNotFound);
       
   246     	}
       
   247     else
       
   248     	{
       
   249     	return err;
       
   250     	}
       
   251     }
       
   252 
       
   253 
       
   254 TInt CMetaDataSourceFile::Seek(TSeek aMode,TInt& aPos) const
       
   255 {
       
   256 	return iData->Seek(aMode, aPos);
       
   257 }
       
   258 
       
   259 
       
   260 TBool CMetaDataSourceFile::FileProtected() const
       
   261 {
       
   262     return iProtected;
       
   263 }
       
   264 
       
   265 TBool CMetaDataSourceFile::CanPlay() const
       
   266 {
       
   267     return iCanPlay;
       
   268 }
       
   269 
       
   270 TInt CMetaDataSourceFile::DrmType() const
       
   271 {
       
   272     return iDRMType;
       
   273 }
       
   274 
       
   275 TBool CMetaDataSourceFile::KeyExist() const
       
   276 {
       
   277     return iKeyExist;
       
   278 }
       
   279 
       
   280 TInt CMetaDataSourceFile::GetStringAttribute(TInt aAttribute, TDes& aValue) const
       
   281 {
       
   282 	if(aAttribute == ERecordingYear)
       
   283 	{
       
   284 		TInt year = 0;
       
   285 		TInt err = iData->GetAttribute(aAttribute, year);
       
   286 		if(err != KErrNone)
       
   287 		{
       
   288 			return err;	
       
   289 		}
       
   290 		if(year >= 0)
       
   291 		{
       
   292 			aValue.AppendNum(year); 
       
   293 			return KErrNone;
       
   294 		}
       
   295 		return KErrCorrupt;
       
   296 	}
       
   297 	return iData->GetStringAttribute(aAttribute, aValue);
       
   298 }
       
   299 
       
   300 
       
   301     
       
   302 TInt CMetaDataSourceFile::GetAttributeL(TInt aAttribute, HBufC8** albumArt)
       
   303 {
       
   304 	TBuf<256> coverUriValue;
       
   305 	TInt err = KErrNone;
       
   306 	err = iContent->GetStringAttribute( aAttribute, coverUriValue );	
       
   307 	if(err != KErrNone)
       
   308 		{
       
   309 		return err;
       
   310 		}
       
   311 	
       
   312 	CData* albumArtPart = iContent->OpenContentL( EView, coverUriValue );
       
   313 	if(albumArtPart == NULL)
       
   314 		{
       
   315 		return KErrNotFound;
       
   316 		}
       
   317 	CleanupStack::PushL(albumArtPart);
       
   318 	
       
   319 	TInt albumArtDataSize = 0;
       
   320 	albumArtPart->DataSizeL(albumArtDataSize);
       
   321     (*albumArt) = HBufC8::NewL(albumArtDataSize);
       
   322     TPtr8 albumArtData = (*albumArt)->Des();
       
   323     err = albumArtPart->Read(albumArtData);
       
   324     CleanupStack::PopAndDestroy(); // albumArtPart
       
   325 	return err;
       
   326 }
       
   327 
       
   328 
       
   329 ContentAccess::CData* CMetaDataSourceFile::DataPtr()
       
   330 {
       
   331 	return iData;
       
   332 }
       
   333 
       
   334 TDesC8& CMetaDataSourceFile::FileName()
       
   335 {
       
   336 	return iFileName;
       
   337 }
       
   338 
       
   339 RFile CMetaDataSourceFile::FileHandler()
       
   340 {
       
   341 	return iFileHandler;
       
   342 }
       
   343 
       
   344 void CMetaDataSourceFile::SetFileHandler(RFile aRFile)
       
   345 {
       
   346 	iFileHandler = aRFile;
       
   347 }
       
   348 
       
   349 TBool CMetaDataSourceFile::IsFileHandler()
       
   350 {
       
   351 	return iIsFileHandler;
       
   352 }
       
   353 
       
   354 void CMetaDataSourceFile::SetIsFileHandler(TBool aIsFileHandler)
       
   355 {
       
   356 	iIsFileHandler = aIsFileHandler;
       
   357 }
       
   358 
       
   359 
       
   360 //  End of File