make readability aware of which sender requested, fixes #1300

This commit is contained in:
Martin Rotter 2024-02-21 12:38:40 +01:00
parent 31a598c5d7
commit 60da2d916d
4 changed files with 27 additions and 26 deletions

View file

@ -163,7 +163,7 @@ void WebBrowser::loadMessages(const QList<Message>& messages, RootItem* root) {
void WebBrowser::readabilePage() { void WebBrowser::readabilePage() {
m_actionReadabilePage->setEnabled(false); 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) { bool WebBrowser::eventFilter(QObject* watched, QEvent* event) {
@ -264,19 +264,16 @@ void WebBrowser::newWindowRequested(WebViewer* viewer) {
qApp->mainForm()->tabWidget()->addBrowser(false, false, browser); qApp->mainForm()->tabWidget()->addBrowser(false, false, browser);
} }
void WebBrowser::setReadabledHtml(const QString& better_html) { void WebBrowser::setReadabledHtml(QObject* sndr, const QString& better_html) {
if (!better_html.isEmpty()) { if (sndr == this && !better_html.isEmpty()) {
m_webView->setReadabledHtml(better_html, m_webView->url()); m_webView->setReadabledHtml(better_html, m_webView->url());
} }
} }
void WebBrowser::readabilityFailed(const QString& error) { void WebBrowser::readabilityFailed(QObject* sndr, const QString& error) {
MsgBox::show({}, if (sndr == this && !error.isEmpty()) {
QMessageBox::Icon::Critical, m_webView->setReadabledHtml(error, m_webView->url());
tr("Reader mode failed for this website"), }
tr("Reader mode cannot be applied to current page."),
{},
error);
} }
void WebBrowser::initializeLayout() { void WebBrowser::initializeLayout() {

View file

@ -70,8 +70,8 @@ class WebBrowser : public TabContent {
void newWindowRequested(WebViewer* viewer); void newWindowRequested(WebViewer* viewer);
void readabilePage(); void readabilePage();
void setReadabledHtml(const QString& better_html); void setReadabledHtml(QObject *sndr, const QString& better_html);
void readabilityFailed(const QString& error); void readabilityFailed(QObject *sndr, const QString& error);
signals: signals:
void windowCloseRequested(); void windowCloseRequested();

View file

@ -35,12 +35,12 @@ void Readability::onPackageReady(const QList<NodeJs::PackageMetadata>& pkgs, boo
qApp->showGuiMessage(Notification::Event::NodePackageUpdated, qApp->showGuiMessage(Notification::Event::NodePackageUpdated,
{tr("Packages for reader mode are installed"), {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}, QSystemTrayIcon::MessageIcon::Information},
{true, true, false}); {true, true, false});
// Emit this just to allow readability again for user. // 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<NodeJs::PackageMetadata>& pkgs, const QString& error) { void Readability::onPackageError(const QList<NodeJs::PackageMetadata>& pkgs, const QString& error) {
@ -61,10 +61,10 @@ void Readability::onPackageError(const QList<NodeJs::PackageMetadata>& pkgs, con
{true, true, false}); {true, true, false});
// Emit this just to allow readability again for user. // 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) { if (!m_modulesInstalled) {
try { try {
NodeJs::PackageStatus stReadability = 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()); 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 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, connect(proc,
QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
this, this,
&Readability::onReadabilityFinished); [=](int exit_code, QProcess::ExitStatus exit_status) {
onReadabilityFinished(sndr, exit_code, exit_status);
});
qApp->nodejs()->runScript(proc, temp_script, {base_url}); qApp->nodejs()->runScript(proc, temp_script, {base_url});
@ -129,15 +133,15 @@ void Readability::makeHtmlReadable(const QString& html, const QString& base_url)
proc->closeWriteChannel(); 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<QProcess*>(sender()); QProcess* proc = qobject_cast<QProcess*>(sender());
if (exit_status == QProcess::ExitStatus::NormalExit && exit_code == EXIT_SUCCESS) { if (exit_status == QProcess::ExitStatus::NormalExit && exit_code == EXIT_SUCCESS) {
emit htmlReadabled(QString::fromUtf8(proc->readAllStandardOutput())); emit htmlReadabled(sndr, QString::fromUtf8(proc->readAllStandardOutput()));
} }
else { else {
QString err = QString::fromUtf8(proc->readAllStandardError()); QString err = QString::fromUtf8(proc->readAllStandardError());
emit errorOnHtmlReadabiliting(err); emit errorOnHtmlReadabiliting(sndr, err);
} }
proc->deleteLater(); proc->deleteLater();

View file

@ -15,16 +15,16 @@ class Readability : public QObject {
public: public:
explicit Readability(QObject* parent = nullptr); 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: 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<NodeJs::PackageMetadata>& pkgs, bool already_up_to_date); void onPackageReady(const QList<NodeJs::PackageMetadata>& pkgs, bool already_up_to_date);
void onPackageError(const QList<NodeJs::PackageMetadata>& pkgs, const QString& error); void onPackageError(const QList<NodeJs::PackageMetadata>& pkgs, const QString& error);
signals: signals:
void htmlReadabled(const QString& better_html); void htmlReadabled(QObject* sndr, const QString& better_html);
void errorOnHtmlReadabiliting(const QString& error); void errorOnHtmlReadabiliting(QObject* sndr, const QString& error);
private: private:
bool m_modulesInstalling; bool m_modulesInstalling;