contentmgmt/contentaccessfwfordrm/source/f32agent/f32agentcontent.cpp
changeset 8 35751d3474b7
parent 0 2c201484c85f
child 15 da2ae96f639b
--- a/contentmgmt/contentaccessfwfordrm/source/f32agent/f32agentcontent.cpp	Tue Jul 21 01:04:32 2009 +0100
+++ b/contentmgmt/contentaccessfwfordrm/source/f32agent/f32agentcontent.cpp	Thu Sep 10 14:01:51 2009 +0300
@@ -1,343 +1,347 @@
-/*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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: 
-*
-*/
-
-
-#include <caf/caf.h>
-#include <apmstd.h>
-#include "f32agentcontent.h"
-#include "f32defaultattributes.h"
-#include "f32agentui.h"
-
-using namespace ContentAccess;
-
-CF32AgentContent* CF32AgentContent::NewL(const TDesC& aURI, TContentShareMode aShareMode)
-	{
-	CF32AgentContent* self = new (ELeave) CF32AgentContent;
-	CleanupStack::PushL(self);
-	self->ConstructL(aURI, aShareMode);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-CF32AgentContent* CF32AgentContent::NewL(RFile& aFile)
-	{
-	CF32AgentContent* self = new (ELeave) CF32AgentContent;
-	CleanupStack::PushL(self);
-	self->ConstructL(aFile);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-CF32AgentContent::CF32AgentContent()
-	{
-	}
-
-CF32AgentContent::~CF32AgentContent()
-	{
-	iFile.Close();
-	if(iURI)
-		{
-		// file session only created when file is opened by name
-		iFs.Close();
-		}
-	delete iURI;
-	}
-  
-void CF32AgentContent::ConstructL(const TDesC& aURI, TContentShareMode aShareMode)
-	{
-	iURI = aURI.AllocL();
-	iShareMode = aShareMode;
-	
-	// Test that the file exists and hold it open so nobody deletes it etc
-	TUint mode = TF32DefaultAttributes::GetFileMode(aShareMode);
-	User::LeaveIfError(iFs.Connect());
-	User::LeaveIfError(iFile.Open(iFs, *iURI, mode));
-	}
-
-void CF32AgentContent::ConstructL(RFile& aFile)
-	{
-	User::LeaveIfError(iFile.Duplicate(aFile));
-	}
-
-TInt CF32AgentContent::OpenContainer(const TDesC&)
-	{
-	return KErrNotFound;
-	}
-
-TInt CF32AgentContent::CloseContainer()
-	{
-	return KErrNotFound;
-	}
-
-void CF32AgentContent::GetEmbeddedObjectsL(RStreamablePtrArray<CEmbeddedObject>& aArray)
-	{
-	TBuf8 <KMaxDataTypeLength> mimeType;
-	CEmbeddedObject *embeddedObject = NULL;
-	
-	// the only embedded object is the file itself	
-	// Try to get the mime type
-	mimeType.SetLength(0);
-	if(iURI)
-		{
-		TF32DefaultAttributes::GetMimeTypeL(*iURI, mimeType);
-		}
-	else
-		{
-		TF32DefaultAttributes::GetMimeTypeL(iFile, mimeType);
-		}	
-	embeddedObject = CEmbeddedObject::NewL(KDefaultContentObject(), mimeType, EContentObject);
-	CleanupStack::PushL(embeddedObject);
-	aArray.AppendL(embeddedObject);
-	
-	// Now owned by the array so do not destroy
-	CleanupStack::Pop(embeddedObject);
-	}
-
-void CF32AgentContent::GetEmbeddedObjectsL(RStreamablePtrArray<CEmbeddedObject>& aArray, TEmbeddedType aType)
-	{
-	// the only embedded object is the file itself
-	if(aType == EContentObject)
-		{
-		// just get the default object since there is only one content object
-		GetEmbeddedObjectsL(aArray);
-		}
-	}
-
-void CF32AgentContent::SearchL(RStreamablePtrArray<CEmbeddedObject>& aArray, const TDesC8& aMimeType, TBool /* aRecurse */)
-	{
-	TBuf8 <KMaxDataTypeLength> mimeType;
-	
-	CEmbeddedObject *embeddedObject = NULL;
-	
-	// the only embedded object is the file itself	
-	if(iURI)
-		{
-		TF32DefaultAttributes::GetMimeTypeL(*iURI, mimeType);
-		}
-	else
-		{
-		TF32DefaultAttributes::GetMimeTypeL(iFile, mimeType);
-		}
-	
-	// Check the file has the correct mime type
-	if(aMimeType == mimeType)
-		{
-		embeddedObject = CEmbeddedObject::NewL(KDefaultContentObject(), mimeType, EContentObject);
-		CleanupStack::PushL(embeddedObject);		
-		aArray.AppendL(embeddedObject);
-	
-		// Now owned by the array so do not destroy
-		CleanupStack::Pop(embeddedObject);
-		}
-	else
-		{
-		// Mime type was incorrect. Set error to indicate no content object
-		// of the desired type was found in the file.
-		User::Leave(KErrNotFound);
-		}
-	}
-
-TInt CF32AgentContent::Search(RStreamablePtrArray<CEmbeddedObject>& aArray, const TDesC8& aMimeType, TBool aRecurse)
-	{
-	TRAPD( err, SearchL(aArray, aMimeType, aRecurse) );
-	return err;
-	}
-
-TInt CF32AgentContent::GetAttribute(TInt aAttribute, TInt& aValue, const TDesC& aUniqueId)
-	{
-	// check that the unique Id exists
-	if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone)
-		{
-		return KErrNotFound;	
-		}
-	
-	TInt err = KErrNone;
-	if(iURI)
-		{
-		err = TF32DefaultAttributes::GetAttribute(aAttribute, aValue, *iURI);
-		}
-	else
-		{
-		err = TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iFile);
-		}
-	return err;
-	}
-
-TInt CF32AgentContent::GetAttributeSet(RAttributeSet& aAttributeSet, const TDesC& aUniqueId)
-	{
-	// check that the unique Id exists
-	if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone)
-		{
-		return KErrNotFound;	
-		}
-		
-	TInt err = KErrNone;
-	if(iURI)
-		{
-		err = TF32DefaultAttributes::GetAttributeSet(aAttributeSet, *iURI);
-		}
-	else
-		{
-		err = TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iFile);
-		}
-	return err;
-	}
-
-TInt CF32AgentContent::GetStringAttribute(TInt aAttribute, TDes& aValue, const TDesC& aUniqueId)
-	{
-	// check that the unique Id exists
-	if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone)
-		{
-		return KErrNotFound;	
-		}
-		
-	TInt err = KErrNone;
-	if(iURI)
-		{
-		err = TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, *iURI);
-		}
-	else
-		{
-		err = TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iFile);
-		}
-	return err;
-	}
-
-TInt CF32AgentContent::GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet, const TDesC& aUniqueId)
-	{
-	// check that the unique Id exists
-	if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone)
-		{
-		return KErrNotFound;	
-		}
-	
-	TInt err = KErrNone;
-	if(iURI)
-		{
-		err = TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, *iURI);
-		}
-	else
-		{
-		err = TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iFile);
-		}
-	return err;
-	}
-
-TInt CF32AgentContent::AgentSpecificCommand(TInt , const TDesC8& , TDes8& )
-	{
-	return KErrCANotSupported;
-	}
-
-void CF32AgentContent::AgentSpecificCommand(TInt , const TDesC8& , TDes8& , TRequestStatus& aStatus)
-	{
-	TRequestStatus* ptr = &aStatus;
-	User::RequestComplete(ptr, KErrCANotSupported);
-	}
-
-void CF32AgentContent::NotifyStatusChange(TEventMask , TRequestStatus& aStatus, const TDesC& )
-	{
-	TRequestStatus* ptr = &aStatus;
-	User::RequestComplete(ptr, KErrCANotSupported);
-	}
-
-TInt CF32AgentContent::CancelNotifyStatusChange(TRequestStatus& , const TDesC& )
-	{
-	return KErrCANotSupported;
-	}
-
-void CF32AgentContent::RequestRights(TRequestStatus& aStatus, const TDesC& )
-	{
-	TRequestStatus* ptr = &aStatus;
-	User::RequestComplete(ptr, KErrCANotSupported);
-	}
-
-TInt CF32AgentContent::CancelRequestRights(TRequestStatus& , const TDesC& )
-	{
-	return KErrCANotSupported;
-	}
-
-void CF32AgentContent::DisplayInfoL(TDisplayInfo aInfo, const TDesC& aUniqueId)
-	{
-	// Check that the client hasn't specified some incorrect UniqueId
-	User::LeaveIfError(TF32DefaultAttributes::CheckUniqueId(aUniqueId));
-
-
-	if(iURI)
-		{
-		// Open the file handle in order to pass it to the Agent UI
-		RFs fs;
-		RFile file;
-		
-		// default share mode of EFileShareReadersOnly
-		TUint mode = EFileShareReadersOnly | EFileStream | EFileRead;
-
-		if(iShareMode == EContentShareReadWrite)
-			{
-			mode = EFileShareAny | EFileStream | EFileRead;
-			}
-		else if(iShareMode == EContentShareExclusive)
-			{
-			mode = EFileShareExclusive | EFileStream | EFileRead;
-			}
-
-		
-		User::LeaveIfError(fs.Connect());
-		CleanupClosePushL(fs);
-		User::LeaveIfError(file.Open(fs, *iURI, mode));
-		CleanupClosePushL(file);
-		AgentUiL().DisplayInfoL(aInfo, file);	
-		CleanupStack::PopAndDestroy(2, &fs); // file, fs
-		}
-	else
-		{
-		// just pass existing file handle
-		AgentUiL().DisplayInfoL(aInfo, iFile);
-		}
-	}
-
-TInt CF32AgentContent::SetProperty(TAgentProperty aProperty, TInt aValue)
-	{
-	if(aProperty==EAgentPropertyAgentUI)
-		// should only pass type EAgentPropertyAgentUI 
-		{
-		
-		CF32AgentUi* ui = NULL;
-	
-		// get a pointer to the UI
-		TRAPD(err, ui = &AgentUiL());
-		if(err)
-			{
-			return err;
-			}
-		return ui->SetProperty(aProperty, aValue);
-		}
-	else
-		{
-		return KErrCANotSupported;
-		}
-	}
-
-
-CF32AgentUi& CF32AgentContent::AgentUiL()
-	{
-	if(!iAgentUi)
-		{
-		// load agent UI from f32AgentUi.dll
-		iAgentUi = TF32AgentUiFactory::CreateF32AgentUiL();
-		}
-	return *iAgentUi;
-	}
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+*
+*/
+
+
+#include <caf/caf.h>
+#include <apmstd.h>
+#include "f32agentcontent.h"
+#include "f32defaultattributes.h"
+#include <caf/f32agentui.h>
+
+using namespace ContentAccess;
+
+CF32AgentContent* CF32AgentContent::NewL(const TDesC& aURI, TContentShareMode aShareMode)
+	{
+	CF32AgentContent* self = new (ELeave) CF32AgentContent;
+	CleanupStack::PushL(self);
+	self->ConstructL(aURI, aShareMode);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CF32AgentContent* CF32AgentContent::NewL(RFile& aFile)
+	{
+	CF32AgentContent* self = new (ELeave) CF32AgentContent;
+	CleanupStack::PushL(self);
+	self->ConstructL(aFile);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CF32AgentContent::CF32AgentContent()
+	{
+	}
+
+CF32AgentContent::~CF32AgentContent()
+	{
+	iFile.Close();
+	if(iURI)
+		{
+		// file session only created when file is opened by name
+		iFs.Close();
+		}
+	delete iURI;
+	}
+  
+void CF32AgentContent::ConstructL(const TDesC& aURI, TContentShareMode aShareMode)
+	{
+	iURI = aURI.AllocL();
+	iShareMode = aShareMode;
+	
+	// Test that the file exists and hold it open so nobody deletes it etc
+	TUint mode = TF32DefaultAttributes::GetFileMode(aShareMode);
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iFile.Open(iFs, *iURI, mode));
+	}
+
+void CF32AgentContent::ConstructL(RFile& aFile)
+	{
+	User::LeaveIfError(iFile.Duplicate(aFile));
+	}
+
+TInt CF32AgentContent::OpenContainer(const TDesC&)
+	{
+	return KErrNotFound;
+	}
+
+TInt CF32AgentContent::CloseContainer()
+	{
+	return KErrNotFound;
+	}
+
+void CF32AgentContent::GetEmbeddedObjectsL(RStreamablePtrArray<CEmbeddedObject>& aArray)
+	{
+	TBuf8 <KMaxDataTypeLength> mimeType;
+	CEmbeddedObject *embeddedObject = NULL;
+	
+	// the only embedded object is the file itself	
+	// Try to get the mime type
+	mimeType.SetLength(0);
+	if(iURI)
+		{
+		TF32DefaultAttributes::GetMimeTypeL(*iURI, mimeType);
+		}
+	else
+		{
+		TF32DefaultAttributes::GetMimeTypeL(iFile, mimeType);
+		}	
+	embeddedObject = CEmbeddedObject::NewL(KDefaultContentObject(), mimeType, EContentObject);
+	CleanupStack::PushL(embeddedObject);
+	aArray.AppendL(embeddedObject);
+	
+	// Now owned by the array so do not destroy
+	CleanupStack::Pop(embeddedObject);
+	}
+
+void CF32AgentContent::GetEmbeddedObjectsL(RStreamablePtrArray<CEmbeddedObject>& aArray, TEmbeddedType aType)
+	{
+	// the only embedded object is the file itself
+	if(aType == EContentObject)
+		{
+		// just get the default object since there is only one content object
+		GetEmbeddedObjectsL(aArray);
+		}
+	}
+
+void CF32AgentContent::SearchL(RStreamablePtrArray<CEmbeddedObject>& aArray, const TDesC8& aMimeType, TBool /* aRecurse */)
+	{
+	TBuf8 <KMaxDataTypeLength> mimeType;
+	
+	CEmbeddedObject *embeddedObject = NULL;
+	
+	// the only embedded object is the file itself	
+	if(iURI)
+		{
+		TF32DefaultAttributes::GetMimeTypeL(*iURI, mimeType);
+		}
+	else
+		{
+		TF32DefaultAttributes::GetMimeTypeL(iFile, mimeType);
+		}
+	
+	// Check the file has the correct mime type
+	if(aMimeType == mimeType)
+		{
+		embeddedObject = CEmbeddedObject::NewL(KDefaultContentObject(), mimeType, EContentObject);
+		CleanupStack::PushL(embeddedObject);		
+		aArray.AppendL(embeddedObject);
+	
+		// Now owned by the array so do not destroy
+		CleanupStack::Pop(embeddedObject);
+		}
+	else
+		{
+		// Mime type was incorrect. Set error to indicate no content object
+		// of the desired type was found in the file.
+		User::Leave(KErrNotFound);
+		}
+	}
+
+TInt CF32AgentContent::Search(RStreamablePtrArray<CEmbeddedObject>& aArray, const TDesC8& aMimeType, TBool aRecurse)
+	{
+	TRAPD( err, SearchL(aArray, aMimeType, aRecurse) );
+	return err;
+	}
+
+TInt CF32AgentContent::GetAttribute(TInt aAttribute, TInt& aValue, const TDesC& aUniqueId)
+	{
+	// check that the unique Id exists
+	if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone)
+		{
+		return KErrNotFound;	
+		}
+	
+	TInt err = KErrNone;
+	if(iURI)
+		{
+		err = TF32DefaultAttributes::GetAttribute(aAttribute, aValue, *iURI);
+		}
+	else
+		{
+		err = TF32DefaultAttributes::GetAttribute(aAttribute, aValue, iFile);
+		}
+	return err;
+	}
+
+TInt CF32AgentContent::GetAttributeSet(RAttributeSet& aAttributeSet, const TDesC& aUniqueId)
+	{
+	// check that the unique Id exists
+	if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone)
+		{
+		return KErrNotFound;	
+		}
+		
+	TInt err = KErrNone;
+	if(iURI)
+		{
+		err = TF32DefaultAttributes::GetAttributeSet(aAttributeSet, *iURI);
+		}
+	else
+		{
+		err = TF32DefaultAttributes::GetAttributeSet(aAttributeSet, iFile);
+		}
+	return err;
+	}
+
+TInt CF32AgentContent::GetStringAttribute(TInt aAttribute, TDes& aValue, const TDesC& aUniqueId)
+	{
+	// check that the unique Id exists
+	if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone)
+		{
+		return KErrNotFound;	
+		}
+		
+	TInt err = KErrNone;
+	if(iURI)
+		{
+		err = TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, *iURI);
+		}
+	else
+		{
+		err = TF32DefaultAttributes::GetStringAttribute(aAttribute, aValue, iFile);
+		}
+	return err;
+	}
+
+TInt CF32AgentContent::GetStringAttributeSet(RStringAttributeSet& aStringAttributeSet, const TDesC& aUniqueId)
+	{
+	// check that the unique Id exists
+	if(TF32DefaultAttributes::CheckUniqueId(aUniqueId) != KErrNone)
+		{
+		return KErrNotFound;	
+		}
+	
+	TInt err = KErrNone;
+	if(iURI)
+		{
+		err = TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, *iURI);
+		}
+	else
+		{
+		err = TF32DefaultAttributes::GetStringAttributeSet(aStringAttributeSet, iFile);
+		}
+	return err;
+	}
+
+TInt CF32AgentContent::AgentSpecificCommand(TInt , const TDesC8& , TDes8& )
+	{
+	return KErrCANotSupported;
+	}
+
+void CF32AgentContent::AgentSpecificCommand(TInt , const TDesC8& , TDes8& , TRequestStatus& aStatus)
+	{
+	TRequestStatus* ptr = &aStatus;
+	User::RequestComplete(ptr, KErrCANotSupported);
+	}
+
+void CF32AgentContent::NotifyStatusChange(TEventMask , TRequestStatus& aStatus, const TDesC& )
+	{
+	TRequestStatus* ptr = &aStatus;
+	User::RequestComplete(ptr, KErrCANotSupported);
+	}
+
+TInt CF32AgentContent::CancelNotifyStatusChange(TRequestStatus& , const TDesC& )
+	{
+	return KErrCANotSupported;
+	}
+
+void CF32AgentContent::RequestRights(TRequestStatus& aStatus, const TDesC& )
+	{
+	TRequestStatus* ptr = &aStatus;
+	User::RequestComplete(ptr, KErrCANotSupported);
+	}
+
+TInt CF32AgentContent::CancelRequestRights(TRequestStatus& , const TDesC& )
+	{
+	return KErrCANotSupported;
+	}
+
+void CF32AgentContent::DisplayInfoL(TDisplayInfo aInfo, const TDesC& aUniqueId)
+	{
+	// Check that the client hasn't specified some incorrect UniqueId
+	User::LeaveIfError(TF32DefaultAttributes::CheckUniqueId(aUniqueId));
+
+
+	if(iURI)
+		{
+		// Open the file handle in order to pass it to the Agent UI
+		RFs fs;
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+		RFile64 file;
+#else
+		RFile file;
+#endif //SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+		
+		// default share mode of EFileShareReadersOnly
+		TUint mode = EFileShareReadersOnly | EFileStream | EFileRead;
+
+		if(iShareMode == EContentShareReadWrite)
+			{
+			mode = EFileShareAny | EFileStream | EFileRead;
+			}
+		else if(iShareMode == EContentShareExclusive)
+			{
+			mode = EFileShareExclusive | EFileStream | EFileRead;
+			}
+
+		
+		User::LeaveIfError(fs.Connect());
+		CleanupClosePushL(fs);
+		User::LeaveIfError(file.Open(fs, *iURI, mode));
+		CleanupClosePushL(file);
+		AgentUiL().DisplayInfoL(aInfo, file);	
+		CleanupStack::PopAndDestroy(2, &fs); // file, fs
+		}
+	else
+		{
+		// just pass existing file handle
+		AgentUiL().DisplayInfoL(aInfo, iFile);
+		}
+	}
+
+TInt CF32AgentContent::SetProperty(TAgentProperty aProperty, TInt aValue)
+	{
+	if(aProperty==EAgentPropertyAgentUI)
+		// should only pass type EAgentPropertyAgentUI 
+		{
+		
+		CF32AgentUi* ui = NULL;
+	
+		// get a pointer to the UI
+		TRAPD(err, ui = &AgentUiL());
+		if(err)
+			{
+			return err;
+			}
+		return ui->SetProperty(aProperty, aValue);
+		}
+	else
+		{
+		return KErrCANotSupported;
+		}
+	}
+
+
+CF32AgentUi& CF32AgentContent::AgentUiL()
+	{
+	if(!iAgentUi)
+		{
+		// load agent UI from f32AgentUi.dll
+		iAgentUi = TF32AgentUiFactory::CreateF32AgentUiL();
+		}
+	return *iAgentUi;
+	}