24 #include <sys/types.h>
26 #include <QtCore/QFileInfo>
27 #include <QtCore/QDir>
42 void DiskEntry::init(
const char *name)
44 setObjectName( QLatin1String( name ) );
61 sysProc =
new KProcess();
63 sysProc->setOutputChannelMode( KProcess::MergedChannels );
64 connect( sysProc, SIGNAL(readyReadStandardError()),
65 this, SLOT (receivedSysStdErrOut()) );
66 connect( sysProc, SIGNAL(readyReadStandardOutput()),
67 this, SLOT (receivedSysStdErrOut()) );
68 readingSysStdErrOut=
false;
89 if ( sysProc->state() == QProcess::Running )
92 sysProc->waitForFinished(-1);
108 if ( cmdS.isEmpty() )
112 cmdS = QLatin1String(
"mount %d" );
118 cmdS = QLatin1String(
"mount -t%t -o%o %d %m" );
122 cmdS.replace( QLatin1String(
"%d" ),
deviceName() );
123 cmdS.replace( QLatin1String(
"%m" ),
mountPoint() );
124 cmdS.replace( QLatin1String(
"%t" ),
fsType() );
127 kDebug() <<
"mount-cmd: [" << cmdS <<
"]" ;
128 int e = sysCall( cmdS );
131 kDebug() <<
"mount-cmd: e=" << e ;
137 kDebug() <<
"umounting" ;
138 QString cmdS = umntcmd;
139 if ( cmdS.isEmpty() )
140 cmdS = QLatin1String(
"umount %d" );
142 cmdS.replace( QLatin1String(
"%d" ),
deviceName() );
143 cmdS.replace( QLatin1String(
"%m" ),
mountPoint() );
145 kDebug() <<
"umount-cmd: [" << cmdS <<
"]" ;
146 int e = sysCall( cmdS );
149 kDebug() <<
"umount-cmd: e=" << e ;
156 if ( mntcmd.isEmpty() && umntcmd.isEmpty()
159 QString oldOpt = options;
160 if (options.isEmpty())
161 options = QLatin1String(
"remount" );
163 options += QLatin1String(
",remount" );
191 if ( icoName.right(6) == QLatin1String(
"_mount" ) )
192 icoName.truncate(icoName.length()-6);
193 else if ( icoName.right(8) == QLatin1String(
"_unmount" ) )
194 icoName.truncate(icoName.length()-8);
201 iconSetByUser =
false;
230 if (
mountPoint().contains(QLatin1String(
"cdrom" ),Qt::CaseInsensitive))
231 iconName+=QLatin1String(
"media-optical" );
232 else if (
deviceName().contains(QLatin1String(
"cdrom" ),Qt::CaseInsensitive))
233 iconName+=QLatin1String(
"media-optical" );
234 else if (
mountPoint().contains(QLatin1String(
"writer" ),Qt::CaseInsensitive))
235 iconName+=QLatin1String(
"media-optical-recordable" );
236 else if (
deviceName().contains(QLatin1String(
"writer" ),Qt::CaseInsensitive))
237 iconName+=QLatin1String(
"media-optical-recordable" );
238 else if (
mountPoint().contains(QLatin1String(
"mo" ),Qt::CaseInsensitive))
239 iconName+=QLatin1String(
"mo" );
240 else if (
deviceName().contains(QLatin1String(
"mo" ),Qt::CaseInsensitive))
241 iconName+=QLatin1String(
"mo" );
242 else if (
deviceName().contains(QLatin1String(
"fd" ),Qt::CaseInsensitive))
244 if (
deviceName().contains(QLatin1String(
"360" ),Qt::CaseInsensitive))
245 iconName+=QLatin1String(
"5floppy" );
246 if (
deviceName().contains(QLatin1String(
"1200" ),Qt::CaseInsensitive))
247 iconName+=QLatin1String(
"5floppy" );
249 iconName+=QLatin1String(
"media-floppy" );
251 else if (
mountPoint().contains(QLatin1String(
"floppy" ),Qt::CaseInsensitive))
252 iconName+=QLatin1String(
"media-floppy" );
253 else if (
mountPoint().contains(QLatin1String(
"zip" ),Qt::CaseInsensitive))
254 iconName+=QLatin1String(
"zip" );
255 else if (
fsType().contains(QLatin1String(
"nfs" ),Qt::CaseInsensitive))
256 iconName+=QLatin1String(
"nfs" );
258 iconName+=QLatin1String(
"drive-harddisk" );
273 int DiskEntry::sysCall(QString & completeCommand)
275 if (readingSysStdErrOut || sysProc->state() == QProcess::Running )
278 sysStringErrOut=i18n(
"Called: %1\n\n", completeCommand);
279 sysProc->clearProgram();
282 QTextStream tS(&completeCommand);
295 sysProc->setProgram(command, args);
298 if ( !sysProc->waitForStarted(-1) )
299 kFatal() << i18n(
"could not execute %1", command) ;
301 sysProc->waitForFinished(-1);
303 if (sysProc->exitCode()!=0)
306 return (sysProc->exitCode());
313 void DiskEntry::receivedSysStdErrOut()
315 QString stdOut = QString::fromLocal8Bit( sysProc->readAllStandardOutput() );
316 QString stdErr = QString::fromLocal8Bit( sysProc->readAllStandardError() );
318 sysStringErrOut.append( stdOut );
319 sysStringErrOut.append( stdErr );
326 return 100 - ( ((float)avail / (
float)size) * 100 );
342 QFileInfo inf( device );
343 QDir dir( inf.absolutePath() );
344 QString relPath = inf.fileName();
345 if ( inf.isSymLink() )
347 QString link = inf.readLink();
348 if ( link.startsWith( QLatin1Char(
'/' ) ) )
352 return dir.canonicalPath() + QLatin1Char(
'/' ) + relPath;
363 QDir dir( mountedOn );
364 return dir.canonicalPath();
381 isMounted=nowMounted;
394 if ( size < (used+avail) )
396 kWarning() <<
"device " << device <<
": kBAvail(" << avail <<
")+*kBUsed(" << used <<
") exceeds kBSize(" << size <<
")" ;
405 if ( size < (used+avail) )
407 kWarning() <<
"device " << device <<
": *kBAvail(" << avail <<
")+kBUsed(" << used <<
") exceeds kBSize(" << size <<
")" ;
QString mountOptions() const
void setIconName(const QString &iconName)
QString deviceRealName() const
void setKBSize(qulonglong kb_size)
void sysCallError(DiskEntry *disk, int err_no)
void setKBUsed(qulonglong kb_used)
float percentFull() const
void setUmountCommand(const QString &umnt)
void mountOptionsChanged()
DiskEntry(QObject *parent=0, const char *name=0)
void setKBAvail(qulonglong kb_avail)
void setMountCommand(const QString &mnt)
QString mountPoint() const
void setMounted(bool nowMounted)
void setMountOptions(const QString &mountOptions)
QString realMountPoint() const
QString deviceName() const
void setMountPoint(const QString &mountPoint)
void setDeviceName(const QString &deviceName)
void setFsType(const QString &fsType)