diff -r 000000000000 -r c53acadfccc6 metadataengine/client/src/mdeharvestersession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/metadataengine/client/src/mdeharvestersession.cpp Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,344 @@ +/* +* Copyright (c) 2007-2009 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: Metadata engine Harverster Server client session +* +*/ + +#include "mdeharvestersession.h" +#include "mdesessionimpl.h" +#include "mdcserializationbuffer.h" +#include "harvesterlog.h" + +EXPORT_C CMdEHarvesterSession* CMdEHarvesterSession::NewL(CMdESession& aSession) + { + CMdEHarvesterSession* self = CMdEHarvesterSession::NewLC( aSession ); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CMdEHarvesterSession* CMdEHarvesterSession::NewLC(CMdESession& aSession) + { + CMdEHarvesterSession* self = new (ELeave) CMdEHarvesterSession( aSession ); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CMdEHarvesterSession::CMdEHarvesterSession(CMdESession& aSession) : + iSession( STATIC_CAST( CMdESessionImpl*, &aSession ) ), + iHarvestingPrioritizationSerializationBuffer( NULL ) + { + } + +CMdEHarvesterSession::~CMdEHarvesterSession() + { + iHarvestingPrioritizationChunk.Close(); + delete iHarvestingPrioritizationSerializationBuffer; + } + +void CMdEHarvesterSession::ConstructL() + { + } + +EXPORT_C void CMdEHarvesterSession::SetSession(CMdESession& aSession) +{ + iSession = STATIC_CAST( CMdESessionImpl*, &aSession ); +} + +EXPORT_C CMdESession& CMdEHarvesterSession::SessionRef() + { + return *iSession; + } + +EXPORT_C CMdESession* CMdEHarvesterSession::Session() + { + return iSession; + } + +EXPORT_C void CMdEHarvesterSession::AddMemoryCard(TUint32 aMediaId) + { + iSession->EngineSession().DoAddMemoryCard( aMediaId ); + } + +EXPORT_C TBool CMdEHarvesterSession::GetMemoryCard(TUint32& aMediaId) + { + return iSession->EngineSession().DoGetMemoryCard( aMediaId ); + } + +EXPORT_C TBool CMdEHarvesterSession::CheckMemoryCard(TUint32 aMediaId, + TBool& aExist) + { + return iSession->EngineSession().DoCheckMemoryCard( aMediaId, aExist ); + } + +EXPORT_C void CMdEHarvesterSession::SetMediaL(TUint32 aMediaId, TChar aDrive, + TBool aPresentState) + { + iSession->EngineSession().DoSetMediaL( aMediaId, aDrive, aPresentState ); + } + +EXPORT_C TBool CMdEHarvesterSession::GetMediaL(TUint32 aMediaId, TChar& aDrive, + TBool& aPresentState) + { + return iSession->EngineSession().DoGetMediaL( aMediaId, aDrive, + aPresentState ); + } + +EXPORT_C void CMdEHarvesterSession::GetPresentMediasL( + RArray& aMedias) + { + iSession->EngineSession().DoGetPresentMediasL( aMedias ); + } + +EXPORT_C TBool CMdEHarvesterSession::SetFileToPresent(TUint32 aMediaId, + const TDesC& aUri, TMdSFileInfo& aFileInfo) + { + HBufC* uri = NULL; + uri = HBufC::New( aUri.Length() ); + if( !uri ) + { + return EFalse; + } + + // Note: CopyLC doesn't push anything to cleanup stack + uri->Des().CopyLC( aUri ); + + const TBool ret = iSession->EngineSession().DoSetFileToPresent( + aMediaId, *uri, aFileInfo ); + + delete uri; + + return ret; + } + +EXPORT_C void CMdEHarvesterSession::SetFilesToPresentL(TUint32 aMediaId, + const RArray& aUris, const RArray& aFileInfos, + RArray& aResults) + { + WRITELOG( "CMdEHarvesterSession::SetFilesToPresentL -- Start" ); + if( aUris.Count() != aFileInfos.Count() ) + { + WRITELOG2( "CMdEHarvesterSession::SetFilesToPresentL -- Leave (%d, %d)", + aUris.Count(), aFileInfos.Count() ); + User::Leave( KErrArgument ); + } + + const TInt fileCount = aUris.Count(); + + TInt urisSize = CMdCSerializationBuffer::KRequiredSizeForTUint32; + + WRITELOG( "CMdEHarvesterSession::SetFilesToPresentL -- Loop urisSize" ); + for( TInt i = 0; i < fileCount; i++ ) + { + urisSize += CMdCSerializationBuffer::RequiredSize( aUris[i] ); + } + + const TInt fileInfosSize = ( CMdCSerializationBuffer::KRequiredSizeForTUint32 + + CMdCSerializationBuffer::KRequiredSizeForTInt64 ) * fileCount; + const TInt resultsSize = CMdCSerializationBuffer::KRequiredSizeForTUint8 * fileCount; + + CMdCSerializationBuffer* uriBuffer = CMdCSerializationBuffer::NewLC( urisSize ); + CMdCSerializationBuffer* fileInfosBuffer = CMdCSerializationBuffer::NewLC( fileInfosSize ); + CMdCSerializationBuffer* resultsBuffer = CMdCSerializationBuffer::NewLC( resultsSize ); + + WRITELOG( "CMdEHarvesterSession::SetFilesToPresentL -- Loop fileinfos" ); + for( TInt i = 0; i < fileCount; i++ ) + { + const TDesC& uri = aUris[i]; + uriBuffer->InsertL( CONST_CAST(TDesC&, uri) ); + + fileInfosBuffer->InsertL( aFileInfos[i].iModifiedTime ); + fileInfosBuffer->InsertL( aFileInfos[i].iSize ); + } + + TMdSMediaIdAndCount mediaIdAndCount = {aMediaId, (TUint32)fileCount}; + + WRITELOG( "CMdEHarvesterSession::SetFilesToPresentL -- DoSetFilesToPresent start" ); + TInt error = iSession->EngineSession().DoSetFilesToPresent( mediaIdAndCount, + *uriBuffer->BufferConstPtr(), *fileInfosBuffer->BufferConstPtr(), + *resultsBuffer->BufferPtr() ); + WRITELOG1( "CMdEHarvesterSession::SetFilesToPresentL -- DoSetFilesToPresent end(%d)", error ); + + User::LeaveIfError( error ); + + resultsBuffer->PositionL( KNoOffset ); + + aResults.ReserveL( fileCount ); + + WRITELOG( "CMdEHarvesterSession::SetFilesToPresentL -- loop results" ); + for( TInt i = 0; i < fileCount; i++ ) + { + TUint8 result; + resultsBuffer->ReceiveL( result ); + aResults.Append( (TFilePresentStates)result ); + } + + WRITELOG( "CMdEHarvesterSession::SetFilesToPresentL -- End" ); + CleanupStack::PopAndDestroy( resultsBuffer ); + CleanupStack::PopAndDestroy( fileInfosBuffer ); + CleanupStack::PopAndDestroy( uriBuffer ); + } + +EXPORT_C void CMdEHarvesterSession::SetFilesToNotPresent(TUint32 aMediaId) + { + // only accept correct media IDs, other are silently ignored + if( aMediaId != 0 ) + { + iSession->EngineSession().DoSetFilesToNotPresent( aMediaId, EFalse ); + } + } + +EXPORT_C void CMdEHarvesterSession::RemoveFilesNotPresent(TUint32 aMediaId) + { + iSession->EngineSession().DoRemoveFilesNotPresent( aMediaId, EFalse ); + } + +EXPORT_C void CMdEHarvesterSession::SetFilesToNotPresent(TUint32 aMediaId, + TBool aStartUp) + { + iSession->EngineSession().DoSetFilesToNotPresent( aMediaId, aStartUp ); + } + +EXPORT_C void CMdEHarvesterSession::RemoveFilesNotPresent(TUint32 aMediaId, + TBool aStartUp) + { + iSession->EngineSession().DoRemoveFilesNotPresent( aMediaId, aStartUp ); + } + +EXPORT_C void CMdEHarvesterSession::ResetDBL() + { + #ifdef _DEBUG + iSession->EngineSession().DoResetDBL(); + iSession->LoadSchemaL(); + #else + User::Leave( KErrNotSupported ); + #endif + } + +EXPORT_C void CMdEHarvesterSession::SetHarvestingPrioritizationChunkL( + TInt aSize ) + { + const TInt error = + iHarvestingPrioritizationChunk.CreateGlobal( KNullDesC, aSize, aSize ); + + User::LeaveIfError( error ); + + iSession->EngineSession().DoSetHarvestingPrioritizationChunkL( + iHarvestingPrioritizationChunk ); + + iHarvestingPrioritizationSerializationBuffer = + CMdCSerializationBuffer::NewL( + iHarvestingPrioritizationChunk.Base(), + iHarvestingPrioritizationChunk.Size() ); + + iHarvestingPrioritizationSerializationBuffer->PositionL( 0 ); + const TInt32 initialUriCount = 0; + iHarvestingPrioritizationSerializationBuffer->InsertL( initialUriCount ); + } + +EXPORT_C void CMdEHarvesterSession::AddHarvestingPrioritizationObserver( + TRequestStatus& aStatus ) + { + iSession->EngineSession().DoAddHarvestingPrioritizationObserver( aStatus ); + } + +EXPORT_C TInt CMdEHarvesterSession::CancelHarvestingPrioritizationObserver() + { + return iSession->EngineSession().DoCancelHarvestingPrioritizationObserver(); + } + +EXPORT_C TInt CMdEHarvesterSession::HarvestingPrioritizationUriCountL() + { + if( !iHarvestingPrioritizationSerializationBuffer ) + { + User::Leave( KErrNotFound ); + } + + iHarvestingPrioritizationSerializationBuffer->PositionL( 0 ); + + TInt32 count = 0; + iHarvestingPrioritizationSerializationBuffer->ReceiveL( count ); + + return count; + } + +EXPORT_C HBufC* CMdEHarvesterSession::HarvestingPrioritizationUriL( + TInt aIndex ) + { + if( !iHarvestingPrioritizationSerializationBuffer ) + { + User::Leave( KErrNotFound ); + } + + const TUint32 offsetPosition = + CMdCSerializationBuffer::KRequiredSizeForTInt32 + + CMdCSerializationBuffer::KRequiredSizeForTUint32 * aIndex; + + iHarvestingPrioritizationSerializationBuffer->PositionL( offsetPosition ); + + TUint32 uriOffset = 0; + iHarvestingPrioritizationSerializationBuffer->ReceiveL( uriOffset ); + + iHarvestingPrioritizationSerializationBuffer->PositionL( uriOffset ); + + return iHarvestingPrioritizationSerializationBuffer->ReceiveDes16L(); + } + +EXPORT_C void CMdEHarvesterSession::AutoLockL( + RPointerArray& aObjects ) + { + const TInt objectCount = aObjects.Count(); + + for( TInt i = 0; i < objectCount; i++ ) + { + aObjects[i]->AutoLockL(); + } + } + +EXPORT_C void CMdEHarvesterSession::ChangePath( + const TDesC& aOldPath, const TDesC& aNewPath, TRequestStatus& aStatus ) + { + iSession->EngineSession().DoChangePath( aOldPath, aNewPath, aStatus ); + } + +EXPORT_C void CMdEHarvesterSession::ChangeCDriveMediaId() + { + iSession->EngineSession().DoChangeCDriveMediaId(); + } + +EXPORT_C void CMdEHarvesterSession::SetPendingL( + const RArray& aObjectIds ) + { + iSession->EngineSession().DoSetPendingL( aObjectIds ); + } + +EXPORT_C void CMdEHarvesterSession::ResetPendingL( + const RArray& aObjectIds ) + { + iSession->EngineSession().DoResetPendingL( aObjectIds ); + } + +EXPORT_C TInt CMdEHarvesterSession::GetPendingCount( const CMdEObjectDef* aObjectDef ) + { + return iSession->EngineSession().DoGetPendingCount( aObjectDef ); + } + +EXPORT_C TInt CMdEHarvesterSession::GetPending( + const CMdEObjectDef* aObjectDef, TInt& aObjectIdCount, + CMdCSerializationBuffer& aObjectIdBuffer ) + { + return iSession->EngineSession().DoGetPending( aObjectDef, aObjectIdCount, + aObjectIdBuffer ); + } +