diff --git a/resources/rssguard.qrc b/resources/rssguard.qrc index 132537cdd..512b2ec25 100644 --- a/resources/rssguard.qrc +++ b/resources/rssguard.qrc @@ -16,6 +16,7 @@ sounds/goodresult.wav scripts/adblock/adblock-server.js + scripts/readability/readabilize-article.js graphics/rssguard.ico diff --git a/resources/scripts/readability/readabilize-article.js b/resources/scripts/readability/readabilize-article.js new file mode 100755 index 000000000..3dbae8d8d --- /dev/null +++ b/resources/scripts/readability/readabilize-article.js @@ -0,0 +1,10 @@ +var rd = require('@mozilla/readability'); +var fs = require('fs'); +var jsd = require('jsdom'); +var iconvlite = require('iconv-lite'); +var data = fs.readFileSync(0); +var encData = iconvlite.decode(data, "utf-8"); +var doc = new jsd.JSDOM(encData); + +var article = new rd.Readability(doc.window.document).parse(); +console.log(article['content']); \ No newline at end of file diff --git a/src/librssguard/network-web/readability.cpp b/src/librssguard/network-web/readability.cpp index b721a9b03..a16b87f76 100644 --- a/src/librssguard/network-web/readability.cpp +++ b/src/librssguard/network-web/readability.cpp @@ -7,9 +7,14 @@ #include "gui/messagebox.h" #include "miscellaneous/application.h" +#include + #define READABILITY_PACKAGE "@mozilla/readability" #define READABILITY_VERSION "0.4.2" +#define JSDOM_PACKAGE "jsdom" +#define JSDOM_VERSION "19.0.0" + Readability::Readability(QObject* parent) : QObject{parent}, m_modulesInstalling(false), m_modulesInstalled(false) { connect(qApp->nodejs(), &NodeJs::packageInstalledUpdated, this, &Readability::onPackageReady); connect(qApp->nodejs(), &NodeJs::packageError, this, &Readability::onPackageError); @@ -63,9 +68,13 @@ void Readability::onPackageError(const QList& pkgs, con void Readability::makeHtmlReadable(const QString& html, const QString& base_url) { if (!m_modulesInstalled) { try { - NodeJs::PackageStatus st = qApp->nodejs()->packageStatus({ QSL(READABILITY_PACKAGE), QSL(READABILITY_VERSION) }); + NodeJs::PackageStatus stReadability = qApp->nodejs()->packageStatus({ QSL(READABILITY_PACKAGE), + QSL(READABILITY_VERSION) }); + NodeJs::PackageStatus stJsdom = qApp->nodejs()->packageStatus({ QSL(READABILITY_PACKAGE), + QSL(READABILITY_VERSION) }); - if (st != NodeJs::PackageStatus::UpToDate) { + if (stReadability != NodeJs::PackageStatus::UpToDate || + stJsdom != NodeJs::PackageStatus::UpToDate) { if (!m_modulesInstalling) { // We make sure to update modules. m_modulesInstalling = true; @@ -100,13 +109,20 @@ void Readability::makeHtmlReadable(const QString& html, const QString& base_url) } } + QString temp_script = QDir::toNativeSeparators(IOFactory::getSystemFolder(QStandardPaths::StandardLocation::TempLocation)) + + QDir::separator() + + QSL("readabilize-article.js"); + + if (!IOFactory::copyFile(QSL(":/scripts/readability/readabilize-article.js"), temp_script)) { + qWarningNN << LOGSEC_ADBLOCK << "Failed to copy Readability script to TEMP."; + } + QProcess* proc = new QProcess(this); connect(proc, QOverload::of(&QProcess::finished), this, &Readability::onReadabilityFinished); qApp->nodejs()->runScript(proc, - QSL("c:\\Projekty\\Moje\\build-rssguard-Desktop_Qt_6_2_3_MSVC2017_64bit-Debug\\" - "src\\rssguard\\data4\\node-packages-windows\\article-to-readable.js"), + temp_script, { base_url }); proc->write(html.toUtf8());