diff -r 8ce15fced3a6 -r cad71a31b7fc srsf/vcommandhandler/src/vcommand.cpp --- a/srsf/vcommandhandler/src/vcommand.cpp Thu Aug 19 09:56:14 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,253 +0,0 @@ -/* -* Copyright (c) 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 of the VCommand class -* -*/ - - - -#include -#include -#include "rubydebug.h" - -/** -* The version of the streamed data protocol -* It is rather likely, that the format of the data streamed changes in the future. -* Using the protocol version, the code can check if it knows how to parse the -* input stream -*/ -const TInt32 KVCommandProtocolVersion = 1; - -/** -* Create a const snapshop of exe-ui-vastext collection -* @param aText Text to be trained by VAS. No longer, than KMaxVCTextLength. -* CVCommand doesn't take the ownership -* @param aRunnable Executable to be fired when the command is recognized. -* VCommand doesn't take the ownership -* @param aUi visible strings to be displayed in VC App. -* VCommand doesn't take the ownership -*/ -EXPORT_C CVCommand* CVCommand::NewL( const TDesC& aText, const CVCRunnable& aRunnable, - const CVCCommandUi& aUi ) - { - RUBY_DEBUG_BLOCKL( "CVCCommand::NewL with args" ); - CVCommand* self = new (ELeave) CVCommand; - CleanupStack::PushL( self ); - self->ConstructL( aText, aRunnable, aUi ); - CleanupStack::Pop( self ); - return self; - } - -/** -* Internalizes the command from stream -*/ -EXPORT_C CVCommand* CVCommand::NewL( RReadStream &aStream ) - { - CVCommand* self = new (ELeave) CVCommand; - CleanupStack::PushL( self ); - self->ConstructL( aStream ); - CleanupStack::Pop( self ); - return self; - } - -EXPORT_C CVCommand* CVCommand::NewL( const CVCommand& aOriginal ) - { - // Original knows better how to copy itself - return aOriginal.CloneL(); - } - -void CVCommand::ConstructL( RReadStream &aStream ) - { - TInt32 ver; - aStream >> ver; - __ASSERT_ALWAYS( ver == KVCommandProtocolVersion, User::Leave( KErrNotSupported ) ); - iSpokenText = HBufC::NewL( aStream.ReadInt32L() ); - TPtr pSpokenText = iSpokenText->Des(); - aStream >> pSpokenText; - iRunnable = CVCRunnable::NewL( aStream ); - iCommandUi = CVCCommandUi::NewL( aStream ); - } - -void CVCommand::ConstructL( const TDesC& aText, const CVCRunnable& aRunnable, - const CVCCommandUi& aUi ) - { - __ASSERT_ALWAYS( aText.Length() > 0, User::Leave( KErrUnderflow ) ); - iSpokenText = HBufC::NewL( aText.Length() ); - *iSpokenText = aText; - iRunnable = CVCRunnable::NewL( aRunnable ); - iCommandUi = CVCCommandUi::NewL( aUi ); - } - - -EXPORT_C CVCommand::~CVCommand() - { - delete iCommandUi; - delete iRunnable; - delete iSpokenText; - } - -CVCommand* CVCommand::CloneL() const - { - CVCommand* clone = CVCommand::NewL( SpokenText(), Runnable(), CommandUi() ); - return clone; - } - -/** -* Saves the command to stream -* Format: -* -*/ -EXPORT_C void CVCommand::ExternalizeL( RWriteStream &aStream ) const - { - aStream << KVCommandProtocolVersion; - aStream << static_cast( iSpokenText->Length() ); - aStream << *iSpokenText; - aStream << *iRunnable; - aStream << *iCommandUi; - } - -EXPORT_C TBool CVCommand::operator==( const CVCommand& aCommand ) const - { - return ( - ( *iSpokenText == aCommand.SpokenText() ) && - ( *iRunnable == aCommand.Runnable() ) && - ( *iCommandUi == aCommand.CommandUi() ) - ); - - } - - -/** -* @return the Runnable component of the command -*/ -EXPORT_C const CVCRunnable& CVCommand::Runnable() const - { - return *iRunnable; - } - -/** -* @return the UI-related component of the command -*/ -EXPORT_C const CVCCommandUi& CVCommand::CommandUi() const - { - return *iCommandUi; - } - -/** -* @return the text, that user is expected to pronounce -*/ -EXPORT_C const TDesC& CVCommand::SpokenText() const - { - return *iSpokenText; - } - -/** -* @return the user specified text, that user can pronounce to -* recognize the command. Is always identical to the -* CVCommandUi::UserText() -* Can be KNullDesC -*/ -EXPORT_C const TDesC& CVCommand::AlternativeSpokenText() const - { - return iCommandUi->UserText(); - } - -/** -* Asynchronous -* Attempts to play back the text expected to be recognized. -* To be playable command has to be added to CVCommandHandler AND -* then retrieved back -* -* @param aHandler CVCommandHandler where the command is stored -* @todo Consider storing link to CVCommandHandler within the CVCommand (CStoredVCommand) -* Pros: No clumsy aHandler argument for the playback -* Pros: No need to remember in which handler the command is stored -* and why specifying storage is needed during the playback -* Cons: In case of internal link the linked handler should still -* exist. It cannot be e.g. destroyed and recreated later even -* if the latter one is using the same VAS -* -* @param aPlayEventHandler Entity that handles the playback callbacks -* @see NssVasMPlayEventHandler.h -* -* @leave KErrBadHandle if the current command has not been retrieved -* from CVCommandHandler (i.e. was not trained for recognition) -* @leave KErrNotFound if this command cannot be found in aHandler -* @leave KErrNotReady @see nssvasmspeechitem.h MNssSpeechItem::TNssSpeechItemResult -* EVasUnexpectedRequest -* @leave KErrInUse @see nssvasmspeechitem.h MNssSpeechItem::TNssSpeechItemResult -* EVasInUse -* @leave KErrArgument @see nssvasmspeechitem.h MNssSpeechItem::TNssSpeechItemResult -* EVasInvalidParameter -* @leave KErrGeneral @see nssvasmspeechitem.h MNssSpeechItem::TNssSpeechItemResult -* EVasPlayFailed -*/ -EXPORT_C void CVCommand::PlaySpokenTextL( const CVCommandHandler& /*aHandler*/, - MNssPlayEventHandler& /*aPlayEventHandler*/ ) const - { - RUBY_DEBUG_BLOCK( "CVCommand::PlaySpokenTextL" ); - RUBY_ERROR0( "Attempt to play never added command" ); - User::Leave( KErrBadHandle ); - } - -/** -* Asynchronous -* Plays back the user-specified alternative spoken text. -* Otherwise is identical to PlaySpokenTextL -* @see PlaySpokenTextL -* @leave KErrNotFound if this command cannot be found in aHandler of if -* it doesn't have a user-specified text -*/ -EXPORT_C void CVCommand::PlayAlternativeSpokenTextL( const CVCommandHandler& /*aHandler*/, - MNssPlayEventHandler& /*aPlayEventHandler*/ ) const - { - RUBY_DEBUG_BLOCK( "CVCommand::PlaySpokenTextL" ); - RUBY_ERROR0( "Attempt to play never added command" ); - User::Leave( KErrBadHandle ); - } - -/** -* Cancels playback of a spoken or alternative spoken text -* To be playable command has to be added to CVCommandHandler AND -* then retrieved back. After this function neither HandlePlayStarted, -* nor HandlePlayComplete will be called -* -* @param aHandler CVCommandHandler where the command is stored -* -* @leave KErrBadHandle if the current command has not been retrieved -* from CVCommandHandler (i.e. was not trained for recognition) -* @leave KErrNotReady if playback has never been started -* -*/ -EXPORT_C void CVCommand::CancelPlaybackL( const CVCommandHandler& /*aHandler*/ ) const - { - RUBY_DEBUG_BLOCK( "CVCommand::CancelPlaybackL" ); - RUBY_ERROR0( "CVCommand::CancelPlaybackL Attempt to cancel playback of the command\ - never added to the VCommandHandler" ); - User::Leave( KErrBadHandle ); - } - -/** - * Tells if all non user-changeable parts of aCommand are equal to this command - * @return ETrue if equal, EFalse otherwise - */ -EXPORT_C TBool CVCommand::EqualNonUserChangeableData( const CVCommand& aCommand ) const - { - if( SpokenText() != aCommand.SpokenText() ) return EFalse; - if( !(Runnable() == aCommand.Runnable() ) ) return EFalse; - - return CommandUi().EqualNonUserChangeableData( aCommand.CommandUi() ); - } - -//End of file