summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--helper.cpp13
-rw-r--r--helper.h2
-rw-r--r--seriestreemodel.cpp14
-rw-r--r--seriestreewidget.cpp7
4 files changed, 29 insertions, 7 deletions
diff --git a/helper.cpp b/helper.cpp
index 6cb5cd2..26044fa 100644
--- a/helper.cpp
+++ b/helper.cpp
@@ -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();
}
diff --git a/helper.h b/helper.h
index c9d1ad3..5955320 100644
--- a/helper.h
+++ b/helper.h
@@ -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){