updated nodejs package versions, work on article notification, some related nice fixes

This commit is contained in:
Martin Rotter 2023-10-03 09:20:26 +02:00
parent 26ba561c51
commit 8d288aae49
9 changed files with 80 additions and 19 deletions

View file

@ -7,7 +7,6 @@
#include "miscellaneous/iofactory.h" #include "miscellaneous/iofactory.h"
#include <QDir> #include <QDir>
#include <QRegularExpression>
#include <QSqlError> #include <QSqlError>
#include <QSqlQuery> #include <QSqlQuery>
#include <QThread> #include <QThread>

View file

@ -1654,13 +1654,6 @@ UpdatedArticles DatabaseQueries::updateMessages(const QSqlDatabase& db,
continue; continue;
} }
if (!msg->m_isRead) {
updated_messages.m_unread.append(*msg);
}
updated_messages.m_all.append(*msg);
msg->m_insertedUpdated = true;
vals.append(QSL("\n(':feed', ':title', :is_read, :is_important, :is_deleted, " vals.append(QSL("\n(':feed', ':title', :is_read, :is_important, :is_deleted, "
"':url', ':author', :score, :date_created, ':contents', ':enclosures', " "':url', ':author', :score, :date_created, ':contents', ':enclosures', "
"':custom_id', ':custom_hash', :account_id)") "':custom_id', ':custom_hash', :account_id)")
@ -1705,7 +1698,21 @@ UpdatedArticles DatabaseQueries::updateMessages(const QSqlDatabase& db,
for (int l = i, c = 1; l < (i + batch_length); l++, c++) { for (int l = i, c = 1; l < (i + batch_length); l++, c++) {
Message* msg = msgs_to_insert[l]; Message* msg = msgs_to_insert[l];
if (msg->m_title.isEmpty()) {
// This article was not for sure inserted. Tweak
// next ID calculation.
c--;
continue;
}
msg->m_insertedUpdated = true;
msg->m_id = last_msg_id - batch_length + c; msg->m_id = last_msg_id - batch_length + c;
if (!msg->m_isRead) {
updated_messages.m_unread.append(*msg);
}
updated_messages.m_all.append(*msg);
} }
} }
} }

View file

@ -3,6 +3,7 @@
#include "gui/notifications/articlelistnotification.h" #include "gui/notifications/articlelistnotification.h"
#include "core/articlelistnotificationmodel.h" #include "core/articlelistnotificationmodel.h"
#include "database/databasequeries.h"
#include "miscellaneous/iconfactory.h" #include "miscellaneous/iconfactory.h"
#include "network-web/webfactory.h" #include "network-web/webfactory.h"
@ -100,12 +101,44 @@ void ArticleListNotification::onMessageSelected(const QModelIndex& current, cons
} }
void ArticleListNotification::showFeed(int index) { void ArticleListNotification::showFeed(int index) {
m_model->setArticles(m_newMessages.value(m_ui.m_cmbFeeds->itemData(index).value<Feed*>())); m_model->setArticles(m_newMessages.value(selectedFeed()));
onMessageSelected({}, {}); onMessageSelected({}, {});
} }
void ArticleListNotification::openArticleInWebBrowser() { void ArticleListNotification::openArticleInWebBrowser() {
qApp->web()->openUrlInExternalBrowser(selectedMessage().m_url); Feed* fd = selectedFeed();
Message msg = selectedMessage();
markAsRead(fd, {msg});
qApp->web()->openUrlInExternalBrowser(msg.m_url);
}
void ArticleListNotification::markAsRead(Feed* feed, const QList<Message>& articles) {
ServiceRoot* acc = feed->getParentServiceRoot();
QStringList message_ids;
message_ids.reserve(articles.size());
// Obtain IDs of all desired messages.
for (const Message& message : articles) {
message_ids.append(QString::number(message.m_id));
}
if (acc->onBeforeSetMessagesRead(feed, articles, RootItem::ReadStatus::Read)) {
auto db = qApp->database()->driver()->connection(metaObject()->className());
if (DatabaseQueries::markMessagesReadUnread(db, message_ids, RootItem::ReadStatus::Read)) {
acc->onAfterSetMessagesRead(feed, articles, RootItem::ReadStatus::Read);
}
}
}
Feed* ArticleListNotification::selectedFeed(int index) const {
if (index < 0) {
return m_ui.m_cmbFeeds->currentData().value<Feed*>();
}
else {
return m_ui.m_cmbFeeds->itemData(index).value<Feed*>();
}
} }
Message ArticleListNotification::selectedMessage() const { Message ArticleListNotification::selectedMessage() const {

View file

@ -30,6 +30,9 @@ class ArticleListNotification : public BaseToastNotification {
void openArticleInWebBrowser(); void openArticleInWebBrowser();
private: private:
void markAsRead(Feed* feed, const QList<Message>& articles);
Feed* selectedFeed(int index = -1) const;
Message selectedMessage() const; Message selectedMessage() const;
private: private:

View file

@ -128,6 +128,20 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="PlainToolButton" name="m_btnMarkAllRead">
<property name="toolTip">
<string>Open article in article list</string>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
</layout> </layout>
@ -147,6 +161,7 @@
<tabstop>m_btnNextPage</tabstop> <tabstop>m_btnNextPage</tabstop>
<tabstop>m_btnOpenArticleList</tabstop> <tabstop>m_btnOpenArticleList</tabstop>
<tabstop>m_btnOpenWebBrowser</tabstop> <tabstop>m_btnOpenWebBrowser</tabstop>
<tabstop>m_btnMarkAllRead</tabstop>
</tabstops> </tabstops>
<resources/> <resources/>
<connections/> <connections/>

View file

@ -14,7 +14,6 @@ class NodeJs : public QObject {
public: public:
struct PackageMetadata { struct PackageMetadata {
public: public:
// Name of package. // Name of package.
QString m_name; QString m_name;

View file

@ -11,7 +11,7 @@
#include <QProcess> #include <QProcess>
#define CLIQZ_ADBLOCKED_PACKAGE "@cliqz/adblocker" #define CLIQZ_ADBLOCKED_PACKAGE "@cliqz/adblocker"
#define CLIQZ_ADBLOCKED_VERSION "1.23.5" #define CLIQZ_ADBLOCKED_VERSION "1.26.7"
class QUrl; class QUrl;
class AdblockRequestInfo; class AdblockRequestInfo;

View file

@ -9,10 +9,10 @@
#include <QDir> #include <QDir>
#define READABILITY_PACKAGE "@mozilla/readability" #define READABILITY_PACKAGE "@mozilla/readability"
#define READABILITY_VERSION "0.4.2" #define READABILITY_VERSION "0.4.4"
#define JSDOM_PACKAGE "jsdom" #define JSDOM_PACKAGE "jsdom"
#define JSDOM_VERSION "19.0.0" #define JSDOM_VERSION "22.1.0"
Readability::Readability(QObject* parent) : QObject{parent}, m_modulesInstalling(false), m_modulesInstalled(false) { Readability::Readability(QObject* parent) : QObject{parent}, m_modulesInstalling(false), m_modulesInstalled(false) {
connect(qApp->nodejs(), &NodeJs::packageInstalledUpdated, this, &Readability::onPackageReady); connect(qApp->nodejs(), &NodeJs::packageInstalledUpdated, this, &Readability::onPackageReady);
@ -83,7 +83,7 @@ void Readability::makeHtmlReadable(const QString& html, const QString& base_url)
.arg(QSL(APP_NAME)), .arg(QSL(APP_NAME)),
QSystemTrayIcon::MessageIcon::Warning}, QSystemTrayIcon::MessageIcon::Warning},
{true, true, false}); {true, true, false});
qApp->nodejs()->installPackages({{QSL(READABILITY_PACKAGE), QSL(READABILITY_VERSION)}, qApp->nodejs()->installUpdatePackages({{QSL(READABILITY_PACKAGE), QSL(READABILITY_VERSION)},
{QSL(JSDOM_PACKAGE), QSL(JSDOM_VERSION)}}); {QSL(JSDOM_PACKAGE), QSL(JSDOM_VERSION)}});
} }

View file

@ -16,8 +16,8 @@
#endif #endif
#endif #endif
#include <QTextCodec>
#include <QSettings> #include <QSettings>
#include <QTextCodec>
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
qSetMessagePattern(QSL("time=\"%{time process}\" type=\"%{type}\" -> %{message}")); qSetMessagePattern(QSL("time=\"%{time process}\" type=\"%{type}\" -> %{message}"));
@ -57,6 +57,8 @@ int main(int argc, char* argv[]) {
char** const av = argv; char** const av = argv;
QStringList raw_cli_args; QStringList raw_cli_args;
raw_cli_args.reserve(argc);
for (int a = 0; a < argc; a++) { for (int a = 0; a < argc; a++) {
raw_cli_args << QString::fromLocal8Bit(av[a]); raw_cli_args << QString::fromLocal8Bit(av[a]);
} }
@ -70,10 +72,13 @@ int main(int argc, char* argv[]) {
QCoreApplication::setApplicationVersion(QSL(APP_VERSION)); QCoreApplication::setApplicationVersion(QSL(APP_VERSION));
QCoreApplication::setOrganizationDomain(QSL(APP_URL)); QCoreApplication::setOrganizationDomain(QSL(APP_URL));
qDebugNN << LOGSEC_CORE << "Starting" << NONQUOTE_W_SPACE_DOT(APP_LONG_NAME);
qDebugNN << LOGSEC_CORE << "Current UTC date/time is"
<< NONQUOTE_W_SPACE_DOT(QDateTime::currentDateTimeUtc().toString(Qt::DateFormat::ISODate));
// Instantiate base application object. // Instantiate base application object.
Application application(QSL(APP_LOW_NAME), argc, argv, raw_cli_args); Application application(QSL(APP_LOW_NAME), argc, argv, raw_cli_args);
qDebugNN << LOGSEC_CORE << "Starting" << NONQUOTE_W_SPACE_DOT(APP_LONG_NAME);
qDebugNN << LOGSEC_CORE << "Instantiated class " << QUOTE_W_SPACE_DOT(application.metaObject()->className()); qDebugNN << LOGSEC_CORE << "Instantiated class " << QUOTE_W_SPACE_DOT(application.metaObject()->className());
// Check if another instance is running. // Check if another instance is running.