contentmgmt/contentaccessfwfordrm/source/caf/supplieroutputfile.cpp
changeset 8 35751d3474b7
parent 0 2c201484c85f
child 15 da2ae96f639b
--- a/contentmgmt/contentaccessfwfordrm/source/caf/supplieroutputfile.cpp	Tue Jul 21 01:04:32 2009 +0100
+++ b/contentmgmt/contentaccessfwfordrm/source/caf/supplieroutputfile.cpp	Thu Sep 10 14:01:51 2009 +0300
@@ -1,180 +1,186 @@
-/*
-* Copyright (c) 2003-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 "apgcli.h"
-#include "apmstd.h"
-#include "supplieroutputfile.h"
-
-#include <caf/caftypes.h>
-#include "resolver.h"
-
-#ifndef REMOVE_CAF1
-#include <caf/attribute.h>
-#include <caf/content.h>
-#include <caf/bitset.h>
-#endif
-
-
-using namespace ContentAccess;
-
-#ifndef REMOVE_CAF1
-EXPORT_C CSupplierOutputFile* CSupplierOutputFile::NewL(const TDesC& aFileName, const TOutputType aOutputType)
-	{
-	return CSupplierOutputFile::NewL(aFileName, aOutputType, KNullDesC8());
-	}
-#endif
-
-EXPORT_C CSupplierOutputFile* CSupplierOutputFile::NewL(const TDesC& aFileName, const TOutputType aOutputType, const TDesC8& aMimeType)
-	{
-	CSupplierOutputFile *self = new (ELeave) CSupplierOutputFile();
-	CleanupStack::PushL(self);
-	self->ConstructL(aFileName, aMimeType, aOutputType);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-EXPORT_C CSupplierOutputFile* CSupplierOutputFile::NewL(RReadStream& aStream)
-	{
-	CSupplierOutputFile *self = new (ELeave) CSupplierOutputFile();
-	CleanupStack::PushL(self);
-	self->InternalizeL(aStream);
-	CleanupStack::Pop(self);
-	return self;		
-	}
-
-CSupplierOutputFile::CSupplierOutputFile()
-	{
-	}
-	
-
-void CSupplierOutputFile::ConstructL(const TDesC& aFileName, const TDesC8& aMimeType, const TOutputType aOutputType)
-	{
-	iOutputType = aOutputType;
-	
-	CAgentResolver *resolver = CAgentResolver::NewL(EFalse);
-	CleanupStack::PushL(resolver);
-	iFileName = resolver->ConvertAgentFileNameL(aFileName);
-	CleanupStack::PopAndDestroy(resolver);
-	iMimeType.Copy(aMimeType);
-	
-	// convert mime type to lower case
-	iMimeType.LowerCase();
-	}
-
-
-CSupplierOutputFile::~CSupplierOutputFile()
-	{
-	delete iFileName;
-#ifndef REMOVE_CAF1
-	delete iAttr;
-#endif
-	}
-
-
-EXPORT_C TPtrC CSupplierOutputFile::FileName() const
-	{
-	return *iFileName;
-	}
-
-EXPORT_C TOutputType CSupplierOutputFile::OutputType() const
-	{
-	return iOutputType;
-	}
-
-EXPORT_C TPtrC8 CSupplierOutputFile::MimeTypeL()
-	{
-	TUid uid;
-	TDataType dataType;
-	RApaLsSession apparcSession;
-
-	if(iMimeType.Length() == 0)
-		{
-		// Use the Application Architecture Server to find the Mime type of the output File
-		User::LeaveIfError(apparcSession.Connect());
-		CleanupClosePushL(apparcSession);
-		    
-   		// Use a temp FS session to preserve platsec 
-		RFs tempFsSession; 
-		User::LeaveIfError(tempFsSession.Connect());     
-	  	CleanupClosePushL(tempFsSession);
-	  	User::LeaveIfError(tempFsSession.ShareProtected());  
-	  	
-	  	// Open file here and send the handle because AppArc doesn't have Allfiles capability 
-	  	RFile tempFile; 
-	  	User::LeaveIfError(tempFile.Open(tempFsSession, *iFileName, EFileRead|EFileShareAny)); 
-	  	CleanupClosePushL(tempFile); 
-   
-		User::LeaveIfError(apparcSession.AppForDocument(tempFile, uid, dataType)); 
-
-		iMimeType.Copy(dataType.Des8().Left(KMaxDataTypeLength)); 
-
-		CleanupStack::PopAndDestroy(&tempFile); // close 
-		CleanupStack::PopAndDestroy(&tempFsSession);    // close 
-		CleanupStack::PopAndDestroy(&apparcSession);	// close
-		}
-
-	return iMimeType;
-	}
-
-EXPORT_C void CSupplierOutputFile::ExternalizeL(RWriteStream& aStream) const
-	{
-	aStream.WriteInt32L(static_cast <TInt> (iOutputType));
-	aStream.WriteInt32L(iFileName->Des().Length());
-	aStream.WriteL(*iFileName);
-	aStream.WriteInt32L(iMimeType.Length());
-	aStream.WriteL(iMimeType);
-	}
-
-void CSupplierOutputFile::InternalizeL(RReadStream& aStream)
-	{
-	TInt length = 0;
-	iOutputType = static_cast <TOutputType> (aStream.ReadInt32L());
-	length = aStream.ReadInt32L();
-	iFileName = HBufC::NewL(length);
-	if(length)
-		{
-		TPtr filename = iFileName->Des();
-		aStream.ReadL(filename, length);
-		}
-	length = aStream.ReadInt32L();
-	aStream.ReadL(iMimeType, length);
-	}
-
-
-
-#ifndef REMOVE_CAF1
-EXPORT_C CAttribute &  CSupplierOutputFile::AttributesL (TBool aPreloaded) 
-	{
-	// retrieve the attributes, only need to do this once since this instance
-	// will only ever refer to one output file 
-	if(!iAttr)
-		{
-		// create a content consumer interface for the output file produced
-		CContent* content = CContent::NewLC(FileName());	
-		iAttr = content->NewAttributeL(ETrue);
-		CleanupStack::PopAndDestroy(content);
-		}
-	else if(aPreloaded)  // update all attribute bits
-		{
-		CBitset &bitset = iAttr->QuerySet();
-		bitset.SetAll();
-		iAttr->GetL();
-		}
-	return *iAttr;
-	}
-#endif // #ifndef REMOVE_CAF1
+/*
+* Copyright (c) 2003-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 "apgcli.h"
+#include "apmstd.h"
+#include <caf/supplieroutputfile.h>
+
+#include <caf/caftypes.h>
+#include "resolver.h"
+
+#ifndef REMOVE_CAF1
+#include <caf/attribute.h>
+#include <caf/content.h>
+#include <caf/bitset.h>
+#endif
+
+
+using namespace ContentAccess;
+
+#ifndef REMOVE_CAF1
+EXPORT_C CSupplierOutputFile* CSupplierOutputFile::NewL(const TDesC& aFileName, const TOutputType aOutputType)
+	{
+	return CSupplierOutputFile::NewL(aFileName, aOutputType, KNullDesC8());
+	}
+#endif
+
+EXPORT_C CSupplierOutputFile* CSupplierOutputFile::NewL(const TDesC& aFileName, const TOutputType aOutputType, const TDesC8& aMimeType)
+	{
+	CSupplierOutputFile *self = new (ELeave) CSupplierOutputFile();
+	CleanupStack::PushL(self);
+	self->ConstructL(aFileName, aMimeType, aOutputType);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CSupplierOutputFile* CSupplierOutputFile::NewL(RReadStream& aStream)
+	{
+	CSupplierOutputFile *self = new (ELeave) CSupplierOutputFile();
+	CleanupStack::PushL(self);
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;		
+	}
+
+CSupplierOutputFile::CSupplierOutputFile()
+	{
+	}
+	
+
+void CSupplierOutputFile::ConstructL(const TDesC& aFileName, const TDesC8& aMimeType, const TOutputType aOutputType)
+	{
+	iOutputType = aOutputType;
+	
+	CAgentResolver *resolver = CAgentResolver::NewL(EFalse);
+	CleanupStack::PushL(resolver);
+	iFileName = resolver->ConvertAgentFileNameL(aFileName);
+	CleanupStack::PopAndDestroy(resolver);
+	iMimeType.Copy(aMimeType);
+	
+	// convert mime type to lower case
+	iMimeType.LowerCase();
+	}
+
+
+CSupplierOutputFile::~CSupplierOutputFile()
+	{
+	delete iFileName;
+#ifndef REMOVE_CAF1
+	delete iAttr;
+#endif
+	}
+
+
+EXPORT_C TPtrC CSupplierOutputFile::FileName() const
+	{
+	return *iFileName;
+	}
+
+EXPORT_C TOutputType CSupplierOutputFile::OutputType() const
+	{
+	return iOutputType;
+	}
+
+EXPORT_C TPtrC8 CSupplierOutputFile::MimeTypeL()
+	{
+	TUid uid;
+	TDataType dataType;
+	RApaLsSession apparcSession;
+
+	if(iMimeType.Length() == 0)
+		{
+		// Use the Application Architecture Server to find the Mime type of the output File
+		User::LeaveIfError(apparcSession.Connect());
+		CleanupClosePushL(apparcSession);
+		    
+   		// Use a temp FS session to preserve platsec 
+		RFs tempFsSession; 
+		User::LeaveIfError(tempFsSession.Connect());     
+	  	CleanupClosePushL(tempFsSession);
+	  	User::LeaveIfError(tempFsSession.ShareProtected());  
+	  	
+	  	// Open file here and send the handle because AppArc doesn't have Allfiles capability
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+	  	// If file size is greater than 2GB than RFile::Open will fail with KErrTooBig.
+	  	// So RFile64.
+	  	RFile64 tempFile; 
+#else
+	  	RFile tempFile;
+#endif //SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+	  	User::LeaveIfError(tempFile.Open(tempFsSession, *iFileName, EFileRead|EFileShareAny)); 
+	  	CleanupClosePushL(tempFile); 
+   
+		User::LeaveIfError(apparcSession.AppForDocument(tempFile, uid, dataType)); 
+
+		iMimeType.Copy(dataType.Des8().Left(KMaxDataTypeLength)); 
+
+		CleanupStack::PopAndDestroy(&tempFile); // close 
+		CleanupStack::PopAndDestroy(&tempFsSession);    // close 
+		CleanupStack::PopAndDestroy(&apparcSession);	// close
+		}
+
+	return iMimeType;
+	}
+
+EXPORT_C void CSupplierOutputFile::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(static_cast <TInt> (iOutputType));
+	aStream.WriteInt32L(iFileName->Des().Length());
+	aStream.WriteL(*iFileName);
+	aStream.WriteInt32L(iMimeType.Length());
+	aStream.WriteL(iMimeType);
+	}
+
+void CSupplierOutputFile::InternalizeL(RReadStream& aStream)
+	{
+	TInt length = 0;
+	iOutputType = static_cast <TOutputType> (aStream.ReadInt32L());
+	length = aStream.ReadInt32L();
+	iFileName = HBufC::NewL(length);
+	if(length)
+		{
+		TPtr filename = iFileName->Des();
+		aStream.ReadL(filename, length);
+		}
+	length = aStream.ReadInt32L();
+	aStream.ReadL(iMimeType, length);
+	}
+
+
+
+#ifndef REMOVE_CAF1
+EXPORT_C CAttribute &  CSupplierOutputFile::AttributesL (TBool aPreloaded) 
+	{
+	// retrieve the attributes, only need to do this once since this instance
+	// will only ever refer to one output file 
+	if(!iAttr)
+		{
+		// create a content consumer interface for the output file produced
+		CContent* content = CContent::NewLC(FileName());	
+		iAttr = content->NewAttributeL(ETrue);
+		CleanupStack::PopAndDestroy(content);
+		}
+	else if(aPreloaded)  // update all attribute bits
+		{
+		CBitset &bitset = iAttr->QuerySet();
+		bitset.SetAll();
+		iAttr->GetL();
+		}
+	return *iAttr;
+	}
+#endif // #ifndef REMOVE_CAF1