summaryrefslogtreecommitdiffstats
path: root/opensuse/core/tdebase/lowdiskspace.patch
diff options
context:
space:
mode:
Diffstat (limited to 'opensuse/core/tdebase/lowdiskspace.patch')
-rw-r--r--opensuse/core/tdebase/lowdiskspace.patch413
1 files changed, 413 insertions, 0 deletions
diff --git a/opensuse/core/tdebase/lowdiskspace.patch b/opensuse/core/tdebase/lowdiskspace.patch
new file mode 100644
index 000000000..a2ee05f54
--- /dev/null
+++ b/opensuse/core/tdebase/lowdiskspace.patch
@@ -0,0 +1,413 @@
+Subject: Dialog notifying about running low on disk space
+From: Lubos Lunak
+Feature: bnc#199054
+Patch-upstream: no
+
+Index: kioslave/media/medianotifier/Makefile.am
+===================================================================
+--- kioslave/media/medianotifier/Makefile.am.orig
++++ kioslave/media/medianotifier/Makefile.am
+@@ -5,7 +5,8 @@ kded_medianotifier_la_LDFLAGS = -module
+ kded_medianotifier_la_LIBADD = ../libmediacommon/libmediacommon.la $(LIB_KDECORE) \
+ $(LIB_KDEUI) $(LIB_KIO)
+ kded_medianotifier_la_SOURCES = medianotifier.cpp medianotifier.skel \
+- notificationdialog.cpp notificationdialogview.ui
++ notificationdialog.cpp notificationdialogview.ui \
++ freespacenotifier.cpp freespacewidget.ui
+
+ noinst_HEADERS = medianotifier.h notificationdialog.h
+
+Index: kioslave/media/medianotifier/medianotifier.h
+===================================================================
+--- kioslave/media/medianotifier/medianotifier.h.orig
++++ kioslave/media/medianotifier/medianotifier.h
+@@ -27,6 +27,8 @@
+ #include <qstring.h>
+ #include <qmap.h>
+
++class FreeSpaceNotifier;
++
+ class MediaNotifier: public KDEDModule
+ {
+ Q_OBJECT
+@@ -52,6 +54,8 @@ private:
+ const QString &autoopenFile );
+
+ QMap<KIO::Job*,bool> m_allowNotificationMap;
++ FreeSpaceNotifier* m_freeSpaceNotifier;
+ };
++
+ #endif
+
+Index: kioslave/media/medianotifier/medianotifier.cpp
+===================================================================
+--- kioslave/media/medianotifier/medianotifier.cpp.orig
++++ kioslave/media/medianotifier/medianotifier.cpp
+@@ -36,6 +36,7 @@
+ #include "notifiersettings.h"
+ #include "notifieraction.h"
+ #include "mediamanagersettings.h"
++#include "freespacenotifier.h"
+
+ MediaNotifier::MediaNotifier(const QCString &name) : KDEDModule(name)
+ {
+@@ -44,6 +45,8 @@ MediaNotifier::MediaNotifier(const QCStr
+
+ connectDCOPSignal( "kded", "mediamanager", "mediumChanged(QString, bool)",
+ "onMediumChange(QString, bool)", true );
++
++ m_freeSpaceNotifier = new FreeSpaceNotifier( this );
+ }
+
+ MediaNotifier::~MediaNotifier()
+@@ -53,6 +56,7 @@ MediaNotifier::~MediaNotifier()
+
+ disconnectDCOPSignal( "kded", "mediamanager", "mediumChanged(QString, bool)",
+ "onMediumChange(QString, bool)" );
++ delete m_freeSpaceNotifier;
+ }
+
+ void MediaNotifier::onMediumChange( const QString &name, bool allowNotification )
+Index: kioslave/media/medianotifier/freespacenotifier.cpp
+===================================================================
+--- /dev/null
++++ kioslave/media/medianotifier/freespacenotifier.cpp
+@@ -0,0 +1,159 @@
++/* This file is part of the KDE Project
++ Copyright (c) 2006 Lukas Tinkl <ltinkl@suse.cz>
++ Copyright (c) 2008 Lubos Lunak <l.lunak@suse.cz>
++
++ 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, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "freespacenotifier.h"
++
++#include <sys/vfs.h>
++#include <unistd.h>
++
++#include <qdir.h>
++#include <qfile.h>
++#include <qlabel.h>
++#include <qspinbox.h>
++
++#include <kconfig.h>
++#include <kdebug.h>
++#include <klocale.h>
++#include <krun.h>
++
++#include "freespacewidget.h"
++
++
++FreeSpaceNotifier::FreeSpaceNotifier( QObject* parent )
++ : QObject( parent )
++ , lastAvailTimer( NULL )
++ , dialog( NULL )
++ , lastAvail( -1 )
++{
++ connect( &timer, SIGNAL( timeout() ), SLOT( checkFreeDiskSpace() ) );
++ KConfig cfg( "lowspacesuse", true ); // read only
++ KConfigGroup group( &cfg, "General" );
++ limit = group.readNumEntry( "WarnMinimumFreeSpace", 200 ); // MiB
++ if( limit != 0 )
++ timer.start( 1000 * 60 /* 1 minute */ );
++}
++
++FreeSpaceNotifier::~FreeSpaceNotifier()
++{
++ delete dialog;
++}
++
++void FreeSpaceNotifier::checkFreeDiskSpace()
++{
++ if ( dialog )
++ return;
++ struct statfs sfs;
++ if ( statfs( QFile::encodeName( QDir::homeDirPath() ), &sfs ) == 0 )
++ {
++ long avail = ( getuid() ? sfs.f_bavail : sfs.f_bfree );
++
++ if (avail < 0 || sfs.f_blocks <= 0)
++ return; // we better do not say anything about it
++
++ int availpct = int( 100 * avail / sfs.f_blocks );
++ avail = ((long long)avail) * sfs.f_bsize / ( 1024 * 1024 ); // to MiB
++ bool warn = false;
++ if( avail < limit ) // avail disk space dropped under a limit
++ {
++ if( lastAvail < 0 ) // always warn the first time
++ {
++ lastAvail = avail;
++ warn = true;
++ }
++ else if( avail > lastAvail ) // the user freed some space
++ lastAvail = avail; // so warn if it goes low again
++ else if( avail < lastAvail * 0.5 ) // available dropped to a half of previous one, warn again
++ {
++ warn = true;
++ lastAvail = avail;
++ }
++ // do not change lastAvail otherwise, to handle free space slowly going down
++ }
++ if ( warn )
++ {
++ dialog = new KDialogBase(
++ i18n( "Low Disk Space" ),
++ KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel,
++ KDialogBase::Yes, KDialogBase::No,
++ 0, "lowdiskspacedialog", false, true,
++ i18n( "Open File Manager" ), i18n( "Do Nothing" ), i18n( "Disable Warning" ));
++ widget = new FreeSpaceWidget( dialog );
++ dialog->setMainWidget( widget );
++
++ QString text = i18n( "You are running low on disk space on your home partition (currently %2%, %1 MiB free)." )
++ .arg( avail ).arg( availpct );
++ widget->warningLabel->setText( text );
++ widget->spinbox->setMinValue( 0 );
++ widget->spinbox->setMaxValue( 100000 );
++ widget->spinbox->setValue( limit );
++ connect( dialog, SIGNAL( yesClicked() ), SLOT( slotYes() ) );
++ connect( dialog, SIGNAL( noClicked() ), SLOT( slotNo() ) );
++ connect( dialog, SIGNAL( cancelClicked() ), SLOT( slotCancel() ) );
++ dialog->show();
++ }
++ }
++}
++
++void FreeSpaceNotifier::slotYes()
++{
++ ( void ) new KRun( KURL::fromPathOrURL( QDir::homeDirPath() ) );
++ cleanupDialog( widget->spinbox->value());
++}
++
++void FreeSpaceNotifier::slotNo()
++{
++ cleanupDialog( widget->spinbox->value());
++}
++
++void FreeSpaceNotifier::slotCancel()
++{
++ cleanupDialog( 0 ); // set limit to zero
++}
++
++void FreeSpaceNotifier::cleanupDialog( long newLimit )
++{
++ dialog->deleteLater();
++ dialog = NULL;
++ if( limit != newLimit )
++ {
++ KConfig cfg( "lowspacesuse" );
++ KConfigGroup group( &cfg, "General" );
++ limit = newLimit;
++ group.writeEntry( "WarnMinimumFreeSpace", limit );
++ if( limit == 0 )
++ timer.stop();
++ }
++ if( limit != 0 )
++ { // warn again if constanly below limit for too long
++ if( lastAvailTimer == NULL )
++ {
++ lastAvailTimer = new QTimer( this );
++ connect( lastAvailTimer, SIGNAL( timeout()), SLOT( resetLastAvailable()));
++ }
++ lastAvailTimer->start( 1000 * 60 * 60 /* 1 hour*/ );
++ }
++}
++
++void FreeSpaceNotifier::resetLastAvailable()
++{
++ lastAvail = -1;
++ lastAvailTimer->deleteLater();
++ lastAvailTimer = NULL;
++}
++
++#include "freespacenotifier.moc"
+Index: kioslave/media/medianotifier/freespacenotifier.h
+===================================================================
+--- /dev/null
++++ kioslave/media/medianotifier/freespacenotifier.h
+@@ -0,0 +1,51 @@
++/* This file is part of the KDE Project
++ Copyright (c) 2006 Lukas Tinkl <ltinkl@suse.cz>
++ Copyright (c) 2008 Lubos Lunak <l.lunak@suse.cz>
++
++ 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, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef _FREESPACENOTIFIER_H_
++#define _FREESPACENOTIFIER_H_
++
++#include <qtimer.h>
++
++#include <kdialogbase.h>
++
++class FreeSpaceWidget;
++
++class FreeSpaceNotifier
++: public QObject
++{
++ Q_OBJECT
++ public:
++ FreeSpaceNotifier( QObject* parent = NULL );
++ virtual ~FreeSpaceNotifier();
++ private slots:
++ void checkFreeDiskSpace();
++ void resetLastAvailable();
++ void slotYes();
++ void slotNo();
++ void slotCancel();
++ private:
++ void cleanupDialog( long newLimit );
++ QTimer timer;
++ QTimer* lastAvailTimer;
++ KDialogBase* dialog;
++ FreeSpaceWidget* widget;
++ long limit;
++ long lastAvail; // used to supress repeated warnings when available space hasn't changed
++};
++
++#endif
+Index: kioslave/media/medianotifier/freespacewidget.ui
+===================================================================
+--- /dev/null
++++ kioslave/media/medianotifier/freespacewidget.ui
+@@ -0,0 +1,118 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>FreeSpaceWidget</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>Form1</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>489</width>
++ <height>108</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>warningLabel</cstring>
++ </property>
++ <property name="text">
++ <string></string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel2</cstring>
++ </property>
++ <property name="text">
++ <string>Would you like to run a file manager to free some disk space and fix the problem?</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer3</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Vertical</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>20</width>
++ <height>40</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout3</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel3</cstring>
++ </property>
++ <property name="text">
++ <string>Warn again when the free space is below</string>
++ </property>
++ </widget>
++ <widget class="QSpinBox">
++ <property name="name">
++ <cstring>spinbox</cstring>
++ </property>
++ <property name="suffix">
++ <string> MiB</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>30</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Vertical</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>20</width>
++ <height>16</height>
++ </size>
++ </property>
++ </spacer>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>