diff -r 6369bfd1b60d -r 08b5eae9f9ff upnpsharing/applicationengine/src/upnpcontentshareao.cpp --- a/upnpsharing/applicationengine/src/upnpcontentshareao.cpp Mon Nov 01 13:44:24 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,321 +0,0 @@ -/* -* Copyright (c) 2008 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: CUpnpContentShareAO class implementation -* -*/ - - - - - - -// INCLUDE FILES - -#include "upnpcontentshareao.h" -#include "upnpfilesharingengine.h" - -_LIT( KComponentLogfile, "applicationengine.txt"); -#include "upnplog.h" - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::CUpnpContentShareAO -// C++ default constructor can NOT contain any code, that -// might leave. -// -------------------------------------------------------------------------- -// -CUpnpContentShareAO::CUpnpContentShareAO( - CUPnPFileSharingEngine& aEngine, - RUpnpContentServerClient& aContentServer ): - CActive( CActive::EPriorityStandard ), - iEngine( aEngine ), - iContentServer( aContentServer ) - { - CActiveScheduler::Add( this ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::ConstructL() -// -------------------------------------------------------------------------- -// -void CUpnpContentShareAO::ConstructL() - { - __LOG( "CUpnpContentShareAO::ConstructL" ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::NewL -// -------------------------------------------------------------------------- -// -CUpnpContentShareAO* CUpnpContentShareAO::NewL( - CUPnPFileSharingEngine& aEngine, - RUpnpContentServerClient& aContentServer ) - { - __LOG( "[UPNP_ENGINE]\t CUpnpContentShareAO::NewL begin" ); - CUpnpContentShareAO* self = CUpnpContentShareAO::NewLC( - aEngine, aContentServer ); - CleanupStack::Pop( self ); - __LOG( "[UPNP_ENGINE]\t CUpnpContentShareAO::NewL end" ); - return self; - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::NewLC -// -------------------------------------------------------------------------- -// -CUpnpContentShareAO* CUpnpContentShareAO::NewLC( - CUPnPFileSharingEngine& aEngine, - RUpnpContentServerClient& aContentServer ) - { - __LOG( "[UPNP_ENGINE]\t CUpnpContentShareAO::NewLC begin" ); - CUpnpContentShareAO* self = new( ELeave ) - CUpnpContentShareAO( aEngine, aContentServer ); - CleanupStack::PushL( self ); - self->ConstructL(); - __LOG( "[UPNP_ENGINE]\t CUpnpContentShareAO::NewLC end" ); - return self; - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::~CUpnpContentShareAO() -// Destructor -// -------------------------------------------------------------------------- -// -CUpnpContentShareAO::~CUpnpContentShareAO() - { - __LOG( "CUpnpContentShareAO::~CUpnpContentShareAO " ); - - iQueuedSelections.ResetAndDestroy(); - iQueuedSelections.Close(); - iQueuedTypes.Close(); - - Cancel(); - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::ChangeSharedContentL() -// Sends the selected indexes to server and starts sharing -// -------------------------------------------------------------------------- -// -void CUpnpContentShareAO::ChangeSharedContentL( - UpnpContentServer::TUpnpMediaType aType, - const CArrayFix& aMarkedItems ) - { - __LOG( "[UPNP_ENGINE]\t CUpnpContentShareAO::\ -ChangeSharedContentL begin" ); - - if ( !IsActive() ) - { - __ASSERTD( iQueuedTypes.Count() == 0, __FILE__, __LINE__ ); - iContentServer.ChangeSharedContentL( aType, aMarkedItems, iStatus ); - iStatus = KRequestPending; - SetActive(); - } - else - { - //remove all queued requests with this type - RemoveQueuedObjectByType( aType ); - - //queue this request - CArrayFix* selections = - new ( ELeave ) CArrayFixFlat( aMarkedItems.Count() ); - CleanupStack::PushL( selections ); - for ( TInt i ( 0 ); i < aMarkedItems.Count(); i++ ) - { - selections->AppendL( aMarkedItems.At(i) ); - } - - AppendQueuedObjectL( aType, selections ); - CleanupStack::Pop( selections ); - __ASSERTD( iQueuedSelections.Count() == iQueuedTypes.Count(), - __FILE__, __LINE__ ); - } - - __LOG( "[UPNP_ENGINE]\t CUpnpContentShareAO::\ -ChangeSharedContentL end" ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::RefreshSharedContentL() -// Updates shared objects in mediaserver -// -------------------------------------------------------------------------- -// -void CUpnpContentShareAO::RefreshSharedContentL( - UpnpContentServer::TUpnpMediaType aType ) - { - __LOG( "[UPNP_ENGINE]\t CUpnpContentShareAO::\ -RefreshSharedContentL begin" ); - if ( !IsActive() ) - { - __ASSERTD( iQueuedTypes.Count() == 0, __FILE__, __LINE__ ); - iContentServer.RefreshSharedContentL( aType, iStatus ); - iStatus = KRequestPending; - SetActive(); - } - else - { - //remove all queued requests with this type - RemoveQueuedObjectByType( aType ); - - //queue this request - CArrayFix* selections( NULL ); - AppendQueuedObjectL( aType, selections ); - __ASSERTD( iQueuedSelections.Count() == iQueuedTypes.Count(), - __FILE__, __LINE__ ); - } - __LOG( "[UPNP_ENGINE]\t CUpnpContentShareAO::\ -RefreshSharedContentL end" ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::DoCancel -// Cancel the operation -// -------------------------------------------------------------------------- -// -void CUpnpContentShareAO::DoCancel() - { - __LOG( "[UPNP_ENGINE]\t CUpnpContentShareAO::DoCancel" ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::RunL -// Function is called when active request is ready -// -------------------------------------------------------------------------- -// -void CUpnpContentShareAO::RunL() - { - __LOG( "[UPNP_ENGINE]\t CUpnpContentShareAO::RunL begin" ); - __LOG1( "[UPNP_ENGINE]\t\t status: %d", iStatus.Int() ); - - TInt err = iStatus.Int(); - if ( err && - err != KErrServerBusy ) - { - // KErrServerBusy is a response to the - // CUpnpContentServer::RefreshSharedContentL call. Therefore we must - // not leave without cleaning queued objects. - // Otherwise next call to CUpnpContentShareAO::RefreshSharedContentL - // will panic (in UDEB builds only!!!!). - - // Clears queued objects and leaves. - iQueuedSelections.ResetAndDestroy(); - iQueuedTypes.Reset(); - User::Leave( err ); - } - - //When get the responce from the content server then change the UI - iEngine.RequestSharingProgressL(); - - if ( iQueuedTypes.Count() ) - { - // Get next queued objects - UpnpContentServer::TUpnpMediaType type = iQueuedTypes[ 0 ]; - CArrayFix* selections = iQueuedSelections[ 0 ]; - - // Clear arrays. - iQueuedSelections.Remove( 0 ); - iQueuedTypes.Remove( 0 ); - - if ( selections ) - { - //share request - CleanupStack::PushL( selections ); - iContentServer.ChangeSharedContentL( type, *selections, iStatus ); - CleanupStack::PopAndDestroy( selections ); - } - else - { - //refresh request - iContentServer.RefreshSharedContentL( type, iStatus ); - } - - iStatus = KRequestPending; - SetActive(); - } - __LOG( "[UPNP_ENGINE]\t CUpnpContentShareAO::RunL end" ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::RunError -// Handles a leave occurring in the request completion -// -------------------------------------------------------------------------- -// -TInt CUpnpContentShareAO::RunError( TInt aError ) - { - __LOG( "CUpnpContentShareAO::RunError" ); - if ( iEngine.Observer() ) - { - iEngine.Observer()->HandleSharingDone( iEngine, aError ); - } - return KErrNone; - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::RemoveQueuedObjects -// Removed queued objects by index. -// -------------------------------------------------------------------------- -// -void CUpnpContentShareAO::RemoveQueuedObject( TInt aIndex ) - { - // Checks argument in udeb build. - // USER 130 panic will occure in urel builds if argument is - // incorrent. - TInt count = iQueuedTypes.Count(); - __ASSERTD( aIndex >= 0 && aIndex < iQueuedTypes.Count(), - __FILE__, __LINE__ ); - - iQueuedTypes.Remove( aIndex ); - if ( iQueuedSelections[ aIndex ] ) - { - delete iQueuedSelections[ aIndex ]; - } - iQueuedSelections.Remove( aIndex ); - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::RemoveQueuedObjectByType -// Removed queued objects by type. -// -------------------------------------------------------------------------- -// -void CUpnpContentShareAO::RemoveQueuedObjectByType( - UpnpContentServer::TUpnpMediaType aType ) - { - //remove all queued requests with this type - for ( TInt i( iQueuedTypes.Count() - 1 ); i >= 0; i-- ) - { - if ( iQueuedTypes[ i ] == aType ) - { - RemoveQueuedObject( i ); - } - } - } - -// -------------------------------------------------------------------------- -// CUpnpContentShareAO::AppendQueuedObjectL -// Appends given objects. -// -------------------------------------------------------------------------- -// -void CUpnpContentShareAO::AppendQueuedObjectL( - UpnpContentServer::TUpnpMediaType aType, - CArrayFix* aSelections ) - { - iQueuedTypes.AppendL( aType ); - TRAPD( err, iQueuedSelections.AppendL( aSelections ) ); - if ( err ) - { - // Couldn't append array to the iQueuedSelections array. - // Removes the type and leaves. - iQueuedTypes.Remove( iQueuedTypes.Count() - 1 ); - User::Leave( err ); - } - }