mirror of
https://github.com/YACReader/yacreader
synced 2025-11-28 05:23:16 -05:00
Merge - 9.0.0 release
This commit is contained in:
@ -695,100 +695,47 @@ QString ComicModel::getComicPath(QModelIndex mi)
|
||||
|
||||
void ComicModel::setupModelData(QSqlQuery &sqlquery)
|
||||
{
|
||||
ComicItem * currentItem;
|
||||
while (sqlquery.next())
|
||||
int numColumns = sqlquery.record().count();
|
||||
|
||||
while (sqlquery.next())
|
||||
{
|
||||
QList<QVariant> data;
|
||||
QSqlRecord record = sqlquery.record();
|
||||
for(int i=0;i<record.count();i++)
|
||||
data << record.value(i);
|
||||
|
||||
currentItem = new ComicItem(data);
|
||||
bool lessThan = false;
|
||||
if(_data.isEmpty())
|
||||
_data.append(currentItem);
|
||||
else
|
||||
{
|
||||
ComicItem * last = _data.back();
|
||||
QString nameLast = last->data(ComicModel::FileName).toString();
|
||||
QString nameCurrent = currentItem->data(ComicModel::FileName).toString();
|
||||
int numberLast,numberCurrent;
|
||||
int max = (std::numeric_limits<int>::max)();
|
||||
numberLast = numberCurrent = max;
|
||||
for(int i=0;i<numColumns;i++)
|
||||
data << sqlquery.value(i);
|
||||
|
||||
if(!last->data(ComicModel::Number).isNull())
|
||||
numberLast = last->data(ComicModel::Number).toInt();
|
||||
|
||||
if(!currentItem->data(ComicModel::Number).isNull())
|
||||
numberCurrent = currentItem->data(ComicModel::Number).toInt();
|
||||
|
||||
QList<ComicItem *>::iterator i;
|
||||
i = _data.end();
|
||||
i--;
|
||||
|
||||
if(numberCurrent != max) //sort the current item by issue number
|
||||
{
|
||||
while ((lessThan =numberCurrent < numberLast) && i != _data.begin())
|
||||
{
|
||||
i--;
|
||||
numberLast = max;
|
||||
|
||||
if(!(*i)->data(ComicModel::Number).isNull())
|
||||
numberLast = (*i)->data(ComicModel::Number).toInt();
|
||||
}
|
||||
|
||||
if(lessThan)
|
||||
_data.insert(i,currentItem);
|
||||
else
|
||||
{
|
||||
if(numberCurrent == numberLast)
|
||||
if(currentItem->data(ComicModel::IsBis).toBool())
|
||||
{
|
||||
_data.insert(++i,currentItem);
|
||||
}
|
||||
else
|
||||
_data.insert(i,currentItem);
|
||||
else
|
||||
_data.insert(++i,currentItem);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
else //sort the current item by title
|
||||
{
|
||||
while ((lessThan = naturalSortLessThanCI(nameCurrent,nameLast)) && i != _data.begin() && numberLast == max)
|
||||
{
|
||||
i--;
|
||||
nameLast = (*i)->data(ComicModel::FileName).toString();
|
||||
numberLast = max;
|
||||
|
||||
if(!(*i)->data(ComicModel::Number).isNull())
|
||||
numberLast = (*i)->data(ComicModel::Number).toInt();
|
||||
}
|
||||
|
||||
if(numberLast != max)
|
||||
_data.insert(++i,currentItem);
|
||||
else
|
||||
if(lessThan)
|
||||
_data.insert(i,currentItem);
|
||||
else
|
||||
_data.insert(++i,currentItem);
|
||||
continue;
|
||||
|
||||
}
|
||||
}
|
||||
_data.append(new ComicItem(data));
|
||||
}
|
||||
|
||||
std::sort(_data.begin(), _data.end(), [](const ComicItem *c1, const ComicItem *c2) {
|
||||
if(c1->data(ComicModel::Number).isNull() && c2->data(ComicModel::Number).isNull())
|
||||
{
|
||||
return naturalSortLessThanCI(c1->data(ComicModel::FileName).toString(), c2->data(ComicModel::FileName).toString());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c1->data(ComicModel::Number).isNull() == false && c2->data(ComicModel::Number).isNull() == false)
|
||||
{
|
||||
return c1->data(ComicModel::Number).toInt() < c2->data(ComicModel::Number).toInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
return c2->data(ComicModel::Number).isNull();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//comics are sorted by "ordering", the sorting is done in the sql query
|
||||
void ComicModel::setupModelDataForList(QSqlQuery &sqlquery)
|
||||
{
|
||||
int numColumns = sqlquery.record().count();
|
||||
|
||||
while (sqlquery.next())
|
||||
{
|
||||
QList<QVariant> data;
|
||||
QSqlRecord record = sqlquery.record();
|
||||
for(int i=0;i<record.count();i++)
|
||||
data << record.value(i);
|
||||
for(int i=0;i<numColumns;i++)
|
||||
data << sqlquery.value(i);
|
||||
|
||||
_data.append(new ComicItem(data));
|
||||
}
|
||||
|
||||
@ -146,6 +146,18 @@ QVariant FolderModel::data(const QModelIndex &index, int role) const
|
||||
|
||||
FolderItem *item = static_cast<FolderItem*>(index.internalPointer());
|
||||
|
||||
if (role == Qt::ToolTipRole)
|
||||
{
|
||||
QString toolTip = item->data(FolderModel::Name).toString();
|
||||
int totalNumOfChildren = item->childCount() + item->comicNames.size();
|
||||
if(totalNumOfChildren > 0)
|
||||
{
|
||||
toolTip = toolTip + " - " + QString::number(totalNumOfChildren);
|
||||
}
|
||||
|
||||
return toolTip;
|
||||
}
|
||||
|
||||
if (role == Qt::DecorationRole)
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
@ -175,8 +187,6 @@ QVariant FolderModel::data(const QModelIndex &index, int role) const
|
||||
if (role != Qt::DisplayRole)
|
||||
return QVariant();
|
||||
|
||||
|
||||
|
||||
return item->data(index.column());
|
||||
}
|
||||
//! [3]
|
||||
@ -307,19 +317,27 @@ void FolderModel::setupModelData(QSqlQuery &sqlquery, FolderItem *parent)
|
||||
//se a<>ade el nodo 0
|
||||
items.insert(parent->id,parent);
|
||||
|
||||
QSqlRecord record = sqlquery.record();
|
||||
|
||||
int name = record.indexOf("name");
|
||||
int path = record.indexOf("path");
|
||||
int finished = record.indexOf("finished");
|
||||
int completed = record.indexOf("completed");
|
||||
int id = record.indexOf("id");
|
||||
int parentId = record.indexOf("parentId");
|
||||
|
||||
while (sqlquery.next()) {
|
||||
QList<QVariant> data;
|
||||
QSqlRecord record = sqlquery.record();
|
||||
|
||||
data << record.value("name").toString();
|
||||
data << record.value("path").toString();
|
||||
data << record.value("finished").toBool();
|
||||
data << record.value("completed").toBool();
|
||||
data << sqlquery.value(name).toString();
|
||||
data << sqlquery.value(path).toString();
|
||||
data << sqlquery.value(finished).toBool();
|
||||
data << sqlquery.value(completed).toBool();
|
||||
FolderItem * item = new FolderItem(data);
|
||||
|
||||
item->id = record.value("id").toULongLong();
|
||||
item->id = sqlquery.value(id).toULongLong();
|
||||
//la inserci<63>n de hijos se hace de forma ordenada
|
||||
FolderItem * parent = items.value(record.value("parentId").toULongLong());
|
||||
FolderItem * parent = items.value(sqlquery.value(parentId).toULongLong());
|
||||
//if(parent !=0) //TODO if parent==0 the parent of item was removed from the DB and delete on cascade didn't work, ERROR.
|
||||
parent->appendChild(item);
|
||||
//se a<>ade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones
|
||||
@ -331,20 +349,27 @@ void FolderModel::updateFolderModelData(QSqlQuery &sqlquery, FolderItem *parent)
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
|
||||
while (sqlquery.next()) {
|
||||
QLOG_DEBUG () << "habia next";
|
||||
QList<QVariant> data;
|
||||
QSqlRecord record = sqlquery.record();
|
||||
QSqlRecord record = sqlquery.record();
|
||||
|
||||
data << record.value("name").toString();
|
||||
data << record.value("path").toString();
|
||||
data << record.value("finished").toBool();
|
||||
data << record.value("completed").toBool();
|
||||
int name = record.indexOf("name");
|
||||
int path = record.indexOf("path");
|
||||
int finished = record.indexOf("finished");
|
||||
int completed = record.indexOf("completed");
|
||||
int id = record.indexOf("id");
|
||||
int parentId = record.indexOf("parentId");
|
||||
|
||||
while (sqlquery.next()) {
|
||||
QList<QVariant> data;
|
||||
|
||||
data << sqlquery.value(name).toString();
|
||||
data << sqlquery.value(path).toString();
|
||||
data << sqlquery.value(finished).toBool();
|
||||
data << sqlquery.value(completed).toBool();
|
||||
FolderItem * item = new FolderItem(data);
|
||||
|
||||
item->id = record.value("id").toULongLong();
|
||||
item->id = sqlquery.value(id).toULongLong();
|
||||
//la inserci<63>n de hijos se hace de forma ordenada
|
||||
FolderItem * parent = items.value(record.value("parentId").toULongLong());
|
||||
FolderItem * parent = items.value(sqlquery.value(parentId).toULongLong());
|
||||
if(parent !=0) //TODO if parent==0 the parent of item was removed from the DB and delete on cascade didn't work, ERROR.
|
||||
parent->appendChild(item);
|
||||
//se a<>ade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones
|
||||
@ -717,21 +742,28 @@ void FolderModelProxy::setupFilteredModelData(QSqlQuery &sqlquery, FolderItem *p
|
||||
//se a<>ade el nodo 0 al modelo que representa el arbol de elementos que cumplen con el filtro
|
||||
filteredItems.insert(parent->id,parent);
|
||||
|
||||
QSqlRecord record = sqlquery.record();
|
||||
|
||||
int name = record.indexOf("name");
|
||||
int path = record.indexOf("path");
|
||||
int finished = record.indexOf("finished");
|
||||
int completed = record.indexOf("completed");
|
||||
int parentIdIndex = record.indexOf("parentId");
|
||||
|
||||
while (sqlquery.next()) { //se procesan todos los folders que cumplen con el filtro
|
||||
//datos de la base de datos
|
||||
QList<QVariant> data;
|
||||
QSqlRecord record = sqlquery.record();
|
||||
|
||||
data << record.value("name").toString();
|
||||
data << record.value("path").toString();
|
||||
data << record.value("finished").toBool();
|
||||
data << record.value("completed").toBool();
|
||||
data << sqlquery.value(name).toString();
|
||||
data << sqlquery.value(path).toString();
|
||||
data << sqlquery.value(finished).toBool();
|
||||
data << sqlquery.value(completed).toBool();
|
||||
|
||||
FolderItem * item = new FolderItem(data);
|
||||
item->id = sqlquery.value(0).toULongLong();
|
||||
|
||||
//id del padre
|
||||
quint64 parentId = record.value("parentId").toULongLong();
|
||||
quint64 parentId = sqlquery.value(parentIdIndex).toULongLong();
|
||||
|
||||
//se a<>ade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones
|
||||
if(!filteredItems.contains(item->id))
|
||||
|
||||
@ -390,15 +390,9 @@ void ReadingListModel::addNewLabel(const QString &name, YACReader::LabelColors c
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
qulonglong id = DBHelper::insertLabel(name, color, db);
|
||||
|
||||
Q_UNUSED(id);
|
||||
int newPos = addLabelIntoList(new LabelItem(QList<QVariant>() << name << YACReader::colorToName(color) << id << color));
|
||||
beginInsertRows(QModelIndex(),specialLists.count()+1+newPos+1, specialLists.count()+1+newPos+1);
|
||||
|
||||
beginInsertRows(QModelIndex(),0, 0);
|
||||
|
||||
// using the specfic row pos for inserting doesnt work
|
||||
// int newPos = addLabelIntoList(new LabelItem(QList<QVariant>() << name << YACReader::colorToName(color) << id << color));
|
||||
// beginInsertRows(QModelIndex(),specialLists.count()+1+newPos+1, specialLists.count()+1+newPos+1);
|
||||
|
||||
// endInsertRows();
|
||||
|
||||
endInsertRows();
|
||||
|
||||
@ -596,21 +590,29 @@ void ReadingListModel::setupReadingListsData(QSqlQuery &sqlquery, ReadingListIte
|
||||
{
|
||||
items.insert(parent->getId(),parent);
|
||||
|
||||
QSqlRecord record = sqlquery.record();
|
||||
|
||||
int name = record.indexOf("name");
|
||||
int id = record.indexOf("id");
|
||||
int finished = record.indexOf("finished");
|
||||
int completed = record.indexOf("completed");
|
||||
int ordering = record.indexOf("ordering");
|
||||
int parentId = record.indexOf("parentId");
|
||||
|
||||
while (sqlquery.next())
|
||||
{
|
||||
QSqlRecord record = sqlquery.record();
|
||||
ReadingListItem * rli = new ReadingListItem(QList<QVariant>()
|
||||
<< record.value("name")
|
||||
<< record.value("id")
|
||||
<< record.value("finished")
|
||||
<< record.value("completed")
|
||||
<< record.value("ordering"));
|
||||
<< sqlquery.value(name)
|
||||
<< sqlquery.value(id)
|
||||
<< sqlquery.value(finished)
|
||||
<< sqlquery.value(completed)
|
||||
<< sqlquery.value(ordering));
|
||||
|
||||
ReadingListItem * currentParent;
|
||||
if(record.value("parentId").isNull())
|
||||
if(sqlquery.value(parentId).isNull())
|
||||
currentParent = rootItem;
|
||||
else
|
||||
currentParent = items.value(record.value("parentId").toULongLong());
|
||||
currentParent = items.value(sqlquery.value(parentId).toULongLong());
|
||||
|
||||
currentParent->appendChild(rli);
|
||||
|
||||
@ -620,14 +622,19 @@ void ReadingListModel::setupReadingListsData(QSqlQuery &sqlquery, ReadingListIte
|
||||
|
||||
QList<SpecialListItem *> ReadingListModel::setupSpecialLists(QSqlDatabase & db)
|
||||
{
|
||||
QList<SpecialListItem *> list;
|
||||
QList<SpecialListItem *> list;
|
||||
|
||||
QSqlQuery selectQuery("SELECT * FROM default_reading_list ORDER BY id,name",db);
|
||||
|
||||
QSqlRecord record = selectQuery.record();
|
||||
|
||||
int name = record.indexOf("name");
|
||||
int id = record.indexOf("id");
|
||||
|
||||
while(selectQuery.next()) {
|
||||
QSqlRecord record = selectQuery.record();
|
||||
list << new SpecialListItem(QList<QVariant>()
|
||||
<< record.value("name")
|
||||
<< record.value("id"));
|
||||
<< selectQuery.value(name)
|
||||
<< selectQuery.value(id));
|
||||
}
|
||||
|
||||
//Reading after Favorites, Why? Because I want to :P
|
||||
@ -638,14 +645,21 @@ QList<SpecialListItem *> ReadingListModel::setupSpecialLists(QSqlDatabase & db)
|
||||
|
||||
void ReadingListModel::setupLabels(QSqlDatabase & db)
|
||||
{
|
||||
QSqlQuery selectQuery("SELECT * FROM label ORDER BY ordering,name",db); //TODO add some kind of
|
||||
QSqlQuery selectQuery("SELECT * FROM label ORDER BY ordering,name",db);
|
||||
|
||||
QSqlRecord record = selectQuery.record();
|
||||
|
||||
int name = record.indexOf("name");
|
||||
int color = record.indexOf("color");
|
||||
int id = record.indexOf("id");
|
||||
int ordering = record.indexOf("ordering");
|
||||
|
||||
while(selectQuery.next()) {
|
||||
QSqlRecord record = selectQuery.record();
|
||||
addLabelIntoList(new LabelItem(QList<QVariant>()
|
||||
<< record.value("name")
|
||||
<< record.value("color")
|
||||
<< record.value("id")
|
||||
<< record.value("ordering")));
|
||||
<< selectQuery.value(name)
|
||||
<< selectQuery.value(color)
|
||||
<< selectQuery.value(id)
|
||||
<< selectQuery.value(ordering)));
|
||||
}
|
||||
|
||||
//TEST
|
||||
|
||||
Reference in New Issue
Block a user