diff --git a/src/librssguard/gui/webbrowser.cpp b/src/librssguard/gui/webbrowser.cpp index 7a3d091c5..654a923f9 100644 --- a/src/librssguard/gui/webbrowser.cpp +++ b/src/librssguard/gui/webbrowser.cpp @@ -163,7 +163,7 @@ void WebBrowser::loadMessages(const QList& messages, RootItem* root) { void WebBrowser::readabilePage() { m_actionReadabilePage->setEnabled(false); - qApp->web()->readability()->makeHtmlReadable(m_webView->html(), m_webView->url().toString()); + qApp->web()->readability()->makeHtmlReadable(this, m_webView->html(), m_webView->url().toString()); } bool WebBrowser::eventFilter(QObject* watched, QEvent* event) { @@ -264,19 +264,16 @@ void WebBrowser::newWindowRequested(WebViewer* viewer) { qApp->mainForm()->tabWidget()->addBrowser(false, false, browser); } -void WebBrowser::setReadabledHtml(const QString& better_html) { - if (!better_html.isEmpty()) { +void WebBrowser::setReadabledHtml(QObject* sndr, const QString& better_html) { + if (sndr == this && !better_html.isEmpty()) { m_webView->setReadabledHtml(better_html, m_webView->url()); } } -void WebBrowser::readabilityFailed(const QString& error) { - MsgBox::show({}, - QMessageBox::Icon::Critical, - tr("Reader mode failed for this website"), - tr("Reader mode cannot be applied to current page."), - {}, - error); +void WebBrowser::readabilityFailed(QObject* sndr, const QString& error) { + if (sndr == this && !error.isEmpty()) { + m_webView->setReadabledHtml(error, m_webView->url()); + } } void WebBrowser::initializeLayout() { diff --git a/src/librssguard/gui/webbrowser.h b/src/librssguard/gui/webbrowser.h index fc0172622..df697609a 100644 --- a/src/librssguard/gui/webbrowser.h +++ b/src/librssguard/gui/webbrowser.h @@ -70,8 +70,8 @@ class WebBrowser : public TabContent { void newWindowRequested(WebViewer* viewer); void readabilePage(); - void setReadabledHtml(const QString& better_html); - void readabilityFailed(const QString& error); + void setReadabledHtml(QObject *sndr, const QString& better_html); + void readabilityFailed(QObject *sndr, const QString& error); signals: void windowCloseRequested(); diff --git a/src/librssguard/network-web/readability.cpp b/src/librssguard/network-web/readability.cpp index 5f7525795..3fa7d47fe 100644 --- a/src/librssguard/network-web/readability.cpp +++ b/src/librssguard/network-web/readability.cpp @@ -35,12 +35,12 @@ void Readability::onPackageReady(const QList& pkgs, boo qApp->showGuiMessage(Notification::Event::NodePackageUpdated, {tr("Packages for reader mode are installed"), - tr("You can now use reader mode!"), + tr("Reload your webpage and then you can use reader mode!"), QSystemTrayIcon::MessageIcon::Information}, {true, true, false}); // Emit this just to allow readability again for user. - emit htmlReadabled({}); + emit htmlReadabled(nullptr, tr("Packages for reader mode are installed. You can now use reader mode!")); } void Readability::onPackageError(const QList& pkgs, const QString& error) { @@ -61,10 +61,10 @@ void Readability::onPackageError(const QList& pkgs, con {true, true, false}); // Emit this just to allow readability again for user. - emit htmlReadabled({}); + emit htmlReadabled(nullptr, tr("Packages for reader mode are NOT installed. There is error: %1").arg(error)); } -void Readability::makeHtmlReadable(const QString& html, const QString& base_url) { +void Readability::makeHtmlReadable(QObject* sndr, const QString& html, const QString& base_url) { if (!m_modulesInstalled) { try { NodeJs::PackageStatus stReadability = @@ -104,7 +104,9 @@ void Readability::makeHtmlReadable(const QString& html, const QString& base_url) 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({}); + emit htmlReadabled(sndr, + tr("Node.js is not configured properly. Go to \"Settings\" -> \"Node.js\" and check " + "if your Node.js is properly configured.")); } } @@ -121,7 +123,9 @@ void Readability::makeHtmlReadable(const QString& html, const QString& base_url) connect(proc, QOverload::of(&QProcess::finished), this, - &Readability::onReadabilityFinished); + [=](int exit_code, QProcess::ExitStatus exit_status) { + onReadabilityFinished(sndr, exit_code, exit_status); + }); qApp->nodejs()->runScript(proc, temp_script, {base_url}); @@ -129,15 +133,15 @@ void Readability::makeHtmlReadable(const QString& html, const QString& base_url) proc->closeWriteChannel(); } -void Readability::onReadabilityFinished(int exit_code, QProcess::ExitStatus exit_status) { +void Readability::onReadabilityFinished(QObject* sndr, int exit_code, QProcess::ExitStatus exit_status) { QProcess* proc = qobject_cast(sender()); if (exit_status == QProcess::ExitStatus::NormalExit && exit_code == EXIT_SUCCESS) { - emit htmlReadabled(QString::fromUtf8(proc->readAllStandardOutput())); + emit htmlReadabled(sndr, QString::fromUtf8(proc->readAllStandardOutput())); } else { QString err = QString::fromUtf8(proc->readAllStandardError()); - emit errorOnHtmlReadabiliting(err); + emit errorOnHtmlReadabiliting(sndr, err); } proc->deleteLater(); diff --git a/src/librssguard/network-web/readability.h b/src/librssguard/network-web/readability.h index 1ea0b0ded..75834932c 100644 --- a/src/librssguard/network-web/readability.h +++ b/src/librssguard/network-web/readability.h @@ -10,21 +10,21 @@ #include class Readability : public QObject { - Q_OBJECT + Q_OBJECT public: explicit Readability(QObject* parent = nullptr); - void makeHtmlReadable(const QString& html, const QString& base_url = {}); + void makeHtmlReadable(QObject* sndr, const QString& html, const QString& base_url = {}); private slots: - void onReadabilityFinished(int exit_code, QProcess::ExitStatus exit_status); + 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); signals: - void htmlReadabled(const QString& better_html); - void errorOnHtmlReadabiliting(const QString& error); + void htmlReadabled(QObject* sndr, const QString& better_html); + void errorOnHtmlReadabiliting(QObject* sndr, const QString& error); private: bool m_modulesInstalling;