upnpframework/upnpcommand/src/upnpbrowsetask.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 03 May 2010 12:46:08 +0300
changeset 14 5f6b3bc1ab7b
parent 0 7f85d04be362
permissions -rw-r--r--
Revision: 201015 Kit: 201018

/*
* Copyright (c) 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:  Source file for CUpnpBrowseTask class.
*
*/


// INCLUDE FILES
// upnpframework / avcontroller api
#include "upnpavcontrollerfactory.h"    // UPnPAVControllerFactory
#include "upnpavcontroller.h"           // MUPnPAVController

// upnpframework / commonui api's
#include "upnpcommonui.h"

// command internal
#include "upnpfilepipe.h"               // CUpnpFilePipe
#include "upnpcommandparameters.h"      // CUpnpCommandParameters
#include "upnptaskhandler.h"            // MUpnpTaskHandler
#include "upnpnotehandler.h"            // CUpnpNoteHandler
#include "upnpbrowsetask.h"
#include "upnpcommand.h"

_LIT( KComponentLogfile, "upnpcommand.log");
#include "upnplog.h"

// --------------------------------------------------------------------------
// CUpnpBrowseTask::NewL
// Creates an instance of the implementation.
// --------------------------------------------------------------------------
//
CUpnpTask* CUpnpBrowseTask::NewL()
    {
    __LOG( "[UpnpCommand]\t CUpnpBrowseTask::NewL" );

    // Create instance
    CUpnpBrowseTask* self = NULL;
    self = new (ELeave) CUpnpBrowseTask();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );

    // Cast the object and return
    return (CUpnpTask*)self;
    }

// --------------------------------------------------------------------------
// CUpnpBrowseTask::CUpnpBrowseTask
// First phase construction.
// --------------------------------------------------------------------------
//
CUpnpBrowseTask::CUpnpBrowseTask()
    {
    __LOG( "[UpnpCommand]\t CUpnpBrowseTask::Constructor" );

    // Initialise member variables
    iAVController = NULL;
    }

// --------------------------------------------------------------------------
// Destructor.
// --------------------------------------------------------------------------
//
CUpnpBrowseTask::~CUpnpBrowseTask()
    {
    __LOG( "[UpnpCommand]\t CUpnpBrowseTask::Destructor" );
    }

// --------------------------------------------------------------------------
// CUpnpBrowseTask::ConstructL
// Perform the second phase of two phase construction. Reserves the Upnp Fw
// resources (they are released when the task is destroyed).
// --------------------------------------------------------------------------
//
void CUpnpBrowseTask::ConstructL()
    {
    __LOG( "[UpnpCommand]\t CUpnpBrowseTask::ConstructL" );
    }

// --------------------------------------------------------------------------
// CUpnpBrowseTask::AllocateResourcesL
// Allocates the Upnp Fw resources.
// --------------------------------------------------------------------------
//
void CUpnpBrowseTask::AllocateResourcesL()
    {
     __LOG( "[UpnpCommand]\t CUpnpBrowseTask::AllocateResourcesL" );
 
    // Upnp Fw resources are allocated when the command is executed.
    }

// --------------------------------------------------------------------------
// CUpnpBrowseTask::ExecuteL
// Executes the task.
// --------------------------------------------------------------------------
//
void CUpnpBrowseTask::ExecuteL()
    {
    __LOG( "[UpnpCommand]\t CUpnpBrowseTask::ExecuteL" );

    // Leave if the command has been allocated already
    if( iAVController )
        {
        User::Leave( KErrInUse );
        }

    // Create UpnpAvControllerClient
    iAVController = UPnPAVControllerFactory::NewUPnPAVControllerL();

    TInt status = KErrNone;
    TInt leaveCode = KErrNone;

    // If the improved browse feature is available (introduced in Upnp Fw 2.1)
    // use it, otherwise use the old browse implementation (UpnpCommonUi).
    TRAP( leaveCode,
        CUPnPCommonUI *commonUi = CUPnPCommonUI::NewL();
        CleanupStack::PushL( commonUi );

        status = commonUi->ExecuteDeviceDialogL( *iAVController );

        // Clean up
        CleanupStack::PopAndDestroy( commonUi );
        commonUi = NULL;
        );

    // Show connection lost info note
    if( status == KErrDisconnected )
        {
        TRAP_IGNORE( NoteHandler()->ShowConnectionLostNoteL() );
        }

    // Fix UpnpCommonUi return value
    if( status > 0 )
        {
        status = KErrNone;
        }

    // If UpnpCommonUi leaved, handle the leave code (if necessary)
    if( status == KErrNone &&
        leaveCode != KErrNone )
        {
        status = leaveCode;
        }

    // Clean up
    delete iAVController;
    iAVController = NULL;

    // If there was an error, leave
    if( status != KErrNone )
        {
        User::Leave( status );
        }
    }

// --------------------------------------------------------------------------
// CUpnpBrowseTask::WLANConnectionLost
// Notifies that the WLAN connection has been lost. All sessions are now
// usable and must be closed.
// --------------------------------------------------------------------------
void CUpnpBrowseTask::WLANConnectionLost()
    {
    __LOG( "[UpnpCommand]\t CUpnpBrowseTask::WLANConnectionLost" );

    // Inform the client that connection was lost.
    CommandEvent( UpnpCommand::EEventComplete, KErrDisconnected );

    // Call task handler (UpnpCommandImplementation) to destroy this task
    if( TaskHandler() )
        {
        TaskHandler()->DestroyTask();
        }
    }

// End of File