multimediacommsengine/tsrc/MMCTestDriver/MCETester/src/CTcMCEFileHandler.cpp
changeset 0 1bce908db942
--- /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);
+        }
+    }