diff --git a/src/librssguard/gui/webbrowser.cpp b/src/librssguard/gui/webbrowser.cpp index 78d9a1496..149a9a698 100644 --- a/src/librssguard/gui/webbrowser.cpp +++ b/src/librssguard/gui/webbrowser.cpp @@ -107,7 +107,7 @@ void WebBrowser::createConnections() { connect(qApp->web()->readability(), &Readability::errorOnHtmlReadabiliting, this, &WebBrowser::readabilityFailed); connect(qApp->web()->articleParse(), &ArticleParse::articleParsed, this, &WebBrowser::setFullArticleHtml); - connect(qApp->web()->articleParse(), &ArticleParse::errorOnArticlePArsing, this, &WebBrowser::fullArticleFailed); + connect(qApp->web()->articleParse(), &ArticleParse::errorOnArticleParsing, this, &WebBrowser::fullArticleFailed); } void WebBrowser::updateUrl(const QUrl& url) { @@ -306,13 +306,13 @@ void WebBrowser::newWindowRequested(WebViewer* viewer) { qApp->mainForm()->tabWidget()->addBrowser(false, false, browser); } -void WebBrowser::setReadabledHtml(QObject* sndr, const QString& better_html) { +void WebBrowser::setReadabledHtml(const QObject* sndr, const QString& better_html) { if (sndr == this && !better_html.isEmpty()) { m_webView->setReadabledHtml(better_html, m_webView->url()); } } -void WebBrowser::readabilityFailed(QObject* sndr, const QString& error) { +void WebBrowser::readabilityFailed(const QObject* sndr, const QString& error) { if (sndr == this && !error.isEmpty()) { m_webView->setReadabledHtml(error, m_webView->url()); } @@ -344,7 +344,7 @@ Message WebBrowser::messageFromExtractor(const QJsonDocument& extracted_data) co return msg; } -void WebBrowser::setFullArticleHtml(QObject* sndr, const QString& url, const QString& json_answer) { +void WebBrowser::setFullArticleHtml(const QObject* sndr, const QString& url, const QString& json_answer) { if (sndr == this && !json_answer.isEmpty()) { QJsonDocument json_doc = QJsonDocument::fromJson(json_answer.toUtf8()); @@ -385,7 +385,7 @@ void WebBrowser::setFullArticleHtml(QObject* sndr, const QString& url, const QSt } } -void WebBrowser::fullArticleFailed(QObject* sndr, const QString& error) { +void WebBrowser::fullArticleFailed(const QObject* sndr, const QString& error) { if (sndr == this && !error.isEmpty()) { m_webView->setReadabledHtml(error, m_webView->url()); } diff --git a/src/librssguard/gui/webbrowser.h b/src/librssguard/gui/webbrowser.h index 8b36bc6c2..62cf6b93f 100644 --- a/src/librssguard/gui/webbrowser.h +++ b/src/librssguard/gui/webbrowser.h @@ -76,11 +76,11 @@ class RSSGUARD_DLLSPEC WebBrowser : public TabContent { void readabilePage(); void getFullArticle(); - void setReadabledHtml(QObject* sndr, const QString& better_html); - void readabilityFailed(QObject* sndr, const QString& error); + void setReadabledHtml(const QObject* sndr, const QString& better_html); + void readabilityFailed(const QObject* sndr, const QString& error); - void setFullArticleHtml(QObject* sndr, const QString &url, const QString& json_answer); - void fullArticleFailed(QObject* sndr, const QString& error); + void setFullArticleHtml(const QObject* sndr, const QString& url, const QString& json_answer); + void fullArticleFailed(const QObject* sndr, const QString& error); signals: void windowCloseRequested(); diff --git a/src/librssguard/miscellaneous/application.cpp b/src/librssguard/miscellaneous/application.cpp index 327b3333b..600beadd9 100644 --- a/src/librssguard/miscellaneous/application.cpp +++ b/src/librssguard/miscellaneous/application.cpp @@ -1369,19 +1369,25 @@ void Application::fillCmdArgumentsParser(QCommandLineParser& parser) { QSL("[url-1 ... url-n]")); } -void Application::onNodeJsPackageUpdateError(const QList& pkgs, const QString& error) { +void Application::onNodeJsPackageUpdateError(const QObject* sndr, + const QList& pkgs, + const QString& error) { + Q_UNUSED(sndr) qApp->showGuiMessage(Notification::Event::NodePackageFailedToUpdate, - {{}, - tr("Packages %1 were NOT updated because of error: %2.") + {tr("Node.js"), + tr("Packages were NOT updated because of error: %2. Affected packages:\n%1") .arg(NodeJs::packagesToString(pkgs), error), QSystemTrayIcon::MessageIcon::Critical}); } -void Application::onNodeJsPackageInstalled(const QList& pkgs, bool already_up_to_date) { +void Application::onNodeJsPackageInstalled(const QObject* sndr, + const QList& pkgs, + bool already_up_to_date) { + Q_UNUSED(sndr) if (!already_up_to_date) { qApp->showGuiMessage(Notification::Event::NodePackageUpdated, - {{}, - tr("Packages %1 were updated.").arg(NodeJs::packagesToString(pkgs)), + {tr("Node.js"), + tr("These packages were installed/updated:\n%1").arg(NodeJs::packagesToString(pkgs)), QSystemTrayIcon::MessageIcon::Information}); } } diff --git a/src/librssguard/miscellaneous/application.h b/src/librssguard/miscellaneous/application.h index eb8f1ad92..ee6b79692 100644 --- a/src/librssguard/miscellaneous/application.h +++ b/src/librssguard/miscellaneous/application.h @@ -218,8 +218,12 @@ class RSSGUARD_DLLSPEC Application : public SingleApplication { void loadMessageToFeedAndArticleList(Feed* feed, const Message& message); void fillCmdArgumentsParser(QCommandLineParser& parser); - void onNodeJsPackageUpdateError(const QList& pkgs, const QString& error); - void onNodeJsPackageInstalled(const QList& pkgs, bool already_up_to_date); + void onNodeJsPackageUpdateError(const QObject* sndr, + const QList& pkgs, + const QString& error); + void onNodeJsPackageInstalled(const QObject* sndr, + const QList& pkgs, + bool already_up_to_date); void onCommitData(QSessionManager& manager); void onSaveState(QSessionManager& manager); void onAboutToQuit(); diff --git a/src/librssguard/miscellaneous/nodejs.cpp b/src/librssguard/miscellaneous/nodejs.cpp index 4c1a209b0..91f18c755 100644 --- a/src/librssguard/miscellaneous/nodejs.cpp +++ b/src/librssguard/miscellaneous/nodejs.cpp @@ -110,7 +110,7 @@ NodeJs::PackageStatus NodeJs::packageStatus(const PackageMetadata& pkg) const { } } -void NodeJs::installUpdatePackages(const QList& pkgs) { +void NodeJs::installUpdatePackages(const QObject* sndr, const QList& pkgs) { QList to_install; QStringList desc; @@ -130,19 +130,17 @@ void NodeJs::installUpdatePackages(const QList& pkgs) { } } catch (const ApplicationException& ex) { - emit packageError(pkgs, ex.message()); - + emit packageError(sndr, pkgs, ex.message()); return; } } if (to_install.isEmpty()) { qDebugNN << LOGSEC_NODEJS << "Packages" << QUOTE_W_SPACE(desc.join(QL1S(", "))) << "are up-to-date."; - - emit packageInstalledUpdated(pkgs, true); + emit packageInstalledUpdated(sndr, pkgs, true); } else { - installPackages(pkgs); + installPackages(sndr, pkgs); } } @@ -150,15 +148,20 @@ QString NodeJs::packagesToString(const QList& pkgs) { QStringList desc; for (const PackageMetadata& mt : pkgs) { - desc << QSL("%1@%2").arg(mt.m_name, mt.m_version); + desc << QSL("\u2022 %1@%2").arg(mt.m_name, mt.m_version); } - return desc.join(QL1S(", ")); + return desc.join(QL1S("\n")); } -void NodeJs::installPackages(const QList& pkgs) { +void NodeJs::installPackages(const QObject* sndr, const QList& pkgs) { QStringList to_install; + qApp->showGuiMessage(Notification::Event::NodePackageUpdated, + GuiMessage(tr("Node.js"), + tr("Some packages are missing and will be installed or updated:\n%1") + .arg(packagesToString(pkgs)))); + try { for (const PackageMetadata& mt : pkgs) { to_install.append(QSL("%1@%2").arg(mt.m_name, mt.m_version)); @@ -169,32 +172,31 @@ void NodeJs::installPackages(const QList& pkgs) { connect(proc, QOverload::of(&QProcess::finished), this, - [pkgs, this](int exit_code, QProcess::ExitStatus status) { - QProcess* sndr = qobject_cast(sender()); + [=](int exit_code, QProcess::ExitStatus status) { + QProcess* proc_sndr = qobject_cast(sender()); if (exit_code != EXIT_SUCCESS || status == QProcess::ExitStatus::CrashExit) { - qCriticalNN << LOGSEC_NODEJS << "Error when installing packages" - << QUOTE_W_SPACE_DOT(packagesToString(pkgs)) - << " Exit code:" << QUOTE_W_SPACE_DOT(exit_code) - << " Message:" << QUOTE_W_SPACE_DOT(sndr->readAllStandardError()); + qCriticalNN << LOGSEC_NODEJS << "Error when installing packages\n" + << packagesToString(pkgs) << "\nExit code:" << QUOTE_W_SPACE_DOT(exit_code) + << " Message:" << QUOTE_W_SPACE_DOT(proc_sndr->readAllStandardError()); - emit packageError(pkgs, sndr->errorString()); + emit packageError(sndr, pkgs, proc_sndr->errorString()); } else { qDebugNN << LOGSEC_NODEJS << "Installed/updated packages" << QUOTE_W_SPACE(packagesToString(pkgs)); - emit packageInstalledUpdated(pkgs, false); + emit packageInstalledUpdated(sndr, pkgs, false); } }); connect(proc, &QProcess::errorOccurred, this, [pkgs, this](QProcess::ProcessError error) { QProcess* sndr = qobject_cast(sender()); - qCriticalNN << LOGSEC_NODEJS << "Error when installing packages" << QUOTE_W_SPACE_DOT(packagesToString(pkgs)) - << " Message:" << QUOTE_W_SPACE_DOT(error); + qCriticalNN << LOGSEC_NODEJS << "Error when installing packages\n" + << packagesToString(pkgs) << "\nMessage:" << QUOTE_W_SPACE_DOT(error); - emit packageError(pkgs, sndr->errorString()); + emit packageError(sndr, pkgs, sndr->errorString()); }); - qDebugNN << LOGSEC_NODEJS << "Installing packages" << QUOTE_W_SPACE_DOT(packagesToString(pkgs)); + qDebugNN << LOGSEC_NODEJS << "Installing packages\n" << packagesToString(pkgs); to_install.prepend(QSL("--production")); to_install.prepend(QSL("install")); @@ -208,6 +210,6 @@ void NodeJs::installPackages(const QList& pkgs) { qCriticalNN << LOGSEC_NODEJS << "Packages" << QUOTE_W_SPACE(to_install) << "were not installed, error:" << QUOTE_W_SPACE_DOT(ex.message()); - emit packageError(pkgs, ex.message()); + emit packageError(sndr, pkgs, ex.message()); } } diff --git a/src/librssguard/miscellaneous/nodejs.h b/src/librssguard/miscellaneous/nodejs.h index abfbc90a1..3e43e555c 100644 --- a/src/librssguard/miscellaneous/nodejs.h +++ b/src/librssguard/miscellaneous/nodejs.h @@ -61,15 +61,15 @@ class NodeJs : public QObject { // If package IS installed but out-of-date, it is updated to desired versions. // // NOTE: https://docs.npmjs.com/cli/v8/commands/npm-install - void installUpdatePackages(const QList& pkgs); + void installUpdatePackages(const QObject* sndr, const QList& pkgs); - void installPackages(const QList& pkgs); + void installPackages(const QObject* sndr, const QList& pkgs); static QString packagesToString(const QList& pkgs); signals: - void packageError(const QList& pkgs, const QString& error); - void packageInstalledUpdated(const QList& pkgs, bool already_up_to_date); + void packageError(const QObject* sndr, const QList& pkgs, const QString& error); + void packageInstalledUpdated(const QObject* sndr, const QList& pkgs, bool already_up_to_date); private: Settings* m_settings; diff --git a/src/librssguard/network-web/adblock/adblockmanager.cpp b/src/librssguard/network-web/adblock/adblockmanager.cpp index d33de6b02..dcb49c45a 100644 --- a/src/librssguard/network-web/adblock/adblockmanager.cpp +++ b/src/librssguard/network-web/adblock/adblockmanager.cpp @@ -106,7 +106,7 @@ void AdBlockManager::setEnabled(bool enabled) { if (m_enabled) { if (!m_installing) { m_installing = true; - qApp->nodejs()->installUpdatePackages({{QSL(CLIQZ_ADBLOCKED_PACKAGE), QSL(CLIQZ_ADBLOCKED_VERSION)}}); + qApp->nodejs()->installUpdatePackages(this, {{QSL(CLIQZ_ADBLOCKED_PACKAGE), QSL(CLIQZ_ADBLOCKED_VERSION)}}); } } else { @@ -177,7 +177,9 @@ void AdBlockManager::showDialog() { AdBlockDialog(qApp->mainFormWidget()).exec(); } -void AdBlockManager::onPackageReady(const QList& pkgs, bool already_up_to_date) { +void AdBlockManager::onPackageReady(const QObject* sndr, + const QList& pkgs, + bool already_up_to_date) { Q_UNUSED(already_up_to_date) bool concerns_adblock = boolinq::from(pkgs).any([](const NodeJs::PackageMetadata& pkg) { @@ -201,7 +203,9 @@ void AdBlockManager::onPackageReady(const QList& pkgs, } } -void AdBlockManager::onPackageError(const QList& pkgs, const QString& error) { +void AdBlockManager::onPackageError(const QObject* sndr, + const QList& pkgs, + const QString& error) { bool concerns_adblock = boolinq::from(pkgs).any([](const NodeJs::PackageMetadata& pkg) { return pkg.m_name == QSL(CLIQZ_ADBLOCKED_PACKAGE); }); diff --git a/src/librssguard/network-web/adblock/adblockmanager.h b/src/librssguard/network-web/adblock/adblockmanager.h index 60dd88701..db8e774e0 100644 --- a/src/librssguard/network-web/adblock/adblockmanager.h +++ b/src/librssguard/network-web/adblock/adblockmanager.h @@ -69,8 +69,8 @@ class AdBlockManager : public QObject { void processTerminated(); private slots: - void onPackageReady(const QList& pkgs, bool already_up_to_date); - void onPackageError(const QList& pkgs, const QString& error); + void onPackageReady(const QObject* sndr, const QList& pkgs, bool already_up_to_date); + void onPackageError(const QObject* sndr, const QList& pkgs, const QString& error); void onServerProcessFinished(int exit_code, QProcess::ExitStatus exit_status); private: diff --git a/src/librssguard/network-web/articleparse.cpp b/src/librssguard/network-web/articleparse.cpp index 76f4f8011..b3dbfe7e4 100644 --- a/src/librssguard/network-web/articleparse.cpp +++ b/src/librssguard/network-web/articleparse.cpp @@ -19,7 +19,9 @@ ArticleParse::ArticleParse(QObject* parent) : QObject{parent}, m_modulesInstalli connect(qApp->nodejs(), &NodeJs::packageError, this, &ArticleParse::onPackageError); } -void ArticleParse::onPackageReady(const QList& pkgs, bool already_up_to_date) { +void ArticleParse::onPackageReady(const QObject* sndr, + const QList& pkgs, + bool already_up_to_date) { Q_UNUSED(already_up_to_date) bool concerns_extractor = boolinq::from(pkgs).any([](const NodeJs::PackageMetadata& pkg) { @@ -40,10 +42,12 @@ void ArticleParse::onPackageReady(const QList& pkgs, bo {true, true, false}); // Emit this just to allow the action again for user. - emit articleParsed(nullptr, {}, tr("Packages for article-extractor are installed. You can now use this feature!")); + emit errorOnArticleParsing(sndr, tr("Packages for article-extractor are installed. You can now use this feature!")); } -void ArticleParse::onPackageError(const QList& pkgs, const QString& error) { +void ArticleParse::onPackageError(const QObject* sndr, + const QList& pkgs, + const QString& error) { bool concerns_extractor = boolinq::from(pkgs).any([](const NodeJs::PackageMetadata& pkg) { return pkg.m_name == QSL(EXTRACTOR_PACKAGE); }); @@ -61,9 +65,8 @@ void ArticleParse::onPackageError(const QList& pkgs, co {true, true, false}); // Emit this just to allow readability again for user. - emit articleParsed(nullptr, - {}, - tr("Packages for article-extractor are NOT installed. There is error: %1").arg(error)); + emit errorOnArticleParsing(sndr, + tr("Packages for article-extractor are NOT installed. There is error: %1").arg(error)); } void ArticleParse::parseArticle(QObject* sndr, const QString& url) { @@ -85,15 +88,8 @@ void ArticleParse::parseArticle(QObject* sndr, const QString& url) { if (!m_modulesInstalling) { // We make sure to update modules. m_modulesInstalling = true; - - qApp->showGuiMessage(Notification::Event::NodePackageUpdated, - {tr("Node.js libraries not installed"), - tr("%1 will now install some needed libraries, this will take only a few seconds. " - "You will be notified when installation is complete.") - .arg(QSL(APP_NAME)), - QSystemTrayIcon::MessageIcon::Warning}, - {true, true, false}); - qApp->nodejs()->installUpdatePackages({{QSL(EXTRACTOR_PACKAGE), QSL(EXTRACTOR_VERSION)}, + qApp->nodejs()->installUpdatePackages(sndr, + {{QSL(EXTRACTOR_PACKAGE), QSL(EXTRACTOR_VERSION)}, {QSL(FETCH_PACKAGE), QSL(FETCH_VERSION)}}); } @@ -134,7 +130,7 @@ void ArticleParse::parseArticle(QObject* sndr, const QString& url) { qApp->nodejs()->runScript(proc, m_scriptFilename, {url}); } -void ArticleParse::onParsingFinished(QObject* sndr, +void ArticleParse::onParsingFinished(const QObject *sndr, const QString& url, int exit_code, QProcess::ExitStatus exit_status) { @@ -145,7 +141,7 @@ void ArticleParse::onParsingFinished(QObject* sndr, } else { QString err = QString::fromUtf8(proc->readAllStandardError()); - emit errorOnArticlePArsing(sndr, err); + emit errorOnArticleParsing(sndr, err); } proc->deleteLater(); diff --git a/src/librssguard/network-web/articleparse.h b/src/librssguard/network-web/articleparse.h index bea30769d..3764343ca 100644 --- a/src/librssguard/network-web/articleparse.h +++ b/src/librssguard/network-web/articleparse.h @@ -17,13 +17,13 @@ class ArticleParse : public QObject { void parseArticle(QObject* sndr, const QString& url); private slots: - void onParsingFinished(QObject* sndr, const QString& url, int exit_code, QProcess::ExitStatus exit_status); - void onPackageReady(const QList& pkgs, bool already_up_to_date); - void onPackageError(const QList& pkgs, const QString& error); + void onParsingFinished(const QObject* sndr, const QString& url, int exit_code, QProcess::ExitStatus exit_status); + void onPackageReady(const QObject* sndr, const QList& pkgs, bool already_up_to_date); + void onPackageError(const QObject* sndr, const QList& pkgs, const QString& error); signals: - void articleParsed(QObject* sndr, const QString& url, const QString& better_html); - void errorOnArticlePArsing(QObject* sndr, const QString& error); + void articleParsed(const QObject* sndr, const QString& url, const QString& better_html); + void errorOnArticleParsing(const QObject* sndr, const QString& error); private: bool m_modulesInstalling; diff --git a/src/librssguard/network-web/readability.cpp b/src/librssguard/network-web/readability.cpp index 9b99fe027..d6b2f75d7 100644 --- a/src/librssguard/network-web/readability.cpp +++ b/src/librssguard/network-web/readability.cpp @@ -19,7 +19,9 @@ Readability::Readability(QObject* parent) : QObject{parent}, m_modulesInstalling connect(qApp->nodejs(), &NodeJs::packageError, this, &Readability::onPackageError); } -void Readability::onPackageReady(const QList& pkgs, bool already_up_to_date) { +void Readability::onPackageReady(const QObject* sndr, + const QList& pkgs, + bool already_up_to_date) { Q_UNUSED(already_up_to_date) bool concerns_readability = boolinq::from(pkgs).any([](const NodeJs::PackageMetadata& pkg) { @@ -40,10 +42,12 @@ void Readability::onPackageReady(const QList& pkgs, boo {true, true, false}); // Emit this just to allow readability again for user. - emit htmlReadabled(nullptr, tr("Packages for reader mode are installed. You can now use reader mode!")); + emit errorOnHtmlReadabiliting(sndr, tr("Packages for reader mode are installed. You can now use reader mode!")); } -void Readability::onPackageError(const QList& pkgs, const QString& error) { +void Readability::onPackageError(const QObject* sndr, + const QList& pkgs, + const QString& error) { bool concerns_readability = boolinq::from(pkgs).any([](const NodeJs::PackageMetadata& pkg) { return pkg.m_name == QSL(READABILITY_PACKAGE); }); @@ -61,29 +65,22 @@ void Readability::onPackageError(const QList& pkgs, con {true, true, false}); // Emit this just to allow readability again for user. - emit htmlReadabled(nullptr, tr("Packages for reader mode are NOT installed. There is error: %1").arg(error)); + emit errorOnHtmlReadabiliting(sndr, tr("Packages for reader mode are NOT installed. There is error: %1").arg(error)); } void Readability::makeHtmlReadable(QObject* sndr, const QString& html, const QString& base_url) { if (!m_modulesInstalled) { try { - NodeJs::PackageStatus stReadability = + NodeJs::PackageStatus st_readability = qApp->nodejs()->packageStatus({QSL(READABILITY_PACKAGE), QSL(READABILITY_VERSION)}); - NodeJs::PackageStatus stJsdom = qApp->nodejs()->packageStatus({QSL(JSDOM_PACKAGE), QSL(JSDOM_VERSION)}); + NodeJs::PackageStatus st_jsdom = qApp->nodejs()->packageStatus({QSL(JSDOM_PACKAGE), QSL(JSDOM_VERSION)}); - if (stReadability != NodeJs::PackageStatus::UpToDate || stJsdom != NodeJs::PackageStatus::UpToDate) { + if (st_readability != NodeJs::PackageStatus::UpToDate || st_jsdom != NodeJs::PackageStatus::UpToDate) { if (!m_modulesInstalling) { // We make sure to update modules. m_modulesInstalling = true; - - qApp->showGuiMessage(Notification::Event::NodePackageUpdated, - {tr("Node.js libraries not installed"), - tr("%1 will now install some needed libraries, this will take only a few seconds. " - "You will be notified when installation is complete.") - .arg(QSL(APP_NAME)), - QSystemTrayIcon::MessageIcon::Warning}, - {true, true, false}); - qApp->nodejs()->installUpdatePackages({{QSL(READABILITY_PACKAGE), QSL(READABILITY_VERSION)}, + qApp->nodejs()->installUpdatePackages(sndr, + {{QSL(READABILITY_PACKAGE), QSL(READABILITY_VERSION)}, {QSL(JSDOM_PACKAGE), QSL(JSDOM_VERSION)}}); } @@ -104,9 +101,10 @@ void Readability::makeHtmlReadable(QObject* sndr, const QString& html, const QSt qCriticalNN << LOGSEC_CORE << "Failed to check for Node.js package status:" << QUOTE_W_SPACE_DOT(ex.message()); // Emit this just to allow readability again for user. - emit htmlReadabled(sndr, - tr("Node.js is not configured properly. Go to \"Settings\" -> \"Node.js\" and check " - "if your Node.js is properly configured.")); + emit + errorOnHtmlReadabiliting(sndr, + tr("Node.js is not configured properly. Go to \"Settings\" -> \"Node.js\" and check " + "if your Node.js is properly configured.")); } } diff --git a/src/librssguard/network-web/readability.h b/src/librssguard/network-web/readability.h index a32f27145..68dccf420 100644 --- a/src/librssguard/network-web/readability.h +++ b/src/librssguard/network-web/readability.h @@ -18,12 +18,12 @@ class Readability : public QObject { private slots: void onReadabilityFinished(QObject* sndr, int exit_code, QProcess::ExitStatus exit_status); - void onPackageReady(const QList& pkgs, bool already_up_to_date); - void onPackageError(const QList& pkgs, const QString& error); + void onPackageReady(const QObject* sndr, const QList& pkgs, bool already_up_to_date); + void onPackageError(const QObject* sndr, const QList& pkgs, const QString& error); signals: - void htmlReadabled(QObject* sndr, const QString& better_html); - void errorOnHtmlReadabiliting(QObject* sndr, const QString& error); + void htmlReadabled(const QObject* sndr, const QString& better_html); + void errorOnHtmlReadabiliting(const QObject* sndr, const QString& error); private: bool m_modulesInstalling;