iaupdate/IAD/ui/src/iaupdatefirsttimedatefile.cpp
author Simon Howkins <simonh@symbian.org>
Mon, 22 Nov 2010 12:04:39 +0000
branchRCL_3
changeset 84 e6c5e34cd9b9
parent 0 ba25891c3a9e
permissions -rw-r--r--
Adjusted to avoid exports, etc, from a top-level bld.inf

/*
* Copyright (c) 2007-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:   This module contains the implementation of CIAUpdateFirstTimeDateFile 
*                class  member functions.
*
*/




#include <bautils.h>
#include <s32file.h>
#include <sysutil.h>

#include "iaupdatefirsttimedatefile.h"


const TInt KDrive( EDriveC );
const TInt KSizeOfFile( 8 );
    

// -----------------------------------------------------------------------------
// CIAUpdateFirstTimeDateFile::NewL
//
// -----------------------------------------------------------------------------
//
CIAUpdateFirstTimeDateFile* CIAUpdateFirstTimeDateFile::NewL( 
    const TDesC& aFile )
    {
    CIAUpdateFirstTimeDateFile* self =
        CIAUpdateFirstTimeDateFile::NewLC( aFile );
    CleanupStack::Pop( self );
    return self;
    }


// -----------------------------------------------------------------------------
// CIAUpdateFirstTimeDateFile::NewLC
//
// -----------------------------------------------------------------------------
//
CIAUpdateFirstTimeDateFile* CIAUpdateFirstTimeDateFile::NewLC( 
    const TDesC& aFile )
    {
    CIAUpdateFirstTimeDateFile* self =
        new( ELeave) CIAUpdateFirstTimeDateFile();
    CleanupStack::PushL( self );
    self->ConstructL( aFile );
    return self;    
    }


// -----------------------------------------------------------------------------
// CIAUpdateFirstTimeDateFile::CIAUpdateFirstTimeDateFile
//
// -----------------------------------------------------------------------------
//
CIAUpdateFirstTimeDateFile::CIAUpdateFirstTimeDateFile()
: CBase(),
  iFirstTime( 0 )
    {
    }


// -----------------------------------------------------------------------------
// CIAUpdateFirstTimeDateFile::ConstructL
//
// -----------------------------------------------------------------------------
//
void CIAUpdateFirstTimeDateFile::ConstructL( const TDesC& aFile )
    {
    User::LeaveIfError( iFsSession.Connect() );
    User::LeaveIfError( 
        iFsSession.SetSessionToPrivate( KDrive ) );
    
    User::LeaveIfError( iFsSession.SessionPath( iPath ) );
    BaflUtils::EnsurePathExistsL( iFsSession, iPath );
    iPath.Append( aFile );
    
    // Read data from the file if the file exists.
    // Otherwise, let default values remain.
    ReadDataL(); 
    }


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


// -----------------------------------------------------------------------------
// CIAUpdateFirstTimeDateFile::ReadDataL
//
// -----------------------------------------------------------------------------
//
TBool CIAUpdateFirstTimeDateFile::ReadDataL()
	{
	RFile file;
    TInt err = file.Open( iFsSession, iPath, EFileRead|EFileShareAny );
    if ( err == KErrNotFound )
    	{
    	// File did not exist. 
    	// So, nothing to do here anymore.
    	return EFalse;
    	}
    User::LeaveIfError( err );
    	
    CleanupClosePushL( file );
    
    RFileReadStream stream( file, 0 );
    CleanupClosePushL( stream );

    InternalizeL( stream );

    CleanupStack::PopAndDestroy( &stream );
    CleanupStack::PopAndDestroy( &file );

    return ETrue;
	}


// -----------------------------------------------------------------------------
// CIAUpdateFirstTimeDateFile::WriteDataL
//
// -----------------------------------------------------------------------------
//
void CIAUpdateFirstTimeDateFile::WriteDataL()
	{
	TDriveUnit driveUnit( KDrive );
	if ( SysUtil::DiskSpaceBelowCriticalLevelL( 
	        &iFsSession, KSizeOfFile, driveUnit ) )
	    {
		User::Leave( KErrDiskFull );
	    }
	
	RFile file;
    User::LeaveIfError( 
        file.Replace( iFsSession, iPath, EFileWrite|EFileShareAny ) );
    CleanupClosePushL( file );
    
    RFileWriteStream stream( file, 0 );
    CleanupClosePushL( stream );

    ExternalizeL( stream );
    
    stream.CommitL();
    
    CleanupStack::PopAndDestroy( &stream );
    CleanupStack::PopAndDestroy( &file );
	}


// -----------------------------------------------------------------------------
// CIAUpdateFirstTimeDateFile::FirstTime
//
// -----------------------------------------------------------------------------
//
const TTime& CIAUpdateFirstTimeDateFile::FirstTime() const
    {
    return iFirstTime;
    }
    

// -----------------------------------------------------------------------------
// CIAUpdateFirstTimeDateFile::SetCurrentFirstTime
//
// -----------------------------------------------------------------------------
//
void CIAUpdateFirstTimeDateFile::SetCurrentFirstTime()
    {
    TTime universalTime;
    universalTime.UniversalTime();
    iFirstTime = universalTime;
    }


// -----------------------------------------------------------------------------
// CIAUpdateFirstTimeDateFile::InternalizeL
//
// -----------------------------------------------------------------------------
//
void CIAUpdateFirstTimeDateFile::InternalizeL( RReadStream& aStream )
	{
	// If you make changes here, 
	// remember to update ExternalizeL accordingly!!!

	TInt64 firstTime( 0 );
	aStream >> firstTime;
    iFirstTime = firstTime;
 	}


// -----------------------------------------------------------------------------
// CIAUpdateFirstTimeDateFile::ExternalizeL
//
// -----------------------------------------------------------------------------
//
void CIAUpdateFirstTimeDateFile::ExternalizeL( RWriteStream& aStream )
	{
	// If you make changes here, 
	// remember to update InternalizeL accordingly!!!

	TInt64 firstTime( FirstTime().Int64() );
	aStream << firstTime;
	}