omadrm/drmengine/utils/src/dbwatcher.cpp
author hgs
Thu, 14 Oct 2010 13:45:23 +0300
changeset 84 b09186059647
parent 23 493788a4a8a4
permissions -rw-r--r--
201039_02

/*
* Copyright (c) 2005-2010 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 RDB watcher
*
*/


#include <e32def.h>
#include <e32base.h>
#include <f32file.h>
#include <sysutil.h>

#ifdef RD_MULTIPLE_DRIVE
#include <driveinfo.h>
#endif

#include "dbwatcher.h"
#include "dirwatcher.h"
#include "drmlog.h"

#ifdef RD_MULTIPLE_DRIVE
_LIT( KRdbBaseDir, "%c:\\private\\101f51f2\\rdb\\");
#else
_LIT( KRdbBaseDir, "c:\\private\\101f51f2\\rdb\\");
#endif

_LIT( KDomainRoDir, "DomainROs" );
static const TChar KDirs[CDbWatcher::KNumDirs] =
    { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

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

void CDbWatcher::ConstructL( MWatcherObserver& aObserver )
    {
    TInt i;
    TFileName file;

    DRMLOG( _L( "CDbWatcher::ConstructL <-" ) );

    User::LeaveIfError( iFs.Connect() );
    for ( i = 0; i < KNumDirs; i++ )
        {

#ifndef RD_MULTIPLE_DRIVE

        // Ignore errors
        file.Copy( KRdbBaseDir );

#else //RD_MULTIPLE_DRIVE

        TInt driveNumber( -1 );
        TChar driveLetter;
        DriveInfo::GetDefaultDrive( DriveInfo::EDefaultSystem, driveNumber );
        iFs.DriveToChar( driveNumber, driveLetter );

        TFileName dbBaseDir;
        dbBaseDir.Format( KRdbBaseDir, (TUint)driveLetter );

        // Ignore errors
        file.Copy( dbBaseDir );

#endif

        if ( i < KNumDirs - 1 )
            {
            file.Append( KDirs[i] );
            }
        else
            {
            file.Append( KDomainRoDir );
            }
        iDirWatcher[i] = CDirWatcher::NewL( aObserver, iFs, file );
        }

    DRMLOG( _L( "CDbWatcher::ConstructL ->" ) );
    }

CDbWatcher* CDbWatcher::NewL( MWatcherObserver& aObserver )
    {
    CDbWatcher* self = new( ELeave) CDbWatcher;
    CleanupStack::PushL( self );
    self->ConstructL( aObserver );
    CleanupStack::Pop( self );
    return self;
    }

CDbWatcher::CDbWatcher()
    {
    DRMLOG( _L( "CDbWatcher::CDbWatcher ->" ) );
    DRMLOG( _L( "CDbWatcher::CDbWatcher <-" ) );
    }

CDbWatcher::~CDbWatcher()
    {
    TInt i;

    DRMLOG( _L( "CDbWatcher::~CDbWatcher ->" ) );

    for ( i = 0; i < KNumDirs; i++ )
        {
        delete iDirWatcher[i];
        }
    iFs.Close();

    DRMLOG( _L( "CDbWatcher::~CDbWatcher <-" ) );
    }

void CDbWatcher::StartWatching()
    {
    TInt i;

    DRMLOG( _L( "CDbWatcher::StartWatching ->" ) );

    for ( i = 0; i < KNumDirs; i++ )
        {
        iDirWatcher[i]->StartWatching();
        }

    DRMLOG( _L( "CDbWatcher::StartWatching <-" ) );
    }