diff -r 675a964f4eb5 -r 35751d3474b7 contentmgmt/contentaccessfwfordrm/source/caf/supplieroutputfile.cpp --- 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 -#include "resolver.h" - -#ifndef REMOVE_CAF1 -#include -#include -#include -#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 (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 (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 + +#include +#include "resolver.h" + +#ifndef REMOVE_CAF1 +#include +#include +#include +#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 (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 (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