profilesservices/ProfileEngine/WrapperSrc/CProEngPostFilter.cpp
author hgs
Wed, 29 Sep 2010 10:45:02 +0800
changeset 61 33e86ecbfdb4
parent 0 8c5d936e5675
permissions -rw-r--r--
201037

/*
* Copyright (c) 2005 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: Implementation of CProEngPostFilter.
*
*/



// INCLUDE FILES
#include "CProEngPostFilter.h"

#include <MCLFItem.h>
#include "CProEngMediaVariation.h"
#include "CProEngDrmCommonWrapper.h"

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

// -----------------------------------------------------------------------------
// CProEngPostFilter::CProEngPostFilter
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CProEngPostFilter::CProEngPostFilter()
    {
    }

// -----------------------------------------------------------------------------
// CProEngPostFilter::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CProEngPostFilter::ConstructL()
    {
    iMediaVariation = CProEngMediaVariation::NewL();
    iDrmWrapper = CProEngDrmCommonWrapper::NewL();
    }

// -----------------------------------------------------------------------------
// CProEngPostFilter::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CProEngPostFilter* CProEngPostFilter::NewL()
    {
    CProEngPostFilter* self = new (ELeave) CProEngPostFilter();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }

// Destructor
CProEngPostFilter::~CProEngPostFilter()
    {
    delete iDrmWrapper;
    delete iMediaVariation;
    }

// -----------------------------------------------------------------------------
// CProEngPostFilter::FilterItemsL
// Method for filtering the source list.
// -----------------------------------------------------------------------------
//
void CProEngPostFilter::FilterItemsL( const TArray<MCLFItem*>& aItemList,
                                  RPointerArray<MCLFItem>& aFilteredItemList )
    {
    // Process all items in the item list
    TInt count( aItemList.Count() );
    for( TInt i = 0; i < count; i++ )
        {
        MCLFItem* currentItem = aItemList[i];
        // Get the path of the media file from the item
        TPtrC fileNameAndPath;
        TInt error( currentItem->GetField( ECLFFieldIdFileNameAndPath,
                                       fileNameAndPath ) );
        
        // Add the alert tone file to the filtered list,
        // if it is OK according to the Media variation
        if( error == KErrNone )
            {
            TBuf< KMaxDataTypeLength > dataType;
            iMediaVariation->GetDataTypeL( fileNameAndPath, dataType );
            TBool isSupported( iMediaVariation->IsSupported( dataType ) );
            TBool isProtected( iDrmWrapper->IsProtected( fileNameAndPath ) );
            if( ( isProtected &&
                  iMediaVariation->IsAllowedProtected( dataType ) ) ||
                ( !isProtected &&
                     iMediaVariation->IsAllowedUnProtected( dataType ) ) )
                {
                aFilteredItemList.AppendL( currentItem );
                }
            }
        }
    }

//  End of File