From d4b7c6dd8aeba322ec121b3a59fcac50200c10cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Sat, 29 Mar 2025 11:31:53 +0100 Subject: [PATCH] Extract library paths methods to it's own struct in yacreader_global.h and use it everywhere --- YACReaderLibrary/create_library_dialog.cpp | 5 +- YACReaderLibrary/db/comic_model.cpp | 4 +- YACReaderLibrary/db/data_base_management.cpp | 18 +++--- YACReaderLibrary/db/data_base_management.h | 2 +- YACReaderLibrary/db_helper.cpp | 59 ++++++++++++------- .../libraries_update_coordinator.cpp | 4 +- YACReaderLibrary/library_window.cpp | 36 +++++------ YACReaderLibrary/properties_dialog.cpp | 3 +- .../controllers/v2/covercontroller_v2.cpp | 8 +-- YACReaderLibrary/yacreader_libraries.cpp | 25 ++------ YACReaderLibrary/yacreader_libraries.h | 4 -- .../console_ui_library_creator.cpp | 8 +-- YACReaderLibraryServer/libraries_updater.cpp | 8 ++- common/comic_db.cpp | 2 +- common/yacreader_global.h | 37 +++++++++++- 15 files changed, 133 insertions(+), 90 deletions(-) diff --git a/YACReaderLibrary/create_library_dialog.cpp b/YACReaderLibrary/create_library_dialog.cpp index 397ae636..8fbce093 100644 --- a/YACReaderLibrary/create_library_dialog.cpp +++ b/YACReaderLibrary/create_library_dialog.cpp @@ -1,4 +1,5 @@ #include "create_library_dialog.h" +#include "yacreader_global.h" #include #include @@ -6,6 +7,8 @@ #include #include +using namespace YACReader; + CreateLibraryDialog::CreateLibraryDialog(QWidget *parent) : QDialog(parent) { @@ -87,7 +90,7 @@ void CreateLibraryDialog::create() QFileInfo f(path->text()); if (f.exists() && f.isDir() && f.isWritable()) { if (!libraries.contains(nameEdit->text())) { - emit createLibrary(QDir::cleanPath(path->text()), QDir::cleanPath(path->text()) + "/.yacreaderlibrary", nameEdit->text()); + emit createLibrary(QDir::cleanPath(path->text()), LibraryPaths::libraryDataPath(QDir::cleanPath(path->text())), nameEdit->text()); close(); } else emit libraryExists(nameEdit->text()); diff --git a/YACReaderLibrary/db/comic_model.cpp b/YACReaderLibrary/db/comic_model.cpp index cf75b03e..6c29a686 100644 --- a/YACReaderLibrary/db/comic_model.cpp +++ b/YACReaderLibrary/db/comic_model.cpp @@ -11,6 +11,7 @@ #include "comic_db.h" #include "db_helper.h" #include "reading_list_model.h" + #ifdef use_unarr #include #endif @@ -489,11 +490,10 @@ int ComicModel::rowCount(const QModelIndex &parent) const QStringList ComicModel::getPaths(const QString &_source) { QStringList paths; - QString source = _source + "/.yacreaderlibrary/covers/"; QList::ConstIterator itr; for (itr = _data.constBegin(); itr != _data.constEnd(); itr++) { QString hash = (*itr)->data(ComicModel::Hash).toString(); - paths << source + hash + ".jpg"; + paths << LibraryPaths::coverPath(_source, hash); } return paths; diff --git a/YACReaderLibrary/db/data_base_management.cpp b/YACReaderLibrary/db/data_base_management.cpp index 18c6229c..2397eb6f 100644 --- a/YACReaderLibrary/db/data_base_management.cpp +++ b/YACReaderLibrary/db/data_base_management.cpp @@ -4,6 +4,7 @@ #include "initial_comic_info_extractor.h" #include "check_new_version.h" #include "db_helper.h" +#include "yacreader_libraries.h" #include "QsLog.h" @@ -118,15 +119,15 @@ QSqlDatabase DataBaseManagement::createDatabase(QString dest) return db; } -QSqlDatabase DataBaseManagement::loadDatabase(QString path) +QSqlDatabase DataBaseManagement::loadDatabase(QString libraryDataPath) { - if (!QFile::exists(path + "/library.ydb")) { + if (!QFile::exists(libraryDataPath + "/library.ydb")) { return QSqlDatabase(); } QString threadId = QString::number((long long)QThread::currentThreadId(), 16); - QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", path + threadId); - db.setDatabaseName(path + "/library.ydb"); + QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", libraryDataPath + threadId); + db.setDatabaseName(libraryDataPath + "/library.ydb"); if (!db.open()) { return QSqlDatabase(); } @@ -667,7 +668,8 @@ bool DataBaseManagement::importComicsInfo(QString source, QString dest) QString basePath = QString(dest).remove("/.yacreaderlibrary/library.ydb"); QString path = basePath + getComic.record().value("path").toString(); int coverPage = getComic.record().value("coverPage").toInt(); - InitialComicInfoExtractor ie(path, basePath + "/.yacreaderlibrary/covers/" + hash + ".jpg", coverPage); + auto coverPath = LibraryPaths::coverPath(basePath, hash); + InitialComicInfoExtractor ie(path, coverPath, coverPage); ie.extract(); } } @@ -851,7 +853,7 @@ int DataBaseManagement::compareVersions(const QString &v1, const QString v2) return 0; } -bool DataBaseManagement::updateToCurrentVersion(const QString &path) +bool DataBaseManagement::updateToCurrentVersion(const QString &libraryDataPath) { bool pre7 = false; bool pre7_1 = false; @@ -861,7 +863,7 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &path) bool pre9_13 = false; bool pre9_14 = false; - QString fullPath = path + "/library.ydb"; + QString fullPath = libraryDataPath + "/library.ydb"; if (compareVersions(DataBaseManagement::checkValidDB(fullPath), "7.0.0") < 0) pre7 = true; @@ -966,7 +968,7 @@ bool DataBaseManagement::updateToCurrentVersion(const QString &path) QImageReader thumbnail; while (selectQuery.next()) { - thumbnail.setFileName(path % "/covers/" % selectQuery.value(1).toString() % ".jpg"); + thumbnail.setFileName(libraryDataPath % "/covers/" % selectQuery.value(1).toString() % ".jpg"); float coverSizeRatio = static_cast(thumbnail.size().width()) / thumbnail.size().height(); updateCoverInfo.bindValue(":coverSizeRatio", coverSizeRatio); diff --git a/YACReaderLibrary/db/data_base_management.h b/YACReaderLibrary/db/data_base_management.h index e2450502..17219890 100644 --- a/YACReaderLibrary/db/data_base_management.h +++ b/YACReaderLibrary/db/data_base_management.h @@ -46,7 +46,7 @@ public: static QSqlDatabase createDatabase(QString name, QString path); static QSqlDatabase createDatabase(QString dest); // carga una base de datos desde la ruta path - static QSqlDatabase loadDatabase(QString path); + static QSqlDatabase loadDatabase(QString libraryDataPath); static QSqlDatabase loadDatabaseFromFile(QString path); static bool createTables(QSqlDatabase &database); static bool createComicInfoTable(QSqlDatabase &database, QString tableName); diff --git a/YACReaderLibrary/db_helper.cpp b/YACReaderLibrary/db_helper.cpp index 32040272..54f2fe8a 100644 --- a/YACReaderLibrary/db_helper.cpp +++ b/YACReaderLibrary/db_helper.cpp @@ -21,10 +21,14 @@ #include "data_base_management.h" #include "folder.h" #include "yacreader_libraries.h" +#include "yacreader_global.h" #include "qnaturalsorting.h" #include "QsLog.h" + +using namespace YACReader; + // server YACReaderLibraries DBHelper::getLibraries() @@ -40,7 +44,7 @@ QList DBHelper::getFolderSubfoldersFromLibrary(qulonglong library QString connectionName = ""; QList list; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); list = DBHelper::getFoldersFromParent(folderId, db, false); connectionName = db.connectionName(); @@ -82,7 +86,7 @@ QList DBHelper::getFolderComicsFromLibrary(qulonglong libraryId, QString connectionName = ""; QList list; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); list = DBHelper::getComicsFromParent(folderId, db, sort); connectionName = db.connectionName(); @@ -98,7 +102,7 @@ quint32 DBHelper::getNumChildrenFromFolder(qulonglong libraryId, qulonglong fold QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); QSqlQuery selectQuery(db); selectQuery.prepare("SELECT count(*) FROM folder WHERE parentId = :parentId and id <> 1"); @@ -126,7 +130,7 @@ qulonglong DBHelper::getParentFromComicFolderId(qulonglong libraryId, qulonglong QString connectionName = ""; Folder f; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); f = DBHelper::loadFolder(id, db); connectionName = db.connectionName(); @@ -141,7 +145,7 @@ ComicDB DBHelper::getComicInfo(qulonglong libraryId, qulonglong id) QString connectionName = ""; ComicDB comic; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); bool found; comic = DBHelper::loadComic(id, db, found); @@ -157,7 +161,7 @@ QList DBHelper::getSiblings(qulonglong libraryId, qulonglong parentId) QString connectionName = ""; QList comics; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); comics = DBHelper::getSortedComicsFromParent(parentId, db); connectionName = db.connectionName(); } @@ -174,7 +178,7 @@ QString DBHelper::getFolderName(qulonglong libraryId, qulonglong id) QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); QSqlQuery selectQuery(db); // TODO check selectQuery.prepare("SELECT name FROM folder WHERE id = :id"); selectQuery.bindValue(":id", id); @@ -198,7 +202,7 @@ Folder DBHelper::getFolder(qulonglong libraryId, qulonglong id) QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); QSqlQuery selectQuery(db); // TODO check selectQuery.prepare("SELECT * FROM folder WHERE id = :id"); selectQuery.bindValue(":id", id); @@ -259,7 +263,7 @@ QList DBHelper::getLabelComics(qulonglong libraryId, qulonglong labelId QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); QSqlQuery selectQuery(db); selectQuery.prepare("SELECT c.id,c.fileName,ci.title,ci.currentPage,ci.numPages,ci.hash,ci.read,ci.coverSizeRatio " "FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) " @@ -300,7 +304,7 @@ QList DBHelper::getFavorites(qulonglong libraryId) QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); QSqlQuery selectQuery(db); selectQuery.prepare("SELECT c.id,c.fileName,ci.title,ci.currentPage,ci.numPages,ci.hash,ci.read,ci.coverSizeRatio " "FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) " @@ -341,7 +345,7 @@ QList DBHelper::getReading(qulonglong libraryId) QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); QSqlQuery selectQuery(db); selectQuery.prepare("SELECT c.id,c.parentId,c.fileName,ci.title,ci.currentPage,ci.numPages,ci.hash,ci.read,ci.coverSizeRatio,ci.number " "FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) " @@ -381,7 +385,7 @@ QList DBHelper::getReadingLists(qulonglong libraryId) QList list; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); QSqlQuery selectQuery("SELECT * from reading_list WHERE parentId IS NULL ORDER BY name DESC", db); @@ -420,7 +424,7 @@ QList DBHelper::getReadingListFullContent(qulonglong libraryId, qulongl QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); QList ids; ids << readingListId; @@ -618,7 +622,7 @@ void DBHelper::update(qulonglong libraryId, ComicInfo &comicInfo) QString libraryPath = DBHelper::getLibraries().getPath(libraryId); QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); DBHelper::update(&comicInfo, db); connectionName = db.connectionName(); } @@ -872,6 +876,10 @@ Folder DBHelper::updateChildrenInfo(qulonglong folderId, QSqlDatabase &db) } } + if (folder.numChildren == subfolders.count() + comics.count() && folder.firstChildHash == coverHash) { + return folder; + } + folder.numChildren = subfolders.count() + comics.count(); folder.firstChildHash = coverHash; @@ -894,6 +902,9 @@ Folder DBHelper::updateChildrenInfo(qulonglong folderId, QSqlDatabase &db) void DBHelper::updateChildrenInfo(QSqlDatabase &db) { + // measure time + auto start = std::chrono::high_resolution_clock::now(); + QSqlQuery selectQuery(db); // TODO check selectQuery.prepare("SELECT id FROM folder f WHERE f.parentId = 1 AND f.id <> 1"); selectQuery.exec(); @@ -901,6 +912,12 @@ void DBHelper::updateChildrenInfo(QSqlDatabase &db) while (selectQuery.next()) { DBHelper::updateChildrenInfo(selectQuery.value(0).toULongLong(), db); } + + auto end = std::chrono::high_resolution_clock::now(); + + QString time = QString::number(std::chrono::duration_cast(end - start).count()); + QString message = "updateChildrenInfo took " + time + "ms"; + QLOG_INFO() << message; } void DBHelper::updateProgress(qulonglong libraryId, const ComicInfo &comicInfo) @@ -908,7 +925,7 @@ void DBHelper::updateProgress(qulonglong libraryId, const ComicInfo &comicInfo) QString libraryPath = DBHelper::getLibraries().getPath(libraryId); QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); bool found; ComicDB comic = DBHelper::loadComic(comicInfo.id, db, found); @@ -929,7 +946,7 @@ void DBHelper::setComicAsReading(qulonglong libraryId, const ComicInfo &comicInf QString libraryPath = DBHelper::getLibraries().getPath(libraryId); QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); bool found; ComicDB comic = DBHelper::loadComic(comicInfo.id, db, found); @@ -970,7 +987,7 @@ void DBHelper::updateFromRemoteClient(qulonglong libraryId, const ComicInfo &com QString libraryPath = DBHelper::getLibraries().getPath(libraryId); QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); bool found; ComicDB comic = DBHelper::loadComic(comicInfo.id, db, found); @@ -1009,7 +1026,7 @@ QMap> DBHelper::updateFromRemoteClient(const QMap &comics) QString libraryPath = DBHelper::getLibraries().getPath(libraries.getId(name)); QString connectionName = ""; { - QSqlDatabase db = DataBaseManagement::loadDatabase(libraryPath + "/.yacreaderlibrary"); + QSqlDatabase db = DataBaseManagement::loadDatabase(LibraryPaths::libraryDataPath(libraryPath)); db.transaction(); @@ -1595,7 +1612,7 @@ QList