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);