menucontentsrv/srvsrc/menusrvmmchistory.cpp
author kashif.sayed
Fri, 26 Mar 2010 03:06:02 +0530
branchv5backport
changeset 30 f9f9f96b1873
parent 0 79c6a41cd166
permissions -rw-r--r--
user: kashif.sayed added contentcontrolsrv/.cproject added contentcontrolsrv/.project added contentcontrolsrv/group/ABLD.BAT added contentpublishingsrv/.cproject added contentpublishingsrv/.project added contentpublishingsrv/contentharvester/.cproject added contentpublishingsrv/contentharvester/.project added contentpublishingsrv/contentharvester/contentharvesterclient/group/ABLD.BAT added contentpublishingsrv/contentharvester/contentharvesterserver/group/ABLD.BAT added contentpublishingsrv/contentharvester/contentharvesterswiplugin/group/ABLD.BAT added contentpublishingsrv/contentharvester/factorysettingsplugin/group/ABLD.BAT added contentpublishingsrv/contentharvester/group/ABLD.BAT added contentpublishingsrv/group/ABLD.BAT added dependencies/S3libs/cpswrapper.lib added dependencies/S3libs/hscontentcontrol.lib added dependencies/S3libs/hspswrapper.lib added group/ABLD.BAT added homescreenpluginsrv/group/ABLD.BAT added homescreensrv_plat/group/ABLD.BAT added idlefw/group/ABLD.BAT added inc/ccontentmap.h added inc/cpdebug.h added inc/cpglobals.h added inc/cpliwmap.h added inc/cpluginvalidator.h added inc/cpserverdef.h added inc/cpublisherregistrymap.h added inc/mcssathandler.h added menucontentsrv/group/ABLD.BAT added xcfw/group/ABLD.BAT changed dependencies/S3libs/bld.inf

/*
* Copyright (c) 2009 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:
*
*/

// INCLUDE FILES

#include <f32file.h>
#include <s32file.h>
#include <sysutil.h> 
#include "menusrvmmchistory.h"

// CONSTANTS

LOCAL_D const TInt KMenuMmcHistoryLength = 2;

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

// ---------------------------------------------------------
// CMenuSrvMmcHistory::LoadL
// ---------------------------------------------------------
//
void CMenuSrvMmcHistory::LoadL( RFs& aFs, const TDesC& aFname )
    {
    iMmcList.Reset();
    TUint att;
    if ( KErrNotFound != aFs.Att( aFname, att ) )
        {
        RFileReadStream stream;
        CleanupClosePushL( stream );
        User::LeaveIfError( stream.Open
            ( aFs, aFname, EFileStream | EFileShareReadersOnly) );
        TInt len = Min( KMenuMmcHistoryLength, stream.ReadInt32L() );
        while( len-- )
            {
            iMmcList.AppendL( stream.ReadUint32L() );
            }
        CleanupStack::PopAndDestroy( &stream );
        }
    }

// ---------------------------------------------------------
// CMenuSrvMmcHistory::SaveL
// Method do not work if there is no free space on C drive. 
// ---------------------------------------------------------
//
void CMenuSrvMmcHistory::SaveL( RFs& aFs, const TDesC& aFname )
    {
	if ( SysUtil::DiskSpaceBelowCriticalLevelL( &aFs, 0, EDriveC) )
		{
		return;
		}
    
    RFileWriteStream stream;
    CleanupClosePushL( stream );
    User::LeaveIfError( stream.Replace
        ( aFs, aFname, EFileStream | EFileShareExclusive ) );
    stream.WriteInt32L( iMmcList.Count() );
    for ( TInt i = 0; i < iMmcList.Count(); i++ )
        {
        stream.WriteUint32L( iMmcList[i] );
        }
    CleanupStack::PopAndDestroy( &stream );
    }

// ---------------------------------------------------------
// CMenuSrvMmcHistory::InsertL
// ---------------------------------------------------------
//
void CMenuSrvMmcHistory::InsertL( TUint aMmc )
    {
    TInt i = iMmcList.Find( aMmc );
    switch ( i )
        {
        case 0:
            {
            // aMmc is already first, do nothing.
            break;
            }

        case KErrNotFound:
            {
            // aMmc is not in the list. Insert as first.
            if ( iMmcList.Count() == KMenuMmcHistoryLength )
                {
                // List already full - remove last item to make space.
                iMmcList.Remove( KMenuMmcHistoryLength - 1 );
                }
            iMmcList.InsertL( aMmc, 0 );
            break;
            }

        default:
            {
            // aMmc is in the list, but not first. Move to first place.
            iMmcList.Remove( i );
            iMmcList.InsertL( aMmc, 0 );
            break;
            }
        }
    }

// ---------------------------------------------------------
// CMenuSrvMmcHistory::Find
// ---------------------------------------------------------
//
TInt CMenuSrvMmcHistory::Find( TUint aMmc )
    {
    return iMmcList.Find( aMmc );
    }

//  End of File