summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2016-11-20 23:58:22 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2016-11-20 23:58:22 +0900
commitb6887381d7062e2150c5511d50ac03421bcc211d (patch)
tree7235f10c87eda8b99e976f6eebf8a35ae1fbe75a
parent6110a523f9acb34a704fda02b2aa9d5e555358f5 (diff)
downloadtdebase-b6887381.tar.gz
tdebase-b6887381.zip
Trash limit: add "fixed size" configuration option and code
improvements. This relates to bug 1923. Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
-rw-r--r--tdeioslave/trash/Makefile.am2
-rw-r--r--tdeioslave/trash/ktrashpropsdlgplugin.cpp337
-rw-r--r--tdeioslave/trash/ktrashpropsdlgplugin.h26
-rw-r--r--tdeioslave/trash/tdefile-plugin/tdefile_trash.cpp5
-rw-r--r--tdeioslave/trash/tdeio_trash.h1
-rw-r--r--tdeioslave/trash/trash_constant.h41
-rw-r--r--tdeioslave/trash/trashimpl.cpp51
-rw-r--r--tdeioslave/trash/trashimpl.h3
8 files changed, 328 insertions, 138 deletions
diff --git a/tdeioslave/trash/Makefile.am b/tdeioslave/trash/Makefile.am
index a3c8253e0..ee27b3d2a 100644
--- a/tdeioslave/trash/Makefile.am
+++ b/tdeioslave/trash/Makefile.am
@@ -30,7 +30,7 @@ messages:
$(XGETTEXT) `find . -name "*.cc" -o -name "*.cpp" -o -name "*.h"` -o $(podir)/tdeio_trash.pot
# ktrashpropsdlgplugin target
-noinst_HEADERS = ktrashpropsdlgplugin.h discspaceutil.h
+noinst_HEADERS = ktrashpropsdlgplugin.h discspaceutil.h trash_constant.h
ktrashpropsdlgplugin_la_SOURCES = ktrashpropsdlgplugin.cpp discspaceutil.cpp trashimpl.cpp
ktrashpropsdlgplugin_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
diff --git a/tdeioslave/trash/ktrashpropsdlgplugin.cpp b/tdeioslave/trash/ktrashpropsdlgplugin.cpp
index 157790c5f..87a70ae45 100644
--- a/tdeioslave/trash/ktrashpropsdlgplugin.cpp
+++ b/tdeioslave/trash/ktrashpropsdlgplugin.cpp
@@ -22,13 +22,16 @@
#include "ktrashpropsdlgplugin.h"
#include "discspaceutil.h"
+#include "trash_constant.h"
#include "trashimpl.h"
+#include <tqbuttongroup.h>
#include <tqcheckbox.h>
#include <tqcombobox.h>
#include <tqlabel.h>
#include <tqlayout.h>
#include <tqlistbox.h>
+#include <tqradiobutton.h>
#include <tqspinbox.h>
#include <kdesktopfile.h>
@@ -40,6 +43,8 @@
#include <kdebug.h>
+using namespace TrashConstant;
+
typedef KGenericFactory<KTrashPropsDlgPlugin, KPropertiesDialog> Factory;
K_EXPORT_COMPONENT_FACTORY( ktrashpropsdlgplugin, Factory( "ktrashpropsdlgplugin" ) )
@@ -69,14 +74,25 @@ KTrashPropsDlgPlugin::KTrashPropsDlgPlugin( KPropertiesDialog *dialog, const cha
TQFrame *frame = dialog->addPage( i18n( "Size Limits" ) );
setupGui( frame );
-
mUseTimeLimit->setChecked( mConfigMap[ mCurrentTrash ].useTimeLimit );
mUseSizeLimit->setChecked( mConfigMap[ mCurrentTrash ].useSizeLimit );
+ mSizeLimitType = mConfigMap[ mCurrentTrash ].sizeLimitType;
+ if ( mSizeLimitType == SIZE_LIMIT_FIXED )
+ {
+ mRbFixedSize->setChecked( true );
+ }
+ else
+ {
+ mRbPercentSize->setChecked( true );
+ }
+
mDays->setValue( mConfigMap[ mCurrentTrash ].days );
- mPercent->setValue( mConfigMap[ mCurrentTrash ].percent );
- mPercent->setPrecision(3);
+ mPercentSize->setValue( mConfigMap[ mCurrentTrash ].percent );
+ mFixedSize->setValue( mConfigMap[ mCurrentTrash ].fixedSize );
+ mFixedSizeUnit->setCurrentItem( mConfigMap[ mCurrentTrash ].fixedSizeUnit );
mLimitReachedAction->setCurrentItem( mConfigMap[ mCurrentTrash ].actionType );
- percentChanged(mPercent->value());
+ percentSizeChanged(mPercentSize->value());
+ fixedSizeChanged(mFixedSize->value());
useTypeChanged();
@@ -90,20 +106,112 @@ KTrashPropsDlgPlugin::KTrashPropsDlgPlugin( KPropertiesDialog *dialog, const cha
this, TQT_SLOT( setDirty() ) );
connect( mUseSizeLimit, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( useTypeChanged() ) );
- connect( mPercent, TQT_SIGNAL( valueChanged( double ) ),
- this, TQT_SLOT( percentChanged( double ) ) );
- connect( mPercent, TQT_SIGNAL( valueChanged( double ) ),
+ connect( mPercentSize, TQT_SIGNAL( valueChanged( double ) ),
+ this, TQT_SLOT( percentSizeChanged( double ) ) );
+ connect( mFixedSize, TQT_SIGNAL( valueChanged( double ) ),
+ this, TQT_SLOT( fixedSizeChanged( double ) ) );
+ connect( mPercentSize, TQT_SIGNAL( valueChanged( double ) ),
+ this, TQT_SLOT( setDirty() ) );
+ connect( mFixedSize, TQT_SIGNAL( valueChanged( double ) ),
+ this, TQT_SLOT( setDirty() ) );
+ connect( mFixedSizeUnit, TQT_SIGNAL( activated( int ) ),
+ this, TQT_SLOT( fixedSizeUnitActivated( int ) ) );
+ connect( mRbPercentSize, TQT_SIGNAL( toggled( bool ) ),
+ this, TQT_SLOT( rbPercentSizeToggled( bool ) ) );
+ connect( mRbPercentSize, TQT_SIGNAL( toggled( bool ) ),
+ this, TQT_SLOT( setDirty() ) );
+ connect( mRbFixedSize, TQT_SIGNAL( toggled( bool ) ),
+ this, TQT_SLOT( rbFixedSizeToggled( bool ) ) );
+ connect( mRbFixedSize, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( setDirty() ) );
connect( mLimitReachedAction, TQT_SIGNAL( activated( int ) ),
this, TQT_SLOT( setDirty() ) );
- trashChanged( 0 );
+ trashChanged( 0 );
}
KTrashPropsDlgPlugin::~KTrashPropsDlgPlugin()
{
}
+void KTrashPropsDlgPlugin::setupGui( TQFrame *frame )
+{
+ TQVBoxLayout *layout = new TQVBoxLayout( frame, 11, 6 );
+
+ TrashImpl::TrashDirMap map = mTrashImpl->trashDirectories();
+ if ( map.count() != 1 ) {
+ // If we have multiple trashes, we setup a widget to choose
+ // which trash to configure
+ TQListBox *mountPoints = new TQListBox( frame );
+ layout->addWidget( mountPoints );
+
+ const TQPixmap folderPixmap = TDEGlobal::iconLoader()->loadIcon( "folder", TDEIcon::Small );
+ TQMapConstIterator<int, TQString> it;
+ for ( it = map.begin(); it != map.end(); ++it ) {
+ DiscSpaceUtil util( it.data() );
+ mountPoints->insertItem( folderPixmap, util.mountPoint(), it.key() );
+ }
+
+ mountPoints->setCurrentItem( 0 );
+
+ connect( mountPoints, TQT_SIGNAL( highlighted( int ) ), TQT_SLOT( trashChanged( int ) ) );
+ } else {
+ mCurrentTrash = map[0];
+ }
+
+ TQHBoxLayout *daysLayout = new TQHBoxLayout( layout );
+
+ mUseTimeLimit = new TQCheckBox( i18n( "Delete files older than:" ), frame );
+ daysLayout->addWidget( mUseTimeLimit );
+ mDays = new TQSpinBox( 1, 365, 1, frame );
+ mDays->setSuffix( " days" );
+ daysLayout->addWidget( mDays );
+
+ TQGridLayout *sizeLayout = new TQGridLayout( layout, 2, 2 );
+ mUseSizeLimit = new TQCheckBox( i18n( "Limit to maximum size" ), frame );
+ sizeLayout->addMultiCellWidget( mUseSizeLimit, 0, 0, 0, 1 );
+
+ mSizeWidget = new TQWidget( frame );
+ sizeLayout->setColSpacing( 0, 30 );
+ sizeLayout->addWidget( mSizeWidget, 1, 1 );
+
+ TQGridLayout *sizeWidgetLayout = new TQGridLayout( mSizeWidget, 3, 3, 11, 6 );
+
+ mRbPercentSize = new TQRadioButton( i18n("&Percentage:"), mSizeWidget );
+ mRbFixedSize = new TQRadioButton( i18n("&Fixed size:"), mSizeWidget );
+ sizeWidgetLayout->addWidget( mRbPercentSize, 0, 0 );
+ sizeWidgetLayout->addWidget( mRbFixedSize, 1, 0 );
+
+ mPercentSize = new KDoubleSpinBox( 0, 100, 0.1, 10, 2, mSizeWidget );
+ mPercentSize->setSuffix( " %" );
+ sizeWidgetLayout->addWidget( mPercentSize, 0, 1 );
+ mSizeLabel = new TQLabel( mSizeWidget );
+ sizeWidgetLayout->addWidget( mSizeLabel, 0, 2 );
+
+ mFixedSize = new KDoubleSpinBox( 0, 1024*1024, 1, 500, 2, mSizeWidget );
+ sizeWidgetLayout->addWidget( mFixedSize, 1, 1 );
+ mFixedSizeUnit = new TQComboBox( mSizeWidget );
+ mFixedSizeUnit->setEditable( false );
+ mFixedSizeUnit->insertItem( i18n( "Bytes" ), SIZE_ID_B );
+ mFixedSizeUnit->insertItem( i18n( "KBytes" ), SIZE_ID_KB );
+ mFixedSizeUnit->insertItem( i18n( "MBytes" ), SIZE_ID_MB );
+ mFixedSizeUnit->insertItem( i18n( "GBytes" ), SIZE_ID_GB );
+ mFixedSizeUnit->insertItem( i18n( "TBytes" ), SIZE_ID_TB );
+ mFixedSizeUnit->setCurrentItem( 2 );
+ sizeWidgetLayout->addWidget( mFixedSizeUnit, 1, 2 );
+
+ TQLabel *label = new TQLabel( i18n( "When limit reached:" ), mSizeWidget );
+ sizeWidgetLayout->addWidget( label, 2, 0 );
+
+ mLimitReachedAction = new TQComboBox( mSizeWidget );
+ mLimitReachedAction->insertItem( i18n( "Warn me" ) );
+ mLimitReachedAction->insertItem( i18n( "Delete oldest files from trash" ) );
+ mLimitReachedAction->insertItem( i18n( "Delete biggest files from trash" ) );
+ sizeWidgetLayout->addMultiCellWidget( mLimitReachedAction, 2, 2, 1, 2 );
+
+ layout->addStretch();
+}
+
void KTrashPropsDlgPlugin::applyChanges()
{
if ( !mCurrentTrash.isEmpty() ) {
@@ -111,7 +219,17 @@ void KTrashPropsDlgPlugin::applyChanges()
entry.useTimeLimit = mUseTimeLimit->isChecked();
entry.days = mDays->value();
entry.useSizeLimit = mUseSizeLimit->isChecked();
- entry.percent = mPercent->value(),
+ if (mRbFixedSize->isChecked())
+ {
+ entry.sizeLimitType = SIZE_LIMIT_FIXED;
+ }
+ else
+ {
+ entry.sizeLimitType = SIZE_LIMIT_PERCENT;
+ }
+ entry.percent = mPercentSize->value();
+ entry.fixedSize = mFixedSize->value();
+ entry.fixedSizeUnit = mFixedSizeUnit->currentItem();
entry.actionType = mLimitReachedAction->currentItem();
mConfigMap.insert( mCurrentTrash, entry );
}
@@ -119,41 +237,107 @@ void KTrashPropsDlgPlugin::applyChanges()
writeConfig();
}
-void KTrashPropsDlgPlugin::percentChanged( double percent )
+void KTrashPropsDlgPlugin::percentSizeChanged( double percent )
{
DiscSpaceUtil util( mCurrentTrash );
-
double partitionSize = util.size() * 1024.0; // convert to byte
-
double size = partitionSize*(percent/100.0);
- // FIXME It would be good if precision step depended on max HD size
- mPercent->setPrecision(3);
-
- TQString unit = i18n( "Byte" );
- if ( size > 1024 ) {
- unit = i18n( "KByte" );
+ TQString unit = i18n( "Bytes" );
+ if ( size >= 1024 ) {
+ unit = i18n( "KBytes" );
size = size/1024.0;
- mPercent->setLineStep(0.001);
}
- if ( size > 1024 ) {
- unit = i18n( "MByte" );
+ if ( size >= 1024 ) {
+ unit = i18n( "MBytes" );
size = size/1024.0;
- mPercent->setLineStep(0.01);
}
- if ( size > 1024 ) {
- unit = i18n( "GByte" );
+ if ( size >= 1024 ) {
+ unit = i18n( "GBytes" );
size = size/1024.0;
- mPercent->setLineStep(0.1);
}
- if ( size > 1024 ) {
- unit = i18n( "TByte" );
+ if ( size >= 1024 ) {
+ unit = i18n( "TBytes" );
size = size/1024.0;
- mPercent->setLineStep(1);
}
mSizeLabel->setText( i18n( "(%1 %2)" ).arg( TQString::number( size, 'f', 2 ) ).arg( unit ) );
+}
+void KTrashPropsDlgPlugin::fixedSizeChanged( double value )
+{
+ int currItem = mFixedSizeUnit->currentItem();
+ if (value > 1023.999 && currItem >= SIZE_ID_TB)
+ {
+ // Max limit 1024 TBytes
+ mFixedSizeUnit->setCurrentItem(SIZE_ID_TB);
+ mFixedSize->setValue(1024.0);
+ }
+ else if (value > 1023.999 && currItem < SIZE_ID_TB)
+ {
+ // Scale up to higher measure unit
+ while (value > 1023.999 && currItem < SIZE_ID_TB)
+ {
+ ++currItem;
+ value /= 1024.0;
+ }
+ mFixedSizeUnit->setCurrentItem(currItem);
+ mFixedSize->setValue(value);
+ }
+ else if (value < 0.001)
+ {
+ // Scale down to lower measure unit
+ int currItem = mFixedSizeUnit->currentItem();
+ if (currItem > SIZE_ID_B)
+ {
+ mFixedSizeUnit->setCurrentItem(currItem - 1);
+ mFixedSize->setValue(1023.0);
+ }
+ }
+ // Need to call this manually because "activated" is not emitted by "mFixedSizeUnit"
+ // when the index is changed programmatically (see TQComboBox API docs)
+ fixedSizeUnitActivated(mFixedSizeUnit->currentItem());
+}
+
+void KTrashPropsDlgPlugin::fixedSizeUnitActivated(int index)
+{
+ // Bytes can not be split into fractions
+ if (index == SIZE_ID_B)
+ {
+ mFixedSize->setPrecision(0);
+ }
+ else
+ {
+ mFixedSize->setPrecision(2);
+ }
+}
+
+void KTrashPropsDlgPlugin::rbPercentSizeToggled( bool buttonOn)
+{
+ if (buttonOn)
+ {
+ mRbFixedSize->setChecked(false);
+ mSizeLimitType = SIZE_LIMIT_PERCENT;
+ }
+ else if (!mRbFixedSize->isChecked())
+ {
+ // Set the button back on if the user clicked it twice
+ mRbPercentSize->setChecked(true);
+ }
+}
+
+void KTrashPropsDlgPlugin::rbFixedSizeToggled( bool buttonOn)
+{
+ if (buttonOn)
+ {
+ mRbPercentSize->setChecked(false);
+ mSizeLimitType = SIZE_LIMIT_FIXED;
+ }
+ else if (!mRbPercentSize->isChecked())
+ {
+ // Set the button back on if the user clicked it twice
+ mRbFixedSize->setChecked(true);
+ }
}
void KTrashPropsDlgPlugin::trashChanged( int value )
@@ -165,7 +349,10 @@ void KTrashPropsDlgPlugin::trashChanged( int value )
entry.useTimeLimit = mUseTimeLimit->isChecked();
entry.days = mDays->value();
entry.useSizeLimit = mUseSizeLimit->isChecked();
- entry.percent = mPercent->value(),
+ entry.sizeLimitType = mSizeLimitType;
+ entry.percent = mPercentSize->value(),
+ entry.fixedSize = mFixedSize->value();
+ entry.fixedSizeUnit = mFixedSizeUnit->currentItem();
entry.actionType = mLimitReachedAction->currentItem();
mConfigMap.insert( mCurrentTrash, entry );
}
@@ -177,17 +364,31 @@ void KTrashPropsDlgPlugin::trashChanged( int value )
mUseTimeLimit->setChecked( entry.useTimeLimit );
mDays->setValue( entry.days );
mUseSizeLimit->setChecked( entry.useSizeLimit );
- mPercent->setValue( entry.percent );
+ if ( mSizeLimitType == SIZE_LIMIT_FIXED )
+ {
+ mRbFixedSize->setChecked( true );
+ }
+ else
+ {
+ mRbPercentSize->setChecked( true );
+ }
+ mPercentSize->setValue( entry.percent );
+ mFixedSize->setValue( entry.fixedSize );
+ mFixedSizeUnit->setCurrentItem( entry.fixedSizeUnit );
mLimitReachedAction->setCurrentItem( entry.actionType );
} else {
mUseTimeLimit->setChecked( false );
mDays->setValue( 7 );
mUseSizeLimit->setChecked( true );
- mPercent->setValue( 10.0 );
+ mRbPercentSize->setChecked( true );
+ mPercentSize->setValue( 10.0 );
+ mFixedSize->setValue( 500 );
+ mFixedSizeUnit->setCurrentItem( SIZE_ID_MB );
mLimitReachedAction->setCurrentItem( 0 );
}
- percentChanged( mPercent->value() );
+ percentSizeChanged( mPercentSize->value() );
+ fixedSizeChanged( mFixedSize->value() );
}
void KTrashPropsDlgPlugin::useTypeChanged()
@@ -209,7 +410,10 @@ void KTrashPropsDlgPlugin::readConfig()
entry.useTimeLimit = config.readBoolEntry( "UseTimeLimit", false );
entry.days = config.readNumEntry( "Days", 7 );
entry.useSizeLimit = config.readBoolEntry( "UseSizeLimit", true );
+ entry.sizeLimitType = config.readNumEntry( "SizeLimitType", SIZE_LIMIT_PERCENT );
entry.percent = config.readDoubleNumEntry( "Percent", 10 );
+ entry.fixedSize = config.readDoubleNumEntry( "FixedSize", 500 );
+ entry.fixedSizeUnit = config.readNumEntry( "FixedSizeUnit", SIZE_ID_MB );
entry.actionType = config.readNumEntry( "LimitReachedAction", 0 );
mConfigMap.insert( groups[ i ], entry );
}
@@ -232,77 +436,14 @@ void KTrashPropsDlgPlugin::writeConfig()
config.writeEntry( "UseTimeLimit", it.data().useTimeLimit );
config.writeEntry( "Days", it.data().days );
config.writeEntry( "UseSizeLimit", it.data().useSizeLimit );
+ config.writeEntry( "SizeLimitType", it.data().sizeLimitType );
config.writeEntry( "Percent", it.data().percent );
+ config.writeEntry( "FixedSize", it.data().fixedSize );
+ config.writeEntry( "FixedSizeUnit", it.data().fixedSizeUnit );
config.writeEntry( "LimitReachedAction", it.data().actionType );
}
config.sync();
}
-void KTrashPropsDlgPlugin::setupGui( TQFrame *frame )
-{
- TQVBoxLayout *layout = new TQVBoxLayout( frame, 11, 6 );
-
- TrashImpl::TrashDirMap map = mTrashImpl->trashDirectories();
- if ( map.count() != 1 ) {
- // If we have multiple trashes, we setup a widget to choose
- // which trash to configure
- TQListBox *mountPoints = new TQListBox( frame );
- layout->addWidget( mountPoints );
-
- const TQPixmap folderPixmap = TDEGlobal::iconLoader()->loadIcon( "folder", TDEIcon::Small );
- TQMapConstIterator<int, TQString> it;
- for ( it = map.begin(); it != map.end(); ++it ) {
- DiscSpaceUtil util( it.data() );
- mountPoints->insertItem( folderPixmap, util.mountPoint(), it.key() );
- }
-
- mountPoints->setCurrentItem( 0 );
-
- connect( mountPoints, TQT_SIGNAL( highlighted( int ) ), TQT_SLOT( trashChanged( int ) ) );
- } else {
- mCurrentTrash = map[0];
- }
-
- TQHBoxLayout *daysLayout = new TQHBoxLayout( layout );
-
- mUseTimeLimit = new TQCheckBox( i18n( "Delete files older than:" ), frame );
- daysLayout->addWidget( mUseTimeLimit );
- mDays = new TQSpinBox( 1, 365, 1, frame );
- mDays->setSuffix( " days" );
- daysLayout->addWidget( mDays );
-
- TQGridLayout *sizeLayout = new TQGridLayout( layout, 2, 2 );
- mUseSizeLimit = new TQCheckBox( i18n( "Limit to maximum size" ), frame );
- sizeLayout->addMultiCellWidget( mUseSizeLimit, 0, 0, 0, 1 );
-
- mSizeWidget = new TQWidget( frame );
- sizeLayout->setColSpacing( 0, 30 );
- sizeLayout->addWidget( mSizeWidget, 1, 1 );
-
- TQGridLayout *sizeWidgetLayout = new TQGridLayout( mSizeWidget, 2, 3, 11, 6 );
-
- TQLabel *label = new TQLabel( i18n( "Maximum Size:" ), mSizeWidget );
- sizeWidgetLayout->addWidget( label, 0, 0 );
-
- mPercent = new KDoubleSpinBox( 0.001, 100, 1, 10, 3, mSizeWidget );
- mPercent->setSuffix( " %" );
- sizeWidgetLayout->addWidget( mPercent, 0, 1 );
-
- mSizeLabel = new TQLabel( mSizeWidget );
- sizeWidgetLayout->addWidget( mSizeLabel, 0, 2 );
-
- label = new TQLabel( i18n( "When limit reached:" ), mSizeWidget );
- sizeWidgetLayout->addWidget( label, 1, 0 );
-
- mLimitReachedAction = new TQComboBox( mSizeWidget );
- mLimitReachedAction->insertItem( i18n( "Warn me" ) );
- mLimitReachedAction->insertItem( i18n( "Delete oldest files from trash" ) );
- mLimitReachedAction->insertItem( i18n( "Delete biggest files from trash" ) );
- sizeWidgetLayout->addMultiCellWidget( mLimitReachedAction, 1, 1, 1, 2 );
-
- layout->addStretch();
-
-}
-
#include "ktrashpropsdlgplugin.moc"
diff --git a/tdeioslave/trash/ktrashpropsdlgplugin.h b/tdeioslave/trash/ktrashpropsdlgplugin.h
index b62ba127d..d21dd4578 100644
--- a/tdeioslave/trash/ktrashpropsdlgplugin.h
+++ b/tdeioslave/trash/ktrashpropsdlgplugin.h
@@ -22,13 +22,14 @@
#ifndef KTRASHPROPSDLGPLUGIN_H
#define KTRASHPROPSDLGPLUGIN_H
-#include <kpropertiesdialog.h>
+#include "kpropertiesdialog.h"
class KDoubleSpinBox;
class TQCheckBox;
class TQComboBox;
class TQFrame;
class TQLabel;
+class TQRadioButton;
class TQSpinBox;
class TrashImpl;
@@ -43,21 +44,29 @@ class KTrashPropsDlgPlugin : public KPropsDlgPlugin
virtual void applyChanges();
private slots:
- void percentChanged( double );
+ void percentSizeChanged( double );
+ void fixedSizeChanged( double );
+ void fixedSizeUnitActivated ( int );
+ void rbPercentSizeToggled( bool );
+ void rbFixedSizeToggled( bool );
void trashChanged( int );
void useTypeChanged();
-
+
private:
void readConfig();
void writeConfig();
void setupGui( TQFrame *frame );
TQCheckBox *mUseTimeLimit;
- TQSpinBox *mDays;
+ TQSpinBox *mDays;
TQCheckBox *mUseSizeLimit;
- TQWidget *mSizeWidget;
- KDoubleSpinBox *mPercent;
- TQLabel *mSizeLabel;
+ int mSizeLimitType;
+ TQWidget *mSizeWidget;
+ TQRadioButton *mRbPercentSize, *mRbFixedSize;
+ KDoubleSpinBox *mPercentSize;
+ KDoubleSpinBox *mFixedSize;
+ TQComboBox *mFixedSizeUnit;
+ TQLabel *mSizeLabel;
TQComboBox *mLimitReachedAction;
TrashImpl *mTrashImpl;
@@ -67,7 +76,10 @@ class KTrashPropsDlgPlugin : public KPropsDlgPlugin
bool useTimeLimit;
int days;
bool useSizeLimit;
+ int sizeLimitType;
double percent;
+ double fixedSize;
+ int fixedSizeUnit;
int actionType;
} ConfigEntry;
diff --git a/tdeioslave/trash/tdefile-plugin/tdefile_trash.cpp b/tdeioslave/trash/tdefile-plugin/tdefile_trash.cpp
index 5c903fcb8..e7bfdc280 100644
--- a/tdeioslave/trash/tdefile-plugin/tdefile_trash.cpp
+++ b/tdeioslave/trash/tdefile-plugin/tdefile_trash.cpp
@@ -51,9 +51,8 @@ void KTrashPlugin::makeMimeTypeInfo(const TQString& mimeType)
KFileMimeTypeInfo::GroupInfo* group =
addGroupInfo(info, "General", i18n("General"));
- KFileMimeTypeInfo::ItemInfo* item;
- item = addItemInfo(group, "OriginalPath", i18n("Original Path"), TQVariant::String);
- item = addItemInfo(group, "DateOfDeletion", i18n("Date of Deletion"), TQVariant::DateTime);
+ addItemInfo(group, "OriginalPath", i18n("Original Path"), TQVariant::String);
+ addItemInfo(group, "DateOfDeletion", i18n("Date of Deletion"), TQVariant::DateTime);
}
bool KTrashPlugin::readInfo(KFileMetaInfo& info, uint)
diff --git a/tdeioslave/trash/tdeio_trash.h b/tdeioslave/trash/tdeio_trash.h
index 157db3464..964e05f9a 100644
--- a/tdeioslave/trash/tdeio_trash.h
+++ b/tdeioslave/trash/tdeio_trash.h
@@ -22,6 +22,7 @@
#include <tdeio/slavebase.h>
#include "trashimpl.h"
+
namespace TDEIO { class Job; }
typedef TrashImpl::TrashedFileInfo TrashedFileInfo;
diff --git a/tdeioslave/trash/trash_constant.h b/tdeioslave/trash/trash_constant.h
new file mode 100644
index 000000000..aab42b3aa
--- /dev/null
+++ b/tdeioslave/trash/trash_constant.h
@@ -0,0 +1,41 @@
+/* This file is part of the TDE project
+ Copyright (C) 2016 Michele Calgaro <michele__DOT__calgaro__AT__yahoo__DOT__it
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef TRASH_CONSTANT_H
+#define TRASH_CONSTANT_H
+
+namespace TrashConstant
+{
+ enum
+ {
+ SIZE_LIMIT_PERCENT = 0,
+ SIZE_LIMIT_FIXED = 1,
+ };
+
+ enum
+ {
+ SIZE_ID_B = 0,
+ SIZE_ID_KB = 1,
+ SIZE_ID_MB = 2,
+ SIZE_ID_GB = 3,
+ SIZE_ID_TB = 4
+ };
+}
+
+#endif
diff --git a/tdeioslave/trash/trashimpl.cpp b/tdeioslave/trash/trashimpl.cpp
index e6b219a13..6de7edd2a 100644
--- a/tdeioslave/trash/trashimpl.cpp
+++ b/tdeioslave/trash/trashimpl.cpp
@@ -22,7 +22,6 @@
#include <tdelocale.h>
#include <klargefile.h>
-#include <tdeio/global.h>
#include <tdeio/renamedlg.h>
#include <tdeio/job.h>
#include <kdebug.h>
@@ -35,8 +34,6 @@
#include <tdefileitem.h>
#include <tdeio/chmodjob.h>
-#include <dcopref.h>
-
#include <tqapplication.h>
#include <tqeventloop.h>
#include <tqfile.h>
@@ -51,6 +48,8 @@
#include <stdlib.h>
#include <errno.h>
+#include "trash_constant.h"
+
TrashImpl::TrashImpl() :
TQObject(),
m_lastErrorCode( 0 ),
@@ -976,7 +975,10 @@ bool TrashImpl::adaptTrashSize( const TQString& origPath, int trashId )
bool useTimeLimit = config.readBoolEntry( "UseTimeLimit", false );
bool useSizeLimit = config.readBoolEntry( "UseSizeLimit", true );
+ int sizeLimitType = config.readNumEntry( "SizeLimitType", TrashConstant::SIZE_LIMIT_PERCENT );
double percent = config.readDoubleNumEntry( "Percent", 10 );
+ double fixedSize = config.readDoubleNumEntry( "FixedSize", 500 );
+ int fixedSizeUnit = config.readNumEntry( "FixedSizeUnit", TrashConstant::SIZE_ID_MB );
int actionType = config.readNumEntry( "LimitReachedAction", 0 );
if ( useTimeLimit ) { // delete all files in trash older than X days
@@ -998,33 +1000,32 @@ bool TrashImpl::adaptTrashSize( const TQString& origPath, int trashId )
}
if ( useSizeLimit ) { // check if size limit exceeded
-
// calculate size of the files to be put into the trash
unsigned long additionalSize = DiscSpaceUtil::sizeOfPath( origPath );
-
- DiscSpaceUtil util( trashPath + "/files/" );
- if ( util.usage( additionalSize ) >= percent ) {
+ TQString trashPathName = trashPath + "/files/";
+ DiscSpaceUtil util( trashPathName );
+ unsigned long requiredTrashSpace = util.sizeOfPath(trashPathName) + additionalSize;
+ unsigned long trashLimit = 0;
+ if ( sizeLimitType == TrashConstant::SIZE_LIMIT_PERCENT)
+ {
+ trashLimit = (unsigned long)(1024 * percent * util.size() / 100.0);
+ }
+ else if ( sizeLimitType == TrashConstant::SIZE_LIMIT_FIXED)
+ {
+ double trashLimitTemp = fixedSize;
+ while (fixedSizeUnit > TrashConstant::SIZE_ID_B)
+ {
+ trashLimitTemp *= 1024;
+ --fixedSizeUnit;
+ }
+ trashLimit = (unsigned long)trashLimitTemp;
+ }
+ if ( requiredTrashSpace > trashLimit ) {
if ( actionType == 0 ) { // warn the user only
m_lastErrorCode = TDEIO::ERR_SLAVE_DEFINED;
m_lastErrorMessage = i18n( "The trash has reached its maximum size!\nClean the trash manually." );
return false;
} else {
- // before we start to remove any files from the trash,
- // check whether the new file will fit into the trash
- // at all...
-
- unsigned long partitionSize = util.size(); // in kB
- unsigned long fileSize = additionalSize/1024; // convert to kB
-
- if ( ((double)fileSize*100/(double)partitionSize) >= percent ) {
- m_lastErrorCode = TDEIO::ERR_SLAVE_DEFINED;
- m_lastErrorMessage = i18n( "The file is too big to be trashed because it exceeds the maximum size set for the trash bin." );
- return false;
- }
-
- // the size of the to be trashed file is ok, so lets start removing
- // some other files from the trash
-
TQDir dir( trashPath + "/files" );
const TQFileInfoList *infos = 0;
if ( actionType == 1 ) // delete oldest files first
@@ -1038,11 +1039,9 @@ bool TrashImpl::adaptTrashSize( const TQString& origPath, int trashId )
TQFileInfo *info;
bool deleteFurther = true;
while ( ((info = it.current()) != 0) && deleteFurther ) {
-
if ( info->fileName() != "." && info->fileName() != ".." ) {
del( trashId, info->fileName() ); // delete trashed file
-
- if ( util.usage( additionalSize ) < percent ) // check whether we have enough space now
+ if ( (util.sizeOfPath(trashPathName) + additionalSize) < trashLimit ) // check whether we have enough space now
deleteFurther = false;
}
++it;
diff --git a/tdeioslave/trash/trashimpl.h b/tdeioslave/trash/trashimpl.h
index 812922364..6e7af2bad 100644
--- a/tdeioslave/trash/trashimpl.h
+++ b/tdeioslave/trash/trashimpl.h
@@ -25,9 +25,6 @@
#include <tqstring.h>
#include <tqdatetime.h>
-#include <tqmap.h>
-#include <tqvaluelist.h>
-#include <tqstrlist.h>
#include <assert.h>
/**