diff -r c32dc0be5eb4 -r 6b4fc789785b remotestoragefw/remotefileengine/src/rsfwdeletestatemachine.cpp --- a/remotestoragefw/remotefileengine/src/rsfwdeletestatemachine.cpp Mon Jan 18 21:00:57 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,268 +0,0 @@ -/* -* Copyright (c) 2005-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: Delete a file or directory -* -*/ - - -#include "rsfwdeletestatemachine.h" -#include "rsfwfileentry.h" -#include "rsfwfiletable.h" -#include "rsfwinterface.h" -#include "rsfwfileengine.h" -#include "mdebug.h" -#include "rsfwdirent.h" - - -// ---------------------------------------------------------------------------- -// CRsfwDeleteStateMachine::CRsfwDeleteStateMachine -// ---------------------------------------------------------------------------- -// -CRsfwDeleteStateMachine::CRsfwDeleteStateMachine(TUint aNodeType) - : iNodeType(aNodeType) - { - } - -// ---------------------------------------------------------------------------- -// CRsfwDeleteStateMachine::~CRsfwDeleteStateMachine -// ---------------------------------------------------------------------------- -// -CRsfwDeleteStateMachine::~CRsfwDeleteStateMachine() - { - iDirEnts.ResetAndDestroy(); - } - -// ---------------------------------------------------------------------------- -// CRsfwDeleteStateMachine::CompleteRequestL -// ---------------------------------------------------------------------------- -// -CRsfwRfeStateMachine::TState* CRsfwDeleteStateMachine::CompleteRequestL(TInt aError) - { - if (iKidPath) - { - delete iKidPath; - iKidPath = NULL; - } - - // If the return code was KErrInUse, the directory we were about to delete - // was not empty, and we couldn't delete it. In this case it has anyway - //been added to the cache (as a side effect), - // so we don't want to delete the fep. - if (aError != KErrInUse && iKidCreated) - { - delete iKidFep; - iKidFep = NULL; - } - - CompleteAndDestroyState()->SetErrorCode(aError); - return CompleteAndDestroyState(); - } - -// Check if exists - - -// ---------------------------------------------------------------------------- -// CRsfwDeleteStateMachine::TCheckIfCanBeDeleted::TCheckIfCanBeDeleted -// ---------------------------------------------------------------------------- -// -CRsfwDeleteStateMachine:: -TCheckIfCanBeDeleted::TCheckIfCanBeDeleted(CRsfwDeleteStateMachine* aParent) - : iOperation(aParent) - { - } - -// ---------------------------------------------------------------------------- -// CRsfwDeleteStateMachine::TCheckIfCanBeDeleted::EnterL -// ---------------------------------------------------------------------------- -// -void CRsfwDeleteStateMachine::TCheckIfCanBeDeleted::EnterL() - { - // Kidname is in the same place in remove and rmdir structures,,, - TRfeRemoveInArgs* inArgs = - static_cast(iOperation->iInArgs); - TPtrC kidName(inArgs->iName); - - // the parent from which we are removing - if (!iOperation->Node()) - { - User::Leave(KErrNotFound); - } - - DEBUGSTRING16(("removing entry '%S' from fid %d", - &kidName, - iOperation->Node()->Fid().iNodeId)); - - // Do we know about the kid yet? - iOperation->iKidFep = iOperation->Node()->FindKidByName(kidName); - if (!iOperation->iKidFep) - { - // Create a temporary file entry for the target - iOperation->iKidFep = CRsfwFileEntry::NewL(kidName, iOperation->Node()); - iOperation->iKidCreated = ETrue; - } - - // Ensure the type matches with the operation (RmDir() or Delete()) - if ((iOperation->iKidFep->Type() != KNodeTypeUnknown) && - (iOperation->iKidFep->Type() != iOperation->iNodeType)) - { - DEBUGSTRING(("object type does not match the parameter type!")); - User::Leave(KErrArgument); - } - - // if the type is unknown, set it from the operation parameter - if (iOperation->iKidFep->Type() == KNodeTypeUnknown) - { - iOperation->iKidFep->SetType(iOperation->iNodeType); - } - - // If it is a directory, check that it is empty - if (!iOperation->FileEngine()->Disconnected() && - iOperation->iNodeType == KNodeTypeDir) - { - TInt zero = 0; - iOperation->FileEngine()-> - FetchAndCacheL(*iOperation->iKidFep, - 0, - &zero, - &iOperation->iDirEnts, - iOperation); - } - else - { - iOperation->HandleRemoteAccessResponse(0, KErrNone); - } - } - -// ---------------------------------------------------------------------------- -// CRsfwDeleteStateMachine::TCheckIfCanBeDeleted::CompleteL -// ---------------------------------------------------------------------------- -// -CRsfwDeleteStateMachine::TState* -CRsfwDeleteStateMachine::TCheckIfCanBeDeleted::CompleteL() - { - if ((iOperation->iNodeType == KNodeTypeDir) && - ((iOperation->iDirEnts).Count() > 0)) - { - // Attach the directory itself if it was unknown - if (iOperation->iKidCreated) - { - iOperation->FileEngine()->iFileTable->AddL(iOperation->iKidFep); - iOperation->Node()->AddKid(*iOperation->iKidFep); - } - - // if the directory is not empty we cannot delete it - // however, let's add its entries to the cache - iOperation->FileEngine()->AddToCacheL( - *iOperation->iKidFep, - &iOperation->iDirEnts, - iOperation->FileEngine(), - 0); - - return iOperation->CompleteRequestL(KErrInUse); - } - else - { - return new CRsfwDeleteStateMachine::TDeleteNodeState(iOperation); - } - } - -// ---------------------------------------------------------------------------- -// CRsfwDeleteStateMachine::TCheckIfCanBeDeleted::ErrorL -// ---------------------------------------------------------------------------- -// -CRsfwDeleteStateMachine::TState* -CRsfwDeleteStateMachine::TCheckIfCanBeDeleted::ErrorL(TInt aCode) - { - DEBUGSTRING(("kid didn't exist!")); - return iOperation->CompleteRequestL(aCode); - } - -// Remove directory - -// ---------------------------------------------------------------------------- -// CRsfwDeleteStateMachine::TDeleteNodeState::TDeleteNodeState -// ---------------------------------------------------------------------------- -// -CRsfwDeleteStateMachine:: -TDeleteNodeState::TDeleteNodeState(CRsfwDeleteStateMachine* aParent) - : iOperation(aParent) - { - } - -// ---------------------------------------------------------------------------- -// CRsfwDeleteStateMachine::TDeleteNodeState::EnterL -// ---------------------------------------------------------------------------- -// -void CRsfwDeleteStateMachine::TDeleteNodeState::EnterL() - { - // Get the path for the actual remove - iOperation->iKidPath = - iOperation->FileEngine()->FullNameL(*iOperation->iKidFep); - if (!iOperation->FileEngine()->Disconnected()) - { - if (iOperation->iNodeType == KNodeTypeDir) - { - iOperation-> - FileEngine()-> - RemoteAccessL()->DeleteDirectoryL(*iOperation->iKidPath, - iOperation); - } - else // KNodeTypFile - { - iOperation-> - FileEngine()-> - RemoteAccessL()->DeleteFileL(*iOperation->iKidPath, - iOperation); - } - } - else - { - // Disconnected - iOperation->HandleRemoteAccessResponse(0, KErrNone); - } - } - -// ---------------------------------------------------------------------------- -// CRsfwDeleteStateMachine::TDeleteNodeState::CompleteL -// ---------------------------------------------------------------------------- -// -CRsfwDeleteStateMachine::TState* CRsfwDeleteStateMachine::TDeleteNodeState::CompleteL() - { - if (!iOperation->FileEngine()->Disconnected()) - { - // If the target was already known, remove and destroy it - if (!iOperation->iKidCreated) - { - iOperation->FileEngine()->iFileTable->RemoveL(iOperation->iKidFep); - delete iOperation->iKidFep; - iOperation->iKidFep = NULL; - } - } - - iOperation->Node()->SetLocallyDirty(); - return iOperation->CompleteRequestL(KErrNone); - } - -// ---------------------------------------------------------------------------- -// CRsfwDeleteStateMachine::TDeleteNodeState::ErrorL -// ---------------------------------------------------------------------------- -// -CRsfwDeleteStateMachine::TState* -CRsfwDeleteStateMachine::TDeleteNodeState::ErrorL(TInt aCode) - { - return iOperation->CompleteRequestL(aCode); - } - - -