diff -r 000000000000 -r 95b198f216e5 wmdrm/wmdrmengine/wmdrmagent/src/wmdrmagentimportfile.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wmdrm/wmdrmengine/wmdrmagent/src/wmdrmagentimportfile.cpp Thu Dec 17 08:52:27 2009 +0200 @@ -0,0 +1,404 @@ +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: ?Description +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include "WmDrmAgentImportfile.h" +#include "logfn.h" + +using namespace ContentAccess; + +// LOCAL FUNCTION PROTOTYPES +template +LOCAL_C void PointerArrayResetDestroyAndClose(TAny* aPtr); + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ?function_name ?description. +// ?description +// Returns: ?value_1: ?description +// ?value_n: ?description_line1 +// ?description_line2 +// ----------------------------------------------------------------------------- +// +template +void PointerArrayResetDestroyAndClose(TAny* aPtr) + { + (reinterpret_cast*>(aPtr))->ResetAndDestroy(); + (reinterpret_cast*>(aPtr))->Close(); + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +CWmDrmAgentImportFile* CWmDrmAgentImportFile::NewL( + const TDesC8& aMimeType, + const CMetaDataArray& aMetaDataArray, + const TDesC& aOutputDirectory, + const TDesC& aSuggestedFileName) + { + LOGFN( "CWmDrmAgentImportFile::NewL" ); + CWmDrmAgentImportFile* self=new(ELeave) CWmDrmAgentImportFile(EFalse); + CleanupStack::PushL(self); + self->ConstructL(aMimeType, aMetaDataArray, aOutputDirectory, + aSuggestedFileName); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +CWmDrmAgentImportFile* CWmDrmAgentImportFile::NewL( + const TDesC8& aMimeType, + const CMetaDataArray& aMetaDataArray) + { + LOGFN( "CWmDrmAgentImportFile::NewL (2)" ); + CWmDrmAgentImportFile* self=new(ELeave) CWmDrmAgentImportFile(EFalse); + CleanupStack::PushL(self); + self->ConstructL(aMimeType, aMetaDataArray, KNullDesC(), KNullDesC()); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +CWmDrmAgentImportFile::CWmDrmAgentImportFile( + TBool aAgentCreatesOutputFiles): + iOutputDirectory(NULL), + iSuggestedFileName(NULL), + iOutputFileName(NULL), + iLastWriteData(NULL), + iAgentCreatesOutputFiles(aAgentCreatesOutputFiles) + { + LOGFN( "CWmDrmAgentImportFile::CWmDrmAgentImportFile" ); + iImportStatus = EInProgress; + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +CWmDrmAgentImportFile::~CWmDrmAgentImportFile() + { + LOGFN( "CWmDrmAgentImportFile::~CWmDrmAgentImportFile" ); + if (iFileOpen) + { + iFile.Close(); + iFileOpen = EFalse; + } + iFs.Close(); + delete iOutputDirectory; + delete iSuggestedFileName; + delete iOutputFileName; + delete iLastWriteData; + iOutputFiles.ResetAndDestroy(); + iOutputFiles.Close(); + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +void CWmDrmAgentImportFile::ConstructL( + const TDesC8& aMimeType, + const CMetaDataArray& /*aMetaDataArray*/, + const TDesC& aOutputDirectory, + const TDesC& aSuggestedFileName) + { + LOGFN( "CWmDrmAgentImportFile::ConstructL" ); + + iMimeType = aMimeType.AllocL(); + iOutputDirectory = aOutputDirectory.AllocL(); + iSuggestedFileName = aSuggestedFileName.AllocL(); + iOutputFileName = HBufC::NewL(iOutputDirectory->Des().Length() + + iSuggestedFileName->Des().Length()); + iAgentCreatesOutputFiles = ETrue; + + User::LeaveIfError(iFs.Connect()); + User::LeaveIfError(iFs.ShareAuto()); + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +TInt CWmDrmAgentImportFile::OpenOutputFile() + { + TInt r = KErrNone; + TPtr fileNamePtr = iOutputFileName->Des(); + + fileNamePtr.Copy(*iOutputDirectory); + fileNamePtr.Append(*iSuggestedFileName); + + r = iFile.Create(iFs, fileNamePtr, EFileShareReadersOrWriters | EFileStream | + EFileWrite); + if (r == KErrNone) + { + iFileOpen = ETrue; + } + else + { + r = KErrCANewFileHandleRequired; + } + return r; + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +void CWmDrmAgentImportFile::WriteDataL( const TDesC8& aData ) + { + LOGFN( "CWmDrmAgentImportFile::WriteDataL" ); + TInt err = KErrNone; + + if( !iFileOpen ) + { + err = OpenOutputFile(); + if( err ) + { + User::Leave(KErrCANewFileHandleRequired); + } + } + User::LeaveIfError( iFile.Write( aData ) ); + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +TInt CWmDrmAgentImportFile::WriteData(const TDesC8& aData) + { + LOGFN( "CWmDrmAgentImportFile::WriteData" ); + TInt r = KErrNone; + TRAP(r, WriteDataL(aData)); + return r; + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +TInt CWmDrmAgentImportFile::WriteDataComplete() + { + LOGFN( "CWmDrmAgentImportFile::WriteDataComplete" ); + TInt r = KErrNone; + CSupplierOutputFile *temp = NULL; + + if( iFileOpen ) + { + iFile.Close(); + iFileOpen = EFalse; + } + + if( iOutputFileName ) + { + TRAP(r, temp = CSupplierOutputFile::NewL( iOutputFileName->Des(), EContent, iMimeType->Des())); + if( r == KErrNone ) + { + r = iOutputFiles.Append(temp); + if( r != KErrNone ) + { + delete temp; + } + } + } + return r; + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +void CWmDrmAgentImportFile::WriteData( + const TDesC8& aData, + TRequestStatus &aStatus) + { + LOGFN( "CWmDrmAgentImportFile::WriteData" ); + TRequestStatus *ptr = &aStatus; + TInt r = WriteData(aData); + User::RequestComplete(ptr,r); + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +void CWmDrmAgentImportFile::WriteDataComplete( + TRequestStatus &aStatus) + { + LOGFN( "CWmDrmAgentImportFile::WriteDataComplete" ); + TRequestStatus *ptr = &aStatus; + TInt r = WriteDataComplete(); + User::RequestComplete(ptr,r); + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +TInt CWmDrmAgentImportFile::OutputFileCountL() const + { + LOGFN( "CWmDrmAgentImportFile::OutputFileCountL" ); + return iOutputFiles.Count(); + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +CSupplierOutputFile& CWmDrmAgentImportFile::OutputFileL( + TInt aIndex) + { + LOGFN( "CWmDrmAgentImportFile::OutputFileL" ); + return *iOutputFiles[aIndex]; + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +TImportStatus CWmDrmAgentImportFile::GetImportStatus() const + { + LOGFN( "CWmDrmAgentImportFile::GetImportStatus" ); + return iImportStatus; + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +TInt CWmDrmAgentImportFile::GetSuggestedOutputFileExtension( + TDes& /*aFileExtension*/) + { + LOGFN( "CWmDrmAgentImportFile::GetSuggestedOutputFileExtension" ); + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +TInt CWmDrmAgentImportFile::GetSuggestedOutputFileName( + TDes& /*aFileName*/) + { + LOGFN( "CWmDrmAgentImportFile::GetSuggestedOutputFileName" ); + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +TInt CWmDrmAgentImportFile::ContinueWithNewOutputFile( + RFile& aFile, + const TDesC& aFileName) + { + RFile file; + TInt r = KErrNone; + LOGFN( "CWmDrmAgentImportFile::ContinueWithNewOutputFile" ); + + if (iOutputFileName != NULL) + { + delete iOutputFileName; + iOutputFileName = NULL; + } + + TRAP(r, iOutputFileName = aFileName.AllocL()); + + if (r == KErrNone) + { + iFile.Close(); + iFile.Duplicate(aFile); + iFileOpen = ETrue; + } + return r; + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +void CWmDrmAgentImportFile::ContinueWithNewOutputFile( + RFile& aFile, + const TDesC& aFileName, + TRequestStatus& aStatus) + { + LOGFN( "CWmDrmAgentImportFile::ContinueWithNewOutputFile (2)" ); + TRequestStatus *ptr = &aStatus; + TInt r = ContinueWithNewOutputFile(aFile, aFileName); + User::RequestComplete(ptr,r); + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +void CWmDrmAgentImportFile::NewMimePartL( + const TDesC8& /*aMimeType*/, + const CMetaDataArray& /*aImportMetaData*/) + { + LOGFN( "CWmDrmAgentImportFile::NewMimePartL" ); + User::Leave(KErrCANotSupported); + } + +// ----------------------------------------------------------------------------- +// CWmDrmAgentImportFile:: +// +// ----------------------------------------------------------------------------- +// +void CWmDrmAgentImportFile::EndMimePartL() + { + LOGFN( "CWmDrmAgentImportFile::EndMimePartL" ); + User::Leave(KErrCANotSupported); + } + +// End of file