fixed getSortedComicsFromParent

This commit is contained in:
Luis Ángel San Martín 2013-08-29 16:54:19 +02:00
parent 38f934e4c6
commit f67a7c25ac
2 changed files with 64 additions and 14 deletions

View File

@ -1,6 +1,7 @@
#include <QtGui>
#include <QtDebug>
#include <limits>
#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<int>::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())

View File

@ -383,7 +383,7 @@ QList<LibraryItem *> DBHelper::getFoldersFromParent(qulonglong parentId, QSqlDat
QList<LibraryItem *>::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<LibraryItem *> DBHelper::getFoldersFromParent(qulonglong parentId, QSqlDat
return list;
}
//TODO sort using natural sorting and issue number
QList<ComicDB> DBHelper::getSortedComicsFromParent(qulonglong parentId, QSqlDatabase & db)
{
@ -430,18 +430,66 @@ QList<ComicDB> DBHelper::getSortedComicsFromParent(qulonglong parentId, QSqlData
ComicDB last = static_cast<ComicDB>(list.back());
QString nameLast = last.name;
QString nameCurrent = currentItem.name;
int numberLast,numberCurrent;
int max = (std::numeric_limits<int>::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<ComicDB>::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);
}
}
}