sl@0: /*
sl@0: * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0: * All rights reserved.
sl@0: * This component and the accompanying materials are made available
sl@0: * under the terms of the License "Eclipse Public License v1.0"
sl@0: * which accompanies this distribution, and is available
sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0: *
sl@0: * Initial Contributors:
sl@0: * Nokia Corporation - initial contribution.
sl@0: *
sl@0: * Contributors:
sl@0: *
sl@0: * Description: 
sl@0: *
sl@0: */
sl@0: 
sl@0: 
sl@0: #include <apgcli.h>
sl@0: #include <f32file.h>
sl@0: 
sl@0: #include <caf/attributeset.h>
sl@0: #include <caf/stringattributeset.h>
sl@0: #include <caf/virtualpath.h>
sl@0: #include <caf/caferr.h>
sl@0: #include "f32defaultattributes.h"
sl@0: 
sl@0: 
sl@0: using namespace ContentAccess;
sl@0: 
sl@0: TInt TF32DefaultAttributes::GetAttribute(TInt aAttribute, TInt& aValue, const TDesC& )
sl@0: 	{
sl@0: 	TInt err = KErrNone;
sl@0: 	// All files handled by the F32 agent are unprotected and have the same
sl@0: 	// standard set of attributes
sl@0: 	switch(aAttribute)
sl@0: 		{
sl@0: 		case EIsForwardable:
sl@0: 		case EIsModifyable:
sl@0: 		case EIsCopyable:
sl@0: 		case ECanPlay:
sl@0: 		case ECanPrint:
sl@0: 		case ECanExecute:
sl@0: 		case ECanView:
sl@0: 		case ECanRewind:
sl@0: 		case ECopyPaste:
sl@0: 		case ECanMove:
sl@0: 		case ECanRename:
sl@0: 		case ECanAutomaticConsume:
sl@0: 			aValue = ETrue;
sl@0: 			break;
sl@0: 		case EIsMediaPlayerOnly:
sl@0: 		case EIsAutomatedUseOnly:
sl@0: 		case EIsProtected:			
sl@0: 		case EPreviewAvailable:
sl@0: 			aValue = EFalse;
sl@0: 			break;
sl@0: 		case ETrackNumber:
sl@0: 		case EContentCDataInUse:
sl@0: 		case EContentVersion:
sl@0: 		default:
sl@0: 			err = KErrCANotSupported;
sl@0: 			break;
sl@0: 		};
sl@0: 	return err;
sl@0: 	}
sl@0: 
sl@0: TInt TF32DefaultAttributes::GetAttributeSet(RAttributeSet& aAttributeSet, const TDesC& aUri) 
sl@0: 	{
sl@0: 	TInt i = 0;
sl@0: 	TInt attribute = 0;
sl@0: 	TInt value=0;
sl@0: 	TInt err = KErrNone;
sl@0: 	TInt numAttributes = aAttributeSet.Count();
sl@0: 	
sl@0: 	// loop through all the attriutes in the set and find their values
sl@0: 	for(i = 0; i < numAttributes; i++)
sl@0: 		{
sl@0: 		attribute = aAttributeSet[i];
sl@0: 		err = GetAttribute(attribute, value, aUri);
sl@0: 		aAttributeSet.SetValue(attribute, value, err);
sl@0: 		}	
sl@0: 	return KErrNone;
sl@0: 	}
sl@0: 
sl@0: TInt TF32DefaultAttributes::GetStringAttribute(TInt aAttribute, TDes& aValue, const TDesC& aUri)
sl@0: 	{
sl@0: 	TInt err = KErrNone;
sl@0: 	TBuf8 <KMaxDataTypeLength> mimeType;
sl@0: 
sl@0: 	switch(aAttribute)
sl@0: 		{
sl@0: 		case EMimeType:
sl@0: 			TRAP(err, GetMimeTypeL(aUri, mimeType));
sl@0: 			if(err == KErrNone)
sl@0: 				{
sl@0: 				aValue.Copy(mimeType);
sl@0: 				}
sl@0: 			break;
sl@0: 		default:
sl@0: 			err = KErrCANotSupported;
sl@0: 			break;
sl@0: 		};
sl@0: 	return err;
sl@0: 	}
sl@0: 
sl@0: TInt TF32DefaultAttributes::GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet, const TDesC& aUri)
sl@0: 	{
sl@0: 	TInt i = 0;
sl@0: 	TInt attribute = 0;
sl@0: 	TInt err = KErrNone;
sl@0: 	TBuf <KMaxDataTypeLength> buf;
sl@0: 
sl@0: 	TInt numAttributes = aStringAttributeSet.Count();
sl@0: 
sl@0: 	// loop through all the attriutes in the set and find their values
sl@0: 	for(i = 0; i < numAttributes; i++)
sl@0: 		{
sl@0: 		buf.SetLength(0);
sl@0: 		attribute = aStringAttributeSet[i];
sl@0: 		err = GetStringAttribute(attribute, buf, aUri);
sl@0: 		err = aStringAttributeSet.SetValue(attribute,buf, err);
sl@0: 		if(err != KErrNone)
sl@0: 			{
sl@0: 			return err;
sl@0: 			}
sl@0: 		}	
sl@0: 	return KErrNone;
sl@0: 	}
sl@0: 
sl@0: void TF32DefaultAttributes::GetMimeTypeL(const TDesC& aURI, TDes8& aMimeType)
sl@0: 	{
sl@0: 	TUid appUid(KNullUid);
sl@0: 	TDataType dataType;
sl@0: 	RApaLsSession apparcSession;
sl@0: 	
sl@0: 	// Connect to Apparc
sl@0: 	User::LeaveIfError(apparcSession.Connect());
sl@0: 	CleanupClosePushL(apparcSession);
sl@0: 
sl@0: 	User::LeaveIfError(apparcSession.AppForDocument(aURI, appUid, dataType));
sl@0: 	
sl@0: 	if(dataType.Des8().Length() == 0)
sl@0: 		{
sl@0: 		User::Leave(KErrNotFound);
sl@0: 		}
sl@0: 
sl@0: 	aMimeType.Append(dataType.Des8());
sl@0: 	CleanupStack::PopAndDestroy(&apparcSession);
sl@0: 	}
sl@0: 
sl@0: 
sl@0: TInt TF32DefaultAttributes::GetAttribute(TInt aAttribute, TInt& aValue, RFile& /*aFile*/)
sl@0: 	{
sl@0: 	return GetAttribute(aAttribute, aValue, KNullDesC);
sl@0: 	}
sl@0: 	
sl@0: TInt TF32DefaultAttributes::GetAttributeSet(RAttributeSet& aAttributeSet, RFile& aFile)
sl@0: 	{
sl@0: 	TInt i = 0;
sl@0: 	TInt attribute = 0;
sl@0: 	TInt value = 0;
sl@0: 	TInt err = KErrNone;
sl@0: 	TInt numAttributes = aAttributeSet.Count();
sl@0: 	
sl@0: 	// loop through all the attributes in the set and find their values
sl@0: 	for(i = 0; i < numAttributes; i++)
sl@0: 		{
sl@0: 		attribute = aAttributeSet[i];
sl@0: 		err = GetAttribute(attribute, value, aFile);
sl@0: 		aAttributeSet.SetValue(attribute, value, err);
sl@0: 		}	
sl@0: 	return KErrNone;
sl@0: 	}
sl@0: 	
sl@0: TInt TF32DefaultAttributes::GetStringAttribute(TInt aAttribute, TDes& aValue, RFile& aFile)
sl@0: 	{
sl@0: 	TInt err = KErrNone;
sl@0: 	TBuf8 <KMaxDataTypeLength> mimeType;
sl@0: 
sl@0: 	switch(aAttribute)
sl@0: 		{
sl@0: 		case EMimeType:
sl@0: 			TRAP(err, GetMimeTypeL(aFile, mimeType));
sl@0: 			if(err == KErrNone)
sl@0: 				{
sl@0: 				aValue.Copy(mimeType);
sl@0: 				}
sl@0: 			break;
sl@0: 		default:
sl@0: 			err = KErrCANotSupported;
sl@0: 			break;
sl@0: 		};
sl@0: 	return err;
sl@0: 	}
sl@0: 	
sl@0: TInt TF32DefaultAttributes::GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet, RFile& aFile)
sl@0: 	{
sl@0: 	TInt i = 0;
sl@0: 	TInt attribute = 0;
sl@0: 	TInt err = KErrNone;
sl@0: 	TBuf <KMaxDataTypeLength> buf;
sl@0: 
sl@0: 	TInt numAttributes = aStringAttributeSet.Count();
sl@0: 
sl@0: 	// loop through all the attriutes in the set and find their values
sl@0: 	for(i = 0; i < numAttributes; i++)
sl@0: 		{
sl@0: 		buf.SetLength(0);
sl@0: 		attribute = aStringAttributeSet[i];
sl@0: 		err = GetStringAttribute(attribute, buf, aFile);
sl@0: 		err = aStringAttributeSet.SetValue(attribute,buf, err);
sl@0: 		if(err != KErrNone)
sl@0: 			{
sl@0: 			return err;
sl@0: 			}
sl@0: 		}	
sl@0: 	return KErrNone;
sl@0: 	}
sl@0: 	
sl@0: void TF32DefaultAttributes::GetMimeTypeL(RFile& aFile, TDes8& aMimeType)
sl@0: 	{
sl@0: 	TUid appUid(KNullUid);
sl@0: 	TDataType dataType;
sl@0: 	RApaLsSession apparcSession;
sl@0: 	
sl@0: 	// Connect to Apparc
sl@0: 	User::LeaveIfError(apparcSession.Connect());
sl@0: 	CleanupClosePushL(apparcSession);
sl@0: 
sl@0: 	User::LeaveIfError(apparcSession.AppForDocument(aFile, appUid, dataType));
sl@0: 	
sl@0: 	if(dataType.Des8().Length() == 0)
sl@0: 		{
sl@0: 		User::Leave(KErrNotFound);
sl@0: 		}
sl@0: 	
sl@0: 	aMimeType.Append(dataType.Des8());
sl@0: 	CleanupStack::PopAndDestroy(&apparcSession);
sl@0: 	}
sl@0: 
sl@0: TInt TF32DefaultAttributes::CheckUniqueId(const TDesC& aUniqueId)
sl@0: 	{
sl@0: 	// The only UniqueId values that make sense for the F32 agent are
sl@0: 	// a zero length descriptor (indicating the application is referring to the entire file 
sl@0: 	// or KDefaultContentObject which is also the entire file in the case of the F32 agent
sl@0: 	if(aUniqueId.Length() == 0 || aUniqueId == KDefaultContentObject())
sl@0: 		{
sl@0: 		return KErrNone;	
sl@0: 		}
sl@0: 	else 
sl@0: 		{
sl@0: 		return KErrNotFound;	
sl@0: 		}
sl@0: 	}
sl@0: 	
sl@0: TInt TF32DefaultAttributes::CheckVirtualPath(const TVirtualPathPtr& aVirtualPath)
sl@0: 	{
sl@0: 	// check the Unique Id
sl@0: 	TInt err = CheckUniqueId(aVirtualPath.UniqueId());
sl@0: 	
sl@0: 	// check if the file exists
sl@0: 	
sl@0: 	
sl@0: 	return err;
sl@0: 	}	
sl@0: 	
sl@0: TUint TF32DefaultAttributes::GetFileMode(TContentShareMode aMode)
sl@0: 	{
sl@0: 	
sl@0: 	TUint fileMode = EFileStream | EFileRead;
sl@0: 
sl@0: 	if(aMode  == EContentShareReadWrite)
sl@0: 		{
sl@0: 		fileMode |= EFileShareReadersOrWriters;
sl@0: 		}
sl@0: 	else if(aMode == EContentShareExclusive)
sl@0: 		{
sl@0: 		fileMode  |= EFileShareExclusive;
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		fileMode |= EFileShareReadersOnly;
sl@0: 		}
sl@0: 		
sl@0: 	return fileMode;
sl@0: 	}
sl@0: 
sl@0: #ifdef SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT
sl@0: 	
sl@0: TInt TF32DefaultAttributes::GetAttribute(const TDesC8& /*aHeaderData*/, TInt aAttribute, TInt& aValue)
sl@0: 	{
sl@0: 	return GetAttribute(aAttribute, aValue, KNullDesC);
sl@0: 	}
sl@0: 	
sl@0: TInt TF32DefaultAttributes::GetAttributeSet(const TDesC8& aHeaderData, RAttributeSet& aAttributeSet)
sl@0: 	{
sl@0: 	TInt i = 0;
sl@0: 	TInt attribute = 0;
sl@0: 	TInt value = 0;
sl@0: 	TInt err = KErrNone;
sl@0: 	TInt numAttributes = aAttributeSet.Count();
sl@0: 	
sl@0: 	// loop through all the attriutes in the set and find their values
sl@0: 	for(i = 0; i < numAttributes; i++)
sl@0: 		{
sl@0: 		attribute = aAttributeSet[i];
sl@0: 		err = GetAttribute(aHeaderData, attribute, value);
sl@0: 		aAttributeSet.SetValue(attribute, value, err);
sl@0: 		}	
sl@0: 	return KErrNone;
sl@0: 	}
sl@0: 	
sl@0: TInt TF32DefaultAttributes::GetStringAttribute(const TDesC8& /*aHeaderData*/, TInt aAttribute, TDes& aValue)
sl@0: 	{
sl@0: 	TInt err = KErrNone;
sl@0: 	TBuf8 <KMaxDataTypeLength> mimeType;
sl@0: 
sl@0: 	switch(aAttribute)
sl@0: 		{
sl@0: 		case EMimeType:
sl@0: 			aValue.Copy(KNullDesC());
sl@0: 			break;
sl@0: 		case EContentID:
sl@0: 			aValue.Copy(KDefaultContentObject());
sl@0: 			break;
sl@0: 		default:
sl@0: 			err = KErrCANotSupported;
sl@0: 			break;
sl@0: 		};
sl@0: 	return err;
sl@0: 	}
sl@0: 	
sl@0: TInt TF32DefaultAttributes::GetStringAttributeSet(const TDesC8& aHeaderData, RStringAttributeSet& aStringAttributeSet)
sl@0: 	{
sl@0: 	TInt i = 0;
sl@0: 	TInt attribute = 0;
sl@0: 	TInt err = KErrNone;
sl@0: 	TBuf <KMaxDataTypeLength> buf;
sl@0: 
sl@0: 	TInt numAttributes = aStringAttributeSet.Count();
sl@0: 
sl@0: 	// loop through all the attriutes in the set and find their values
sl@0: 	for(i = 0; i < numAttributes; i++)
sl@0: 		{
sl@0: 		buf.SetLength(0);
sl@0: 		attribute = aStringAttributeSet[i];
sl@0: 		err = GetStringAttribute(aHeaderData, attribute, buf);
sl@0: 		err = aStringAttributeSet.SetValue(attribute, buf, err);
sl@0: 		if(err != KErrNone)
sl@0: 			{
sl@0: 			return err;
sl@0: 			}
sl@0: 		}	
sl@0: 	return KErrNone;
sl@0: 	}
sl@0: 
sl@0: #endif //SYMBIAN_ENABLE_SDP_WMDRM_SUPPORT