diff --git a/src/qtgui/advsearch.ui b/src/qtgui/advsearch.ui
index 72d26c16..f44f18f9 100644
--- a/src/qtgui/advsearch.ui
+++ b/src/qtgui/advsearch.ui
@@ -145,6 +145,46 @@
+ -
+
+
+ QFrame::HLine
+
+
+ QFrame::Sunken
+
+
+
+ -
+
+
-
+
+
+ Minimum size. You can use k/K,m/M,g/G as multipliers
+
+
+ Min. Size
+
+
+
+ -
+
+
+ -
+
+
+ Maximum size. You can use k/K,m/M,g/G as multipliers
+
+
+ Max. Size
+
+
+
+ -
+
+
+
+
-
diff --git a/src/qtgui/advsearch_w.cpp b/src/qtgui/advsearch_w.cpp
index 01a50bc4..843ef50a 100644
--- a/src/qtgui/advsearch_w.cpp
+++ b/src/qtgui/advsearch_w.cpp
@@ -300,6 +300,30 @@ void AdvSearch::saveFileTypes()
rwSettings(true);
}
+size_t AdvSearch::stringToSize(QString qsize)
+{
+ size_t size = size_t(-1);
+ qsize.replace(QRegExp("[\\s]+"), "");
+ if (!qsize.isEmpty()) {
+ string csize((const char*)qsize.toAscii());
+ char *cp;
+ size = strtoll(csize.c_str(), &cp, 10);
+ if (*cp != 0) {
+ switch (*cp) {
+ case 'k': case 'K': size *= 1E3;break;
+ case 'm': case 'M': size *= 1E6;break;
+ case 'g': case 'G': size *= 1E9;break;
+ case 't': case 'T': size *= 1E12;break;
+ default:
+ QMessageBox::warning(0, "Recoll",
+ tr("Bad multiplier suffix in size filter"));
+ size = size_t(-1);
+ }
+ }
+ }
+ return size;
+}
+
using namespace Rcl;
void AdvSearch::runSearch()
{
@@ -343,6 +367,11 @@ void AdvSearch::runSearch()
}
}
+ size_t size = stringToSize(minSizeLE->text());
+ sdata->setMinSize(size);
+ size = stringToSize(maxSizeLE->text());
+ sdata->setMaxSize(size);
+
if (!subtreeCMB->currentText().isEmpty()) {
QString current = subtreeCMB->currentText();
sdata->setTopdir((const char*)subtreeCMB->currentText().toUtf8(),
diff --git a/src/qtgui/advsearch_w.h b/src/qtgui/advsearch_w.h
index bed61de4..cdd51abf 100644
--- a/src/qtgui/advsearch_w.h
+++ b/src/qtgui/advsearch_w.h
@@ -68,6 +68,7 @@ private:
bool m_ignByCats;
void saveCnf();
void fillFileTypes();
+ size_t stringToSize(QString);
};
diff --git a/src/utils/smallut.cpp b/src/utils/smallut.cpp
index 7baf2c06..62482f0b 100644
--- a/src/utils/smallut.cpp
+++ b/src/utils/smallut.cpp
@@ -594,17 +594,17 @@ string displayableBytes(off_t size)
char sizebuf[50];
const char *unit;
- if (size < 1024) {
+ if (size < 1000) {
unit = " B ";
- } else if (size < 1024*1024) {
+ } else if (size < 1E6) {
unit = " KB ";
- size /= 1024;
- } else if (size < 1024*1024*1024) {
+ size /= 1000;
+ } else if (size < 1E9) {
unit = " MB ";
- size /= (1024*1024);
+ size /= (1E6);
} else {
unit = " GB ";
- size /= (1024*1024*1024);
+ size /= (1E9);
}
sprintf(sizebuf, OFFTPC "%s", size, unit);