void CRefTestAgentImportFile::ConstructL(const TDesC8& aMimeType, const CMetaDataArray& aMetaDataArray, const TDesC& aOutputDirectory, const TDesC& aSuggestedFileName) { TPtrC suggestedFileName(aSuggestedFileName); TPtrC outputDirectory(aOutputDirectory); // make sure any suggested extension is removed // otherwise our recognizer won't work TInt pos = aSuggestedFileName.LocateF(TChar(KExtDelimiter)); if(pos != KErrNotFound) { // set the length so the extension is not included suggestedFileName.Set(aSuggestedFileName.Left(pos)); } // If no output directory is suggested default to "c:\\" if(outputDirectory.Length() == 0) { outputDirectory.Set(KRtaDefaultOutputDirectory()); } // If no file name is suggested default to "output" if(suggestedFileName.Length() == 0) { suggestedFileName.Set(KRtaDefaultOutputFile()); } //Only files containing rights, post-acquisition rights or postacquisition content need to be imported if(!aMimeType.CompareF(KRtaMimeRights()) || !aMimeType.CompareF(KRtaMimeContentRights())) {// Files containing rights iMimeType = ReferenceTestAgent::EMimeContentOrRights; } else if(!aMimeType.CompareF(KRtaMimePostAcquisitionRights())) {// Files containing post-acquisition rights iMimeType = ReferenceTestAgent::EMimePostAcquisitionRights; } else if(!aMimeType.CompareF(KRtaMimePostAcquisitionContent())) {// Files containing post-acquisition content iMimeType = ReferenceTestAgent::EMimePostAcquisitionContent; } else {//Others are not supported User::Leave(KErrCANotSupported); } // create buffer to store the output directory supplied by the client // Append a trailing slash if there is no slash present iOutputDirectory = HBufC::NewL(outputDirectory.Length() + 1); iOutputDirectory->Des().Copy(outputDirectory); if(outputDirectory[outputDirectory.Length() - 1] != KPathDelimiter) { iOutputDirectory->Des().Append(TChar(KPathDelimiter)); } // Create suggested file name by combining output directory and suggested name // Use the length of KRtaExtensionContentRights since it is the longest one iSuggestedFileName = HBufC::NewL(iOutputDirectory->Des().Length() + suggestedFileName.Length() + KRtaExtensionContentRights().Length()); iSuggestedFileName->Des().Copy(*iOutputDirectory); iSuggestedFileName->Des().Append(suggestedFileName); switch(iMimeType) { case ReferenceTestAgent::EMimeContentOrRights: case ReferenceTestAgent::EMimePostAcquisitionContent: iSuggestedFileName->Des().Append(KRtaExtensionContent()); break; case ReferenceTestAgent::EMimePostAcquisitionRights: iSuggestedFileName->Des().Append(KRtaExtensionPostAcquisitionRights()); }; // Create a file handle User::LeaveIfError(iFs.Connect()); // create importer object if (iAgentCreatesOutputFiles) { iImporter = ReferenceTestAgent::CRefTestAgentImport::NewL(*iSuggestedFileName, iFs, iMimeType); } else { iImporter = ReferenceTestAgent::CRefTestAgentImport::NewL(KNullDesC, iFs, iMimeType); } if(iMimeType == ReferenceTestAgent::EMimePostAcquisitionContent) { //In the post-acquisition case, the rights object is installed separately and the content //comes without a content-xml file. It means that there is no way to extract the Content Id. //Therefore, the Content Id is sent as a meta-data while importing a post-acquisition content. cid=<content_id> iImporter->SetMetaDataL(aMetaDataArray); } DumpMetaData(aMetaDataArray); // create input data log RFile inputDataFile; inputDataFile.Replace(iFs, KInputDataLogFile(), EFileWrite | EFileStream); inputDataFile.Close(); }