upnpsharing/upnpcontentserver/src/upnpunsharerao.cpp
branchIOP_Improvements
changeset 40 08b5eae9f9ff
parent 39 6369bfd1b60d
child 41 b4d83ea1d6e2
--- 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 <upnpelement.h>
-
-#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