upnpframework/upnpcommand/src/upnpmovetask.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:00 +0200
changeset 0 7f85d04be362
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/*
* 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 CUpnpMoveTask class.
*
*/


// INCLUDE FILES
// System
#include <utf.h>                        // ConvertToUnicodeFromUtf8L

// upnp stack api
#include <upnpitem.h>                   // CUpnpItem
#include <upnpobject.h>                 // CUpnpObject (cast)

// upnp framework / avcontroller api
#include "upnpavcontroller.h"           // MUPnPAVController
#include "upnpavcontrollerfactory.h"    // UPnPAVControllerFactory
#include "upnpavbrowsingsession.h"      // MUPnPAVBrowsingSession
#include "upnpavsessionbase.h"          // ReserveLocalMSServicesCompleted()
#include "upnpavdevice.h"               // CUpnpAVDevice

// upnp framework / internal api's
#include "upnpcommonutils.h"            // TUPnPItemType
#include "upnpmetadatafetcher.h"        // UPnPMetadataFetcher
#include "upnpfiletransferengine.h"     // CUpnpFileTransferEngine

// upnp framework / command internal
#include "upnpfilepipe.h"               // CUpnpFilePipe
#include "upnpcommandparameters.h"      // CUpnpCommandParameters
#include "upnptaskhandler.h"            // MUpnpTaskHandler
#include "upnpnotehandler.h"            // CUpnpNoteHandler
#include "upnpmovetask.h"
#include "upnpcommand.h"
#include "upnptaskresourceallocator.h"  // CUpnpTaskResourceAllocator

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

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

    // Create instance
    CUpnpMoveTask* self = new (ELeave) CUpnpMoveTask();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }

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

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

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

// --------------------------------------------------------------------------
// CUpnpMoveTask::AllocateResourcesL
// Allocates the Upnp Fw resources.
// --------------------------------------------------------------------------
//
void CUpnpMoveTask::AllocateResourcesL()
    {
    __LOG( "[UpnpCommand]\t CUpnpMoveTask::AllocateResourcesL" );

    AllocateFileTransferResourcesL(
        CUpnpTaskResourceAllocator::EResourceAvController |
        CUpnpTaskResourceAllocator::EResourceSelectMoveServer );
    }

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

    if( !ResourceAllocator() )
        {
        __LOG( "[UpnpCommand]\t CUpnpCopyTask::ExecuteL \
resources not allocated, leave" );
        User::Leave( KErrNotReady );
        }

    TInt transferredFiles = 0;
        
    TRAPD( status, ExecuteFileTransferL
        ( ETrue, transferredFiles ) );
    __LOG1( "[UpnpCommand]\t CUpnpMoveTask::ExecuteL done status %d", status );

    // inform user
    if( status == KErrNone )
        {
        HBufC* deviceString = CnvUtfConverter::ConvertToUnicodeFromUtf8L( 
            ResourceAllocator()->SelectedDevice().FriendlyName() );
        CleanupStack::PushL( deviceString );
        NoteHandler()->ShowMoveInfoNoteL( 
            transferredFiles,  *deviceString );
        CleanupStack::PopAndDestroy( deviceString );
        }
    else if( status == KErrNotSupported )
        {
        NoteHandler()->ShowDrmNoteL();
        }
    else if( status == KErrDisconnected || status == KErrSessionClosed )
        {
        // check from if wlan is active
        // note shown only in device disappeared cases
        if( IsWlanActive() )
            {
            NoteHandler()->ShowMoveDisconnectionErrorNoteL();
            }
        }                   
    else if( status != KErrCancel )
        {
        // some other generic error EXCEPT cancel
        NoteHandler()->ShowMoveErrorNoteL();
        }

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


// End of File