From f67a7c25ac62b784f698017a266bf9b3b5339ed7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Thu, 29 Aug 2013 16:54:19 +0200 Subject: [PATCH] fixed getSortedComicsFromParent --- YACReaderLibrary/db/tablemodel.cpp | 16 ++++---- YACReaderLibrary/db_helper.cpp | 62 ++++++++++++++++++++++++++---- 2 files changed, 64 insertions(+), 14 deletions(-) diff --git a/YACReaderLibrary/db/tablemodel.cpp b/YACReaderLibrary/db/tablemodel.cpp index e6e408ec..b783d4b3 100644 --- a/YACReaderLibrary/db/tablemodel.cpp +++ b/YACReaderLibrary/db/tablemodel.cpp @@ -1,6 +1,7 @@ #include #include +#include #include "tableitem.h" #include "tablemodel.h" @@ -270,7 +271,7 @@ QString TableModel::getComicPath(QModelIndex mi) return _data.at(mi.row())->data(TableModel::Path).toString(); return ""; } -#define NUMBER_MAX 99999999 + void TableModel::setupModelData(QSqlQuery &sqlquery) { TableItem * currentItem; @@ -291,7 +292,8 @@ void TableModel::setupModelData(QSqlQuery &sqlquery) QString nameLast = last->data(TableModel::FileName).toString(); QString nameCurrent = currentItem->data(TableModel::FileName).toString(); int numberLast,numberCurrent; - numberLast = numberCurrent = NUMBER_MAX; //TODO change by std limit + int max = (std::numeric_limits::max)(); + numberLast = numberCurrent = max; //TODO change by std limit if(!last->data(TableModel::Number).isNull()) numberLast = last->data(TableModel::Number).toInt(); @@ -303,12 +305,12 @@ void TableModel::setupModelData(QSqlQuery &sqlquery) i = _data.end(); i--; - if(numberCurrent != NUMBER_MAX) + if(numberCurrent != max) { while ((lessThan =numberCurrent < numberLast) && i != _data.begin()) { i--; - numberLast = NUMBER_MAX; //TODO change by std limit + numberLast = max; if(!(*i)->data(TableModel::Number).isNull()) numberLast = (*i)->data(TableModel::Number).toInt(); @@ -316,11 +318,11 @@ void TableModel::setupModelData(QSqlQuery &sqlquery) } else { - while ((lessThan = naturalSortLessThanCI(nameCurrent,nameLast)) && i != _data.begin() && numberLast == 99999999) + while ((lessThan = naturalSortLessThanCI(nameCurrent,nameLast)) && i != _data.begin() && numberLast == max) { i--; nameLast = (*i)->data(TableModel::FileName).toString(); - numberLast = NUMBER_MAX; //TODO change by std limit + numberLast = max; if(!(*i)->data(TableModel::Number).isNull()) numberLast = (*i)->data(TableModel::Number).toInt(); @@ -329,7 +331,7 @@ void TableModel::setupModelData(QSqlQuery &sqlquery) } if(!lessThan) //si se ha encontrado un elemento menor que current, se inserta justo después { - if(numberCurrent != NUMBER_MAX) + if(numberCurrent != max) { if(numberCurrent == numberLast) if(currentItem->data(TableModel::IsBis).toBool()) diff --git a/YACReaderLibrary/db_helper.cpp b/YACReaderLibrary/db_helper.cpp index f5bd003f..15828dc1 100644 --- a/YACReaderLibrary/db_helper.cpp +++ b/YACReaderLibrary/db_helper.cpp @@ -383,7 +383,7 @@ QList DBHelper::getFoldersFromParent(qulonglong parentId, QSqlDat QList::iterator i; i = list.end(); i--; - while ((0 > (lessThan = nameCurrent.localeAwareCompare(nameLast))) && i != list.begin()) + while ((0 > (lessThan = naturalSortLessThanCI(nameCurrent,nameLast))) && i != list.begin()) { i--; nameLast = (*i)->name; @@ -398,7 +398,7 @@ QList DBHelper::getFoldersFromParent(qulonglong parentId, QSqlDat return list; } -//TODO sort using natural sorting and issue number + QList DBHelper::getSortedComicsFromParent(qulonglong parentId, QSqlDatabase & db) { @@ -430,18 +430,66 @@ QList DBHelper::getSortedComicsFromParent(qulonglong parentId, QSqlData ComicDB last = static_cast(list.back()); QString nameLast = last.name; QString nameCurrent = currentItem.name; + + int numberLast,numberCurrent; + int max = (std::numeric_limits::max)(); + numberLast = numberCurrent = max; //TODO change by std limit + + if(last.info.number!=NULL) + numberLast = *last.info.number; + + if(currentItem.info.number!=NULL) + numberCurrent = *currentItem.info.number; + QList::iterator i; i = list.end(); i--; - while ((0 > (lessThan = nameCurrent.localeAwareCompare(nameLast))) && i != list.begin()) //se usa la misma ordenación que en QDir + + if(numberCurrent != max) { - i--; - nameLast = (*i).name; + while ((lessThan =numberCurrent < numberLast) && i != list.begin()) + { + i--; + numberLast = max; + + if((*i).info.number != NULL) + numberLast = *(*i).info.number; + } } - if(lessThan>0) //si se ha encontrado un elemento menor que current, se inserta justo despuĆ©s - list.insert(++i,currentItem); else + { + while ((lessThan = naturalSortLessThanCI(nameCurrent,nameLast)) && i != list.begin() && numberLast == max) + { + i--; + nameLast = (*i).name; + numberLast = max; + + if((*i).info.number != NULL) + numberLast = *(*i).info.number; + } + + } + if(!lessThan) //si se ha encontrado un elemento menor que current, se inserta justo despuĆ©s + { + if(numberCurrent != max) + { + if(numberCurrent == numberLast) + if(currentItem.info.isBis) + { + list.insert(++i,currentItem); + } + else + list.insert(i,currentItem); + else + list.insert(++i,currentItem); + } + else + list.insert(++i,currentItem); + } + else + { list.insert(i,currentItem); + } } }