--- /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 <s32mem.h>
+#include <s32file.h>
+#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<RFile&>(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