From 13a29e2657f2a13505c8aa71730111c09aa7992f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Sun, 16 May 2021 09:01:35 +0200 Subject: [PATCH] Make "delete" icon work properly in the "Reading" list Only the "Favorites" special list was handled. --- YACReaderLibrary/db/comic_model.cpp | 31 +++++++++++++++++++++++ YACReaderLibrary/db/comic_model.h | 2 ++ YACReaderLibrary/db/reading_list_item.cpp | 9 +++++++ YACReaderLibrary/db/reading_list_item.h | 1 + YACReaderLibrary/db_helper.cpp | 16 ++++++++++++ YACReaderLibrary/db_helper.h | 1 + YACReaderLibrary/library_window.cpp | 3 +-- 7 files changed, 61 insertions(+), 2 deletions(-) diff --git a/YACReaderLibrary/db/comic_model.cpp b/YACReaderLibrary/db/comic_model.cpp index da6c8a46..842922be 100644 --- a/YACReaderLibrary/db/comic_model.cpp +++ b/YACReaderLibrary/db/comic_model.cpp @@ -10,6 +10,7 @@ #include "comic_db.h" #include "db_helper.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 #include "QsLog.h" @@ -986,6 +987,36 @@ void ComicModel::deleteComicsFromFavorites(const QList &comicsList) deleteComicsFromModel(comicsList); } +void ComicModel::deleteComicsFromReading(const QList &comicsList) +{ + QList 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 &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 &comicsList, qulonglong labelId) { QList comics = getComics(comicsList); diff --git a/YACReaderLibrary/db/comic_model.h b/YACReaderLibrary/db/comic_model.h index 4d9c0594..cbe49d45 100644 --- a/YACReaderLibrary/db/comic_model.h +++ b/YACReaderLibrary/db/comic_model.h @@ -119,6 +119,8 @@ public: void addComicsToReadingList(const QList &comicsList, qulonglong readingListId); void deleteComicsFromFavorites(const QList &comicsList); + void deleteComicsFromReading(const QList &comicsList); + void deleteComicsFromSpecialList(const QList &comicsList, qulonglong specialListId); void deleteComicsFromLabel(const QList &comicsList, qulonglong labelId); void deleteComicsFromReadingList(const QList &comicsList, qulonglong readingListId); diff --git a/YACReaderLibrary/db/reading_list_item.cpp b/YACReaderLibrary/db/reading_list_item.cpp index f80e34b3..53bf7199 100644 --- a/YACReaderLibrary/db/reading_list_item.cpp +++ b/YACReaderLibrary/db/reading_list_item.cpp @@ -44,6 +44,15 @@ QIcon SpecialListItem::getIcon() const return QIcon(); } +qulonglong SpecialListItem::getId() const +{ + if (itemData.count() > Id) { + return itemData.at(Id).toInt(); + } + + return 0; +} + ReadingListModel::TypeSpecialList SpecialListItem::getType() const { if (itemData.count() > Id) { diff --git a/YACReaderLibrary/db/reading_list_item.h b/YACReaderLibrary/db/reading_list_item.h index a6849afd..612bc6cf 100644 --- a/YACReaderLibrary/db/reading_list_item.h +++ b/YACReaderLibrary/db/reading_list_item.h @@ -27,6 +27,7 @@ class SpecialListItem : public ListItem public: SpecialListItem(const QList &data); QIcon getIcon() const override; + qulonglong getId() const override; ReadingListModel::TypeSpecialList getType() const; private: diff --git a/YACReaderLibrary/db_helper.cpp b/YACReaderLibrary/db_helper.cpp index 3b3dd683..de3a4d56 100644 --- a/YACReaderLibrary/db_helper.cpp +++ b/YACReaderLibrary/db_helper.cpp @@ -471,6 +471,22 @@ void DBHelper::deleteComicsFromFavorites(const QList &comicsList, QSqlD 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 &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 &comicsList, qulonglong labelId, QSqlDatabase &db) { db.transaction(); diff --git a/YACReaderLibrary/db_helper.h b/YACReaderLibrary/db_helper.h index 63f3217d..93bedfff 100644 --- a/YACReaderLibrary/db_helper.h +++ b/YACReaderLibrary/db_helper.h @@ -48,6 +48,7 @@ public: static void removeListFromDB(qulonglong id, QSqlDatabase &db); //logic deletes static void deleteComicsFromFavorites(const QList &comicsList, QSqlDatabase &db); + static void deleteComicsFromReading(const QList &comicsList, QSqlDatabase &db); static void deleteComicsFromLabel(const QList &comicsList, qulonglong labelId, QSqlDatabase &db); static void deleteComicsFromReadingList(const QList &comicsList, qulonglong readingListId, QSqlDatabase &db); //inserts diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 1f68a6d6..b8a0b339 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -2591,8 +2591,7 @@ void LibraryWindow::deleteComicsFromList() qulonglong id = mi.data(ReadingListModel::IDRole).toULongLong(); switch (typeList) { case ReadingListModel::SpecialList: - //by now only 'favorites' - comicsModel->deleteComicsFromFavorites(indexList); + comicsModel->deleteComicsFromSpecialList(indexList, id); break; case ReadingListModel::Label: comicsModel->deleteComicsFromLabel(indexList, id);