diff --git a/YACReaderLibrary/db/folder_model.cpp b/YACReaderLibrary/db/folder_model.cpp index 288a7dde..576ebbed 100644 --- a/YACReaderLibrary/db/folder_model.cpp +++ b/YACReaderLibrary/db/folder_model.cpp @@ -127,6 +127,9 @@ QVariant FolderModel::data(const QModelIndex &index, int role) const if (role == FolderModel::FinishedRole) return item->data(FolderModel::Finished); + if (role == FolderModel::MangaRole) + return item->data(FolderModel::Manga); + if (role == FolderModel::IdRole) return item->id; @@ -246,6 +249,7 @@ void FolderModel::setupModelData(QSqlQuery &sqlquery, FolderItem *parent) int path = record.indexOf("path"); int finished = record.indexOf("finished"); int completed = record.indexOf("completed"); + int manga = record.indexOf("manga"); int id = record.indexOf("id"); int parentId = record.indexOf("parentId"); @@ -256,6 +260,7 @@ void FolderModel::setupModelData(QSqlQuery &sqlquery, FolderItem *parent) data << sqlquery.value(path).toString(); data << sqlquery.value(finished).toBool(); data << sqlquery.value(completed).toBool(); + data << sqlquery.value(manga).toBool(); auto item = new FolderItem(data); item->id = sqlquery.value(id).toULongLong(); @@ -278,6 +283,7 @@ void FolderModel::updateFolderModelData(QSqlQuery &sqlquery, FolderItem *parent) int path = record.indexOf("path"); int finished = record.indexOf("finished"); int completed = record.indexOf("completed"); + int manga = record.indexOf("manga"); int id = record.indexOf("id"); int parentId = record.indexOf("parentId"); @@ -288,6 +294,7 @@ void FolderModel::updateFolderModelData(QSqlQuery &sqlquery, FolderItem *parent) data << sqlquery.value(path).toString(); data << sqlquery.value(finished).toBool(); data << sqlquery.value(completed).toBool(); + data << sqlquery.value(manga).toBool(); auto item = new FolderItem(data); item->id = sqlquery.value(id).toULongLong(); @@ -356,6 +363,36 @@ void FolderModel::updateFolderFinishedStatus(const QModelIndexList &list, bool s emit dataChanged(index(list.first().row(), FolderModel::Name), index(list.last().row(), FolderModel::Completed)); } +void FolderModel::updateFolderManga(const QModelIndexList &list, bool manga) +{ + QString connectionName = ""; + { + QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath); + db.transaction(); + foreach (QModelIndex mi, list) { + auto item = static_cast(mi.internalPointer()); + + std::function setManga; + setManga = [&setManga](FolderItem *item, bool manga) -> void { + item->setData(FolderModel::Manga, manga); + + for (auto child : item->children()) { + setManga(child, manga); + } + }; + + setManga(item, manga); + + DBHelper::updateFolderTreeManga(item->id, db, manga); + } + db.commit(); + connectionName = db.connectionName(); + } + QSqlDatabase::removeDatabase(connectionName); + + emit dataChanged(index(list.first().row(), FolderModel::Name), index(list.last().row(), FolderModel::Manga)); +} + QStringList FolderModel::getSubfoldersNames(const QModelIndex &mi) { QStringList result; @@ -461,7 +498,8 @@ QModelIndex FolderModel::addFolderAtParent(const QString &folderName, const QMod Folder newFolder; newFolder.name = folderName; newFolder.parentId = parentItem->id; - newFolder.path = parentItem->data(1).toString() + "/" + folderName; + newFolder.path = parentItem->data(Columns::Path).toString() + "/" + folderName; + newFolder.setManga(parentItem->data(Columns::Manga).toBool()); QString connectionName = ""; { QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath); @@ -478,6 +516,7 @@ QModelIndex FolderModel::addFolderAtParent(const QString &folderName, const QMod data << newFolder.path; data << false; //finished data << true; //completed + data << newFolder.isManga(); auto item = new FolderItem(data); item->id = newFolder.id; diff --git a/YACReaderLibrary/db/folder_model.h b/YACReaderLibrary/db/folder_model.h index 9597d07c..cb49cdda 100644 --- a/YACReaderLibrary/db/folder_model.h +++ b/YACReaderLibrary/db/folder_model.h @@ -67,6 +67,7 @@ public: void updateFolderCompletedStatus(const QModelIndexList &list, bool status); void updateFolderFinishedStatus(const QModelIndexList &list, bool status); + void updateFolderManga(const QModelIndexList &list, bool manga); QStringList getSubfoldersNames(const QModelIndex &mi); @@ -78,13 +79,15 @@ public: Name = 0, Path = 1, Finished = 2, - Completed = 3 + Completed = 3, + Manga = 4 }; //id INTEGER PRIMARY KEY, parentId INTEGER NOT NULL, name TEXT NOT NULL, path TEXT NOT NULL enum Roles { FinishedRole = Qt::UserRole + 1, CompletedRole, - IdRole + IdRole, + MangaRole }; public slots: diff --git a/YACReaderLibrary/db_helper.cpp b/YACReaderLibrary/db_helper.cpp index c7323367..833122ee 100644 --- a/YACReaderLibrary/db_helper.cpp +++ b/YACReaderLibrary/db_helper.cpp @@ -1518,6 +1518,37 @@ QList