diff -r 6369bfd1b60d -r 08b5eae9f9ff upnpsharing/upnpcontentserver/src/upnpunsharerao.cpp --- a/upnpsharing/upnpcontentserver/src/upnpunsharerao.cpp Mon Nov 01 13:44:24 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,669 +0,0 @@ -/* -* Copyright (c) 2006-2007 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: CUpnpUnsharerAo class implementation - * -*/ - - - - - - - -// INCLUDE FILES -#include "upnpdlnaprofiler.h" -#include "upnpcdsreselementutility.h" -#include "upnpcommonutils.h" -#include - -#include "upnpunsharerao.h" - -_LIT( KComponentLogfile, "contentserver.txt"); -#include "upnplog.h" - -// CONSTANTS -const TInt KDefaultBrowseReqCount( 20 ); -const TInt KDefaultBrowseStartingInd( 0 ); - -using namespace UpnpContentServer; - -// ============================ MEMBER FUNCTIONS ============================ - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::CUpnpUnsharerAo -// C++ default constructor can NOT contain any code, that -// might leave. -// -------------------------------------------------------------------------- -// -CUpnpUnsharerAo::CUpnpUnsharerAo( MUpnpSharingCallback* aCallback, - TInt aPriority ) - : CActive( aPriority ), - iCallback( aCallback ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - iTotalItems = KErrNotFound; - iAllTotalItems = 0; - CActiveScheduler::Add( this ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::~CUpnpUnsharerAo() -// C++ destructor. -// -------------------------------------------------------------------------- -// -CUpnpUnsharerAo::~CUpnpUnsharerAo() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - delete iFileSharing; - iFileSharing = NULL; - iMediaServer.Close(); - - if ( IsActive() ) - { - __LOG1("IsActive: true iCurrentOperation: %d", iCurrentOperation ); - iCurrentOperation = ENotActive; - TRequestStatus* stat = &iStatus; - User::RequestComplete( stat, KErrNone ); - } - - Cancel(); - - Cleanup(); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::RunL -// Called when asyncronous request is ready -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::RunL() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - if ( iStatus.Int() == KErrCorrupt || - iStatus.Int() == KErrNoMemory || - iStatus.Int() == KErrDiskFull ) - { - iCurrentOperation = ENotActive; - } - - if ( iStopRequested == MUpnpSharingCallback::ESharingPause ) - { - delete iFileSharing; - iFileSharing = NULL; - iFileSharing = CUpnpFileSharing::NewL(); - iStopRequested = MUpnpSharingCallback::ESharingNoStop; - } - - switch ( iCurrentOperation ) - { - case EInitialize : - { - TInt err( InitializeL( iUpContainer ) ); - if ( !err ) - { - QueryContainersFromMediaServerL( iUpContainer ); - } - else - { - iCurrentOperation = ENotActive; - SelfComplete( KErrNone ); - } - } - break; - case EQueryContainersFromMediaServer : - { - QueryContainersFromMediaServerL( iCurrentContainerId ); - } - break; - case EQueryContainersFromMediaServerResult : - { - QueryContainersFromMediaServerResultL(); - } - break; - case EQueryItemsFromMediaServer : - { - QueryContainerItemsL( iCurrentContainerId ); - } - break; - case EUnshareItemList: - { - UnshareItemListL(); - } - break; - case EQueryItemsFromMediaServerResult : - { - QueryContainerItemsResultL(); - } - break; - case EUnshareContainer : - { - UnshareContainerL(); - } - break; - case EUnshareContainerResult : - { - UnshareContainerResultL(); - } - break; - case ENotActive : - { - Cleanup(); - if ( iCallback ) - { - iCallback->CompleteSharingOperationL( iStatus.Int(), 0 ); - } - } - break; - default : - break; - } - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::DoCancel -// Cancels active object -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::DoCancel() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - // NOTE: The cancelling of mediaserver request must be made in destructor - // because there is no cancel in CUpnpFileSharing - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::RunError -// Handle leaves -// -------------------------------------------------------------------------- -// -TInt CUpnpUnsharerAo::RunError( TInt aError ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - TInt ret( KErrNone ); - if ( aError == KErrNoMemory || - aError == KErrDiskFull || - aError == KErrCorrupt ) - { - iCurrentOperation = ENotActive; - SelfComplete( aError ); - } - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - return ret; - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::QueryContainersFromMediaServerL -// (other items are commented in header) -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::QueryContainersFromMediaServerL( TInt aId ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - CUpnpBrowseCriteria* browseCriteria = CreateBrowseCriteriaLC(); - browseCriteria->SetStartingIndex( iContainerBrowsePosition ); - - if ( iContainerList ) - { - delete iContainerList; - iContainerList = NULL; - } - iContainerList = CUpnpContainerList::NewL(); - - // Get shared containers to iContainerList - iFileSharing->GetSharedContainerListL( aId, - *browseCriteria, - *iContainerList, - iTotalContainers, - iStatus ); - iCurrentOperation = EQueryContainersFromMediaServerResult; - CleanupStack::PopAndDestroy( browseCriteria ); - SetActive(); - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::QueryContainersFromMediaServerResultL -// (other items are commented in header) -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::QueryContainersFromMediaServerResultL() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - CUpnpContainer* nextContainer( NULL ); - TInt containerCount( iContainerList->ObjectCount() ); - if ( containerCount ) - { - // there are subcontainers -> store them and query if they - // have subcontainers - iContainerLists.AppendL( iContainerList ); //Transfer ownership - // check if we neet to get containers in segments - - if ( iContainerBrowsePosition + containerCount - >= iTotalContainers ) - { - // all segments queried - // next container under processing is always last in the list - nextContainer = - static_cast< CUpnpContainer* >( - iContainerList->operator[]( - containerCount - 1 ) ); - iCurrentContainerId = UPnPCommonUtils::DesC8ToInt( - nextContainer->Id()); - iContainerList = NULL; - iContainerBrowsePosition = 0; - } - else - { - __LOG("CUpnpUnsharerAo: retrieving next segment"); - // set the starting position for retrieving next segment - iContainerBrowsePosition += KDefaultBrowseReqCount; - iContainerList = NULL; - } - - iCurrentOperation = EQueryContainersFromMediaServer; - } - else - { - // no subcontainers -> query the items - if ( iContainerLists.Count() ) - { - CUpnpContainerList* contList = - iContainerLists[ iContainerLists.Count()-1 ]; - nextContainer = - static_cast< CUpnpContainer* >( - contList->operator[]( - contList->ObjectCount() - 1 ) ); - iCurrentContainerId = UPnPCommonUtils::DesC8ToInt( - nextContainer->Id() ); - // there should be at least the initial container - iCurrentOperation = EQueryItemsFromMediaServer; - - delete iContainerList; - iContainerList = NULL; - - iCurrentOperation = EQueryItemsFromMediaServer; - - } - else - { - // error: no initial container - iCurrentOperation = ENotActive; - - } - } - SelfComplete( KErrNone ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::QueryContainerItemsL -// (other items are commented in header) -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::QueryContainerItemsL( TInt aId ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - delete iItemList; - iItemList = NULL; - iItemList = CUpnpItemList::NewL(); - if ( !iFileSharing ) - { - User::Leave( KErrGeneral ); - } - CUpnpBrowseCriteria* browseCriteria = CreateBrowseCriteriaLC(); - if ( iTotalItems == KErrNotFound ) - { - iFileSharing->GetSharedItemListL ( - aId, *browseCriteria, - *iItemList, iTotalItems, iStatus ); - - if ( iTotalItems > 0 ) - { - iAllTotalItems += iTotalItems; - } - } - else - { - TInt tmp( 0 ); - iFileSharing->GetSharedItemListL ( - aId, *browseCriteria, - *iItemList, tmp, iStatus ); - - if ( tmp > 0 ) - { - iAllTotalItems += tmp; - } - } - iCurrentOperation = EQueryItemsFromMediaServerResult; - CleanupStack::PopAndDestroy( browseCriteria ); - SetActive(); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::QueryContainerItemsResultL -// (other items are commented in header) -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::QueryContainerItemsResultL() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - if ( !iItemList ) - { - User::Leave( KErrGeneral ); - } - TInt objCount( iItemList->ObjectCount() ); - if ( objCount && ( iExecStatus < iTotalItems ) ) - { - // unshare the items in parts - iCurrentOperation = EUnshareItemList; - - } - else - { - // the container iCurrentContainerId is empty -> unshare it unless it - // is the container received at the start - - if ( iContainerLists.Count() > 1 ) - { - iCurrentOperation = EUnshareContainer; - } - else - { - // all done - iCurrentOperation = ENotActive; - } - } - - if ( iExecStatus > 0 ) - { - iCallback->SetProgressL( iExecStatus ); - } - - SelfComplete( KErrNone ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::UnshareItemListL -// (other items are commented in header) -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::UnshareItemListL() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - iExecStatus += iItemList->ObjectCount(); - iFileSharing->UnshareItemListL( *iItemList, iUnsharePosition, iStatus ); - - delete iItemList; - iItemList = NULL; - iCurrentOperation = EQueryItemsFromMediaServer; - SetActive(); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::UnshareContainerL -// (other items are commented in header) -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::UnshareContainerL() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - iFileSharing->UnshareContainerL( iCurrentContainerId, iStatus ); - iCurrentOperation = EUnshareContainerResult; - iExecStatus = 0; - iTotalItems = KErrNotFound; - SetActive(); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::UnshareContainerResultL -// (other items are commented in header) -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::UnshareContainerResultL() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - if ( iContainerLists.Count() ) - { - // one container is now fully handled -> remove from list of - // containers - CUpnpContainerList* contList = - iContainerLists[ iContainerLists.Count()-1 ]; - // note: iCurrentContainerId is always last in the list - contList->RemoveAndDestroy( *UPnPCommonUtils::IntToDesC8LC( - iCurrentContainerId ) ); - CleanupStack::PopAndDestroy(); // UPnPCommonUtils::IntToDesC8LC - if ( contList->ObjectCount() ) - { - // get the next container ( last of the list ) to process - TInt nextPos = contList->ObjectCount() - 1; - CUpnpContainer* nextContainer = static_cast< CUpnpContainer* >( - contList->operator[]( nextPos )); - iCurrentContainerId = UPnPCommonUtils::DesC8ToInt( - nextContainer->Id()); - // Restart cycle: query if it has subcontainers - iCurrentOperation = EQueryContainersFromMediaServer; - - } - else - { - // one directory hierarchy is empty - CUpnpContainerList* removeList = iContainerLists[ - iContainerLists.Count()-1 ]; - iContainerLists.Remove( iContainerLists.Count()-1 ); - delete removeList; - if ( iContainerLists.Count() ) - { - // go back in containerlists - contList = - iContainerLists[ iContainerLists.Count()-1 ]; - TInt backPos( contList->ObjectCount() - 1 ); - CUpnpContainer* nextContainer = - static_cast< CUpnpContainer* >( - contList->operator[]( backPos )); - iCurrentContainerId = UPnPCommonUtils::DesC8ToInt( - nextContainer->Id() ); - // Restart cycle: query if it has items - // no need to query containers - iCurrentOperation = EQueryItemsFromMediaServer; - - } - else - { - // all done - iCurrentOperation = ENotActive; - } - } - } - else - { - // all done - iCurrentOperation = ENotActive; - } - SelfComplete( KErrNone ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::EmptyContainer -// (other items are commented in header) -// -------------------------------------------------------------------------- -// -TInt CUpnpUnsharerAo::EmptyContainer( TInt& aContainerId ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - - TInt err( KErrNotFound ); - - iUpContainer = aContainerId; - iCurrentContainerId = aContainerId; - iCurrentOperation = EInitialize; - SelfComplete( KErrNone ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - return err; - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::RequestStop -// ( other items are commented in header ) -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::RequestStop( - MUpnpSharingCallback::TSharingStopType aStopType ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - iStopRequested = aStopType; - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::InitializeL -// (other items are commented in header) -// -------------------------------------------------------------------------- -// -TInt CUpnpUnsharerAo::InitializeL( TInt& aContainerId ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - // First initialize resources - iFileSharing = CUpnpFileSharing::NewL(); - TInt error( iMediaServer.Connect() ); - if ( !error ) - { - // start offline if not started - TInt status( RUpnpMediaServerClient::EStopped ); - iMediaServer.Status( status ); - if ( status == RUpnpMediaServerClient::EStopped ) - { - error = iMediaServer.StartOffline(); - } - if ( !error ) - { - CUpnpContainerList* beginList = CUpnpContainerList::NewLC(); - CUpnpContainer* beginContainer = CUpnpContainer::NewL(); - CleanupStack::PushL( beginContainer ); - beginContainer->SetIdL( - *UPnPCommonUtils::IntToDesC8LC( aContainerId ) ); - CleanupStack::PopAndDestroy(); // IntToDesC8LC - beginList->AppendObjectL( *beginContainer ); //Transfer ownership - CleanupStack::Pop( beginContainer ); - iContainerLists.AppendL( beginList ); //Transfer ownership - CleanupStack::Pop( beginList ); - } - } - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - return error; - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::CreateBrowseCriteriaLC -// (other items are commented in header) -// -------------------------------------------------------------------------- -// -CUpnpBrowseCriteria* CUpnpUnsharerAo::CreateBrowseCriteriaLC() const - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - CUpnpBrowseCriteria* browseCriteria = CUpnpBrowseCriteria::NewLC(); - browseCriteria->SetRequestedCount( KDefaultBrowseReqCount ); - browseCriteria->SetStartingIndex( KDefaultBrowseStartingInd ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - return browseCriteria; - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::SelfComplete -// Complete own request -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::SelfComplete( TInt aError ) - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - SetActive(); - TRequestStatus* stat = &iStatus; - User::RequestComplete( stat, aError ); - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::Cleanup -// (other items are commented in header) -// -------------------------------------------------------------------------- -// -void CUpnpUnsharerAo::Cleanup() - { - __LOG8_1( "%s begin.", __PRETTY_FUNCTION__ ); - iExecStatus = 0; - iTotalItems = KErrNotFound; - iTotalContainers = KErrNotFound; - iContainerBrowsePosition = 0; - - iCurrentContainerId = KErrNotFound; - iUpContainer = KErrNotFound; - iStopRequested = MUpnpSharingCallback::ESharingNoStop; - - delete iItemList; - iItemList = NULL; - delete iContainerList; - iContainerList = NULL; - - iContainerLists.ResetAndDestroy(); - - iCurrentOperation = ENotActive; - - __LOG8_1( "%s end.", __PRETTY_FUNCTION__ ); - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::UnSharingProgress -// (the usage in header) -// -------------------------------------------------------------------------- -// -TInt CUpnpUnsharerAo::UnSharingProgress( ) - { - TInt progress( 0 ); - if ( iExecStatus >= 0 ) - { - progress = iExecStatus; - } - return progress; - } - -// -------------------------------------------------------------------------- -// CUpnpUnsharerAo::TotalItemsForUnShare -// (the usage in header) -// -------------------------------------------------------------------------- -// -TInt CUpnpUnsharerAo::TotalItemsForUnShare( ) - { - TInt items( 0 ); - if ( iTotalItems >= 0 ) - { - items = iTotalItems; - } - return items; - } - -// End of file