10#include "disksensor.h"
13#include <tqtextstream.h>
16#include <tdeprocess.h>
19DiskSensor::DiskSensor(
int msec ) : Sensor( msec )
21 connect(&ksp, TQ_SIGNAL(receivedStdout(TDEProcess *,
char *,
int )),
22 this,TQ_SLOT(receivedStdout(TDEProcess *,
char *,
int )));
23 connect(&ksp, TQ_SIGNAL(processExited(TDEProcess *)),
24 this,TQ_SLOT(processExited( TDEProcess * )));
29 ksp.start( TDEProcIO::Block,TDEProcIO::Stdout);
32DiskSensor::~DiskSensor()
35long DiskSensor::getFreeSpace(TQString mntPt)
const
37 TQRegExp rx(
"^\\S*\\s*\\d+\\s+\\d+\\s+(\\d+)");
38 rx.search(mntMap[mntPt]);
39 return rx.cap(1).toLong();
42long DiskSensor::getUsedSpace(TQString mntPt)
const
44 TQRegExp rx(
"^\\S*\\s*\\d+\\s+(\\d+)\\s+\\d+");
45 rx.search(mntMap[mntPt]);
46 return rx.cap(1).toLong();
49long DiskSensor::getTotalSpace(TQString mntPt)
const
52 TQRegExp rx(
"^\\S*\\s*(\\d+)\\s+\\d+\\s+\\d+");
53 rx.search(mntMap[mntPt]);
55 return rx.cap(1).toLong();
59int DiskSensor::getPercentUsed(TQString mntPt)
const
61 TQRegExp rx(
"\\s+(\\d+)%\\s+");
62 rx.search(mntMap[mntPt]);
63 return rx.cap(1).toInt();
66int DiskSensor::getPercentFree(TQString mntPt)
const
68 return ( 100 - getPercentUsed( mntPt ) );
71void DiskSensor::receivedStdout(TDEProcess *,
char *buffer,
int len )
75 sensorResult += TQString( TQCString(buffer) );
79void DiskSensor::processExited(TDEProcess *)
81 TQStringList stringList = TQStringList::split(
'\n',sensorResult);
83 TQStringList::Iterator it = stringList.begin();
85 TQRegExp rx(
".*\\s+(/\\S*)$");
87 while( it != stringList.end())
90 if ( !rx.cap(0).isEmpty())
92 mntMap[rx.cap(1)] = *it;
103 TQObjectListIt lit( *objList );
107 meter = sp->getMeter();
108 format = sp->getParam(
"FORMAT");
109 mntPt = sp->getParam(
"MOUNTPOINT");
110 if (mntPt.length() == 0)
113 if (format.length() == 0 )
117 format.replace( TQRegExp(
"%fp",
false),TQString::number(getPercentFree(mntPt)));
118 format.replace( TQRegExp(
"%fg",
false),
119 TQString::number(getFreeSpace(mntPt)/(1024*1024)));
120 format.replace( TQRegExp(
"%fkb",
false),
121 TQString::number(getFreeSpace(mntPt)*8) );
122 format.replace( TQRegExp(
"%fk",
false),
123 TQString::number(getFreeSpace(mntPt)) );
124 format.replace( TQRegExp(
"%f",
false),TQString::number(getFreeSpace(mntPt)/1024));
126 format.replace( TQRegExp(
"%up",
false),TQString::number(getPercentUsed(mntPt)));
127 format.replace( TQRegExp(
"%ug",
false),
128 TQString::number(getUsedSpace(mntPt)/(1024*1024)));
129 format.replace( TQRegExp(
"%ukb",
false),
130 TQString::number(getUsedSpace(mntPt)*8) );
131 format.replace( TQRegExp(
"%uk",
false),
132 TQString::number(getUsedSpace(mntPt)) );
133 format.replace( TQRegExp(
"%u",
false),TQString::number(getUsedSpace(mntPt)/1024));
135 format.replace( TQRegExp(
"%tg",
false),
136 TQString::number(getTotalSpace(mntPt)/(1024*1024)));
137 format.replace( TQRegExp(
"%tkb",
false),
138 TQString::number(getTotalSpace(mntPt)*8));
139 format.replace( TQRegExp(
"%tk",
false),
140 TQString::number(getTotalSpace(mntPt)));
141 format.replace( TQRegExp(
"%t",
false),TQString::number(getTotalSpace(mntPt)/1024));
142 meter->setValue(format);
152void DiskSensor::update()
154 ksp.clearArguments();
156 ksp.start( TDEProcIO::NotifyOnExit,TDEProcIO::Stdout);
162 meter = sp->getMeter();
163 const TQString mntPt = sp->getParam(
"MOUNTPOINT" );
166 f = sp->getParam(
"FORMAT");
167 if( f ==
"%fp" || f ==
"%up" )
168 meter->setMax( 100 );
170 meter->setMax( getTotalSpace( mntPt ) / 1024 );
175#include "disksensor.moc"