This commit is contained in:
Luis Ángel San Martín 2014-12-18 21:48:15 +01:00
commit a4cea98589
7 changed files with 129 additions and 50 deletions

View File

@ -340,14 +340,30 @@ void ComicModel::setupReadingListModelData(unsigned long long parentReadingList,
_databasePath = databasePath; _databasePath = databasePath;
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath); QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
{ {
QSqlQuery selectQuery(db); QList<qulonglong> ids;
selectQuery.prepare("SELECT ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read,ci.isBis,ci.currentPage,ci.rating,ci.hasBeenOpened " ids << parentReadingList;
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
"INNER JOIN comic_reading_list crl ON (c.id == crl.comic_id) " QSqlQuery subfolders(db);
"WHERE crl.reading_list_id = :parentReadingList"); subfolders.prepare("SELECT id "
selectQuery.bindValue(":parentReadingList", parentReadingList); "FROM reading_list "
selectQuery.exec(); "WHERE parentId = :parentId");
setupModelData(selectQuery); subfolders.bindValue(":parentId", parentReadingList);
subfolders.exec();
while(subfolders.next())
ids << subfolders.record().value(0).toULongLong();
foreach(qulonglong id, ids)
{
QSqlQuery selectQuery(db);
selectQuery.prepare("SELECT ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read,ci.isBis,ci.currentPage,ci.rating,ci.hasBeenOpened "
"FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) "
"INNER JOIN comic_reading_list crl ON (c.id == crl.comic_id) "
"WHERE crl.reading_list_id = :parentReadingList");
selectQuery.bindValue(":parentReadingList", id);
selectQuery.exec();
setupModelData(selectQuery);
}
} }
db.close(); db.close();
QSqlDatabase::removeDatabase(_databasePath); QSqlDatabase::removeDatabase(_databasePath);

View File

@ -228,7 +228,10 @@ bool DataBaseManagement::createV8Tables(QSqlDatabase &database)
//8.0> tables //8.0> tables
//LABEL //LABEL
QSqlQuery queryLabel(database); QSqlQuery queryLabel(database);
queryLabel.prepare("CREATE TABLE label (id INTEGER PRIMARY KEY, name TEXT NOT NULL, color TEXT NOT NULL, ordering INTEGER NOT NULL)"); //order depends on the color queryLabel.prepare("CREATE TABLE label (id INTEGER PRIMARY KEY, "
"name TEXT NOT NULL, "
"color TEXT NOT NULL, "
"ordering INTEGER NOT NULL)"); //order depends on the color
success = success && queryLabel.exec(); success = success && queryLabel.exec();
//COMIC LABEL //COMIC LABEL

View File

@ -31,18 +31,18 @@ SpecialListItem::SpecialListItem(const QList<QVariant> &data)
QIcon SpecialListItem::getIcon() const QIcon SpecialListItem::getIcon() const
{ {
if(itemData.count()>1) if(itemData.count()>Id)
{ {
QString id = itemData.at(1).toString(); QString id = itemData.at(Id).toString();
return YACReader::noHighlightedIcon(QString(":/images/lists/default_%1.png").arg(id)); return YACReader::noHighlightedIcon(QString(":/images/lists/default_%1.png").arg(id));
} }
} }
ReadingListModel::TypeSpecialList SpecialListItem::getType() const ReadingListModel::TypeSpecialList SpecialListItem::getType() const
{ {
if(itemData.count()>1) if(itemData.count()>Id)
{ {
int id = itemData.at(1).toInt(); int id = itemData.at(Id).toInt();
return (ReadingListModel::TypeSpecialList)id; return (ReadingListModel::TypeSpecialList)id;
} }
} }
@ -57,39 +57,42 @@ LabelItem::LabelItem(const QList<QVariant> &data)
QIcon LabelItem::getIcon() const QIcon LabelItem::getIcon() const
{ {
if(itemData.count()>1) if(itemData.count()>Color)
{ {
QString color = itemData.at(1).toString(); QString color = itemData.at(Color).toString();
return YACReader::noHighlightedIcon(QString(":/images/lists/label_%1.png").arg(color).toLower()); return YACReader::noHighlightedIcon(QString(":/images/lists/label_%1.png").arg(color).toLower());
} }
} }
YACReader::LabelColors LabelItem::colorid() const YACReader::LabelColors LabelItem::colorid() const
{ {
if(itemData.count()>3) if(itemData.count()>Ordering)
{ {
return YACReader::LabelColors(itemData.at(3).toInt()); return YACReader::LabelColors(itemData.at(Ordering).toInt());
} }
} }
QString LabelItem::name() const QString LabelItem::name() const
{ {
if(itemData.count()>0) if(itemData.count()>Name)
{ {
return itemData.at(0).toString(); return itemData.at(Name).toString();
} }
} }
void LabelItem::setName(const QString &name) void LabelItem::setName(const QString &name)
{ {
itemData[0] = name; if(itemData.count()>Name)
{
itemData[Name] = name;
}
} }
qulonglong LabelItem::getId() const qulonglong LabelItem::getId() const
{ {
if(itemData.count()>2) if(itemData.count()>Id)
{ {
return YACReader::LabelColors(itemData.at(2).toULongLong()); return YACReader::LabelColors(itemData.at(Id).toULongLong());
} }
} }
@ -104,9 +107,9 @@ ReadingListItem::ReadingListItem(const QList<QVariant> &data, ReadingListItem *p
QIcon ReadingListItem::getIcon() const QIcon ReadingListItem::getIcon() const
{ {
if(parent->getId() == 0) if(parent->getId() == 0)
return YACReader::noHighlightedIcon(":/images/lists/list.png"); return YACReader::noHighlightedIcon(":/images/lists/list.png"); //top level list
else else
return YACReader::noHighlightedIcon(":/images/folder.png"); return YACReader::noHighlightedIcon(":/images/folder.png"); //sublist
} }
int ReadingListItem::childCount() const int ReadingListItem::childCount() const
@ -168,23 +171,32 @@ void ReadingListItem::removeChild(ReadingListItem *item)
qulonglong ReadingListItem::getId() const qulonglong ReadingListItem::getId() const
{ {
if(itemData.count()>1) if(itemData.count()>Id)
{ return itemData.at(Id).toULongLong();
return itemData.at(1).toULongLong();
}
} }
QString ReadingListItem::name() const QString ReadingListItem::name() const
{ {
if(itemData.count()>0) if(itemData.count()>Name)
{ return itemData.at(Name).toString();
return itemData.at(0).toString();
}
} }
void ReadingListItem::setName(const QString &name) void ReadingListItem::setName(const QString &name)
{ {
itemData[0] = name; if(itemData.count()>Name)
itemData[Name] = name;
}
int ReadingListItem::getOrdering() const
{
if(itemData.count()>Ordering)
return itemData[Ordering].toInt();
}
void ReadingListItem::setOrdering(const int ordering)
{
if(itemData.count()>Ordering)
itemData[Ordering] = ordering;
} }
QList<ReadingListItem *> ReadingListItem::children() QList<ReadingListItem *> ReadingListItem::children()

View File

@ -27,6 +27,12 @@ public:
SpecialListItem(const QList<QVariant> &data); SpecialListItem(const QList<QVariant> &data);
QIcon getIcon() const; QIcon getIcon() const;
ReadingListModel::TypeSpecialList getType() const; ReadingListModel::TypeSpecialList getType() const;
private:
enum DataIndexes {
Name,
Id
};
}; };
//------------------------------------------------------ //------------------------------------------------------
@ -41,6 +47,14 @@ public:
void setName(const QString & name); void setName(const QString & name);
qulonglong getId() const; qulonglong getId() const;
private:
enum DataIndexes {
Name,
Color,
Id,
Ordering
};
}; };
//------------------------------------------------------ //------------------------------------------------------
@ -59,12 +73,21 @@ public:
qulonglong getId() const; qulonglong getId() const;
QString name() const; QString name() const;
void setName(const QString & name); void setName(const QString & name);
int getOrdering() const;
void setOrdering(const int ordering);
QList<ReadingListItem*> children(); QList<ReadingListItem*> children();
private: private:
QList<ReadingListItem*> childItems; QList<ReadingListItem*> childItems;
enum DataIndexes {
Name,
Id,
Finished,
Completed,
Ordering
};
}; };
//------------------------------------------------------ //------------------------------------------------------

View File

@ -369,6 +369,23 @@ bool ReadingListModel::isReadingList(const QModelIndex &mi)
return typeid(*item) == typeid(ReadingListItem); return typeid(*item) == typeid(ReadingListItem);
} }
bool ReadingListModel::isReadingSubList(const QModelIndex &mi)
{
if(!mi.isValid())
return false;
ListItem * item = static_cast<ListItem*>(mi.internalPointer());
if(typeid(*item) == typeid(ReadingListItem))
{
ReadingListItem * readingListItem = static_cast<ReadingListItem *>(item);
if(readingListItem->parent == rootItem)
return false;
else
return true;
}
else
return false;
}
QString ReadingListModel::name(const QModelIndex &mi) QString ReadingListModel::name(const QModelIndex &mi)
{ {
return data(mi,Qt::DisplayRole).toString(); return data(mi,Qt::DisplayRole).toString();
@ -497,7 +514,7 @@ QList<SpecialListItem *> ReadingListModel::setupSpecialLists(QSqlDatabase & db)
<< record.value("id")); << record.value("id"));
} }
//Reading after Favorites, Why? Because I want :P //Reading after Favorites, Why? Because I want to :P
list.insert(1,new SpecialListItem(QList<QVariant>() << "Reading" << 0)); list.insert(1,new SpecialListItem(QList<QVariant>() << "Reading" << 0));
return list; return list;
@ -508,7 +525,11 @@ 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); //TODO add some kind of
while(selectQuery.next()) { while(selectQuery.next()) {
QSqlRecord record = selectQuery.record(); QSqlRecord record = selectQuery.record();
addLabelIntoList(new LabelItem(QList<QVariant>() << record.value("name") << record.value("color") << record.value("id") << record.value("ordering"))); addLabelIntoList(new LabelItem(QList<QVariant>()
<< record.value("name")
<< record.value("color")
<< record.value("id")
<< record.value("ordering")));
} }
//TEST //TEST

View File

@ -48,6 +48,7 @@ public:
void addReadingListAt(const QString & name, const QModelIndex & mi); void addReadingListAt(const QString & name, const QModelIndex & mi);
bool isEditable(const QModelIndex & mi); bool isEditable(const QModelIndex & mi);
bool isReadingList(const QModelIndex & mi); bool isReadingList(const QModelIndex & mi);
bool isReadingSubList(const QModelIndex & mi);
QString name(const QModelIndex & mi); QString name(const QModelIndex & mi);
void rename(const QModelIndex & mi, const QString & name); void rename(const QModelIndex & mi, const QString & name);
void deleteItem(const QModelIndex & mi); void deleteItem(const QModelIndex & mi);

View File

@ -1560,21 +1560,24 @@ void LibraryWindow::errorDeletingFolder()
void LibraryWindow::addNewReadingList() void LibraryWindow::addNewReadingList()
{ {
bool ok; QModelIndexList selectedLists = listsView->selectionModel()->selectedIndexes();
QString newListName = QInputDialog::getText(this, tr("Add new reading lists"), QModelIndex sourceMI;
tr("List name:"), QLineEdit::Normal, if(!selectedLists.isEmpty())
"", &ok); sourceMI = listsModelProxy->mapToSource(selectedLists.at(0));
if (ok) { if(selectedLists.isEmpty() || !listsModel->isReadingSubList(sourceMI) )
QModelIndexList selectedLists = listsView->selectionModel()->selectedIndexes(); {
QModelIndex sourceMI; bool ok;
if(!selectedLists.isEmpty()) QString newListName = QInputDialog::getText(this, tr("Add new reading lists"),
sourceMI = listsModelProxy->mapToSource(selectedLists.at(0)); tr("List name:"), QLineEdit::Normal,
if(selectedLists.isEmpty() || !listsModel->isReadingList(sourceMI)) "", &ok);
listsModel->addReadingList(newListName); //top level if (ok) {
else if(selectedLists.isEmpty() || !listsModel->isReadingList(sourceMI))
{ listsModel->addReadingList(newListName); //top level
listsModel->addReadingListAt(newListName,sourceMI); //sublist else
{
listsModel->addReadingListAt(newListName,sourceMI); //sublist
}
} }
} }
} }