Merge - 9.0.0 release

This commit is contained in:
Luis Ángel San Martín
2018-02-18 10:35:24 +01:00
parent 0b52310089
commit 2a136e3ea3
200 changed files with 19288 additions and 5108 deletions

View File

@ -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));
}

View File

@ -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))

View File

@ -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