qtinternetradio/irqdiskspacewatcher/src/irqdiskspacewatcher.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 19 Apr 2010 14:01:53 +0300
changeset 0 09774dfdd46b
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* 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:  Contains logic for watching certain disk's space
*
*/

#include <e32base.h>
#ifdef USER_DEFINED_DISKSPACE
#include <QFile>
#include <QTextStream>
#include <QStringList>
#endif
#include "irqdiskspacewatcher.h"
#include "irqdiskspaceobserver.h"

const TInt KIR_DEFAULT_CRITICAL_LEVEL = 3*1024*1024;    // 3MB

#ifdef USER_DEFINED_DISKSPACE
void getDiskSpaceCriticalLevel(qint64 & aLevel);
#endif

// ---------------------------------------------------------------------------
// Constructor
// ---------------------------------------------------------------------------
//
EXPORT_C IRQDiskSpaceWatcher::IRQDiskSpaceWatcher()
       : iDiskSpaceObserver(NULL),
         iDefaultLevel(KIR_DEFAULT_CRITICAL_LEVEL) 
{
#ifdef USER_DEFINED_DISKSPACE
    getDiskSpaceCriticalLevel(iDefaultLevel);
#endif    
}

// ---------------------------------------------------------------------------
// Destructor
// ---------------------------------------------------------------------------
//
EXPORT_C IRQDiskSpaceWatcher::~IRQDiskSpaceWatcher()
{
    delete iDiskSpaceObserver;
    iDiskSpaceObserver = NULL;
}


// ---------------------------------------------------------------------------
// IRQDiskSpaceWatcher::criticalLevel()
// return critical level which is been observed.
// ---------------------------------------------------------------------------
//
EXPORT_C qint64 IRQDiskSpaceWatcher::criticalLevel() const
{
    if(NULL != iDiskSpaceObserver)
    {
        return (qint64)(iDiskSpaceObserver->criticalLevel());
    }
    else
    {
        return -1;
    }
}


// ---------------------------------------------------------------------------
// IRQDiskSpaceWatcher::startMonitorDrive()
// start monitoring disk space change
// ---------------------------------------------------------------------------
//
EXPORT_C bool IRQDiskSpaceWatcher::startMonitorDrive(const qint64 aCriticalLevel)
{
    if(aCriticalLevel < 0)
    {
        return false;
    }
    
    if(NULL == iDiskSpaceObserver)
    {
        TRAPD(err, iDiskSpaceObserver = IRQDiskSpaceObserver::NewL(this))
        if(KErrNone != err)
        {
            return false;
        }
    }
    
    stopMonitorDrive();
    iDiskSpaceObserver->start((TInt64)aCriticalLevel);
    return true;
}

EXPORT_C bool IRQDiskSpaceWatcher::startMonitorDrive()
{
    return startMonitorDrive(iDefaultLevel);
}
// ---------------------------------------------------------------------------
// IRQDiskSpaceWatcher::stopMonitorDrive()
// stop monitoring disk space change
// ---------------------------------------------------------------------------
//
EXPORT_C void IRQDiskSpaceWatcher::stopMonitorDrive()
{
    if(NULL != iDiskSpaceObserver)
    {
        iDiskSpaceObserver->Cancel();
    }
}

// ---------------------------------------------------------------------------
// IRQDiskSpaceWatcher::isBelowCriticalLevel()
// ---------------------------------------------------------------------------
//
EXPORT_C bool IRQDiskSpaceWatcher::isBelowCriticalLevel( const qint64 aCriticalLevel )
{
    if(NULL == iDiskSpaceObserver)
    {
        TRAPD(err, iDiskSpaceObserver = IRQDiskSpaceObserver::NewL(this))
        if(KErrNone != err)
        {
            return false;
        }
    }
    
    return iDiskSpaceObserver->isBelowCriticalLevel((TInt64)aCriticalLevel );
}                               

EXPORT_C bool IRQDiskSpaceWatcher::isBelowCriticalLevel()
{
    return isBelowCriticalLevel(iDefaultLevel);
}

// ---------------------------------------------------------------------------
// From MIRQDiskSpaceObserver.
// ---------------------------------------------------------------------------
//
void IRQDiskSpaceWatcher::notifyLowDiskSpace(const qint64 aCriticalLevel)
{
    emit diskSpaceLow(aCriticalLevel);
}

#ifdef USER_DEFINED_DISKSPACE
void getDiskSpaceCriticalLevel(qint64 & aLevel)
{
    QFile file("C:\\data\\QTIRConfigure.txt");
    if(file.open(QIODevice::ReadOnly)) 
    {
        QTextStream stream( &file );
        QString line;
        QStringList parameter;
        while (!stream.atEnd())
        {
            line = stream.readLine();
            parameter = line.split("=");
            if (parameter.count() == 2)
            {
                if (parameter.first() == "diskSpaceCriticalLevel")
                {
                    QString level = parameter.last();
                    aLevel = level.toLongLong();
                    break;
                }
            }
        }
    }
    file.close();
}
#endif