serviceproviders/sapi_mediamanagement/tsrc/dev/tmediamgmttest/src/mediamgmtblocks.cpp
changeset 5 989d2f495d90
child 23 50974a8b132e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_mediamanagement/tsrc/dev/tmediamgmttest/src/mediamgmtblocks.cpp	Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,678 @@
+/*
+* Copyright (c) 2002 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:   ?Description
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include  <utf.h>
+#include "MediaMgmt.h"
+#include "mgitemslist.h"
+using namespace LIW;
+
+
+_LIT8(KResponse,"Response");
+_LIT8(KErrorCode,"ErrorCode");
+
+_LIT8( KMgNull8, "NULL" );
+_LIT16( KMgNull, "NULL");
+_LIT(KTimeFormat,"%F%M/%D/%Y/%H:%T");
+
+
+// EXTERNAL DATA STRUCTURES
+//extern  ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// ?function_name ?description.
+// ?description
+// Returns: ?value_1: ?description
+//          ?value_n: ?description_line1
+//                    ?description_line2
+// -----------------------------------------------------------------------------
+//
+/*
+?type ?function_name(
+    ?arg_type arg,  // ?description
+    ?arg_type arg)  // ?description
+    {
+
+    ?code  // ?comment
+
+    // ?comment
+    ?code
+    }
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMediaMgmt::Delete
+// Delete here all resources allocated and opened from test methods.
+// Called from destructor.
+// -----------------------------------------------------------------------------
+//
+void CMediaMgmt::Delete()
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMgmt::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CMediaMgmt::RunMethodL(
+    CStifItemParser& aItem )
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function.
+        ENTRY( "GetFiles", CMediaMgmt::GetFilesL ),
+        ENTRY( "GetFilesInfo", CMediaMgmt::GetFilesInfoL ),
+
+        };
+
+    const TInt count = sizeof( KFunctions ) /
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMgmt::ExampleL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMediaMgmt::GetFilesL( CStifItemParser& aItem )
+    {
+    _LIT( KExample, "In GetFilesL" );
+    iLog->Log( KExample );
+	struct ParamPass* arg1 = new ParamPass();
+    arg1->it = &aItem;  // Just stoing into global variables so that it can be used by thread
+    arg1->log = iLog;  //  function
+    arg1->CmdId = EMgGetFiles ;  // Command For Get Files
+
+	TRequestStatus Status = KRequestPending  ;
+	RThread FunctionThread ;
+
+    //creating the thread , this thread is reponsible for sending the request to SAPI
+    TInt ret = FunctionThread.Create( _L("FunctionThread"), ThreadFunction ,KDefaultStackSize ,
+    						NULL ,( TAny * ) arg1);
+
+    User::LeaveIfError(ret);
+    FunctionThread.Logon(Status);
+    FunctionThread.Resume() ;
+
+    // Waiting for thread to die in other words we make asynch call to synch call :-))
+    User :: WaitForRequest (Status)	;
+
+
+    FunctionThread.Close();
+
+    delete arg1;
+	return Status.Int() ;
+   }
+
+
+// -----------------------------------------------------------------------------
+// CMediaMgmt::ExampleL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMediaMgmt::GetFilesInfoL( CStifItemParser& aItem )
+    {
+    _LIT( KExample, "In GetFilesInfoL" );
+    iLog->Log( KExample );
+
+    struct ParamPass* arg1 = new ParamPass();
+    arg1->it = &aItem;  // Just stoing into global variables so that it can be used by thread
+    arg1->log = iLog;  //  function
+    arg1->CmdId = EMgGetFilesInfo ;  // Command For Get Files Info
+
+	TRequestStatus Status = KRequestPending  ;
+	RThread FunctionThread ;
+
+    //creating the thread , this thread is reponsible for sending the request to SAPI
+    TInt ret = FunctionThread.Create( _L("FunctionThread"), ThreadFunction ,KDefaultStackSize ,
+    						NULL ,( TAny * ) arg1);
+
+    User::LeaveIfError(ret);
+    FunctionThread.Logon(Status);
+    FunctionThread.Resume() ;
+
+    // Waiting for thread to die in other words we make asynch call to synch call :-))
+    User :: WaitForRequest (Status)	;
+
+    FunctionThread.Close();
+
+    delete arg1;
+	return Status.Int() ;
+
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// Callback:: MgNotify
+// Call Back Function Called by the Media Management SAPIin Iteration 1
+// -----------------------------------------------------------------------------
+//
+
+
+ void Callback::MgNotifyL(TUint /*aTransactionID*/,
+                               MCLFItemListModel*  aListModel,
+        					   TMgOperationEvent& aOperationEvent,
+                               const TInt& aError )
+
+
+	{
+
+    CLiwGenericParamList* output = CLiwGenericParamList::NewL();
+    CLiwGenericParamList* input = CLiwGenericParamList::NewL();
+    CleanupStack::PushL(output);
+    CleanupStack::PushL(input);
+	// Fill the Error code Inside Generic Param List
+	TLiwVariant errCode;
+    errCode.Set( aError );
+	TLiwGenericParam errTypeParam( KErrorCode, errCode );
+	output->AppendL( errTypeParam );
+
+	// if not error create the iterator class and put it into output list
+	if(  KErrNone == aError   )
+     	{
+        // Fill the Iterator in Generic Paaram List
+        TLiwVariant response;
+
+	 	// Iterator will accept the cmd Id and iListmodel and
+	 	// it will become the owner of iListModel,Ownership of
+	 	// Iterator is transfered to consumer
+
+	 	CMgItemsList *iterator = CMgItemsList::NewL( aListModel, arg->CmdId  );
+
+
+	 	response.Set( iterator );
+	 	TLiwGenericParam responseTypeParam( KResponse, response );
+ 		output->AppendL( responseTypeParam );
+
+        }
+   	else
+   	    {
+		delete aListModel;
+		aListModel = NULL;
+	 	}
+
+
+    	// call callback of consumer
+    	if( KErrNone ==  aError   )
+    	    {
+    	    HandleNotifyL ( 0, KLiwEventCompleted, *output,*input );
+    	    }
+        else
+            {
+            HandleNotifyL ( 0, KLiwEventError, *output,*input );
+            }
+
+  	CleanupStack::PopAndDestroy();
+  	CleanupStack::PopAndDestroy();
+
+
+
+	}
+
+
+
+
+
+
+// -----------------------------------------------------------------------------
+// Callback:: HandleNotifyL
+// Call Back Function Called by the Media Management SAPI.in Iteration 2
+// -----------------------------------------------------------------------------
+//
+
+
+
+TInt Callback:: HandleNotifyL(TInt aCmdId,TInt aEventId,CLiwGenericParamList& aOutParamList,const CLiwGenericParamList& aInParamList)
+{
+
+   arg->log->Log(_L("Enter in Handle notify"));
+	if ( KLiwEventStarted == aEventId )
+	{
+		// Asynchronous request started
+	}
+	else if ( KLiwEventCanceled == aEventId )
+	{
+		// Asynchronous event canceled
+		arg->returnCode = KErrCancel;
+		CActiveScheduler :: Stop() ;
+		return 0;
+	}
+	else
+	{
+
+	TInt32 ErrCode;
+	CLiwIterable* iIterable;
+	TLiwVariant Map;
+	const CLiwMap* MetaData;
+	TInt pos = 0;
+	//TBuf<200> aValue1[20][20]; // Hemae : very large value for stack
+	TInt no_of_maps;
+
+	// Traiverse the List and Fill in the Log Files
+	const TLiwGenericParam* p = aOutParamList.FindFirst(pos, KErrorCode); // Finding Error Code
+	if(p)
+	{
+		ErrCode = p->Value().AsTInt32();
+		//arg->log->Log(_L("Got error Code"));
+	}
+	else
+	{
+		arg->log->Log(_L(" Not able to Find the Error Code "));
+		arg->returnCode = KErrGeneral;
+		CActiveScheduler :: Stop() ;
+		return 0;
+		//User::Exit( KErrGeneral );
+	}
+
+	if(ErrCode < 0 ) // If any error comes in MG SAPI
+	{
+		arg->log->Log(_L(" Error Occured in SAPI = %d"),ErrCode);
+		arg->returnCode = KErrGeneral;
+		CActiveScheduler :: Stop() ;
+		return 0;
+		//User::Exit( KErrGeneral );
+	}
+
+	p = aOutParamList.FindFirst(pos, KResponse);// Finding out the response of Media Management
+	if(!p)
+	{
+		arg->log->Log(_L(" Not able to Find the Response "));
+		arg->returnCode = KErrGeneral;
+		CActiveScheduler :: Stop() ;
+		return 0;
+		//User::Exit( KErrGeneral );
+	}
+	else
+	{
+	    //arg->log->Log(_L(" Got the Response "));
+		iIterable = p->Value().AsIterable();// returning Iterator as Response
+		TBuf8<30> Key;// Key In The Map
+		TPtrC KeyValue;// value of that key
+		TLiwVariant val;//just for extracting the value
+		//-----------Loop for Iterator -------------------------------//
+		TBuf<200> Output;
+		int count =0;
+		TBuf<30> string;
+        TBuf<20> StringTime;
+        TInt i;
+        TInt value;
+        TTime time;
+        TPtrC temp;
+		while(iIterable->NextL(Map))// Find the next value from Iterator
+		{
+
+			Output.Copy(_L("File"));
+			arg->log->Log(Output);
+			MetaData = Map.AsMap();// Iterator return the map which contains meta data
+			Output.Copy(_L("key"));
+			Output.Append(_L("							"));
+			Output.Append(_L("KeyValue"));
+			arg->log->Log(Output);
+
+			for(i = 0 ; i <MetaData->Count(); i++ )
+			{
+
+				MetaData->AtL(i,Key);
+				MetaData->FindL(Key, val);
+				Output.Copy(Key);
+		    	Output.Append(_L("            "));
+				if(EVariantTypeTInt32==val.TypeId())
+				{
+					value = val.AsTInt32();
+					string.Delete(0,string.Length());
+					string.AppendNum(value);
+					//aValue1[count][i] = string;
+					Output.Append(string);
+				}
+				else if(EVariantTypeTTime==val.TypeId())
+				{
+					time = val.AsTTime();
+					//dheeraj clear
+					time.FormatL(StringTime, KTimeFormat);
+					//aValue1[count][i] = StringTime;
+					Output.Append(StringTime);
+                    // date format : 5/25/2005 12:40"
+				}
+				else
+				{
+					val.Get(KeyValue);
+					temp.Set( val.AsDes() );
+					//aValue1[count][i] = temp ;
+					Output.Append(KeyValue);
+				}
+
+				arg->log->Log(Output); // printing Key Values in log files
+
+			}
+			count++;
+		}
+
+		/*arg->it->GetNextInt(no_of_maps);
+		TPtrC expected_out[no_of_maps][20];
+		switch (arg->meta)
+		{
+			case 1:
+					TInt row,col;
+					for (row=0; row <no_of_maps; row++)
+        			for (col=0 ;col<8;col++)
+        			arg->it->GetNextString(expected_out[row][col]);
+        			for (TInt i=0; i < row ; i++)
+				    for (TInt j=0; j<col ; j++)
+				    if (expected_out[i][j].CompareF(aValue1[i][j])!=0)
+				 	User::Exit( KErrArgument );
+       				break;
+
+			case 2: ;
+
+
+		}*/
+
+
+    }
+	//------Loop for Iterator-----------------------------------------//
+     arg->returnCode = KErrNone;
+	CActiveScheduler :: Stop() ;
+	return KErrNone;
+ 	}
+
+}
+
+// -----------------------------------------------------------------------------
+// Thread Function For Sending the Asynch request to Media Management SAPI
+// -----------------------------------------------------------------------------
+//
+
+TInt ThreadFunction (TAny *a)
+{
+	// Creating the Cleanup stack for this new thread
+	 CTrapCleanup* cleanup = CTrapCleanup::New();
+	 struct ParamPass* arg1 = (ParamPass*) a;
+	 TInt errorCode;
+	 TInt error = KErrNone;
+	 TRAP(error, errorCode = GetFilesAsynchL(a));
+	 delete cleanup;
+	 if(error == KErrNone)
+	 {
+	 	if(errorCode<0)
+	 	{
+	 	  arg1->log->Log(_L(" Error in input "));
+	 	  TBuf<30> string;
+		  string.AppendNum(errorCode);
+		  arg1->log->Log(string);
+		  // Hema : check here if the case is neagative or postive
+		  // then return proper error code
+		  return KErrNone;
+
+	 	}
+	 	else
+	 	{
+	 	   return  KErrNone;
+	 	}
+
+	 }
+
+	 return KErrGeneral;
+}
+
+
+
+
+TInt GetFilesAsynchL( TAny *a)
+{
+	TPtrC FileType16;
+	TPtrC FilterField16;
+	TPtrC StartVal;
+	TPtrC EndVal;
+	TPtrC SortField16;
+	TInt order = 0;
+
+	struct ParamPass *arg1 = (ParamPass *)a;
+
+	arg1->log = CStifLogger::NewL( KMediaMgmtLogPath,
+                          KResultFile,
+                          CStifLogger::ETxt,
+                          CStifLogger::EFile,
+                          ETrue );
+
+
+
+    // Get All the Values From CFG
+    if( arg1->it->GetNextString ( FileType16 ) != KErrNone )
+        {
+        arg1->log->Log(_L(" Failed to Get the File Type ") );
+        return KErrGeneral;
+        }
+	if( arg1->it->GetNextString ( FilterField16 ) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the Filter Field of File ")) ;
+        return KErrGeneral;
+        }
+    if( arg1->it->GetNextString ( StartVal ) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the start value of Filter ")) ;
+        return KErrGeneral;
+        }
+	if( arg1->it->GetNextString ( EndVal ) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the End Value of Filter ")) ;
+        return KErrGeneral;
+        }
+    if( arg1->it->GetNextString ( SortField16 ) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the Sort Filed  ")) ;
+        return KErrGeneral;
+        }
+
+	if( arg1->it->GetNextInt(order) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the Sorting Order ")) ;
+        return KErrGeneral;
+        }
+
+     	if (!FileType16.Compare(_L("Image")) || !FileType16.Compare(_L("Sound")))
+
+     	arg1->meta = 1;
+
+
+        // the below section for giving header to log files
+
+     	TBuf<200> TestCase;
+
+     	TestCase.Copy(_L("FileType "));
+     	TestCase.Append(_L("   "));
+
+       	TestCase.Append(_L("FilterField"));
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(_L("StartVal"));
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(_L("EndVal"));
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(_L("SortField"));
+     	TestCase.Append(_L("   "));
+
+
+       	TestCase.Append(_L("order"));
+     	TestCase.Append(_L("   "));
+
+
+
+     	arg1->log->Log(TestCase);
+
+     	TestCase.Copy(FileType16);
+     	TestCase.Append(_L("   "));
+
+       	TestCase.Append(FilterField16);
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(StartVal);
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(EndVal);
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(SortField16);
+     	TestCase.Append(_L("   "));
+
+        if( 0 != order)
+       	TestCase.Append(_L("Descending"));
+        else
+        TestCase.Append(_L("Ascending"));
+
+     	TestCase.Append(_L("   "));
+
+     	arg1->log->Log(TestCase);
+
+
+         // Convert 16 Bit values into 8 bit as SAPI accept 8 bit Des
+        TBuf8<30> FileType ;
+        FileType.Copy(FileType16);
+
+        TBuf8<30> FilterField ;
+        FilterField.Copy(FilterField16);
+
+        TBuf8<30> SortField ;
+        SortField.Copy(SortField16);
+
+
+
+	//Create the object of callback
+	MMgOperationObserver*  aCallBack = new (ELeave) Callback(arg1);
+	CleanupStack::PushL(aCallBack);
+
+	// Start Scheduler
+	CActiveScheduler *Scheduler = new CActiveScheduler ;
+	CActiveScheduler :: Install(Scheduler) ;
+	CleanupStack::PushL(Scheduler);
+
+    // Create the Instance of SAPI core class and
+    //the Input Param and output Param
+    CMgService* CoreObj = CMgService ::NewL() ;
+	CleanupStack::PushL(CoreObj);
+
+//------- New Code Added ---------------------------------------------------//
+TMgServiceRequest reqArgument;
+
+
+if( 0 != FileType.CompareF( KMgNull8 ) )
+    reqArgument.iFileType.Set( FileType );
+
+
+if( 0 != FilterField.CompareF( KMgNull8 ) )
+    reqArgument.iFilterField.Set( FilterField );
+
+if( 0 != StartVal.CompareF( KMgNull ) )
+    reqArgument.iStartVal.Set( StartVal );
+
+if( 0 != EndVal.CompareF( KMgNull ) )
+    reqArgument.iEndVal.Set( EndVal );
+
+if( 0 != SortField.CompareF( KMgNull8 ) )
+    reqArgument.iSortField.Set( SortField );
+
+if( 0 != order)
+{
+    reqArgument.iOrder.Set( _L8("Descending") );
+}
+
+
+
+//--------------------------------------------------------------------------//
+
+
+
+
+	TInt retcode = 0;
+
+	// Calling SAPI :-)))
+
+
+     	 TRAP( retcode , CoreObj->GetListL(reqArgument ,aCallBack) );
+
+
+    if(retcode < 0)
+    {
+
+
+	CleanupStack::PopAndDestroy();//Remove callback
+	CleanupStack::PopAndDestroy();//Remove scheduler
+	CleanupStack::PopAndDestroy();//Remove core object
+    return retcode;
+
+    }
+
+    CActiveScheduler :: Start() ;
+
+    CleanupStack::PopAndDestroy();//Remove callback
+	CleanupStack::PopAndDestroy();//Remove scheduler
+	CleanupStack::PopAndDestroy();//Remove core object
+
+    return arg1->returnCode;
+}
+