upnpsharing/applicationengine/src/upnpiconconfigurator.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) 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:      Configurator class for mediaserver icons
 *
*/






// INCLUDE FILES
// System
#include <centralrepository.h>

// upnp stack
#include <upnpmediaserverclient.h>

// upnp framework internal API's
#include "upnpfileutilitytypes.h" // utilities / mime type definitions

// app.engine internal
#include "upnpapplicationcrkeys.h" //KUPnPAppMediaServerIcon
#include "upnpfilesharingengineao.h"
#include "upnpiconconfigurator.h"


// constants
_LIT( KIcon1Path, "\\system\\apps\\upnp\\upnp_ms_jpeg_sm.jpg");
const TInt KIcon1Width( 48 );
const TInt KIcon1Height( 48 );
const TInt KIcon1Depth( 24 );

_LIT( KIcon2Path, "\\system\\apps\\upnp\\upnp_ms_jpeg_lrg.jpg");
const TInt KIcon2Width( 120 );
const TInt KIcon2Height( 120 );
const TInt KIcon2Depth( 24 );

_LIT( KIcon3Path, "\\system\\apps\\upnp\\upnp_ms_png_sm.png");
const TInt KIcon3Width( 48 );
const TInt KIcon3Height( 48 );
const TInt KIcon3Depth( 24 );

_LIT( KIcon4Path, "\\system\\apps\\upnp\\upnp_ms_png_lrg.png");
const TInt KIcon4Width( 120 );
const TInt KIcon4Height( 120 );
const TInt KIcon4Depth( 24 );

_LIT(KComponentLogfile, "applicationengine.txt");
#include "upnplog.h"

// ============================ MEMBER FUNCTIONS ============================

// --------------------------------------------------------------------------
// CUPnPIconConfigurator::CUPnPIconConfigurator
// --------------------------------------------------------------------------
//
CUPnPIconConfigurator::CUPnPIconConfigurator(
    RUpnpMediaServerClient& aMediaServer, 
    CUPnPFileSharingEngineAO& aFileShareingAO )
    : CActive(CActive::EPriorityStandard),
      iMediaServer( aMediaServer ),
      iFileShareEngineAO( aFileShareingAO )
    {
    __LOG( "[UPNP_ENGINE] CUPnPIconConfigurator::CUPnPIconConfigurator" );
    CActiveScheduler::Add( this );
    }


// --------------------------------------------------------------------------
// CUPnPIconConfigurator::~CUPnPIconConfigurator()
// --------------------------------------------------------------------------
//
CUPnPIconConfigurator::~CUPnPIconConfigurator()
    {

    if ( IsActive() )
        {
        iState = EStateIdle;
        TRequestStatus* stat = &iStatus;
        User::RequestComplete( stat, KErrNone );
        }
    Cancel();
    }

// --------------------------------------------------------------------------
// CUPnPIconConfigurator::NeedToConfigureIcons()
// --------------------------------------------------------------------------
//
TBool CUPnPIconConfigurator::NeedToConfigureIcons()
    {
#ifdef _DEBUG
    // in debug mode ALWAYS add new icons
    return ETrue;
#else
    // in normal mode only add icons if they DO NOT exist
    TBool iconsExist = EFalse;
    TRAP_IGNORE( iconsExist = CheckIconsAddedL() );
    __LOG1( "[UPNP_ENGINE] CUPnPIconConfigurator: iconsExist %d",
        iconsExist );
    return !iconsExist;
#endif
    }

// --------------------------------------------------------------------------
// CUPnPIconConfigurator::ConfigureIconsL()
// --------------------------------------------------------------------------
//
void CUPnPIconConfigurator::ConfigureIconsL()
    {
    RemoveIcons();
    }

// --------------------------------------------------------------------------
// CUPnPFileSharingEngineAO::RunL
// Called when asyncronous request is ready
// --------------------------------------------------------------------------
//
void CUPnPIconConfigurator::RunL()
    {
    __LOG( "[UPNP_ENGINE] CUPnPIconConfigurator::RunL" );

    TInt err( iStatus.Int() );

    if ( ( err != KErrNone ) && ( err != KErrNotFound ) )
        {       
        iFileShareEngineAO.SetIconComplete( err );
        }
    else
        {
        switch ( iState )
            {
            case EStateRemoving:
                {
                AddIcon1L();
                iState = EStateAdding1;
                }
                break;
            case EStateAdding1:
                {
                delete iIcon1;
                iIcon1 = NULL;
                AddIcon2L();
                iState = EStateAdding2;
                }
                break;
            case EStateAdding2:
                {
                delete iIcon2;
                iIcon2 = NULL;
                AddIcon3L();
                iState = EStateAdding3;
                }
                break;
            case EStateAdding3:
                {
                delete iIcon3;
                iIcon3 = NULL;
                AddIcon4L();
                iState = EStateAdding4;
                }
                break;
            case EStateAdding4:
                {
                delete iIcon4;
                iIcon4 = NULL;
                // operation complete.
                MarkIconsAddedL( ETrue );
                Cancel();
                iFileShareEngineAO.SetIconComplete( KErrNone );
                }
                break;
            default:
                {
                __PANICD( __FILE__, __LINE__ );
                }
                break;
            }
        }
    }

// --------------------------------------------------------------------------
// CUPnPIconConfigurator::RunError
// RunL error handler
// --------------------------------------------------------------------------
//
TInt CUPnPIconConfigurator::RunError( TInt aError )
    {
    __LOG( "[UPNP_ENGINE] CUPnPIconConfigurator::RunError begin" );

    iFileShareEngineAO.SetIconComplete( aError );
    return KErrNone;
    }

// --------------------------------------------------------------------------
// CUPnPIconConfigurator::DoCancel
// Cancels active object
// --------------------------------------------------------------------------
//
void CUPnPIconConfigurator::DoCancel()
    {
    __LOG( "[UPNP_ENGINE] CUPnPIconConfigurator::DoCancel" );
    }
    
// --------------------------------------------------------------------------
// CUPnPIconConfigurator::RemoveIconsL
// --------------------------------------------------------------------------
//
void CUPnPIconConfigurator::RemoveIcons()
    {
    __LOG( "[UPNP_ENGINE]\t CUPnPIconConfigurator::RemoveIconsL" );
    iState = EStateRemoving;
    iMediaServer.RemoveIcons( iStatus );
    if ( !IsActive() )
        {
        SetActive();
        }
    else
        {
        __LOG("[UPNP_ENGINE]\t CUPnPIconConfigurator::RemoveIconsL Error :\
                Already active");
        }
    }

// --------------------------------------------------------------------------
// CUPnPIconConfigurator::AddIcon1
// --------------------------------------------------------------------------
//
void CUPnPIconConfigurator::AddIcon1L()
    {
    __LOG( "[UPNP_ENGINE]\t CUPnPIconConfigurator::AddIcon1" );
    TFileName iconPath;
    ResolveIconPath( KIcon1Path, iconPath );
    iIcon1 = CUpnpIcon::NewL( iconPath,
            KIcon1Width, KIcon1Height, KIcon1Depth, KJpegMime );
    iMediaServer.AddIcon( iIcon1, iStatus );
    if ( !IsActive() )
        {
        SetActive();
        }
    else
        {
        __LOG("[UPNP_ENGINE]\t CUPnPIconConfigurator::AddIcon1L Error :\
                Already active");
        }
    }

// --------------------------------------------------------------------------
// CUPnPIconConfigurator::AddIcon2
// --------------------------------------------------------------------------
//
void CUPnPIconConfigurator::AddIcon2L()
    {
    __LOG( "[UPNP_ENGINE]\t CUPnPIconConfigurator::AddIcon2" );
    TFileName iconPath;
    ResolveIconPath( KIcon2Path, iconPath );
    iIcon2 = CUpnpIcon::NewL( iconPath,
        KIcon2Width, KIcon2Height, KIcon2Depth, KJpegMime );
    iMediaServer.AddIcon( iIcon2, iStatus );
    if ( !IsActive() )
        {
        SetActive();
        }
    else
        {
        __LOG("[UPNP_ENGINE]\t CUPnPIconConfigurator::AddIcon2L Error :\
                Already active");
        }
    }

// --------------------------------------------------------------------------
// CUPnPIconConfigurator::AddIcon3
// --------------------------------------------------------------------------
//
void CUPnPIconConfigurator::AddIcon3L()
    {
    __LOG( "[UPNP_ENGINE]\t CUPnPIconConfigurator::AddIcon3" );
    TFileName iconPath;
    ResolveIconPath( KIcon3Path, iconPath );
    iIcon3 = CUpnpIcon::NewL( iconPath,
        KIcon3Width, KIcon3Height, KIcon3Depth, KPngMime );
    iMediaServer.AddIcon( iIcon3, iStatus );
    if ( !IsActive() )
        {
        SetActive();
        }
    else
        {
        __LOG("[UPNP_ENGINE]\t CUPnPIconConfigurator::AddIcon3L Error :\
                Already active");
        }
    }

// --------------------------------------------------------------------------
// CUPnPIconConfigurator::AddIcon4
// --------------------------------------------------------------------------
//
void CUPnPIconConfigurator::AddIcon4L()
    {
    __LOG( "[UPNP_ENGINE]\t CUPnPIconConfigurator::AddIcon4" );
    TFileName iconPath;
    ResolveIconPath( KIcon4Path, iconPath );
    iIcon4 = CUpnpIcon::NewL( iconPath,
        KIcon4Width, KIcon4Height, KIcon4Depth, KPngMime );
    iMediaServer.AddIcon( iIcon4, iStatus );
    if ( !IsActive() )
        {
        SetActive();
        }
    else
        {
        __LOG("[UPNP_ENGINE]\t CUPnPIconConfigurator::AddIcon4L Error :\
                Already active");
        }
    }

// --------------------------------------------------------------------------
// CUPnPIconConfigurator::ResolveIconPath
// Resolves absolute icon path
// --------------------------------------------------------------------------
//
void CUPnPIconConfigurator::ResolveIconPath(
    const TDesC& relativePath, TFileName& iconPath )
    {
    iconPath = relativePath;
    TFileName dllName;
    Dll::FileName( dllName );
    TBuf<2> drive = dllName.Left(2); // Drive letter followed by ':' 
    iconPath.Insert( 0, drive );
    }
        
// --------------------------------------------------------------------------
// CUPnPIconConfigurator::CheckIconsAddedL
// Set the mediaserver icon if it is needed
// --------------------------------------------------------------------------
//
TBool CUPnPIconConfigurator::CheckIconsAddedL()
    {
    __LOG( "[UPNP_ENGINE] CUPnPIconConfigurator::CheckIconsAddedL" );

    TInt iconSet ( EFalse );
    CRepository *repository = CRepository::NewL( KCRUidUPnPApplication );
    repository->Get( KUPnPAppMediaServerIcon, iconSet );
    delete repository;
    repository = NULL;
    return iconSet;
    }

// --------------------------------------------------------------------------
// CUPnPIconConfigurator::MarkIconsAddedL
// store the cenrep value
// --------------------------------------------------------------------------
//
void CUPnPIconConfigurator::MarkIconsAddedL( TBool aMark )
    {
    __LOG( "[UPNP_ENGINE] CUPnPIconConfigurator::MarkIconsAddedL" );
    
    CRepository *repository = CRepository::NewL( KCRUidUPnPApplication );
    repository->Set( KUPnPAppMediaServerIcon, aMark );
    delete repository;
    repository = NULL;
    }


// End of file