/* ksim - a system monitor for kde * * Copyright (C) 2001 Robbie Ward * * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "ksimfsystem.h" #include "fsystemconfig.h" #include "filesystemwidget.h" #include "filesystemstats.h" #include KSIM_INIT_PLUGIN(PluginModule) PluginModule::PluginModule(const char *name) : KSim::PluginObject(name) { setConfigFileName(instanceName()); } PluginModule::~PluginModule() { } KSim::PluginView *PluginModule::createView(const char *className) { return new Fsystem(this, className); } KSim::PluginPage *PluginModule::createConfigPage(const char *className) { return new FsystemConfig(this, className); } void PluginModule::showAbout() { TQString version = kapp->aboutData()->version(); TDEAboutData aboutData(instanceName(), I18N_NOOP("KSim FileSystem Plugin"), version.latin1(), I18N_NOOP("A filesystem plugin for KSim"), TDEAboutData::License_GPL, "(C) 2001 Robbie Ward"); aboutData.addAuthor("Robbie Ward", I18N_NOOP("Author"), "linuxphreak@gmx.co.uk"); aboutData.addAuthor("Jason Katz-Brown", I18N_NOOP("Some Fixes"), "jason@katzbrown.com"); aboutData.addAuthor("Heitham Omar", I18N_NOOP("FreeBSD ports"), "super_ice@ntlworld.com"); TDEAboutApplication(&aboutData).exec(); } Fsystem::Fsystem(KSim::PluginObject *parent, const char *name) : DCOPObject("fsystem"), KSim::PluginView(parent, name) { config()->setGroup("Fsystem"); TQVBoxLayout *vbLayout = new TQVBoxLayout(this); vbLayout->setAutoAdd(true); TQSpacerItem *item = new TQSpacerItem(0, 0, TQSizePolicy::Expanding, TQSizePolicy::Expanding); vbLayout->addItem(item); m_mountEntries = makeList(config()->readListEntry("mountEntries")); m_showPercentage = config()->readBoolEntry("ShowPercentage", true); m_widget = new FilesystemWidget(this, "FilesystemWidget"); createFreeInfo(); m_updateTimer = new TQTimer(this); connect(m_updateTimer, TQT_SIGNAL(timeout()), TQT_SLOT(updateFS())); m_updateTimer->start(config()->readNumEntry("updateValue", 60) * 1000); } Fsystem::~Fsystem() { } void Fsystem::reparseConfig() { config()->setGroup("Fsystem"); m_showPercentage = config()->readBoolEntry("ShowPercentage", true); MountEntryList mountEntries = makeList(config()->readListEntry("mountEntries")); if (m_mountEntries != mountEntries) { m_widget->clear(); m_mountEntries = mountEntries; createFreeInfo(); } updateFS(); } int Fsystem::totalFreeSpace() const { int totalSize, totalFree; int totalFreeSpace = 0; MountEntryList::ConstIterator it; for (it = m_mountEntries.begin(); it != m_mountEntries.end(); ++it) { if ( FilesystemStats::readStats( ( *it ).first, totalSize, totalFree ) ) totalFreeSpace += totalFree; } return totalFreeSpace; } void Fsystem::createFreeInfo() { int total, free; int i = 0; MountEntryList::ConstIterator it; for (it = m_mountEntries.begin(); it != m_mountEntries.end(); ++it) { // returns the total space and free space from *it // (the current mounted partition) if ( !FilesystemStats::readStats( ( *it ).first, total, free ) ) continue; int percent = 0; if( total != 0) percent = ((total - free) * 100) / total; m_widget->append(total, (*it).first); m_widget->setValue(i, total - free); if (m_showPercentage) m_widget->setText(i, ((*it).second.isEmpty() ? (*it).first : (*it).second) + " - " + TQString::number(percent) + "%"); else m_widget->setText(i, ((*it).second.isEmpty() ? (*it).first : (*it).second)); i++; } } void Fsystem::updateFS() { int total, free; int i = 0; MountEntryList::ConstIterator it; for (it = m_mountEntries.begin(); it != m_mountEntries.end(); ++it) { // returns the total space and free space from *it // (the current mounted partition) if ( !FilesystemStats::readStats( ( *it ).first, total, free ) ) continue; int percent = 0; if( total != 0 ) percent = ((total - free) * 100) / total; m_widget->setValue(i, total - free); if (m_showPercentage) m_widget->setText(i, ((*it).second.isEmpty() ? (*it).first : (*it).second) + " - " + TQString::number(percent) + "%"); else m_widget->setText(i, ((*it).second.isEmpty() ? (*it).first : (*it).second)); i++; } } Fsystem::MountEntryList Fsystem::makeList(const TQStringList &list) const { MountEntryList newList; TQStringList splitList; TQStringList::ConstIterator it; for (it = list.begin(); it != list.end(); ++it) { splitList = TQStringList::split(":", (*it)); newList.append(tqMakePair(splitList[0], splitList[1])); } return newList; } #include "ksimfsystem.moc"