From 9c467d7d6963ac424dce25e26b7872c01010e000 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Sun, 28 Nov 2021 13:40:58 +0400 Subject: [PATCH] Addressed libkiwix API changes Fixed the build failure caused by the libkiwix API changes done in kiwix/libkiwix#636. --- src/contentmanager.cpp | 23 ++++++++++++--------- src/kiwixapp.cpp | 43 +--------------------------------------- src/kiwixapp.h | 23 +-------------------- src/library.cpp | 6 ++++-- src/library.h | 2 +- src/urlschemehandler.cpp | 4 ++-- 6 files changed, 23 insertions(+), 78 deletions(-) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 5e56cfc..00138ec 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -50,7 +50,7 @@ QStringList ContentManager::getTranslations(const QStringList &keys) QStringList ContentManager::getBookInfos(QString id, const QStringList &keys) { QStringList values; - kiwix::Book* b = [=]()->kiwix::Book* { + const kiwix::Book* b = [=]()->const kiwix::Book* { try { return &mp_library->getBookById(id); } catch (...) { @@ -137,7 +137,9 @@ QStringList ContentManager::updateDownloadInfos(QString id, const QStringList &k try { d = mp_downloader->getDownload(b.getDownloadId()); } catch(...) { - b.setDownloadId(""); + kiwix::Book bCopy(b); + bCopy.setDownloadId(""); + mp_library->getKiwixLibrary().addOrUpdateBook(bCopy); mp_library->save(); emit(mp_library->booksChanged()); return values; @@ -146,11 +148,13 @@ QStringList ContentManager::updateDownloadInfos(QString id, const QStringList &k d->updateStatus(true); if (d->getStatus() == kiwix::Download::K_COMPLETE) { QString tmp(QString::fromStdString(d->getPath())); - b.setPath(QDir::toNativeSeparators(tmp).toStdString()); - b.setDownloadId(""); - b.setPathValid(true); + kiwix::Book bCopy(b); + bCopy.setPath(QDir::toNativeSeparators(tmp).toStdString()); + bCopy.setDownloadId(""); + bCopy.setPathValid(true); // removing book url so that download link in kiwix-serve is not displayed. - b.setUrl(""); + bCopy.setUrl(""); + mp_library->getKiwixLibrary().addOrUpdateBook(bCopy); mp_library->save(); mp_library->bookmarksChanged(); if (!m_local) { @@ -209,7 +213,7 @@ QString ContentManager::downloadBook(const QString &id) { if (!mp_downloader) return ""; - auto& book = [&]()->kiwix::Book& { + const auto& book = [&]()->const kiwix::Book& { try { return m_remoteLibrary.getBookById(id.toStdString()); } catch (...) { @@ -233,8 +237,9 @@ QString ContentManager::downloadBook(const QString &id) } catch (std::exception& e) { return ""; } - book.setDownloadId(download->getDid()); - mp_library->addBookToLibrary(book); + kiwix::Book bookCopy(book); + bookCopy.setDownloadId(download->getDid()); + mp_library->addBookToLibrary(bookCopy); mp_library->save(); emit(oneBookChanged(id)); return QString::fromStdString(download->getDid()); diff --git a/src/kiwixapp.cpp b/src/kiwixapp.cpp index 653b6b8..3ef92fe 100644 --- a/src/kiwixapp.cpp +++ b/src/kiwixapp.cpp @@ -15,47 +15,6 @@ #include #include -//////////////////////////////////////////////////////////////////////////////// -// KiwixApp::NameMapperProxy -//////////////////////////////////////////////////////////////////////////////// - -KiwixApp::NameMapperProxy::NameMapperProxy(kiwix::Library& lib) - : library(lib) -{ - update(); -} - -void KiwixApp::NameMapperProxy::update() -{ - const auto newNameMapper = new kiwix::HumanReadableNameMapper(library, false); - std::lock_guard lock(mutex); - nameMapper.reset(newNameMapper); -} - -KiwixApp::NameMapperProxy::NameMapperHandle -KiwixApp::NameMapperProxy::currentNameMapper() const -{ - // Return a copy of the handle to the current NameMapper object. It will - // ensure that the object survives any call to NameMapperProxy::update() - // made before the completion of any pending operation on that object. - std::lock_guard lock(mutex); - return nameMapper; -} - -std::string KiwixApp::NameMapperProxy::getNameForId(const std::string& id) -{ - // Ensure that the current nameMapper object survives a concurrent call - // to NameMapperProxy::update() - return currentNameMapper()->getNameForId(id); -} - -std::string KiwixApp::NameMapperProxy::getIdForName(const std::string& name) -{ - // Ensure that the current nameMapper object survives a concurrent call - // to NameMapperProxy::update() - return currentNameMapper()->getIdForName(name); -} - //////////////////////////////////////////////////////////////////////////////// // KiwixApp //////////////////////////////////////////////////////////////////////////////// @@ -68,7 +27,7 @@ KiwixApp::KiwixApp(int& argc, char *argv[]) mp_downloader(nullptr), mp_manager(nullptr), mp_mainWindow(nullptr), - m_nameMapper(m_library.getKiwixLibrary()), + m_nameMapper(m_library.getKiwixLibrary(), false), m_server(&m_library.getKiwixLibrary(), &m_nameMapper) { try { diff --git a/src/kiwixapp.h b/src/kiwixapp.h index 9e8d14f..8e8446d 100644 --- a/src/kiwixapp.h +++ b/src/kiwixapp.h @@ -106,27 +106,6 @@ protected: void createAction(); void postInit(); -private: // types - class NameMapperProxy : public kiwix::NameMapper { - typedef std::shared_ptr NameMapperHandle; - public: - explicit NameMapperProxy(kiwix::Library& library); - - virtual std::string getNameForId(const std::string& id); - virtual std::string getIdForName(const std::string& name); - - void update(); - - private: - NameMapperHandle currentNameMapper() const; - - private: - mutable std::mutex mutex; - kiwix::Library& library; - NameMapperHandle nameMapper; - }; - - private: QTranslator m_qtTranslator, m_appTranslator; SettingsManager m_settingsManager; @@ -139,7 +118,7 @@ private: TabBar* mp_tabWidget; SideBarType m_currentSideType; QErrorMessage* mp_errorDialog; - NameMapperProxy m_nameMapper; + kiwix::UpdatableNameMapper m_nameMapper; kiwix::Server m_server; Translation m_translation; diff --git a/src/library.cpp b/src/library.cpp index 838f72f..ffe0504 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -9,7 +9,9 @@ class LibraryManipulator: public kiwix::LibraryManipulator { public: LibraryManipulator(Library* p_library) - : mp_library(p_library) {} + : kiwix::LibraryManipulator(&p_library->getKiwixLibrary()) + , mp_library(p_library) + {} virtual ~LibraryManipulator() {} bool addBookToLibrary(kiwix::Book book) { auto ret = mp_library->m_library.addBook(book); @@ -118,7 +120,7 @@ void Library::save() m_library.writeBookmarksToFile(kiwix::appendToDirectory(m_libraryDirectory.toStdString(), "library.bookmarks.xml")); } -kiwix::Book &Library::getBookById(QString id) +const kiwix::Book &Library::getBookById(QString id) const { return m_library.getBookById(id.toStdString()); } diff --git a/src/library.h b/src/library.h index 7e71949..1ebe779 100644 --- a/src/library.h +++ b/src/library.h @@ -40,7 +40,7 @@ public: void save(); kiwix::Library& getKiwixLibrary() { return m_library; } public slots: - kiwix::Book& getBookById(QString id); + const kiwix::Book& getBookById(QString id) const; signals: void booksChanged(); diff --git a/src/urlschemehandler.cpp b/src/urlschemehandler.cpp index f54f9d0..cfd17da 100644 --- a/src/urlschemehandler.cpp +++ b/src/urlschemehandler.cpp @@ -78,8 +78,8 @@ UrlSchemeHandler::handleMetaRequest(QWebEngineUrlRequestJob* request) class IdNameMapper : public kiwix::NameMapper { - std::string getNameForId(const std::string& id) { return id + ".zim"; } - std::string getIdForName(const std::string& id) { return id.substr(0, id.size()-4); } + std::string getNameForId(const std::string& id) const { return id + ".zim"; } + std::string getIdForName(const std::string& id) const { return id.substr(0, id.size()-4); } };