From c148a96d7f206eea551cc6c22a3292b7573ef5c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Thu, 27 Mar 2025 20:19:08 +0100 Subject: [PATCH 01/10] Add static methods to get the data paths in a library --- YACReaderLibrary/yacreader_libraries.cpp | 17 ++++++++++++++++- YACReaderLibrary/yacreader_libraries.h | 4 ++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/YACReaderLibrary/yacreader_libraries.cpp b/YACReaderLibrary/yacreader_libraries.cpp index 4e3f13f6..b5e63714 100644 --- a/YACReaderLibrary/yacreader_libraries.cpp +++ b/YACReaderLibrary/yacreader_libraries.cpp @@ -228,7 +228,7 @@ QString YACReaderLibrary::getPath() const QString YACReaderLibrary::getDBPath() const { - return path + "/.yacreaderlibrary"; + return YACReaderLibrary::libraryDataPath(path); } int YACReaderLibrary::getLegacyId() const @@ -251,6 +251,21 @@ bool YACReaderLibrary::operator!=(const YACReaderLibrary &other) const return !(*this == other); } +QString YACReaderLibrary::libraryDataPath(const QString &libraryPath) +{ + return QDir(libraryPath).filePath(".yacreaderlibrary"); +} + +QString YACReaderLibrary::libraryDatabasePath(const QString &libraryPath) +{ + return QDir(YACReaderLibrary::libraryDataPath(libraryPath)).filePath("library.ydb"); +} + +QString YACReaderLibrary::libraryCoversFolderPath(const QString &libraryPath) +{ + return QDir(YACReaderLibrary::libraryDataPath(libraryPath)).filePath("covers"); +} + QDataStream &operator<<(QDataStream &out, const YACReaderLibrary &library) { out << library.name << library.path << library.legacyId << library.id; diff --git a/YACReaderLibrary/yacreader_libraries.h b/YACReaderLibrary/yacreader_libraries.h index e7e8c86d..763c6b53 100644 --- a/YACReaderLibrary/yacreader_libraries.h +++ b/YACReaderLibrary/yacreader_libraries.h @@ -55,6 +55,10 @@ public: friend QDataStream &operator>>(QDataStream &in, YACReaderLibrary &library); operator QString() const { return QString("%1 [%2, %3, %4]").arg(name, QString::number(legacyId), id.toString(QUuid::WithoutBraces), path); } + static QString libraryDataPath(const QString &libraryPath); // libraryPath + /.yacreaderlibrary + static QString libraryDatabasePath(const QString &libraryPath); // libraryPath + /.yacreaderlibrary/library.ydb + static QString libraryCoversFolderPath(const QString &libraryPath); // libraryPath + /.yacreaderlibrary/covers + private: QString name; QString path; From 4e675d4326dac95f72361b47253f176ced50861c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Thu, 27 Mar 2025 20:28:21 +0100 Subject: [PATCH 02/10] Use YACReaderLibrary to create paths in ConsoleUILibraryCreator --- YACReaderLibraryServer/console_ui_library_creator.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/YACReaderLibraryServer/console_ui_library_creator.cpp b/YACReaderLibraryServer/console_ui_library_creator.cpp index 8933c5a0..3af2c8ca 100644 --- a/YACReaderLibraryServer/console_ui_library_creator.cpp +++ b/YACReaderLibraryServer/console_ui_library_creator.cpp @@ -33,7 +33,7 @@ void ConsoleUILibraryCreator::createLibrary(const QString &name, const QString & return; } - libraryCreator->createLibrary(cleanPath, QDir::cleanPath(pathDir.absolutePath() + "/.yacreaderlibrary")); + libraryCreator->createLibrary(cleanPath, YACReaderLibrary::libraryDataPath(cleanPath)); connect(libraryCreator, &LibraryCreator::finished, this, &ConsoleUILibraryCreator::done); connect(libraryCreator, &LibraryCreator::comicAdded, this, &ConsoleUILibraryCreator::newComic); @@ -62,7 +62,7 @@ void ConsoleUILibraryCreator::updateLibrary(const QString &path) LibraryCreator *libraryCreator = new LibraryCreator(settings); QString cleanPath = QDir::cleanPath(pathDir.absolutePath()); - libraryCreator->updateLibrary(cleanPath, QDir::cleanPath(pathDir.absolutePath() + "/.yacreaderlibrary")); + libraryCreator->updateLibrary(cleanPath, YACReaderLibrary::libraryDataPath(cleanPath)); connect(libraryCreator, &LibraryCreator::finished, this, &ConsoleUILibraryCreator::done); connect(libraryCreator, &LibraryCreator::comicAdded, this, &ConsoleUILibraryCreator::newComic); @@ -85,8 +85,8 @@ void ConsoleUILibraryCreator::addExistingLibrary(const QString &name, const QStr } QString cleanPath = QDir::cleanPath(pathDir.absolutePath()); - if (!QDir(cleanPath + "/.yacreaderlibrary").exists()) { - std::cout << "No library database found in directory." << std::endl; + if (!QDir(YACReaderLibrary::libraryDataPath(cleanPath)).exists()) { + std::cout << "No data folder found in path: " << cleanPath.toStdString() << std::endl; return; } @@ -135,7 +135,7 @@ void ConsoleUILibraryCreator::rescanXMLInfoLibrary(const QString &path) connect(scanner, &XMLInfoLibraryScanner::finished, &eventLoop, &QEventLoop::quit); std::cout << "Scanning comics"; - scanner->scanLibrary(cleanPath, QDir::cleanPath(pathDir.absolutePath() + "/.yacreaderlibrary")); + scanner->scanLibrary(cleanPath, YACReaderLibrary::libraryDataPath(cleanPath)); eventLoop.exec(); } From 5aa637fdbe838b9077f87ebfcb2fb06fb7337932 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Thu, 27 Mar 2025 21:19:12 +0100 Subject: [PATCH 03/10] Use YACReaderLibrary::libraryDataPath in YACReaderLibraries::getDBPath --- YACReaderLibrary/yacreader_libraries.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/YACReaderLibrary/yacreader_libraries.cpp b/YACReaderLibrary/yacreader_libraries.cpp index b5e63714..f24c15fb 100644 --- a/YACReaderLibrary/yacreader_libraries.cpp +++ b/YACReaderLibrary/yacreader_libraries.cpp @@ -62,7 +62,7 @@ QString YACReaderLibraries::getPath(const QUuid &id) QString YACReaderLibraries::getDBPath(int id) { - return getPath(id) + "/.yacreaderlibrary"; + return YACReaderLibrary::libraryDataPath(getPath(id)); } QString YACReaderLibraries::getName(int id) 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 04/10] 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