profilesservices/FileList/Src/CFLDSingleGraphicEntryFormatter.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:44 +0100
branchRCL_3
changeset 25 7e0eff37aedb
parent 0 8c5d936e5675
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002 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 the CFLDSingleGraphicEntryFormatter.
*
*
*/


// CLASS HEADER
#include "CFLDSingleGraphicEntryFormatter.h"

// INTERNAL INCLUDES
#include "CFLDEntryReference.h"

// EXTERNAL INCLUDES
#include <f32file.h>	// For TParsePtrC
#include <AknUtils.h>	// For AknTextUtils
#include <driveinfo.h>

// CONSTANTS
namespace
	{
	// Some helper literals
	_LIT( KFLDTab, "\t" );
	_LIT( KFLDIgnoredExt, ".rng" );

	// these icon array indexes must match with the implementation
	// of the function CFLDFileListContainer.cpp/PopulateIconArrayL
	_LIT( KFLDZeroAndTab, "0\t" );
	_LIT( KFLDSoundAndTab, "3\t" );
	_LIT( KFLDVideoAndTab, "4\t" );
	_LIT( KFLDMemoryCard, "2" );
	_LIT( KFLDMassStorage, "5" );
	
	}

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

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

// -----------------------------------------------------------------------------
// CFLDSingleGraphicEntryFormatter::~CFLDSingleGraphicEntryFormatter()
// -----------------------------------------------------------------------------
//
CFLDSingleGraphicEntryFormatter::~CFLDSingleGraphicEntryFormatter()
    {
    delete iDriveUtil;
    }
    
// -----------------------------------------------------------------------------
// CFLDSingleGraphicEntryFormatter::FormatL()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CFLDSingleGraphicEntryFormatter::FormatL( CFLDEntryReference& aEntry )
    {
    if ( !iDriveUtil )
        {
        iDriveUtil = CDriveUtil::NewL();
        }
        
	HBufC* formattedName = NULL;
	HBufC& pathAndMediaFileName = aEntry.PathAndMediaFileName();
    TParsePtrC parsedName( pathAndMediaFileName.Des() );

#ifdef RD_VIDEO_AS_RINGING_TONE	    
	TBool isFileVideo( EFalse );
	if ( aEntry.MediaType() == ECLFMediaTypeVideo )
		{
		isFileVideo = ETrue;
		}
  
    if( isFileVideo )
    	{
    	formattedName = HBufC::NewL( parsedName.NameAndExt().Length() + KFLDVideoAndTab().Length() * 2 );
    	}
    else
    	{
    	formattedName = HBufC::NewL( parsedName.NameAndExt().Length() + KFLDSoundAndTab().Length() * 2 );
    	}
#else
   	formattedName = HBufC::NewL( parsedName.NameAndExt().Length() + KFLDZeroAndTab().Length() * 2 );
#endif

	aEntry.SetFormattedPresentation( formattedName );
		
	// Combine all the data to the formatted data descriptor:
	TPtr des = formattedName->Des();

 	// RNG files are shown without the file extension
    TPtrC ext( parsedName.Ext() );
    if ( ext.CompareF( KFLDIgnoredExt ) == 0 )
        {
        des.Copy( parsedName.Name() );
        }
    else
        {
        des.Copy( parsedName.NameAndExt() );
        }
        
	// Make sure that the file name does not contain tab characters
	AknTextUtils::ReplaceCharacters( des, KAknReplaceListControlChars, TChar(' ') );        

#ifdef RD_VIDEO_AS_RINGING_TONE	    
	if( isFileVideo )
		{
		des.Insert( 0, KFLDVideoAndTab );
		}
	else
		{
		des.Insert( 0, KFLDSoundAndTab );
		}
    
#else
    des.Insert( 0, KFLDZeroAndTab );
#endif    
	des.Append( KFLDTab );
         
	/*
	TChar mmcDriveLetter( PathInfo::MemoryCardRootPath()[0] );
	mmcDriveLetter.UpperCase();

    // Check if the entry is on MMC
    TChar entryDriveLetter( parsedName.Drive()[ 0 ] );
    entryDriveLetter.UpperCase();

    if ( entryDriveLetter == mmcDriveLetter )
        {
        des.Append( '2' ); // MMC icon index
        }
    */
    
    if ( iDriveUtil->IsMemoryCard( aEntry.PathAndMediaFileName() ) )
        {
        des.Append( KFLDMemoryCard );
        }
    else if ( iDriveUtil->IsMassStorage( aEntry.PathAndMediaFileName() ) )
        {
        des.Append( KFLDMassStorage );
        }
    }

// -----------------------------------------------------------------------------
// CFLDSingleGraphicEntryFormatter::FormatTextLC()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
HBufC* CFLDSingleGraphicEntryFormatter::FormatTextLC( const TDesC& aText )
    {
    HBufC* text = NULL;
    if( aText.Find( KFLDTab ) == KErrNotFound )
        {
        text = HBufC::NewLC( aText.Length() + KFLDZeroAndTab().Length() );
        TPtr des( text->Des() );
        des.Copy( KFLDZeroAndTab );
        des.Append( aText );
        }
    else
        {
        text = aText.AllocLC();
        }
    return text;
    }




/******************************************************************************
 * class CDriveUtil
 ******************************************************************************/


// -----------------------------------------------------------------------------
// CDriveUtil::NewL
// 
// -----------------------------------------------------------------------------
//
CDriveUtil* CDriveUtil::NewL()
    {
    CDriveUtil* self = new (ELeave) CDriveUtil();
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop(self);

    return self;
    }


// -----------------------------------------------------------------------------
// Destructor
// 
// -----------------------------------------------------------------------------
//
CDriveUtil::~CDriveUtil()
    {
	iFsSession.Close();
    }


// -----------------------------------------------------------------------------
// CDriveUtil::CDriveUtil
// 
// -----------------------------------------------------------------------------
//
CDriveUtil::CDriveUtil()
    {
    }


// -----------------------------------------------------------------------------
// CDriveUtil::ConstructL
// 
// -----------------------------------------------------------------------------
//
void CDriveUtil::ConstructL()
    {
    User::LeaveIfError( iFsSession.Connect() );
    }


// -----------------------------------------------------------------------------
// CDriveUtil::IsMassStorage
// 
// -----------------------------------------------------------------------------
//
TBool CDriveUtil::IsMassStorage(const TDesC& aFullPath)
    {
    const TUint KMassStorageBits = DriveInfo::EDriveInternal |
                                   DriveInfo::EDriveExternallyMountable;

    TDriveUnit drive(aFullPath);
    TUint driveStatus(0);
    
    TInt err = DriveInfo::GetDriveStatus( iFsSession, drive, driveStatus );
    if ( err != KErrNone )
        {
        return EFalse;
        }
        
    if ( (driveStatus & KMassStorageBits) == KMassStorageBits )
        {
        return ETrue;
        }
        
    return EFalse;
    }


// -----------------------------------------------------------------------------
// CDriveUtil::IsMemoryCard
// 
// -----------------------------------------------------------------------------
//
TBool CDriveUtil::IsMemoryCard(const TDesC& aFullPath)
    {
    const TUint KMemoryCardBits = DriveInfo::EDriveRemovable |
                                  DriveInfo::EDriveExternallyMountable;

    TDriveUnit drive(aFullPath);
    TUint driveStatus(0);
    
    TInt err = DriveInfo::GetDriveStatus( iFsSession, drive, driveStatus );
    if ( err != KErrNone )
        {
        return EFalse;
        }
        
    if ( (driveStatus & KMemoryCardBits) == KMemoryCardBits )
        {
        return ETrue;
        }
        
    return EFalse;
    }


//  End of File