diff -r 000000000000 -r 1bce908db942 multimediacommsengine/tsrc/MMCTestDriver/MCETester/src/CTcMCEFileHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/tsrc/MMCTestDriver/MCETester/src/CTcMCEFileHandler.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,242 @@ +/* +* Copyright (c) 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: Implementation. +* +*/ + +#include "CTcMCEFileHandler.h" + +_LIT(KDateString,"%D%M%Y%/0%1%/1%2%/2%3%/3 %-B%:0%J%:1%T%:2%S%:3%+B"); + +CTcMCEFileHandler::CTcMCEFileHandler() + { + // No implementation required + } + +CTcMCEFileHandler::~CTcMCEFileHandler() + { + iFsSession.Close(); + } + +CTcMCEFileHandler* CTcMCEFileHandler::NewLC() + { + CTcMCEFileHandler* self = new (ELeave) CTcMCEFileHandler(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CTcMCEFileHandler* CTcMCEFileHandler::NewL() + { + CTcMCEFileHandler* self = CTcMCEFileHandler::NewLC(); + CleanupStack::Pop(); // self; + return self; + } + +void CTcMCEFileHandler::ConstructL() + { + User::LeaveIfError(iFsSession.Connect()); + } + +void CTcMCEFileHandler::FindFile(const TDesC& aPath, + const TDesC& aFileName, CDesC8Array* aArray) + { + CDirScan* DirScan = CDirScan::NewLC(iFsSession); + DirScan->SetScanDataL(aPath, + KEntryAttDir|KEntryAttMatchExclusive, + ESortNone, CDirScan::EScanDownTree); + + while(true) + { + CDir* dir = NULL; + TRAPD(error, DirScan->NextL(dir)); + if (error || !dir) + break; + + delete dir; + + ScanDirectoryL(DirScan->FullPath(), aFileName, aArray); + }; + + CleanupStack::PopAndDestroy(DirScan); + + } + +TInt CTcMCEFileHandler::GetFilesFromFolderL(TDesC& aFolder,CDesC8Array* aArray) + { + if(aArray == NULL) + return KErrArgument; + + CDir* FileList(NULL); + TInt res = iFsSession.GetDir(aFolder, + KEntryAttMaskSupported, EDirsFirst, FileList); + if( res == KErrNone ) + { + if(FileList && aArray) + { + FileList->Sort(ESortByName); + for(TInt i=0; i < FileList->Count(); i++) + { + if((*FileList)[i].IsSystem() + || (*FileList)[i].IsHidden() + || (*FileList)[i].IsDir()) + { + // ignore System & Hidden Files & folders + } + else + { + TBuf8<255> buf8; + buf8.Copy((*FileList)[i].iName); + //add the file name to the array + aArray->AppendL(buf8); + } + } + } + + delete FileList; + FileList = NULL; + } + return res; + } + +TBool CTcMCEFileHandler::Delete(const TDesC& aName, TUint aSwitch) + { + CFileMan* fileMan=CFileMan::NewL(iFsSession); + CleanupStack::PushL(fileMan); + + TInt err=fileMan->Delete(aName,aSwitch); + CleanupStack::PopAndDestroy(fileMan); + + if(err==KErrNone) + return ETrue; + else + return EFalse; + + } + + +TBool CTcMCEFileHandler::CheckFileExists(const TDesC& aFileName) + { + TParse p; + // do isolated parse + User::LeaveIfError(p.Set(aFileName, NULL, NULL)); + + User::LeaveIfError(iFsSession.Parse(aFileName, p)); + + TBool result = BaflUtils::FileExists(iFsSession, aFileName); + + if(result) + return ETrue; + else + return EFalse; + } + +//name: value +void CTcMCEFileHandler::GetFileInfoL(const TDesC& aFileName, CDesC8Array* aArray) + { + if(aArray == NULL) + User::LeaveIfError(KErrArgument); + + if(CheckFileExists(aFileName) == EFalse) + User::LeaveIfError(KErrNotFound); + + _LIT8(KFileName,"File Name:"); + _LIT8(KDateModified,"Date Modified:"); + _LIT8(KFileSize,"File Size:"); + _LIT8(KFileAttrib,"Entry details:"); + + TParse parse; + User::LeaveIfError(parse.Set(aFileName, NULL, NULL)); + + //Consists of a drive and path + iFsSession.SetSessionPath( parse.DriveAndPath() ); + + TFileName name( parse.NameAndExt() ); + + // Get entry details for file and print them + TEntry entry; + User::LeaveIfError(iFsSession.Entry(name, entry)); + + TBuf<30> dateString; + entry.iModified.FormatL(dateString, KDateString); + + TBuf8<255> buf8; + //file name + aArray->AppendL( KFileName ); + buf8.Copy( parse.NameAndExt() ); + aArray->AppendL( buf8 ); + buf8.Zero(); + //date modified + aArray->AppendL( KDateModified ); + buf8.Copy(dateString); + aArray->AppendL( buf8 ); + buf8.Zero(); + + //file size + TBuf8< 12 > convert; + convert.AppendNum( entry.iSize ); + aArray->AppendL( KFileSize ); + aArray->AppendL( convert ); + + TBuf8<15> buffer; + FormatEntry(buffer,entry); // Archive attribute should be set + //attribs + aArray->AppendL(KFileAttrib); + aArray->AppendL(buffer); + } + +void CTcMCEFileHandler::FormatEntry(TDes8& aBuffer, const TEntry& aEntry) + { + _LIT(KReadOnly,"Read-only"); + _LIT(KHidden,"Hidden"); + _LIT(KSystem,"System"); + _LIT(KDirectory,"Directory"); + _LIT(KArchive,"Archive"); + + if(aEntry.IsReadOnly()) + aBuffer.Append(KReadOnly); + if(aEntry.IsHidden()) + aBuffer.Append(KHidden); + if(aEntry.IsSystem()) + aBuffer.Append(KSystem); + if(aEntry.IsDir()) + aBuffer.Append(KDirectory); + if(aEntry.IsArchive()) + aBuffer.Append(KArchive); + } + +void CTcMCEFileHandler::ScanDirectoryL(const TDesC& aDir, + const TDesC& aWildCard, CDesC8Array* aArray) + { + TParse parse; + parse.Set(aWildCard, &aDir, NULL); + TPtrC spec(parse.FullName()); + + TFindFile FindFile(iFsSession); + CDir* dir; + + if (!FindFile.FindWildByPath(parse.FullName(), NULL, dir)) + { + CleanupStack::PushL(dir); + + for(TInt i = 0; i < dir->Count(); i++) + { + parse.Set((*dir)[i].iName, &spec, NULL); + TBuf8<255> buf8; + buf8.Copy(parse.FullName()); + aArray->AppendL(buf8); + } + CleanupStack::PopAndDestroy(dir); + } + }