diff -r 000000000000 -r 2f259fa3e83a commonuis/CommonUi/src/DocGameHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonuis/CommonUi/src/DocGameHandler.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,251 @@ +/* +* Copyright (c) 2002-2005 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 game data handler. +* +*/ + + +// INCLUDE FILES +#include +#include +#include "DocGameHandler.h" +#include "pathinfo.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// ==================== LOCAL FUNCTIONS ==================== + +// ================= MEMBER FUNCTIONS ======================= + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CDocGameHandler::CDocGameHandler( + const TDataType& aDataType, + const TUid& aUid, + CDocumentHandler* aDocDispatcher, + TDocServiceMode aServiceMode ): + CDocDefaultHandler( aDataType, aUid, + aDocDispatcher, aServiceMode ) + { + } + + + +// EPOC default constructor can leave. +void CDocGameHandler::ConstructL() + { + BaseConstructL(); + iGameId = KGameEngineUID; + } + +// Two-phased constructor. +CDocGameHandler* CDocGameHandler::NewL( + const TDataType& aDataType, + const TUid& aUid, + CDocumentHandler* aDocDispatcher, + TDocServiceMode aServiceMode ) + { + CDocGameHandler* self = new (ELeave) CDocGameHandler( aDataType, + aUid, aDocDispatcher, + aServiceMode ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + } + +// Destructor +CDocGameHandler::~CDocGameHandler() + { + + } + +void CDocGameHandler::ParseGameInfoFromFileL( const TDesC& aFilename ) + { + RFile file; + User::LeaveIfError( file.Open( iFs, aFilename, EFileRead ) ); + RFileReadStream reader( file ); + iGameId = reader.ReadInt32L(); + reader.ReadInt8L(); // Data Type + reader.ReadInt32L(); // Data Length + TInt size = reader.ReadInt8L();// Size of Name String + if ( size > 0 ) + { + reader.ReadL( iDestFile, size );// Name String + } + reader.Close(); + file.Close(); + } + +// TODO: Does this method work, how to test this? +void CDocGameHandler::ParseGameInfoFromFileL( const RFile& aFile ) + { + RFileReadStream reader( const_cast(aFile) ); + iGameId = reader.ReadInt32L(); + reader.ReadInt8L(); // Data Type + reader.ReadInt32L(); // Data Length + TInt size = reader.ReadInt8L();// Size of Name String + if ( size > 0 ) + { + reader.ReadL( iDestFile, size );// Name String + } + reader.Close(); + } + +void CDocGameHandler::ParseGameInfoFromBufL( const TDesC8& aBuffer ) + { + RDesReadStream reader( aBuffer ); + iGameId = reader.ReadInt32L(); // GameId + reader.ReadInt8L(); // Data Type + reader.ReadInt32L(); // Data Length + TInt size = reader.ReadInt8L(); // Size of Name String + if ( size > 0 ) + { + reader.ReadL( iDestFile, size );// Name String + } + reader.Close(); + } + +// +// Changes iUid to "real". Changes iDataType to "real" value. +// +TInt CDocGameHandler::CheckGameDataTypeL( TInt32 aGameId ) + { + TInt error = KErrNone; + if ( aGameId > KMaxGameEngineDataID ) + { + TBuf8<256> completedType = iDataType.Des8(); + completedType.Append( _L("-") ); + completedType.AppendNumFixedWidth( aGameId, EHex, 8 ); + iDataType = TDataType( completedType ); + } + error = iApaLs->AppForDataType( iDataType, iUid ); + if ( error != KErrNone ) + { + User::Leave( error ); + } + + if ( iUid.iUid == 0) + { + iUid.iUid = KGameEngineUID; + } + + PopulateAppInfo(); + if ( iAppInfo.iFullName.Length() == 0 ) + { + User::Leave( KMimeNotSupported ); + } + return error; + } + + +void CDocGameHandler::PopulateAppInfo() + { + CDocDefaultHandler::PopulateAppInfo( iUid ); + } + +// --------------------------------------------------------- +// CDocDefaultHandler::GetDataDirL( +// const TDataType& aDataType, +// const TUid& aUid, +// TDes& aPath +// TDes& aDataSize) +// Get the data directory for the mime type +// --------------------------------------------------------- +// +TInt CDocGameHandler::GetDataDirL( + const TDataType& aDataType, + const TUid& aUid, + TDes& aPath, + TInt aDataSize) + { + if ( iUid.iUid != 0 ) + { + if (CDocDefaultHandler::GetDataDirL( aDataType, aUid, aPath, aDataSize ) == KErrCancel) + { + return KErrCancel; + } + } + + if ( iSavedAsTemp ) + User::Leave( KMimeNotSupported ); + + if ( iUid.iUid != KGameEngineUID ) + { + aPath.Insert( 0, PathInfo::GamesPath() ); + } + TParsePtr parse( aPath ); + if ( parse.NamePresent() ) // There is no '\' in the end. + { + aPath.Append( _L( "\\" ) ); // Append it. We need it! + } + + return SetAndReturnStatus( KErrNone ); + } + +TInt CDocGameHandler::CopyOrMoveL( const TUint aAttr ) + { + ParseGameInfoFromFileL( iSourceFile ); + User::LeaveIfError( CheckGameDataTypeL( iGameId ) ); + TInt error = CDocDefaultHandler::CopyOrMoveL( aAttr ); + if ( iUid.iUid == KGameEngineUID ) + { + NotifyGameEngine( iUid ); + } + HandleServerAppExit(0); + return SetAndReturnStatus( error ); + } + +TInt CDocGameHandler::CopyHandleL( const RFile& aSourceFile, const TUint aAttr ) + { + ParseGameInfoFromFileL( aSourceFile ); + User::LeaveIfError( CheckGameDataTypeL( iGameId ) ); + TInt error = CDocDefaultHandler::CopyHandleL( aSourceFile, aAttr ); + if ( iUid.iUid == KGameEngineUID ) + { + NotifyGameEngine( iUid ); + } + HandleServerAppExit(0); + return SetAndReturnStatus( error ); + } + +TBool CDocGameHandler::IsViewerOperation( TDocOperation /*aOperation*/ ) + { + return EFalse; + } + + +TInt CDocGameHandler::NotifyGameEngine( const TUid& /*aUid*/ ) + { + + // TODO: Is there needed some notify? + return 0; + } + +// End of File