Make "delete" icon work properly in the "Reading" list

Only the "Favorites" special list was handled.
This commit is contained in:
Luis Ángel San Martín 2021-05-16 09:01:35 +02:00
parent e799513fb4
commit 13a29e2657
7 changed files with 61 additions and 2 deletions

View File

@ -10,6 +10,7 @@
#include "comic_db.h" #include "comic_db.h"
#include "db_helper.h" #include "db_helper.h"
#include "query_parser.h" #include "query_parser.h"
#include "reading_list_model.h"
//ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read //ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read
#include "QsLog.h" #include "QsLog.h"
@ -986,6 +987,36 @@ void ComicModel::deleteComicsFromFavorites(const QList<QModelIndex> &comicsList)
deleteComicsFromModel(comicsList); deleteComicsFromModel(comicsList);
} }
void ComicModel::deleteComicsFromReading(const QList<QModelIndex> &comicsList)
{
QList<ComicDB> comics = getComics(comicsList);
QString connectionName = "";
{
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
DBHelper::deleteComicsFromReading(comics, db);
connectionName = db.connectionName();
}
QSqlDatabase::removeDatabase(connectionName);
if (mode == Reading)
deleteComicsFromModel(comicsList);
}
void ComicModel::deleteComicsFromSpecialList(const QList<QModelIndex> &comicsList, qulonglong specialListId)
{
auto type = (ReadingListModel::TypeSpecialList)specialListId;
switch (type) {
case ReadingListModel::TypeSpecialList::Reading:
deleteComicsFromReading(comicsList);
break;
case ReadingListModel::TypeSpecialList::Favorites:
deleteComicsFromFavorites(comicsList);
break;
}
}
void ComicModel::deleteComicsFromLabel(const QList<QModelIndex> &comicsList, qulonglong labelId) void ComicModel::deleteComicsFromLabel(const QList<QModelIndex> &comicsList, qulonglong labelId)
{ {
QList<ComicDB> comics = getComics(comicsList); QList<ComicDB> comics = getComics(comicsList);

View File

@ -119,6 +119,8 @@ public:
void addComicsToReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId); void addComicsToReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId);
void deleteComicsFromFavorites(const QList<QModelIndex> &comicsList); void deleteComicsFromFavorites(const QList<QModelIndex> &comicsList);
void deleteComicsFromReading(const QList<QModelIndex> &comicsList);
void deleteComicsFromSpecialList(const QList<QModelIndex> &comicsList, qulonglong specialListId);
void deleteComicsFromLabel(const QList<QModelIndex> &comicsList, qulonglong labelId); void deleteComicsFromLabel(const QList<QModelIndex> &comicsList, qulonglong labelId);
void deleteComicsFromReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId); void deleteComicsFromReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId);

View File

@ -44,6 +44,15 @@ QIcon SpecialListItem::getIcon() const
return QIcon(); return QIcon();
} }
qulonglong SpecialListItem::getId() const
{
if (itemData.count() > Id) {
return itemData.at(Id).toInt();
}
return 0;
}
ReadingListModel::TypeSpecialList SpecialListItem::getType() const ReadingListModel::TypeSpecialList SpecialListItem::getType() const
{ {
if (itemData.count() > Id) { if (itemData.count() > Id) {

View File

@ -27,6 +27,7 @@ class SpecialListItem : public ListItem
public: public:
SpecialListItem(const QList<QVariant> &data); SpecialListItem(const QList<QVariant> &data);
QIcon getIcon() const override; QIcon getIcon() const override;
qulonglong getId() const override;
ReadingListModel::TypeSpecialList getType() const; ReadingListModel::TypeSpecialList getType() const;
private: private:

View File

@ -471,6 +471,22 @@ void DBHelper::deleteComicsFromFavorites(const QList<ComicDB> &comicsList, QSqlD
db.commit(); db.commit();
} }
//a.k.a set comics as unread by reverting the conditions used to load the comics -> void ComicModel::setupReadingModelData(const QString &databasePath)
void DBHelper::deleteComicsFromReading(const QList<ComicDB> &comicsList, QSqlDatabase &db)
{
db.transaction();
QLOG_DEBUG() << "deleteComicsFromReading----------------------------------";
for (auto comic : comicsList) {
comic.info.hasBeenOpened = false;
comic.info.currentPage = 0; //update sets hasBeenOpened to true if currentPage > 0;
DBHelper::update(&comic.info, db);
}
db.commit();
}
void DBHelper::deleteComicsFromLabel(const QList<ComicDB> &comicsList, qulonglong labelId, QSqlDatabase &db) void DBHelper::deleteComicsFromLabel(const QList<ComicDB> &comicsList, qulonglong labelId, QSqlDatabase &db)
{ {
db.transaction(); db.transaction();

View File

@ -48,6 +48,7 @@ public:
static void removeListFromDB(qulonglong id, QSqlDatabase &db); static void removeListFromDB(qulonglong id, QSqlDatabase &db);
//logic deletes //logic deletes
static void deleteComicsFromFavorites(const QList<ComicDB> &comicsList, QSqlDatabase &db); static void deleteComicsFromFavorites(const QList<ComicDB> &comicsList, QSqlDatabase &db);
static void deleteComicsFromReading(const QList<ComicDB> &comicsList, QSqlDatabase &db);
static void deleteComicsFromLabel(const QList<ComicDB> &comicsList, qulonglong labelId, QSqlDatabase &db); static void deleteComicsFromLabel(const QList<ComicDB> &comicsList, qulonglong labelId, QSqlDatabase &db);
static void deleteComicsFromReadingList(const QList<ComicDB> &comicsList, qulonglong readingListId, QSqlDatabase &db); static void deleteComicsFromReadingList(const QList<ComicDB> &comicsList, qulonglong readingListId, QSqlDatabase &db);
//inserts //inserts

View File

@ -2591,8 +2591,7 @@ void LibraryWindow::deleteComicsFromList()
qulonglong id = mi.data(ReadingListModel::IDRole).toULongLong(); qulonglong id = mi.data(ReadingListModel::IDRole).toULongLong();
switch (typeList) { switch (typeList) {
case ReadingListModel::SpecialList: case ReadingListModel::SpecialList:
//by now only 'favorites' comicsModel->deleteComicsFromSpecialList(indexList, id);
comicsModel->deleteComicsFromFavorites(indexList);
break; break;
case ReadingListModel::Label: case ReadingListModel::Label:
comicsModel->deleteComicsFromLabel(indexList, id); comicsModel->deleteComicsFromLabel(indexList, id);