diff options
-rw-r--r-- | helper.cpp | 13 | ||||
-rw-r--r-- | helper.h | 2 | ||||
-rw-r--r-- | seriestreemodel.cpp | 14 | ||||
-rw-r--r-- | seriestreewidget.cpp | 7 |
4 files changed, 29 insertions, 7 deletions
@@ -167,6 +167,19 @@ namespace Helper { return retval; } + QVariant bytesFromUnit(QVariant number, const QString unit){ + QString u = unit.toLower(); + quint64 retval = number.toULongLong(); + if(u == "k"){ + retval = retval * 1024; + }else if(u == "m"){ + retval = retval * 1024 * 1024; + }else if(u == "g"){ + retval = retval * 1024 * 1024 * 1024; + } + return retval; + } + bool SortFileInfoList::operator ()(const QFileInfo &lhs, const QFileInfo &rhs) const { return lhs.fileName().toLower() < rhs.fileName().toLower(); } @@ -10,6 +10,7 @@ #include <QPair> #include <QStringList> +#include <QVariant> #include <magic.h> @@ -25,6 +26,7 @@ namespace Helper { const QString createArchivePath(const QString &path, const QString &md5, bool withMd5 = false); QPair<QString, QStringList> programData(const QString &prefix, const QString &preferred = QString()); const QString durationFromSecs(qint64 secs); + QVariant bytesFromUnit(QVariant number, const QString unit); class SortFileInfoList : public std::binary_function<QFileInfo, QFileInfo, bool> { public: bool operator()(const QFileInfo &lhs, const QFileInfo &rhs) const; diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp index e881eb5..555c0f4 100644 --- a/seriestreemodel.cpp +++ b/seriestreemodel.cpp @@ -10,6 +10,7 @@ #include <QIcon> #include <QFile> #include <QFileInfo> +#include <QRegExp> #include "seriestreemodel.h" #include "smtreeitem.h" @@ -379,7 +380,7 @@ void SeriesTreeModel::setFileFilter(const QString &filter, const QString &column QSqlQuery seriesIdQuery(mDb); QString partsQueryTemplate; QString op("="); - QString value = filter; + QVariant value = filter; if(queryType == TextQuery){ QString idQueryTemplate = QString("SELECT DISTINCT(series.iseries_id), series.tseries_name FROM series, seriesparts, files WHERE files.%1 LIKE :value AND files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id ORDER BY series.tseries_name").arg(column); seriesIdQuery.prepare(idQueryTemplate); @@ -387,10 +388,11 @@ void SeriesTreeModel::setFileFilter(const QString &filter, const QString &column seriesIdQuery.bindValue(":value", value); partsQueryTemplate = QString("SELECT DISTINCT(seriesparts.iseriesparts_id), seriesparts.iseriespart FROM seriesparts, series, files WHERE series.iseries_id = :id AND series.iseries_id = seriesparts.iseries_id AND seriesparts.iseriesparts_id = files.iseriespart_id AND files.%1 LIKE :value"); }else if(queryType == NumericQuery){ - if(value.startsWith("<") || value.startsWith(">") || value.startsWith("=")){ - op = value.at(0); - value = value.right(value.size() - 1); - } + QRegExp valRe("([<>=]?)\\s*(\\d+)\\s*(\\w*)"); + (void)valRe.indexIn(value.toString()); + QStringList capText = valRe.capturedTexts(); + op = capText.at(1).isEmpty() ? op : capText.at(1); + value = Helper::bytesFromUnit(capText.at(2), capText.at(3)); QString idQueryTemplate = QString("SELECT DISTINCT(series.iseries_id), series.tseries_name FROM series, seriesparts, files WHERE files.%1 %2 :value AND files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id ORDER BY series.tseries_name").arg(column).arg(op); seriesIdQuery.prepare(idQueryTemplate); seriesIdQuery.bindValue(":value", value); @@ -409,7 +411,7 @@ void SeriesTreeModel::setFileFilter(const QString &filter, const QString &column QString partsQueryString; if(queryType == TextQuery){ partsQueryString = partsQueryTemplate.arg(column); - value = QString("%%1%").arg(value); + value = QString("%%1%").arg(value.toString()); }else{ partsQueryString = partsQueryTemplate.arg(column).arg(op); } diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index fa6ded5..24e9eb4 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -204,6 +204,7 @@ void SeriesTreeWidget::deleteFromSeries(){ void SeriesTreeWidget::readSettings(){ QSettings s; QStringList expanded = s.value("archive/expanded").toStringList(); + expanded.removeDuplicates(); expandItems(expanded); int sortOrder = s.value("archive/sortorder", Qt::DescendingOrder).toInt(); mView->sortByColumn(0, static_cast<Qt::SortOrder>(sortOrder)); @@ -267,6 +268,8 @@ void SeriesTreeWidget::filter(){ default: mProxy->setFilterRegExp(mFilterEdit->text()); } + seriesTree()->expand(QModelIndex()); + expandItems(mExpandedItems); } void SeriesTreeWidget::clearFilter(){ @@ -282,7 +285,9 @@ void SeriesTreeWidget::resort(){ } void SeriesTreeWidget::itemExpanded(const QModelIndex &what){ - mExpandedItems << what.data(SeriesTreeModel::NameRole).toString(); + if(!mExpandedItems.contains(what.data(SeriesTreeModel::NameRole).toString())){ + mExpandedItems << what.data(SeriesTreeModel::NameRole).toString(); + } } void SeriesTreeWidget::itemCollaped(const QModelIndex &what){ |