voicerecorder/NewServiceSrc/CNewFileServiceClientImpl.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:46:57 +0200
changeset 0 845549f293a7
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2002-2006 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 for Client side API
*
*/


// INCLUDE FILES

#include <s32mem.h>
#include <e32cmn.h>
#include <AiwGenericParam.h>

#include "NewFileServiceClient.h"
#include "RNewFileServiceClient.h"
#include "CNewFileServiceClientImpl.h"

#include <VoiceRecorderUID.h>
#include <CcorUiConstants.h>
#include <avkon.hrh>


// ============================ MEMBER FUNCTIONS ===============================

// ----------------------------------------------------------------------------
// NewFileServiceFactory::NewClientL
//
// ----------------------------------------------------------------------------
//
EXPORT_C CNewFileServiceClient* NewFileServiceFactory::NewClientL()
	{
	return CNewFileServiceClientImpl::NewL();
	}


// ----------------------------------------------------------------------------
// CNewFileServiceClientImpl::NewL
//
// ----------------------------------------------------------------------------
//
CNewFileServiceClientImpl* CNewFileServiceClientImpl::NewL()
	{
	CNewFileServiceClientImpl* self =
					new( ELeave )CNewFileServiceClientImpl;
	CleanupStack::PushL( self );
	self->ConstructL();
	CleanupStack::Pop();
	return self;
	}


// ----------------------------------------------------------------------------
// CNewFileServiceClientImpl::~CNewFileServiceClientImpl
//
// ----------------------------------------------------------------------------
//
CNewFileServiceClientImpl::~CNewFileServiceClientImpl()
	{
	delete iServerAppMonitor;
	iClient.Close();
	if(iClient.iError == KErrAbort)
		{
		iClient.iError = 0;
		MAknServerAppExitObserver::HandleServerAppExit(EAknCmdExit);	
		}
	}


// ----------------------------------------------------------------------------
// CNewFileServiceClientImpl::ConstructL
//
// ----------------------------------------------------------------------------
//
void CNewFileServiceClientImpl::ConstructL()
	{
	iClient.SetFileServiceClient(this);
	}


// ----------------------------------------------------------------------------
// CNewFileServiceClientImpl::NewFileL
//
// ----------------------------------------------------------------------------
//
TBool CNewFileServiceClientImpl::NewFileL( CDesCArray& aFileNames,
							   CAiwGenericParamList* aParams,
							   TNewServiceFileType aFileType,
							   TBool aMultipleFiles )
	{
	TUid uid( KNullUid );

	switch ( aFileType )
		{
		case ENewFileServiceAudio:
			{
			uid = TUid::Uid( KVoiceRecorderAppUID3 );
			break;
			}

		case ENewFileServiceVideo:
		case ENewFileServiceImage:
			{
			uid = KUidCamcorder;
			break;
			}
		default:
		    {
			User::Leave( KErrNotSupported );
		    }
		};

	return NewFileL( uid, aFileNames, aParams, aFileType, aMultipleFiles );
	}


// ----------------------------------------------------------------------------
// CNewFileServiceClientImpl::HandleServerAppExit
//
// ----------------------------------------------------------------------------
//
void CNewFileServiceClientImpl::HandleServerAppExit(TInt aReason)
    {
#ifdef _DEBUG    
    RDebug::Print( _L("CNewFileServiceClientImpl::HandleServerAppExit") );
#endif
    iClient.Close();
    MAknServerAppExitObserver::HandleServerAppExit(aReason);
    }


// ----------------------------------------------------------------------------
// CNewFileServiceClientImpl::NewFileL
//
// ----------------------------------------------------------------------------
//
TBool CNewFileServiceClientImpl::NewFileL( TUid aApplicationUid,
							   CDesCArray& aFileNames,
							   CAiwGenericParamList* aParams,
							   TNewServiceFileType aFileType,
							   TBool aMultipleFiles )
	{
	iClient.ConnectChainedAppL( aApplicationUid );

	if ( !iServerAppMonitor )
		{
		iServerAppMonitor = CApaServerAppExitMonitor::NewL( iClient, *this,
												CActive::EPriorityStandard );
		}

	HBufC8* serializedParams = SerializeGenericParamListLC( aParams );
	TBool ret = iClient.NewFileL( aFileNames, serializedParams, 
								  aFileType, aMultipleFiles );
	CleanupStack::PopAndDestroy();	// serializedParams
	return ret;
	}


// ----------------------------------------------------------------------------
// CNewFileServiceClientImpl::NewFileL
//
// ----------------------------------------------------------------------------
//
TBool CNewFileServiceClientImpl::NewFileL( RFile& aFileHandle,
							   CAiwGenericParamList* aParams,
							   TNewServiceFileType aFileType )
	{
	TUid uid( KNullUid );

	switch ( aFileType )
		{
		case ENewFileServiceAudio:
			{
			uid = TUid::Uid( KVoiceRecorderAppUID3 );
			break;
			}

		case ENewFileServiceVideo:
		case ENewFileServiceImage:
			{
			uid = KUidCamcorder;
			break;
			}
		default:
		    {
		    User::Leave( KErrNotSupported );
		    }
		};

	return NewFileL( uid, aFileHandle, aParams, aFileType );
	}


// ----------------------------------------------------------------------------
// CNewFileServiceClientImpl::NewFileL
//
// ----------------------------------------------------------------------------
//
TBool CNewFileServiceClientImpl::NewFileL( TUid aApplicationUid,
							   RFile& aFileHandle,
							   CAiwGenericParamList* aParams,
							   TNewServiceFileType aFileType )
	{

	iClient.ConnectChainedAppL( aApplicationUid );

	if ( !iServerAppMonitor )
		{
		iServerAppMonitor = CApaServerAppExitMonitor::NewL( iClient, *this,
												CActive::EPriorityStandard );
		}

	HBufC8* serializedParams = SerializeGenericParamListLC( aParams );
	TBool ret = iClient.NewFileL( aFileHandle, serializedParams, aFileType );

	CleanupStack::PopAndDestroy();	// serializedParams

	return ret;
	}


// ----------------------------------------------------------------------------
// CNewFileServiceClientImpl::SerializeGenericParamListLC
//
// ----------------------------------------------------------------------------
//
HBufC8* CNewFileServiceClientImpl::SerializeGenericParamListLC( 
												CAiwGenericParamList* aParams )
	{
	if ( !aParams )
		{
		HBufC8* dummy = HBufC8::NewLC( 0 );	// return dummy
		return dummy;
		}

	TInt size( aParams->Size() );
	HBufC8* serialized = HBufC8::NewLC( size );
	TPtr8 ptr = serialized->Des();
	RDesWriteStream stream( ptr );
	aParams->ExternalizeL( stream );
	stream.Close();
	return serialized;
	}

//  End of File