From 10c8513f0dc91fb1e30b46f0b59ec8057552def7 Mon Sep 17 00:00:00 2001 From: martinrotter Date: Tue, 19 Sep 2023 19:47:04 +0200 Subject: [PATCH 01/11] Dutch translation for rssguard_en.ts --- localization/rssguard_nl.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/localization/rssguard_nl.ts b/localization/rssguard_nl.ts index c789534c8..b390dca6f 100644 --- a/localization/rssguard_nl.ts +++ b/localization/rssguard_nl.ts @@ -313,7 +313,7 @@ Om te zien wat er NIEUW is in deze versie: klik op deze melding. Close this notification - Close this notification + Melding sluiten @@ -6188,12 +6188,12 @@ Makers van de applicatie zijn niet verantwoordelijk voor dataverlies. PC restart needed - PC restart needed + PC herstart benodigd Your PC needs to be restarted to make some of enabled features fully working. - Your PC needs to be restarted to make some of enabled features fully working. + De computer moet opnieuw opgestart worden voor dat alle nieuwe features correct werken. @@ -6794,27 +6794,27 @@ Er zijn ook een aantal ingebouwde geluiden beschikbaar. Typ ":" om de Enable notifications - Aanzetten van meldingen + Meldingen inschakelen Notifications type - Notifications type + Meldingstype Native notifications (tray icon must be enabled) - Native notifications (tray icon must be enabled) + Standaard meldingen (taakbalkicoon moet zijn ingeschakeld) Custom notifications - Custom notifications + Aangepaste meldingen Position - Position + Positie @@ -6925,7 +6925,7 @@ Er zijn ook een aantal ingebouwde geluiden beschikbaar. Typ ":" om de cannot get native 'sqlite3' DB handle - cannot get native 'sqlite3' DB handle + kan geen standaard 'sqlite3' DB handle verkrijgen @@ -7545,32 +7545,32 @@ Ongelezen nieuws: %2 Dialog - Dialog + Dialoog ... - ... + ... 11 - 11 + 11 TextLabel - TextLabel + TekstLabel PushButton - PushButton + Drukknop Do it! - Do it! + Nu uitvoeren! From 08919d4e750b3e5a252e1b6b70ead21fe579162a Mon Sep 17 00:00:00 2001 From: martinrotter Date: Wed, 20 Sep 2023 07:15:59 +0200 Subject: [PATCH 02/11] New Crowdin updates (#1106) --- localization/rssguard_ja.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/localization/rssguard_ja.ts b/localization/rssguard_ja.ts index 091e1d35e..b7081e89a 100644 --- a/localization/rssguard_ja.ts +++ b/localization/rssguard_ja.ts @@ -6779,22 +6779,22 @@ Also, there are some built-in sounds. Just start typing ":" and they w Notifications type - Notifications type + 通知タイプ Native notifications (tray icon must be enabled) - Native notifications (tray icon must be enabled) + ネイティブ通知 (トレイアイコンを有効にする必要があります) Custom notifications - Custom notifications + カスタム通知 Position - Position + 位置 From e3e19294360a265cca754ee4998abb8925639131 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 20 Sep 2023 07:20:08 +0200 Subject: [PATCH 03/11] save, work on toasts --- src/librssguard/CMakeLists.txt | 5 +- src/librssguard/gui/dialogs/formmain.cpp | 15 +----- .../notifications/articlelistnotification.cpp | 10 ++++ .../notifications/articlelistnotification.h | 20 +++++++ .../notifications/basetoastnotification.cpp | 2 +- .../gui/notifications/basetoastnotification.h | 3 -- .../gui/notifications/toastnotification.cpp | 6 +-- .../gui/notifications/toastnotification.h | 2 - .../toastnotificationsmanager.cpp | 54 ++++++++++++++++--- .../notifications/toastnotificationsmanager.h | 9 +++- .../gui/settings/settingsnotifications.cpp | 15 ++++++ .../gui/settings/settingsnotifications.ui | 5 +- src/librssguard/miscellaneous/application.cpp | 7 ++- src/librssguard/miscellaneous/feedreader.cpp | 13 +++++ src/librssguard/miscellaneous/settings.cpp | 3 ++ src/librssguard/miscellaneous/settings.h | 3 ++ 16 files changed, 135 insertions(+), 37 deletions(-) create mode 100644 src/librssguard/gui/notifications/articlelistnotification.cpp create mode 100644 src/librssguard/gui/notifications/articlelistnotification.h diff --git a/src/librssguard/CMakeLists.txt b/src/librssguard/CMakeLists.txt index d9cd30db0..c2dccee1b 100644 --- a/src/librssguard/CMakeLists.txt +++ b/src/librssguard/CMakeLists.txt @@ -99,6 +99,8 @@ set(SOURCES gui/notifications/notificationseditor.h gui/notifications/singlenotificationeditor.cpp gui/notifications/singlenotificationeditor.h + gui/notifications/articlelistnotification.cpp + gui/notifications/articlelistnotification.h gui/reusable/baselineedit.cpp gui/reusable/baselineedit.h gui/reusable/basetreeview.cpp @@ -440,9 +442,10 @@ set(UI_FILES gui/dialogs/formupdate.ui gui/notifications/notificationseditor.ui gui/notifications/singlenotificationeditor.ui + gui/notifications/articlelistnotification.ui + gui/notifications/toastnotification.ui gui/reusable/networkproxydetails.ui gui/itemdetails.ui - gui/notifications/toastnotification.ui gui/richtexteditor/mrichtextedit.ui gui/newspaperpreviewer.ui gui/reusable/searchtextwidget.ui diff --git a/src/librssguard/gui/dialogs/formmain.cpp b/src/librssguard/gui/dialogs/formmain.cpp index b2563a855..7a4d49d0d 100644 --- a/src/librssguard/gui/dialogs/formmain.cpp +++ b/src/librssguard/gui/dialogs/formmain.cpp @@ -1090,20 +1090,7 @@ void FormMain::showAddAccountDialog() { } void FormMain::reportABug() { - qApp - ->showGuiMessage(Notification::Event::GeneralEvent, - GuiMessage(QDateTime::currentDateTime().toString(), - "Quisque ullamcorper ut purus nec tempus. Vivamus eros dolor, sagittis ultrices augue " - "ut, posuere fringilla lorem. Donec posuere, enim sit amet fermentum dignissim, tellus " - "lectus laoreet lectus, vestibulum laoreet felis tortor eget nunc. Curabitur sagittis " - "quam in scelerisque placerat. Vivamus vel porta tortor. Vivamus nec volutpat sem", - QSystemTrayIcon::MessageIcon::Information), - GuiMessageDestination(), - GuiAction("test", []() { - qDebugNN << "aa"; - })); - - // qApp->web()->openUrlInExternalBrowser(QSL(APP_URL_ISSUES_NEW)); + qApp->web()->openUrlInExternalBrowser(QSL(APP_URL_ISSUES_NEW)); } void FormMain::donate() { diff --git a/src/librssguard/gui/notifications/articlelistnotification.cpp b/src/librssguard/gui/notifications/articlelistnotification.cpp new file mode 100644 index 000000000..5eb62d926 --- /dev/null +++ b/src/librssguard/gui/notifications/articlelistnotification.cpp @@ -0,0 +1,10 @@ +// For license of this file, see /LICENSE.md. + +#include "gui/notifications/articlelistnotification.h" + +ArticleListNotification::ArticleListNotification(QWidget* parent) : BaseToastNotification(parent) { + m_ui.setupUi(this); + + setupCloseButton(m_ui.m_btnClose); + setupTimedClosing(); +} diff --git a/src/librssguard/gui/notifications/articlelistnotification.h b/src/librssguard/gui/notifications/articlelistnotification.h new file mode 100644 index 000000000..8aaea8095 --- /dev/null +++ b/src/librssguard/gui/notifications/articlelistnotification.h @@ -0,0 +1,20 @@ +// For license of this file, see /LICENSE.md. + +#ifndef ARTICLELISTNOTIFICATION_H +#define ARTICLELISTNOTIFICATION_H + +#include "gui/notifications/basetoastnotification.h" + +#include "ui_articlelistnotification.h" + +class ArticleListNotification : public BaseToastNotification { + Q_OBJECT + + public: + explicit ArticleListNotification(QWidget* parent = nullptr); + + private: + Ui::ArticleListNotification m_ui; +}; + +#endif // ARTICLELISTNOTIFICATION_H diff --git a/src/librssguard/gui/notifications/basetoastnotification.cpp b/src/librssguard/gui/notifications/basetoastnotification.cpp index 07fc295a3..c396c6e56 100644 --- a/src/librssguard/gui/notifications/basetoastnotification.cpp +++ b/src/librssguard/gui/notifications/basetoastnotification.cpp @@ -26,7 +26,7 @@ BaseToastNotification::BaseToastNotification(QWidget* parent) : QDialog(parent) #endif Qt::WindowType::FramelessWindowHint | Qt::WindowType::WindowStaysOnTopHint | Qt::WindowType::WindowSystemMenuHint); - setStyleSheet(QSL("BaseToastNotification { border: 1px solid black; }")); + setStyleSheet(QSL("BaseToastNotification { border: 1px solid %1; }").arg(palette().windowText().color().name())); installEventFilter(this); } diff --git a/src/librssguard/gui/notifications/basetoastnotification.h b/src/librssguard/gui/notifications/basetoastnotification.h index 34704c917..654e937ea 100644 --- a/src/librssguard/gui/notifications/basetoastnotification.h +++ b/src/librssguard/gui/notifications/basetoastnotification.h @@ -14,9 +14,6 @@ class BaseToastNotification : public QDialog { explicit BaseToastNotification(QWidget* parent = nullptr); virtual ~BaseToastNotification(); - // If true, then notification is always moved as close to top as possible. - virtual bool alwaysOnTop() const = 0; - public slots: virtual void reject(); diff --git a/src/librssguard/gui/notifications/toastnotification.cpp b/src/librssguard/gui/notifications/toastnotification.cpp index bb2dd3d11..8918bb749 100644 --- a/src/librssguard/gui/notifications/toastnotification.cpp +++ b/src/librssguard/gui/notifications/toastnotification.cpp @@ -21,7 +21,7 @@ ToastNotification::ToastNotification(Notification::Event event, const GuiMessage& msg, const GuiAction& action, QWidget* parent) - : BaseToastNotification(parent) { + : BaseToastNotification() { m_ui.setupUi(this); setupHeading(); @@ -31,10 +31,6 @@ ToastNotification::ToastNotification(Notification::Event event, loadNotification(event, msg, action); } -bool ToastNotification::alwaysOnTop() const { - return false; -} - void ToastNotification::loadNotification(Notification::Event event, const GuiMessage& msg, const GuiAction& action) { m_ui.m_lblTitle->setText(msg.m_title); m_ui.m_lblBody->setText(msg.m_message); diff --git a/src/librssguard/gui/notifications/toastnotification.h b/src/librssguard/gui/notifications/toastnotification.h index b14f8bbd0..c919fe023 100644 --- a/src/librssguard/gui/notifications/toastnotification.h +++ b/src/librssguard/gui/notifications/toastnotification.h @@ -18,8 +18,6 @@ class ToastNotification : public BaseToastNotification { const GuiAction& action, QWidget* parent = nullptr); - virtual bool alwaysOnTop() const; - private: void setupHeading(); void loadNotification(Notification::Event event, const GuiMessage& msg, const GuiAction& action); diff --git a/src/librssguard/gui/notifications/toastnotificationsmanager.cpp b/src/librssguard/gui/notifications/toastnotificationsmanager.cpp index cb6235d61..73547ad85 100644 --- a/src/librssguard/gui/notifications/toastnotificationsmanager.cpp +++ b/src/librssguard/gui/notifications/toastnotificationsmanager.cpp @@ -4,14 +4,16 @@ #include "3rd-party/boolinq/boolinq.h" #include "gui/notifications/basetoastnotification.h" + +#include "gui/notifications/articlelistnotification.h" #include "gui/notifications/toastnotification.h" #include #include #include -ToastNotificationsManager::ToastNotificationsManager(QObject* parent) - : QObject(parent), m_position(NotificationPosition::BottomRight), m_screen(-1) {} +ToastNotificationsManager::ToastNotificationsManager(NotificationPosition position, int screen, QObject* parent) + : QObject(parent), m_position(position), m_screen(screen), m_articleListNotification(nullptr) {} ToastNotificationsManager::~ToastNotificationsManager() { clear(); @@ -39,7 +41,7 @@ void ToastNotificationsManager::setPosition(NotificationPosition position) { void ToastNotificationsManager::clear() { for (BaseToastNotification* notif : m_activeNotifications) { - closeNotification(notif); + closeNotification(notif, true); } m_activeNotifications.clear(); @@ -74,12 +76,48 @@ void ToastNotificationsManager::showNotification(Notification::Event event, m_activeNotifications.prepend(notif); } -void ToastNotificationsManager::showNotification(const QList& new_messages) {} +void ToastNotificationsManager::showNotification(const QList& new_messages) { + if (m_articleListNotification == nullptr) { + m_articleListNotification = new ArticleListNotification(); + hookNotification(m_articleListNotification); + } -void ToastNotificationsManager::closeNotification(BaseToastNotification* notif) { + if (!m_activeNotifications.isEmpty() && m_activeNotifications.first() != m_articleListNotification) { + // Article notification is somewhere in list, clear first to move it to first positon. + closeNotification(m_articleListNotification, false); + } + + auto* screen = moveToProperScreen(m_articleListNotification); + + // Insert new notification into free space. + m_articleListNotification->show(); + + auto notif_new_pos = cornerForNewNotification(screen->availableGeometry()); + + // Make sure notification is finally resized. + m_articleListNotification->adjustSize(); + qApp->processEvents(); + + // Move notification, at this point we already need to know its precise size. + moveNotificationToCorner(m_articleListNotification, notif_new_pos); + + // Remove out-of-bounds old notifications and shift existing + // ones to make space for new notifications. + removeOutOfBoundsNotifications(m_articleListNotification->height()); + makeSpaceForNotification(m_articleListNotification->height()); + + m_activeNotifications.prepend(m_articleListNotification); +} + +void ToastNotificationsManager::closeNotification(BaseToastNotification* notif, bool delete_from_memory) { auto notif_idx = m_activeNotifications.indexOf(notif); - notif->deleteLater(); + if (delete_from_memory) { + notif->deleteLater(); + } + else { + notif->hide(); + } m_activeNotifications.removeAll(notif); @@ -121,7 +159,9 @@ QPoint ToastNotificationsManager::cornerForNewNotification(QRect screen_rect) { } void ToastNotificationsManager::hookNotification(BaseToastNotification* notif) { - connect(notif, &BaseToastNotification::closeRequested, this, &ToastNotificationsManager::closeNotification); + connect(notif, &BaseToastNotification::closeRequested, this, [this](BaseToastNotification* notif) { + closeNotification(notif, false); + }); } void ToastNotificationsManager::moveNotificationToCorner(BaseToastNotification* notif, QPoint corner) { diff --git a/src/librssguard/gui/notifications/toastnotificationsmanager.h b/src/librssguard/gui/notifications/toastnotificationsmanager.h index 9b8bedb8e..1a28ca677 100644 --- a/src/librssguard/gui/notifications/toastnotificationsmanager.h +++ b/src/librssguard/gui/notifications/toastnotificationsmanager.h @@ -9,6 +9,7 @@ class BaseToastNotification; class ToastNotification; +class ArticleListNotification; class QScreen; class ToastNotificationsManager : public QObject { @@ -22,7 +23,9 @@ class ToastNotificationsManager : public QObject { BottomRight = 3 }; - explicit ToastNotificationsManager(QObject* parent = nullptr); + explicit ToastNotificationsManager(ToastNotificationsManager::NotificationPosition position, + int screen, + QObject* parent = nullptr); virtual ~ToastNotificationsManager(); QList activeNotifications() const; @@ -41,7 +44,7 @@ class ToastNotificationsManager : public QObject { void showNotification(const QList& new_messages); private slots: - void closeNotification(BaseToastNotification* notif); + void closeNotification(BaseToastNotification* notif, bool delete_from_memory); private: QScreen* activeScreen() const; @@ -60,6 +63,8 @@ class ToastNotificationsManager : public QObject { // List of all displayed notifications, newest notifications are in the beginning of the list // and oldest at the end. QList m_activeNotifications; + + ArticleListNotification* m_articleListNotification; }; #endif // TOASTNOTIFICATIONSMANAGER_H diff --git a/src/librssguard/gui/settings/settingsnotifications.cpp b/src/librssguard/gui/settings/settingsnotifications.cpp index e18ebe0ef..672062450 100644 --- a/src/librssguard/gui/settings/settingsnotifications.cpp +++ b/src/librssguard/gui/settings/settingsnotifications.cpp @@ -18,6 +18,21 @@ SettingsNotifications::SettingsNotifications(Settings* settings, QWidget* parent connect(m_ui.m_checkEnableNotifications, &QCheckBox::toggled, this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_editor, &NotificationsEditor::someNotificationChanged, this, &SettingsNotifications::dirtifySettings); + + connect(m_ui.m_rbCustomNotifications, &QRadioButton::toggled, this, &SettingsNotifications::dirtifySettings); + connect(m_ui.m_rbCustomNotifications, &QRadioButton::toggled, this, &SettingsNotifications::requireRestart); + + connect(m_ui.m_rbNativeNotifications, &QRadioButton::toggled, this, &SettingsNotifications::dirtifySettings); + connect(m_ui.m_rbNativeNotifications, &QRadioButton::toggled, this, &SettingsNotifications::requireRestart); + + connect(m_ui.m_cbCustomNotificationsPosition, + &QComboBox::currentIndexChanged, + this, + &SettingsNotifications::dirtifySettings); + connect(m_ui.m_cbCustomNotificationsPosition, + &QComboBox::currentIndexChanged, + this, + &SettingsNotifications::requireRestart); } void SettingsNotifications::loadSettings() { diff --git a/src/librssguard/gui/settings/settingsnotifications.ui b/src/librssguard/gui/settings/settingsnotifications.ui index a67f9ac10..917ffadf7 100644 --- a/src/librssguard/gui/settings/settingsnotifications.ui +++ b/src/librssguard/gui/settings/settingsnotifications.ui @@ -37,7 +37,7 @@ - Notifications type + Balloon notifications type @@ -45,6 +45,9 @@ Native notifications (tray icon must be enabled) + + true + diff --git a/src/librssguard/miscellaneous/application.cpp b/src/librssguard/miscellaneous/application.cpp index 330f94215..0e669ca8c 100644 --- a/src/librssguard/miscellaneous/application.cpp +++ b/src/librssguard/miscellaneous/application.cpp @@ -110,7 +110,12 @@ Application::Application(const QString& id, int& argc, char** argv, const QStrin m_database = new DatabaseFactory(this); m_downloadManager = nullptr; m_notifications = new NotificationFactory(this); - m_toastNotifications = new ToastNotificationsManager(this); + m_toastNotifications = + new ToastNotificationsManager(settings() + ->value(GROUP(GUI), SETTING(GUI::ToastNotificationsPosition)) + .value(), + settings()->value(GROUP(GUI), SETTING(GUI::ToastNotificationsScreen)).toInt(), + this); m_shouldRestart = false; #if defined(Q_OS_WIN) diff --git a/src/librssguard/miscellaneous/feedreader.cpp b/src/librssguard/miscellaneous/feedreader.cpp index 4e1fd627e..c9ccbef19 100644 --- a/src/librssguard/miscellaneous/feedreader.cpp +++ b/src/librssguard/miscellaneous/feedreader.cpp @@ -255,6 +255,19 @@ void FeedReader::removeMessageFilterToFeedAssignment(Feed* feed, MessageFilter* } void FeedReader::updateAllFeeds() { + qApp + ->showGuiMessage(Notification::Event::GeneralEvent, + GuiMessage(QDateTime::currentDateTime().toString(), + "Quisque ullamcorper ut purus nec tempus. Vivamus eros dolor, sagittis ultrices augue " + "ut, posuere fringilla lorem. Donec posuere, enim sit amet fermentum dignissim, tellus " + "lectus laoreet lectus, vestibulum laoreet felis tortor eget nunc. Curabitur sagittis " + "quam in scelerisque placerat. Vivamus vel porta tortor. Vivamus nec volutpat sem", + QSystemTrayIcon::MessageIcon::Information), + GuiMessageDestination(), + GuiAction("test", []() { + qDebugNN << "aa"; + })); + updateFeeds(m_feedsModel->rootItem()->getSubTreeFeeds()); } diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp index f9f7d5996..a2d4fb76f 100644 --- a/src/librssguard/miscellaneous/settings.cpp +++ b/src/librssguard/miscellaneous/settings.cpp @@ -292,6 +292,9 @@ DKEY GUI::ToastNotificationsPosition = "toast_notifications_position"; DVALUE(ToastNotificationsManager::NotificationPosition) GUI::ToastNotificationsPositionDef = ToastNotificationsManager::NotificationPosition::BottomRight; +DKEY GUI::ToastNotificationsScreen = "toast_notifications_screen"; +DVALUE(int) GUI::ToastNotificationsScreenDef = -1; + DKEY GUI::HideMainWindowWhenMinimized = "hide_when_minimized"; DVALUE(bool) GUI::HideMainWindowWhenMinimizedDef = false; diff --git a/src/librssguard/miscellaneous/settings.h b/src/librssguard/miscellaneous/settings.h index 986957273..e048d367f 100644 --- a/src/librssguard/miscellaneous/settings.h +++ b/src/librssguard/miscellaneous/settings.h @@ -225,6 +225,9 @@ namespace GUI { KEY ToastNotificationsPosition; VALUE(ToastNotificationsManager::NotificationPosition) ToastNotificationsPositionDef; + KEY ToastNotificationsScreen; + VALUE(int) ToastNotificationsScreenDef; + KEY MessageViewState; VALUE(QString) MessageViewStateDef; From 46fe50df914633f2d6aa05663a08f748a8378cf9 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 22 Sep 2023 07:24:55 +0200 Subject: [PATCH 04/11] work on toasts, unify article sanitization --- resources/icons.qrc | 6 + src/librssguard/CMakeLists.txt | 2 + .../core/articlelistnotificationmodel.cpp | 23 ++++ .../core/articlelistnotificationmodel.h | 33 +++++ src/librssguard/core/feeddownloader.cpp | 32 ++--- src/librssguard/core/feeddownloader.h | 15 +- src/librssguard/core/message.cpp | 7 + src/librssguard/database/databasequeries.cpp | 18 +-- src/librssguard/database/databasequeries.h | 7 +- src/librssguard/definitions/definitions.h | 7 +- src/librssguard/definitions/typedefs.h | 10 ++ .../notifications/articlelistnotification.cpp | 14 +- .../notifications/articlelistnotification.h | 6 + .../notifications/articlelistnotification.ui | 130 ++++++++++++++++++ .../notifications/basetoastnotification.cpp | 28 +++- .../gui/notifications/basetoastnotification.h | 4 +- .../gui/notifications/toastnotification.cpp | 5 +- .../gui/notifications/toastnotification.ui | 3 - .../toastnotificationsmanager.cpp | 73 +++++----- .../notifications/toastnotificationsmanager.h | 5 +- src/librssguard/gui/reusable/helpspoiler.cpp | 1 + .../gui/settings/settingsnotifications.cpp | 53 +++++++ .../gui/settings/settingsnotifications.h | 5 +- .../gui/settings/settingsnotifications.ui | 27 +++- .../qtextbrowser/textbrowserviewer.cpp | 2 +- src/librssguard/miscellaneous/application.cpp | 59 +++++--- src/librssguard/miscellaneous/application.h | 1 + src/librssguard/miscellaneous/feedreader.cpp | 13 -- .../services/abstract/serviceroot.cpp | 6 +- .../services/abstract/serviceroot.h | 3 +- .../services/feedly/feedlynetwork.cpp | 2 +- .../services/greader/greadernetwork.cpp | 4 +- .../services/standard/parsers/feedparser.cpp | 8 +- 33 files changed, 470 insertions(+), 142 deletions(-) create mode 100644 src/librssguard/core/articlelistnotificationmodel.cpp create mode 100644 src/librssguard/core/articlelistnotificationmodel.h create mode 100644 src/librssguard/gui/notifications/articlelistnotification.ui diff --git a/resources/icons.qrc b/resources/icons.qrc index 68cbb2aee..2d41be1a3 100644 --- a/resources/icons.qrc +++ b/resources/icons.qrc @@ -8,6 +8,8 @@ ./graphics/Breeze/categories/32/applications-system.svg ./graphics/Breeze/actions/32/arrow-down.svg ./graphics/Breeze/actions/32/arrow-down-double.svg + ./graphics/Breeze/actions/32/arrow-left.svg + ./graphics/Breeze/actions/32/arrow-right.svg ./graphics/Breeze/actions/32/arrow-up.svg ./graphics/Breeze/actions/32/arrow-up-double.svg ./graphics/Breeze/actions/32/call-start.svg @@ -99,6 +101,8 @@ ./graphics/Breeze Dark/categories/32/applications-system.svg ./graphics/Breeze Dark/actions/32/arrow-down.svg ./graphics/Breeze Dark/actions/32/arrow-down-double.svg + ./graphics/Breeze Dark/actions/32/arrow-left.svg + ./graphics/Breeze Dark/actions/32/arrow-right.svg ./graphics/Breeze Dark/actions/32/arrow-up.svg ./graphics/Breeze Dark/actions/32/arrow-up-double.svg ./graphics/Breeze Dark/actions/32/call-start.svg @@ -274,6 +278,8 @@ ./graphics/Numix/22/categories/applications-system.svg ./graphics/Numix/22/actions/arrow-down.svg ./graphics/Numix/22/actions/arrow-down-double.svg + ./graphics/Numix/22/actions/arrow-left.svg + ./graphics/Numix/22/actions/arrow-right.svg ./graphics/Numix/22/actions/arrow-up.svg ./graphics/Numix/22/actions/arrow-up-double.svg ./graphics/Numix/22/actions/browser-download.svg diff --git a/src/librssguard/CMakeLists.txt b/src/librssguard/CMakeLists.txt index c2dccee1b..f6afa971d 100644 --- a/src/librssguard/CMakeLists.txt +++ b/src/librssguard/CMakeLists.txt @@ -1,4 +1,6 @@ set(SOURCES + core/articlelistnotificationmodel.cpp + core/articlelistnotificationmodel.h core/feeddownloader.cpp core/feeddownloader.h core/feedsmodel.cpp diff --git a/src/librssguard/core/articlelistnotificationmodel.cpp b/src/librssguard/core/articlelistnotificationmodel.cpp new file mode 100644 index 000000000..4b1998dfd --- /dev/null +++ b/src/librssguard/core/articlelistnotificationmodel.cpp @@ -0,0 +1,23 @@ +// For license of this file, see /LICENSE.md. + +#include "core/articlelistnotificationmodel.h" + +ArticleListNotificationModel::ArticleListNotificationModel(QObject* parent) + : QAbstractListModel(parent), m_currentPage(-1) {} + +ArticleListNotificationModel::~ArticleListNotificationModel() {} + +void ArticleListNotificationModel::setArticles(const QList& msgs) { + m_articles = msgs; + m_currentPage = 0; +} + +void ArticleListNotificationModel::nextPage() {} + +void ArticleListNotificationModel::previousPage() {} + +int ArticleListNotificationModel::rowCount(const QModelIndex& parent) const {} + +int ArticleListNotificationModel::columnCount(const QModelIndex& parent) const {} + +QVariant ArticleListNotificationModel::data(const QModelIndex& index, int role) const {} diff --git a/src/librssguard/core/articlelistnotificationmodel.h b/src/librssguard/core/articlelistnotificationmodel.h new file mode 100644 index 000000000..96a898a97 --- /dev/null +++ b/src/librssguard/core/articlelistnotificationmodel.h @@ -0,0 +1,33 @@ +// For license of this file, see /LICENSE.md. + +#ifndef ARTICLELISTNOTIFICATIONMODEL_H +#define ARTICLELISTNOTIFICATIONMODEL_H + +#include + +#include "core/message.h" + +class ArticleListNotificationModel : public QAbstractListModel { + public: + explicit ArticleListNotificationModel(QObject* parent = nullptr); + virtual ~ArticleListNotificationModel(); + + void setArticles(const QList& msgs); + + void nextPage(); + void previousPage(); + + virtual int rowCount(const QModelIndex& parent) const; + virtual int columnCount(const QModelIndex& parent) const; + virtual QVariant data(const QModelIndex& index, int role) const; + + signals: + void nextPagePossibleChanged(bool possible); + void previousPagePossibleChanged(bool possible); + + private: + QList m_articles; + int m_currentPage; +}; + +#endif // ARTICLELISTNOTIFICATIONMODEL_H diff --git a/src/librssguard/core/feeddownloader.cpp b/src/librssguard/core/feeddownloader.cpp index 8b51c3d42..dbe1027a0 100644 --- a/src/librssguard/core/feeddownloader.cpp +++ b/src/librssguard/core/feeddownloader.cpp @@ -413,15 +413,17 @@ void FeedDownloader::updateOneFeed(ServiceRoot* acc, << "microseconds."; if (feed->status() != Feed::Status::NewMessages) { - feed->setStatus(updated_messages.first > 0 || updated_messages.second > 0 ? Feed::Status::NewMessages - : Feed::Status::Normal); + feed->setStatus((!updated_messages.m_all.isEmpty() || !updated_messages.m_unread.isEmpty()) + ? Feed::Status::NewMessages + : Feed::Status::Normal); } - qDebugNN << LOGSEC_FEEDDOWNLOADER << updated_messages << " messages for feed " << feed->customId() - << " stored in DB."; + qDebugNN << LOGSEC_FEEDDOWNLOADER << updated_messages.m_unread.size() << " unread messages and" + << NONQUOTE_W_SPACE(updated_messages.m_all.size()) "total messages for feed" + << QUOTE_W_SPACE(feed->customId()) << "stored in DB."; - if (updated_messages.first > 0) { - m_results.appendUpdatedFeed({feed, updated_messages.first}); + if (!updated_messages.m_unread.isEmpty()) { + m_results.appendUpdatedFeed(feed, updated_messages.m_unread); } } catch (const FeedFetchException& feed_ex) { @@ -445,7 +447,6 @@ void FeedDownloader::finalizeUpdate() { qDebugNN << LOGSEC_FEEDDOWNLOADER << "Finished feed updates in thread" << QUOTE_W_SPACE_DOT(QThread::currentThreadId()); - m_results.sort(); m_feeds.clear(); // Update of feeds has finished. @@ -528,7 +529,8 @@ QString FeedDownloadResults::overview(int how_many_feeds) const { QStringList result; for (int i = 0, number_items_output = qMin(how_many_feeds, m_updatedFeeds.size()); i < number_items_output; i++) { - result.append(m_updatedFeeds.at(i).first->title() + QSL(": ") + QString::number(m_updatedFeeds.at(i).second)); + result.append(m_updatedFeeds.keys().at(i)->title() + QSL(": ") + + QString::number(m_updatedFeeds.value(m_updatedFeeds.keys().at(i)).size())); } QString res_str = result.join(QSL("\n")); @@ -540,22 +542,14 @@ QString FeedDownloadResults::overview(int how_many_feeds) const { return res_str; } -void FeedDownloadResults::appendUpdatedFeed(const QPair& feed) { - m_updatedFeeds.append(feed); -} - -void FeedDownloadResults::sort() { - std::sort(m_updatedFeeds.begin(), - m_updatedFeeds.end(), - [](const QPair& lhs, const QPair& rhs) { - return lhs.second > rhs.second; - }); +void FeedDownloadResults::appendUpdatedFeed(Feed* feed, const QList& updated_unread_msgs) { + m_updatedFeeds.insert(feed, updated_unread_msgs); } void FeedDownloadResults::clear() { m_updatedFeeds.clear(); } -QList> FeedDownloadResults::updatedFeeds() const { +QHash> FeedDownloadResults::updatedFeeds() const { return m_updatedFeeds; } diff --git a/src/librssguard/core/feeddownloader.h b/src/librssguard/core/feeddownloader.h index 09e29fd5e..8e24fd925 100644 --- a/src/librssguard/core/feeddownloader.h +++ b/src/librssguard/core/feeddownloader.h @@ -5,29 +5,28 @@ #include -#include -#include - #include "core/message.h" #include "exceptions/applicationexception.h" #include "services/abstract/cacheforserviceroot.h" #include "services/abstract/feed.h" +#include +#include +#include + class MessageFilter; // Represents results of batch feed updates. class FeedDownloadResults { public: - QList> updatedFeeds() const; + QHash> updatedFeeds() const; QString overview(int how_many_feeds) const; - - void appendUpdatedFeed(const QPair& feed); - void sort(); + void appendUpdatedFeed(Feed* feed, const QList& updated_unread_msgs); void clear(); private: // QString represents title if the feed, int represents count of newly downloaded messages. - QList> m_updatedFeeds; + QHash> m_updatedFeeds; }; struct FeedUpdateRequest { diff --git a/src/librssguard/core/message.cpp b/src/librssguard/core/message.cpp index 181cee753..20c735f1f 100644 --- a/src/librssguard/core/message.cpp +++ b/src/librssguard/core/message.cpp @@ -2,7 +2,9 @@ #include "core/message.h" +#include "miscellaneous/application.h" #include "miscellaneous/textfactory.h" +#include "network-web/webfactory.h" #include "services/abstract/feed.h" #include "services/abstract/label.h" @@ -75,6 +77,8 @@ Message::Message() { void Message::sanitize(const Feed* feed, bool fix_future_datetimes) { // Sanitize title. + m_title = qApp->web()->stripTags(qApp->web()->unescapeHtml(m_title)); + m_title = m_title // Remove non-breaking spaces. @@ -89,6 +93,9 @@ void Message::sanitize(const Feed* feed, bool fix_future_datetimes) { // Remove non-breaking zero-width spaces. .remove(QChar(65279)); + // Sanitize author. + m_author = qApp->web()->stripTags(qApp->web()->unescapeHtml(m_author)); + // Sanitize URL. m_url = m_url.trimmed(); diff --git a/src/librssguard/database/databasequeries.cpp b/src/librssguard/database/databasequeries.cpp index a06807faa..aa9bb6107 100644 --- a/src/librssguard/database/databasequeries.cpp +++ b/src/librssguard/database/databasequeries.cpp @@ -1354,7 +1354,7 @@ QHash DatabaseQueries::bagsOfMessages(const QSqlDatabase& return ids; } -QPair DatabaseQueries::updateMessages(const QSqlDatabase& db, +UpdatedArticles DatabaseQueries::updateMessages(const QSqlDatabase& db, QList& messages, Feed* feed, bool force_update, @@ -1362,10 +1362,10 @@ QPair DatabaseQueries::updateMessages(const QSqlDatabase& db, bool* ok) { if (messages.isEmpty()) { *ok = true; - return {0, 0}; + return {}; } - QPair updated_messages = {0, 0}; + UpdatedArticles updated_messages; int account_id = feed->getParentServiceRoot()->accountId(); auto feed_custom_id = feed->customId(); @@ -1615,10 +1615,10 @@ QPair DatabaseQueries::updateMessages(const QSqlDatabase& db, << QUOTE_W_SPACE(message.m_url) << "in DB."; if (!message.m_isRead) { - updated_messages.first++; + updated_messages.m_unread.append(message); } - updated_messages.second++; + updated_messages.m_all.append(message); message.m_insertedUpdated = true; } else if (query_update.lastError().isValid()) { @@ -1655,10 +1655,10 @@ QPair DatabaseQueries::updateMessages(const QSqlDatabase& db, } if (!msg->m_isRead) { - updated_messages.first++; + updated_messages.m_unread.append(*msg); } - updated_messages.second++; + updated_messages.m_all.append(*msg); msg->m_insertedUpdated = true; vals.append(QSL("\n(':feed', ':title', :is_read, :is_important, :is_deleted, " @@ -1742,10 +1742,10 @@ QPair DatabaseQueries::updateMessages(const QSqlDatabase& db, // but its assigned labels were changed. Therefore we must count article // as updated. if (!message.m_isRead) { - updated_messages.first++; + updated_messages.m_unread.append(message); } - updated_messages.second++; + updated_messages.m_all.append(message); } } else { diff --git a/src/librssguard/database/databasequeries.h b/src/librssguard/database/databasequeries.h index f674d51dc..4a27d405b 100644 --- a/src/librssguard/database/databasequeries.h +++ b/src/librssguard/database/databasequeries.h @@ -21,11 +21,6 @@ #include #include -struct ArticleCounts { - int m_total = -1; - int m_unread = -1; -}; - class DatabaseQueries { public: static QMap messageTableAttributes(bool only_msg_table, bool is_sqlite); @@ -162,7 +157,7 @@ class DatabaseQueries { static void createOverwriteAccount(const QSqlDatabase& db, ServiceRoot* account); // Returns counts of updated messages . - static QPair updateMessages(const QSqlDatabase& db, + static UpdatedArticles updateMessages(const QSqlDatabase& db, QList& messages, Feed* feed, bool force_update, diff --git a/src/librssguard/definitions/definitions.h b/src/librssguard/definitions/definitions.h index d4e347dbd..61b67d787 100644 --- a/src/librssguard/definitions/definitions.h +++ b/src/librssguard/definitions/definitions.h @@ -100,9 +100,10 @@ #define MAX_THREADPOOL_THREADS 32 #define WEB_BROWSER_SCROLL_STEP 50.0 -#define NOTIFICATIONS_MARGIN 16 -#define NOTIFICATIONS_WIDTH 256 -#define NOTIFICATIONS_TIMEOUT 15s +#define NOTIFICATIONS_MARGIN 16 +#define NOTIFICATIONS_WIDTH 256 +#define NOTIFICATIONS_TIMEOUT 15s +#define NOTIFICATIONS_PAGE_SIZE 10 #define GOOGLE_SEARCH_URL "https://www.google.com/search?q=%1&ie=utf-8&oe=utf-8" #define GOOGLE_SUGGEST_URL "http://suggestqueries.google.com/complete/search?output=toolbar&hl=en&q=%1" diff --git a/src/librssguard/definitions/typedefs.h b/src/librssguard/definitions/typedefs.h index 19e7bb02e..73e13d1ba 100644 --- a/src/librssguard/definitions/typedefs.h +++ b/src/librssguard/definitions/typedefs.h @@ -14,4 +14,14 @@ typedef QList> Assignment; typedef QPair AssignmentItem; typedef QPair ImportanceChange; +struct ArticleCounts { + int m_total = -1; + int m_unread = -1; +}; + +struct UpdatedArticles { + QList m_unread; + QList m_all; +}; + #endif // TYPEDEFS_H diff --git a/src/librssguard/gui/notifications/articlelistnotification.cpp b/src/librssguard/gui/notifications/articlelistnotification.cpp index 5eb62d926..ecb38c997 100644 --- a/src/librssguard/gui/notifications/articlelistnotification.cpp +++ b/src/librssguard/gui/notifications/articlelistnotification.cpp @@ -2,9 +2,21 @@ #include "gui/notifications/articlelistnotification.h" +#include "miscellaneous/iconfactory.h" + ArticleListNotification::ArticleListNotification(QWidget* parent) : BaseToastNotification(parent) { m_ui.setupUi(this); setupCloseButton(m_ui.m_btnClose); - setupTimedClosing(); + + m_ui.m_btnNextPage->setIcon(qApp->icons()->fromTheme(QSL("arrow-right"), QSL("stock_right"))); + m_ui.m_btnPreviousPage->setIcon(qApp->icons()->fromTheme(QSL("arrow-left"), QSL("stock_left"))); + m_ui.m_btnOpenArticleList->setIcon(qApp->icons()->fromTheme(QSL("view-list-details"))); + m_ui.m_btnOpenWebBrowser->setIcon(qApp->icons()->fromTheme(QSL("document-open"))); +} + +void ArticleListNotification::loadResults(const QHash>& new_messages) { + setupTimedClosing(); + + m_ui.m_treeArticles->setModel() } diff --git a/src/librssguard/gui/notifications/articlelistnotification.h b/src/librssguard/gui/notifications/articlelistnotification.h index 8aaea8095..f8888165f 100644 --- a/src/librssguard/gui/notifications/articlelistnotification.h +++ b/src/librssguard/gui/notifications/articlelistnotification.h @@ -5,14 +5,20 @@ #include "gui/notifications/basetoastnotification.h" +#include "core/message.h" + #include "ui_articlelistnotification.h" +class Feed; + class ArticleListNotification : public BaseToastNotification { Q_OBJECT public: explicit ArticleListNotification(QWidget* parent = nullptr); + void loadResults(const QHash>& new_messages); + private: Ui::ArticleListNotification m_ui; }; diff --git a/src/librssguard/gui/notifications/articlelistnotification.ui b/src/librssguard/gui/notifications/articlelistnotification.ui new file mode 100644 index 000000000..fda69a518 --- /dev/null +++ b/src/librssguard/gui/notifications/articlelistnotification.ui @@ -0,0 +1,130 @@ + + + ArticleListNotification + + + + 0 + 0 + 338 + 271 + + + + + 6 + + + 6 + + + 6 + + + 6 + + + + + true + + + false + + + false + + + true + + + + + + + + + + + + Qt::AlignCenter + + + true + + + + + + + ... + + + + + + + + + + + Go to previous page + + + + + + + Go to next page + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Open article in article list + + + + + + + Open article in web browser + + + + + + + + + + PlainToolButton + QToolButton +
plaintoolbutton.h
+
+
+ + m_btnClose + m_treeArticles + m_btnPreviousPage + m_btnNextPage + m_btnOpenArticleList + m_btnOpenWebBrowser + + + +
diff --git a/src/librssguard/gui/notifications/basetoastnotification.cpp b/src/librssguard/gui/notifications/basetoastnotification.cpp index c396c6e56..a2a59addc 100644 --- a/src/librssguard/gui/notifications/basetoastnotification.cpp +++ b/src/librssguard/gui/notifications/basetoastnotification.cpp @@ -6,12 +6,13 @@ #include #include +#include #include using namespace std::chrono_literals; -BaseToastNotification::BaseToastNotification(QWidget* parent) : QDialog(parent) { +BaseToastNotification::BaseToastNotification(QWidget* parent) : QDialog(parent), m_timerId(-1) { setAttribute(Qt::WidgetAttribute::WA_ShowWithoutActivating); setFixedWidth(NOTIFICATIONS_WIDTH); setFocusPolicy(Qt::FocusPolicy::NoFocus); @@ -39,8 +40,15 @@ void BaseToastNotification::setupCloseButton(QAbstractButton* btn) { connect(btn, &QAbstractButton::clicked, this, &BaseToastNotification::close); } +void BaseToastNotification::stopTimedClosing() { + killTimer(m_timerId); + m_timerId = -1; +} + void BaseToastNotification::setupTimedClosing() { - QTimer::singleShot(NOTIFICATIONS_TIMEOUT, this, &BaseToastNotification::close); + if (m_timerId < 0) { + m_timerId = startTimer(NOTIFICATIONS_TIMEOUT); + } } bool BaseToastNotification::eventFilter(QObject* watched, QEvent* event) { @@ -48,12 +56,28 @@ bool BaseToastNotification::eventFilter(QObject* watched, QEvent* event) { return true; } else { + if (event->type() == QEvent::Type::Enter) { + stopTimedClosing(); + } + + if (event->type() == QEvent::Type::Leave) { + setupTimedClosing(); + } + return QDialog::eventFilter(watched, event); } } void BaseToastNotification::closeEvent(QCloseEvent* event) { + stopTimedClosing(); emit closeRequested(this); } void BaseToastNotification::reject() {} + +void BaseToastNotification::timerEvent(QTimerEvent* event) { + if (event->timerId() == m_timerId) { + stopTimedClosing(); + emit closeRequested(this); + } +} diff --git a/src/librssguard/gui/notifications/basetoastnotification.h b/src/librssguard/gui/notifications/basetoastnotification.h index 654e937ea..7749b073d 100644 --- a/src/librssguard/gui/notifications/basetoastnotification.h +++ b/src/librssguard/gui/notifications/basetoastnotification.h @@ -19,10 +19,12 @@ class BaseToastNotification : public QDialog { protected: virtual bool eventFilter(QObject* watched, QEvent* event); + virtual void timerEvent(QTimerEvent* event); virtual void closeEvent(QCloseEvent* event); - void setupCloseButton(QAbstractButton* btn); void setupTimedClosing(); + void setupCloseButton(QAbstractButton* btn); + void stopTimedClosing(); signals: void closeRequested(BaseToastNotification* notif); diff --git a/src/librssguard/gui/notifications/toastnotification.cpp b/src/librssguard/gui/notifications/toastnotification.cpp index 8918bb749..c057be392 100644 --- a/src/librssguard/gui/notifications/toastnotification.cpp +++ b/src/librssguard/gui/notifications/toastnotification.cpp @@ -43,7 +43,10 @@ void ToastNotification::loadNotification(Notification::Event event, const GuiMes if (action.m_action) { m_ui.m_btnAction->setText(action.m_title.isEmpty() ? tr("Do it!") : action.m_title); - connect(m_ui.m_btnAction, &QPushButton::clicked, this, action.m_action); + connect(m_ui.m_btnAction, &QPushButton::clicked, this, [this, action]() { + action.m_action(); + emit closeRequested(this); + }); } else { m_ui.m_mainLayout->removeItem(m_ui.m_actionLayout); diff --git a/src/librssguard/gui/notifications/toastnotification.ui b/src/librssguard/gui/notifications/toastnotification.ui index 029cec080..09e3b815b 100644 --- a/src/librssguard/gui/notifications/toastnotification.ui +++ b/src/librssguard/gui/notifications/toastnotification.ui @@ -10,9 +10,6 @@ 143 - - Dialog - 6 diff --git a/src/librssguard/gui/notifications/toastnotificationsmanager.cpp b/src/librssguard/gui/notifications/toastnotificationsmanager.cpp index 73547ad85..d783c40ef 100644 --- a/src/librssguard/gui/notifications/toastnotificationsmanager.cpp +++ b/src/librssguard/gui/notifications/toastnotificationsmanager.cpp @@ -12,6 +12,23 @@ #include #include +QString ToastNotificationsManager::textForPosition(ToastNotificationsManager::NotificationPosition pos) { + switch (pos) { + case TopLeft: + return QObject::tr("top-left"); + + case TopRight: + return QObject::tr("top-right"); + + case BottomLeft: + return QObject::tr("bottom-left"); + + case BottomRight: + default: + return QObject::tr("bottom-right"); + } +} + ToastNotificationsManager::ToastNotificationsManager(NotificationPosition position, int screen, QObject* parent) : QObject(parent), m_position(position), m_screen(screen), m_articleListNotification(nullptr) {} @@ -50,9 +67,26 @@ void ToastNotificationsManager::clear() { void ToastNotificationsManager::showNotification(Notification::Event event, const GuiMessage& msg, const GuiAction& action) { - ToastNotification* notif = new ToastNotification(event, msg, action, qApp->mainFormWidget()); + BaseToastNotification* notif; - hookNotification(notif); + if (!msg.m_feedFetchResults.updatedFeeds().isEmpty()) { + if (m_articleListNotification == nullptr) { + m_articleListNotification = new ArticleListNotification(); + hookNotification(m_articleListNotification); + } + else if (m_activeNotifications.contains(m_articleListNotification)) { + // Article notification is somewhere in list, clear first to move it to first positon. + closeNotification(m_articleListNotification, false); + } + + m_articleListNotification->loadResults(msg.m_feedFetchResults.updatedFeeds()); + + notif = m_articleListNotification; + } + else { + notif = new ToastNotification(event, msg, action, qApp->mainFormWidget()); + hookNotification(notif); + } auto* screen = moveToProperScreen(notif); @@ -76,39 +110,6 @@ void ToastNotificationsManager::showNotification(Notification::Event event, m_activeNotifications.prepend(notif); } -void ToastNotificationsManager::showNotification(const QList& new_messages) { - if (m_articleListNotification == nullptr) { - m_articleListNotification = new ArticleListNotification(); - hookNotification(m_articleListNotification); - } - - if (!m_activeNotifications.isEmpty() && m_activeNotifications.first() != m_articleListNotification) { - // Article notification is somewhere in list, clear first to move it to first positon. - closeNotification(m_articleListNotification, false); - } - - auto* screen = moveToProperScreen(m_articleListNotification); - - // Insert new notification into free space. - m_articleListNotification->show(); - - auto notif_new_pos = cornerForNewNotification(screen->availableGeometry()); - - // Make sure notification is finally resized. - m_articleListNotification->adjustSize(); - qApp->processEvents(); - - // Move notification, at this point we already need to know its precise size. - moveNotificationToCorner(m_articleListNotification, notif_new_pos); - - // Remove out-of-bounds old notifications and shift existing - // ones to make space for new notifications. - removeOutOfBoundsNotifications(m_articleListNotification->height()); - makeSpaceForNotification(m_articleListNotification->height()); - - m_activeNotifications.prepend(m_articleListNotification); -} - void ToastNotificationsManager::closeNotification(BaseToastNotification* notif, bool delete_from_memory) { auto notif_idx = m_activeNotifications.indexOf(notif); @@ -160,7 +161,7 @@ QPoint ToastNotificationsManager::cornerForNewNotification(QRect screen_rect) { void ToastNotificationsManager::hookNotification(BaseToastNotification* notif) { connect(notif, &BaseToastNotification::closeRequested, this, [this](BaseToastNotification* notif) { - closeNotification(notif, false); + closeNotification(notif, notif != m_articleListNotification); }); } diff --git a/src/librssguard/gui/notifications/toastnotificationsmanager.h b/src/librssguard/gui/notifications/toastnotificationsmanager.h index 1a28ca677..10f2b54ed 100644 --- a/src/librssguard/gui/notifications/toastnotificationsmanager.h +++ b/src/librssguard/gui/notifications/toastnotificationsmanager.h @@ -23,6 +23,10 @@ class ToastNotificationsManager : public QObject { BottomRight = 3 }; + Q_ENUM(NotificationPosition) + + static QString textForPosition(ToastNotificationsManager::NotificationPosition pos); + explicit ToastNotificationsManager(ToastNotificationsManager::NotificationPosition position, int screen, QObject* parent = nullptr); @@ -41,7 +45,6 @@ class ToastNotificationsManager : public QObject { public slots: void clear(); void showNotification(Notification::Event event, const GuiMessage& msg, const GuiAction& action); - void showNotification(const QList& new_messages); private slots: void closeNotification(BaseToastNotification* notif, bool delete_from_memory); diff --git a/src/librssguard/gui/reusable/helpspoiler.cpp b/src/librssguard/gui/reusable/helpspoiler.cpp index 71a79a010..6fbaab86a 100644 --- a/src/librssguard/gui/reusable/helpspoiler.cpp +++ b/src/librssguard/gui/reusable/helpspoiler.cpp @@ -26,6 +26,7 @@ HelpSpoiler::HelpSpoiler(QWidget* parent) m_btnToggle->setCheckable(true); m_btnToggle->setChecked(false); + m_content->setStyleSheet(QSL("QScrollArea { border: 1px solid %1; }").arg(palette().windowText().color().name())); m_content->setSizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Fixed); m_content->setMaximumHeight(0); m_content->setMinimumHeight(0); diff --git a/src/librssguard/gui/settings/settingsnotifications.cpp b/src/librssguard/gui/settings/settingsnotifications.cpp index 672062450..5ea235ffa 100644 --- a/src/librssguard/gui/settings/settingsnotifications.cpp +++ b/src/librssguard/gui/settings/settingsnotifications.cpp @@ -8,6 +8,8 @@ #include "miscellaneous/settings.h" #include +#include +#include SettingsNotifications::SettingsNotifications(Settings* settings, QWidget* parent) : SettingsPanel(settings, parent) { m_ui.setupUi(this); @@ -25,6 +27,14 @@ SettingsNotifications::SettingsNotifications(Settings* settings, QWidget* parent connect(m_ui.m_rbNativeNotifications, &QRadioButton::toggled, this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_rbNativeNotifications, &QRadioButton::toggled, this, &SettingsNotifications::requireRestart); + connect(m_ui.m_sbScreen, &QSpinBox::valueChanged, this, &SettingsNotifications::dirtifySettings); + connect(m_ui.m_sbScreen, &QSpinBox::valueChanged, this, &SettingsNotifications::requireRestart); + + m_ui.m_sbScreen->setMinimum(-1); + m_ui.m_sbScreen->setMaximum(QGuiApplication::screens().size() - 1); + + connect(m_ui.m_sbScreen, &QSpinBox::valueChanged, this, &SettingsNotifications::showScreenInfo); + connect(m_ui.m_cbCustomNotificationsPosition, &QComboBox::currentIndexChanged, this, @@ -33,6 +43,15 @@ SettingsNotifications::SettingsNotifications(Settings* settings, QWidget* parent &QComboBox::currentIndexChanged, this, &SettingsNotifications::requireRestart); + + QMetaEnum enm = QMetaEnum::fromType(); + + for (int i = 0; i < enm.keyCount(); i++) { + m_ui.m_cbCustomNotificationsPosition + ->addItem(ToastNotificationsManager:: + textForPosition(ToastNotificationsManager::NotificationPosition(enm.value(i))), + enm.value(i)); + } } void SettingsNotifications::loadSettings() { @@ -43,6 +62,16 @@ void SettingsNotifications::loadSettings() { ->setChecked(settings()->value(GROUP(GUI), SETTING(GUI::EnableNotifications)).toBool()); m_ui.m_editor->loadNotifications(qApp->notifications()->allNotifications()); + m_ui.m_rbNativeNotifications + ->setChecked(!settings()->value(GROUP(GUI), SETTING(GUI::UseToastNotifications)).toBool()); + m_ui.m_sbScreen->setValue(settings()->value(GROUP(GUI), SETTING(GUI::ToastNotificationsScreen)).toInt()); + + m_ui.m_cbCustomNotificationsPosition + ->setCurrentIndex(m_ui.m_cbCustomNotificationsPosition + ->findData(settings() + ->value(GROUP(GUI), SETTING(GUI::ToastNotificationsPosition)) + .value())); + onEndLoadSettings(); } @@ -53,5 +82,29 @@ void SettingsNotifications::saveSettings() { settings()->setValue(GROUP(GUI), GUI::EnableNotifications, m_ui.m_checkEnableNotifications->isChecked()); qApp->notifications()->save(m_ui.m_editor->allNotifications(), settings()); + settings()->setValue(GROUP(GUI), GUI::UseToastNotifications, m_ui.m_rbCustomNotifications->isChecked()); + settings()->setValue(GROUP(GUI), GUI::ToastNotificationsScreen, m_ui.m_sbScreen->value()); + + settings()->setValue(GROUP(GUI), + GUI::ToastNotificationsPosition, + m_ui.m_cbCustomNotificationsPosition->currentData() + .value()); + onEndSaveSettings(); } + +void SettingsNotifications::showScreenInfo(int index) { + QScreen* scr; + + if (index < 0 || index >= QGuiApplication::screens().size()) { + scr = QGuiApplication::primaryScreen(); + } + else { + scr = QGuiApplication::screens().at(index); + } + + m_ui.m_lblScreenInfo->setText(QSL("%1 (%2x%3)") + .arg(scr->name(), + QString::number(scr->virtualSize().width()), + QString::number(scr->virtualSize().height()))); +} diff --git a/src/librssguard/gui/settings/settingsnotifications.h b/src/librssguard/gui/settings/settingsnotifications.h index eac55fb4f..8c306377f 100644 --- a/src/librssguard/gui/settings/settingsnotifications.h +++ b/src/librssguard/gui/settings/settingsnotifications.h @@ -10,7 +10,7 @@ class Settings; class SettingsNotifications : public SettingsPanel { - Q_OBJECT + Q_OBJECT public: explicit SettingsNotifications(Settings* settings, QWidget* parent = nullptr); @@ -19,6 +19,9 @@ class SettingsNotifications : public SettingsPanel { virtual void loadSettings(); virtual void saveSettings(); + private slots: + void showScreenInfo(int index); + private: Ui::SettingsNotifications m_ui; }; diff --git a/src/librssguard/gui/settings/settingsnotifications.ui b/src/librssguard/gui/settings/settingsnotifications.ui index 917ffadf7..6f3aa6a4c 100644 --- a/src/librssguard/gui/settings/settingsnotifications.ui +++ b/src/librssguard/gui/settings/settingsnotifications.ui @@ -45,9 +45,6 @@ Native notifications (tray icon must be enabled) - - true -
@@ -55,6 +52,9 @@ Custom notifications + + true + @@ -76,6 +76,27 @@ + + + + 99 + + + + + + + Screen + + + + + + + + + + diff --git a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp index a368e1be0..d4f761cf5 100644 --- a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp +++ b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp @@ -134,7 +134,7 @@ PreparedHtml TextBrowserViewer::prepareHtmlForMessage(const QList& mess html.m_html += is_plain ? Qt::convertFromPlainText(message.m_contents, Qt::WhiteSpaceMode::WhiteSpaceNormal) : message.m_contents; - static QRegularExpression img_tag_rgx("\\]*src\\s*=\\s*[\"\']([^\"\']*)[\"\'][^\\>]*\\>", + static QRegularExpression img_tag_rgx(QSL("\\]*src\\s*=\\s*[\"\']([^\"\']*)[\"\'][^\\>]*\\>"), QRegularExpression::PatternOption::CaseInsensitiveOption | QRegularExpression::PatternOption::InvertedGreedinessOption); diff --git a/src/librssguard/miscellaneous/application.cpp b/src/librssguard/miscellaneous/application.cpp index 0e669ca8c..f4ae62f14 100644 --- a/src/librssguard/miscellaneous/application.cpp +++ b/src/librssguard/miscellaneous/application.cpp @@ -111,11 +111,13 @@ Application::Application(const QString& id, int& argc, char** argv, const QStrin m_downloadManager = nullptr; m_notifications = new NotificationFactory(this); m_toastNotifications = - new ToastNotificationsManager(settings() - ->value(GROUP(GUI), SETTING(GUI::ToastNotificationsPosition)) - .value(), - settings()->value(GROUP(GUI), SETTING(GUI::ToastNotificationsScreen)).toInt(), - this); + settings()->value(GROUP(GUI), SETTING(GUI::UseToastNotifications)).toBool() + ? new ToastNotificationsManager(settings() + ->value(GROUP(GUI), SETTING(GUI::ToastNotificationsPosition)) + .value(), + settings()->value(GROUP(GUI), SETTING(GUI::ToastNotificationsScreen)).toInt(), + this) + : nullptr; m_shouldRestart = false; #if defined(Q_OS_WIN) @@ -695,22 +697,26 @@ void Application::showGuiMessageCore(Notification::Event event, GuiMessageDestination dest, const GuiAction& action, QWidget* parent) { - m_toastNotifications->showNotification(event, msg, action); - return; - if (m_notifications->areNotificationsEnabled()) { auto notification = m_notifications->notificationForEvent(event); notification.playSound(this); - if (SystemTrayIcon::isSystemTrayDesired() && SystemTrayIcon::isSystemTrayAreaAvailable() && - notification.balloonEnabled() && dest.m_tray) { - trayIcon()->showMessage(msg.m_title.simplified().isEmpty() ? Notification::nameForEvent(notification.event()) - : msg.m_title, - msg.m_message, - msg.m_type, - TRAY_ICON_BUBBLE_TIMEOUT, - std::move(action.m_action)); + if (notification.balloonEnabled() && dest.m_tray) { + if (m_toastNotifications != nullptr) { + // Toasts are enabled. + m_toastNotifications->showNotification(event, msg, action); + } + else if (SystemTrayIcon::isSystemTrayDesired() && SystemTrayIcon::isSystemTrayAreaAvailable()) { + // Use tray icon balloons (which are implemented as native notifications on most systems. + trayIcon()->showMessage(msg.m_title.simplified().isEmpty() ? Notification::nameForEvent(notification.event()) + : msg.m_title, + msg.m_message, + msg.m_type, + TRAY_ICON_BUBBLE_TIMEOUT, + std::move(action.m_action)); + } + return; } } @@ -999,15 +1005,24 @@ void Application::onFeedUpdatesProgress(const Feed* feed, int current, int total } void Application::onFeedUpdatesFinished(const FeedDownloadResults& results) { - auto fds = results.updatedFeeds(); - bool some_unquiet_feed = boolinq::from(fds).any([](const QPair& fd) { - return !fd.first->isQuiet(); + auto fds = results.updatedFeeds().keys(); + bool some_unquiet_feed = boolinq::from(fds).any([](Feed* fd) { + return !fd->isQuiet(); }); if (some_unquiet_feed) { - // Now, inform about results via GUI message/notification. - qApp->showGuiMessage(Notification::Event::NewUnreadArticlesFetched, - {tr("Unread articles fetched"), results.overview(10), QSystemTrayIcon::MessageIcon::NoIcon}); + GuiMessage msg = {tr("Unread articles fetched"), QString(), QSystemTrayIcon::MessageIcon::NoIcon}; + + if (m_toastNotifications != nullptr) { + // Show custom and richer overview of updated feeds and articles. + msg.m_feedFetchResults = results; + } + else { + // Show simpler overview of updated feeds. + msg.m_message = results.overview(10); + } + + qApp->showGuiMessage(Notification::Event::NewUnreadArticlesFetched, msg); } #if defined(Q_OS_WIN) diff --git a/src/librssguard/miscellaneous/application.h b/src/librssguard/miscellaneous/application.h index 41e333d30..c1a6e92be 100644 --- a/src/librssguard/miscellaneous/application.h +++ b/src/librssguard/miscellaneous/application.h @@ -60,6 +60,7 @@ struct GuiMessage { QString m_title; QString m_message; QSystemTrayIcon::MessageIcon m_type; + FeedDownloadResults m_feedFetchResults; }; Q_DECLARE_METATYPE(GuiMessage) diff --git a/src/librssguard/miscellaneous/feedreader.cpp b/src/librssguard/miscellaneous/feedreader.cpp index c9ccbef19..4e1fd627e 100644 --- a/src/librssguard/miscellaneous/feedreader.cpp +++ b/src/librssguard/miscellaneous/feedreader.cpp @@ -255,19 +255,6 @@ void FeedReader::removeMessageFilterToFeedAssignment(Feed* feed, MessageFilter* } void FeedReader::updateAllFeeds() { - qApp - ->showGuiMessage(Notification::Event::GeneralEvent, - GuiMessage(QDateTime::currentDateTime().toString(), - "Quisque ullamcorper ut purus nec tempus. Vivamus eros dolor, sagittis ultrices augue " - "ut, posuere fringilla lorem. Donec posuere, enim sit amet fermentum dignissim, tellus " - "lectus laoreet lectus, vestibulum laoreet felis tortor eget nunc. Curabitur sagittis " - "quam in scelerisque placerat. Vivamus vel porta tortor. Vivamus nec volutpat sem", - QSystemTrayIcon::MessageIcon::Information), - GuiMessageDestination(), - GuiAction("test", []() { - qDebugNN << "aa"; - })); - updateFeeds(m_feedsModel->rootItem()->getSubTreeFeeds()); } diff --git a/src/librssguard/services/abstract/serviceroot.cpp b/src/librssguard/services/abstract/serviceroot.cpp index d316fba4a..09e9da7e9 100644 --- a/src/librssguard/services/abstract/serviceroot.cpp +++ b/src/librssguard/services/abstract/serviceroot.cpp @@ -1110,8 +1110,8 @@ ServiceRoot::LabelOperation operator&(ServiceRoot::LabelOperation lhs, ServiceRo return static_cast(static_cast(lhs) & static_cast(rhs)); } -QPair ServiceRoot::updateMessages(QList& messages, Feed* feed, bool force_update, QMutex* db_mutex) { - QPair updated_messages = {0, 0}; +UpdatedArticles ServiceRoot::updateMessages(QList& messages, Feed* feed, bool force_update, QMutex* db_mutex) { + UpdatedArticles updated_messages; if (messages.isEmpty()) { qDebugNN << "No messages to be updated/added in DB for feed" << QUOTE_W_SPACE_DOT(feed->customId()); @@ -1125,7 +1125,7 @@ QPair ServiceRoot::updateMessages(QList& messages, Feed* feed updated_messages = DatabaseQueries::updateMessages(database, messages, feed, force_update, db_mutex, &ok); - if (updated_messages.first > 0 || updated_messages.second > 0) { + if (!updated_messages.m_unread.isEmpty() || !updated_messages.m_all.isEmpty()) { QMutexLocker lck(db_mutex); // Something was added or updated in the DB, update numbers. diff --git a/src/librssguard/services/abstract/serviceroot.h b/src/librssguard/services/abstract/serviceroot.h index 054d37c12..6b3a1e7d5 100644 --- a/src/librssguard/services/abstract/serviceroot.h +++ b/src/librssguard/services/abstract/serviceroot.h @@ -6,7 +6,6 @@ #include "services/abstract/rootitem.h" #include "core/message.h" -#include "core/messagefilter.h" #include "definitions/typedefs.h" #include @@ -206,7 +205,7 @@ class ServiceRoot : public RootItem { void completelyRemoveAllData(); // Returns counts of updated messages . - QPair updateMessages(QList& messages, Feed* feed, bool force_update, QMutex* db_mutex); + UpdatedArticles updateMessages(QList& messages, Feed* feed, bool force_update, QMutex* db_mutex); QIcon feedIconForMessage(const QString& feed_custom_id) const; diff --git a/src/librssguard/services/feedly/feedlynetwork.cpp b/src/librssguard/services/feedly/feedlynetwork.cpp index 25a1c0dfa..901da883c 100644 --- a/src/librssguard/services/feedly/feedlynetwork.cpp +++ b/src/librssguard/services/feedly/feedlynetwork.cpp @@ -418,7 +418,7 @@ QList FeedlyNetwork::decodeStreamContents(const QByteArray& stream_cont Message message; message.m_feedId = entry_obj[QSL("origin")].toObject()[QSL("streamId")].toString(); - message.m_title = qApp->web()->stripTags(entry_obj[QSL("title")].toString()); + message.m_title = entry_obj[QSL("title")].toString(); message.m_author = entry_obj[QSL("author")].toString(); message.m_contents = entry_obj[QSL("content")].toObject()[QSL("content")].toString(); message.m_rawContents = QJsonDocument(entry_obj).toJson(QJsonDocument::JsonFormat::Compact); diff --git a/src/librssguard/services/greader/greadernetwork.cpp b/src/librssguard/services/greader/greadernetwork.cpp index 27f3bece6..8c79194de 100644 --- a/src/librssguard/services/greader/greadernetwork.cpp +++ b/src/librssguard/services/greader/greadernetwork.cpp @@ -957,8 +957,8 @@ QList GreaderNetwork::decodeStreamContents(ServiceRoot* root, auto message_obj = obj.toObject(); Message message; - message.m_title = qApp->web()->unescapeHtml(message_obj[QSL("title")].toString()); - message.m_author = qApp->web()->unescapeHtml(message_obj[QSL("author")].toString()); + message.m_title = message_obj[QSL("title")].toString(); + message.m_author = message_obj[QSL("author")].toString(); message.m_created = QDateTime::fromSecsSinceEpoch(message_obj[QSL("published")].toInt(), Qt::TimeSpec::UTC); message.m_createdFromFeed = true; message.m_customId = message_obj[QSL("id")].toString(); diff --git a/src/librssguard/services/standard/parsers/feedparser.cpp b/src/librssguard/services/standard/parsers/feedparser.cpp index b13f7784c..cdfd2f3a0 100644 --- a/src/librssguard/services/standard/parsers/feedparser.cpp +++ b/src/librssguard/services/standard/parsers/feedparser.cpp @@ -100,9 +100,9 @@ QList FeedParser::messages() { Message new_message; // Fill available data. - new_message.m_title = qApp->web()->stripTags(qApp->web()->unescapeHtml(xmlMessageTitle(message_item))); + new_message.m_title = xmlMessageTitle(message_item); new_message.m_contents = xmlMessageDescription(message_item); - new_message.m_author = qApp->web()->stripTags(qApp->web()->unescapeHtml(xmlMessageAuthor(message_item))); + new_message.m_author = xmlMessageAuthor(message_item); new_message.m_url = xmlMessageUrl(message_item); new_message.m_created = xmlMessageDateCreated(message_item); new_message.m_customId = xmlMessageId(message_item); @@ -128,9 +128,9 @@ QList FeedParser::messages() { Message new_message; // Fill available data. - new_message.m_title = qApp->web()->stripTags(qApp->web()->unescapeHtml(jsonMessageTitle(message_item))); + new_message.m_title = jsonMessageTitle(message_item); new_message.m_contents = jsonMessageDescription(message_item); - new_message.m_author = qApp->web()->stripTags(qApp->web()->unescapeHtml(jsonMessageAuthor(message_item))); + new_message.m_author = jsonMessageAuthor(message_item); new_message.m_url = jsonMessageUrl(message_item); new_message.m_created = jsonMessageDateCreated(message_item); new_message.m_customId = jsonMessageId(message_item); From 87e461e717227de798b44e60e3f35d31c4c26d83 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 22 Sep 2023 13:14:04 +0200 Subject: [PATCH 05/11] save work --- .../core/articlelistnotificationmodel.cpp | 36 ++++++++++++++--- .../core/articlelistnotificationmodel.h | 4 ++ src/librssguard/definitions/definitions.h | 3 +- .../notifications/articlelistnotification.cpp | 40 ++++++++++++++++++- .../notifications/articlelistnotification.h | 6 +++ .../notifications/articlelistnotification.ui | 28 ++++++++++++- .../notifications/basetoastnotification.cpp | 19 ++++++++- .../gui/notifications/basetoastnotification.h | 2 + .../gui/notifications/toastnotification.cpp | 11 +---- .../gui/notifications/toastnotification.h | 1 - 10 files changed, 128 insertions(+), 22 deletions(-) diff --git a/src/librssguard/core/articlelistnotificationmodel.cpp b/src/librssguard/core/articlelistnotificationmodel.cpp index 4b1998dfd..4cb601706 100644 --- a/src/librssguard/core/articlelistnotificationmodel.cpp +++ b/src/librssguard/core/articlelistnotificationmodel.cpp @@ -2,6 +2,8 @@ #include "core/articlelistnotificationmodel.h" +#include "definitions/definitions.h" + ArticleListNotificationModel::ArticleListNotificationModel(QObject* parent) : QAbstractListModel(parent), m_currentPage(-1) {} @@ -10,14 +12,38 @@ ArticleListNotificationModel::~ArticleListNotificationModel() {} void ArticleListNotificationModel::setArticles(const QList& msgs) { m_articles = msgs; m_currentPage = 0; + + reloadWholeLayout(); } -void ArticleListNotificationModel::nextPage() {} +void ArticleListNotificationModel::nextPage() { + emit nextPagePossibleChanged(true); + emit previousPagePossibleChanged(true); +} -void ArticleListNotificationModel::previousPage() {} +void ArticleListNotificationModel::previousPage() { + emit nextPagePossibleChanged(true); + emit previousPagePossibleChanged(true); +} -int ArticleListNotificationModel::rowCount(const QModelIndex& parent) const {} +int ArticleListNotificationModel::rowCount(const QModelIndex& parent) const { + return std::min(int(m_articles.size() - (NOTIFICATIONS_PAGE_SIZE * m_currentPage)), NOTIFICATIONS_PAGE_SIZE); +} -int ArticleListNotificationModel::columnCount(const QModelIndex& parent) const {} +int ArticleListNotificationModel::columnCount(const QModelIndex& parent) const { + return 1; +} -QVariant ArticleListNotificationModel::data(const QModelIndex& index, int role) const {} +QVariant ArticleListNotificationModel::data(const QModelIndex& index, int role) const { + switch (role) { + case Qt::ItemDataRole::DisplayRole: + return m_articles.at((m_currentPage * NOTIFICATIONS_PAGE_SIZE) + index.row()).m_title; + } + + return QVariant(); +} + +void ArticleListNotificationModel::reloadWholeLayout() { + emit layoutAboutToBeChanged(); + emit layoutChanged(); +} diff --git a/src/librssguard/core/articlelistnotificationmodel.h b/src/librssguard/core/articlelistnotificationmodel.h index 96a898a97..c97574d6f 100644 --- a/src/librssguard/core/articlelistnotificationmodel.h +++ b/src/librssguard/core/articlelistnotificationmodel.h @@ -8,6 +8,8 @@ #include "core/message.h" class ArticleListNotificationModel : public QAbstractListModel { + Q_OBJECT + public: explicit ArticleListNotificationModel(QObject* parent = nullptr); virtual ~ArticleListNotificationModel(); @@ -21,6 +23,8 @@ class ArticleListNotificationModel : public QAbstractListModel { virtual int columnCount(const QModelIndex& parent) const; virtual QVariant data(const QModelIndex& index, int role) const; + void reloadWholeLayout(); + signals: void nextPagePossibleChanged(bool possible); void previousPagePossibleChanged(bool possible); diff --git a/src/librssguard/definitions/definitions.h b/src/librssguard/definitions/definitions.h index 61b67d787..1ca9f06f8 100644 --- a/src/librssguard/definitions/definitions.h +++ b/src/librssguard/definitions/definitions.h @@ -101,7 +101,7 @@ #define WEB_BROWSER_SCROLL_STEP 50.0 #define NOTIFICATIONS_MARGIN 16 -#define NOTIFICATIONS_WIDTH 256 +#define NOTIFICATIONS_WIDTH 300 #define NOTIFICATIONS_TIMEOUT 15s #define NOTIFICATIONS_PAGE_SIZE 10 @@ -165,6 +165,7 @@ #define LOGSEC_MESSAGEMODEL "message-model: " #define LOGSEC_JS "javascript: " #define LOGSEC_GUI "gui: " +#define LOGSEC_NOTIFICATIONS "notifications: " #define LOGSEC_CORE "core: " #define LOGSEC_NODEJS "nodejs: " #define LOGSEC_DB "database: " diff --git a/src/librssguard/gui/notifications/articlelistnotification.cpp b/src/librssguard/gui/notifications/articlelistnotification.cpp index ecb38c997..321cd8425 100644 --- a/src/librssguard/gui/notifications/articlelistnotification.cpp +++ b/src/librssguard/gui/notifications/articlelistnotification.cpp @@ -2,21 +2,57 @@ #include "gui/notifications/articlelistnotification.h" +#include "core/articlelistnotificationmodel.h" #include "miscellaneous/iconfactory.h" -ArticleListNotification::ArticleListNotification(QWidget* parent) : BaseToastNotification(parent) { +ArticleListNotification::ArticleListNotification(QWidget* parent) + : BaseToastNotification(parent), m_model(new ArticleListNotificationModel(this)) { m_ui.setupUi(this); + setupHeading(m_ui.m_lblTitle); setupCloseButton(m_ui.m_btnClose); m_ui.m_btnNextPage->setIcon(qApp->icons()->fromTheme(QSL("arrow-right"), QSL("stock_right"))); m_ui.m_btnPreviousPage->setIcon(qApp->icons()->fromTheme(QSL("arrow-left"), QSL("stock_left"))); m_ui.m_btnOpenArticleList->setIcon(qApp->icons()->fromTheme(QSL("view-list-details"))); m_ui.m_btnOpenWebBrowser->setIcon(qApp->icons()->fromTheme(QSL("document-open"))); + + connect(m_model, + &ArticleListNotificationModel::nextPagePossibleChanged, + m_ui.m_btnNextPage, + &PlainToolButton::setEnabled); + connect(m_model, + &ArticleListNotificationModel::previousPagePossibleChanged, + m_ui.m_btnPreviousPage, + &PlainToolButton::setEnabled); + + m_ui.m_treeArticles->setAttribute(Qt::WA_NoSystemBackground, true); + + auto pal = m_ui.m_treeArticles->palette(); + + // Make background transparent. + pal.setColor(QPalette::ColorRole::Base, Qt::transparent); + + m_ui.m_treeArticles->setPalette(pal); + m_ui.m_treeArticles->setModel(m_model); + + connect(m_ui.m_cmbFeeds, &QComboBox::currentIndexChanged, this, &ArticleListNotification::showFeed); } void ArticleListNotification::loadResults(const QHash>& new_messages) { setupTimedClosing(); - m_ui.m_treeArticles->setModel() + m_newMessages = new_messages; + + m_ui.m_lblTitle->setText(tr("%n feeds fetched", nullptr, new_messages.size())); + + m_ui.m_cmbFeeds->clear(); + + for (Feed* fd : new_messages.keys()) { + m_ui.m_cmbFeeds->addItem(fd->sanitizedTitle(), QVariant::fromValue(fd)); + } +} + +void ArticleListNotification::showFeed(int index) { + m_model->setArticles(m_newMessages.value(m_ui.m_cmbFeeds->itemData(index).value())); } diff --git a/src/librssguard/gui/notifications/articlelistnotification.h b/src/librssguard/gui/notifications/articlelistnotification.h index f8888165f..d7590abbf 100644 --- a/src/librssguard/gui/notifications/articlelistnotification.h +++ b/src/librssguard/gui/notifications/articlelistnotification.h @@ -10,6 +10,7 @@ #include "ui_articlelistnotification.h" class Feed; +class ArticleListNotificationModel; class ArticleListNotification : public BaseToastNotification { Q_OBJECT @@ -19,8 +20,13 @@ class ArticleListNotification : public BaseToastNotification { void loadResults(const QHash>& new_messages); + private slots: + void showFeed(int index); + private: Ui::ArticleListNotification m_ui; + ArticleListNotificationModel* m_model; + QHash> m_newMessages; }; #endif // ARTICLELISTNOTIFICATION_H diff --git a/src/librssguard/gui/notifications/articlelistnotification.ui b/src/librssguard/gui/notifications/articlelistnotification.ui index fda69a518..4cba4fad9 100644 --- a/src/librssguard/gui/notifications/articlelistnotification.ui +++ b/src/librssguard/gui/notifications/articlelistnotification.ui @@ -25,6 +25,15 @@ + + Qt::ScrollBarAlwaysOff + + + 0 + + + false + true @@ -35,7 +44,7 @@ false - true + false @@ -92,6 +101,22 @@ + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -122,6 +147,7 @@ m_treeArticles m_btnPreviousPage m_btnNextPage + m_cmbFeeds m_btnOpenArticleList m_btnOpenWebBrowser diff --git a/src/librssguard/gui/notifications/basetoastnotification.cpp b/src/librssguard/gui/notifications/basetoastnotification.cpp index a2a59addc..1976557a0 100644 --- a/src/librssguard/gui/notifications/basetoastnotification.cpp +++ b/src/librssguard/gui/notifications/basetoastnotification.cpp @@ -40,14 +40,29 @@ void BaseToastNotification::setupCloseButton(QAbstractButton* btn) { connect(btn, &QAbstractButton::clicked, this, &BaseToastNotification::close); } +void BaseToastNotification::setupHeading(QLabel* lbl) { + auto fon = lbl->font(); + + fon.setBold(true); + fon.setPointSize(fon.pointSize() * 1.2); + + lbl->setFont(fon); +} + void BaseToastNotification::stopTimedClosing() { - killTimer(m_timerId); - m_timerId = -1; + if (m_timerId >= 0) { + killTimer(m_timerId); + m_timerId = -1; + + qDebugNN << LOGSEC_NOTIFICATIONS << "Stopping timed closing for notification."; + } } void BaseToastNotification::setupTimedClosing() { if (m_timerId < 0) { m_timerId = startTimer(NOTIFICATIONS_TIMEOUT); + + qDebugNN << LOGSEC_NOTIFICATIONS << "Starting timed closing for notification."; } } diff --git a/src/librssguard/gui/notifications/basetoastnotification.h b/src/librssguard/gui/notifications/basetoastnotification.h index 7749b073d..d29ac5ceb 100644 --- a/src/librssguard/gui/notifications/basetoastnotification.h +++ b/src/librssguard/gui/notifications/basetoastnotification.h @@ -6,6 +6,7 @@ #include class QAbstractButton; +class QLabel; class BaseToastNotification : public QDialog { Q_OBJECT @@ -22,6 +23,7 @@ class BaseToastNotification : public QDialog { virtual void timerEvent(QTimerEvent* event); virtual void closeEvent(QCloseEvent* event); + void setupHeading(QLabel* lbl); void setupTimedClosing(); void setupCloseButton(QAbstractButton* btn); void stopTimedClosing(); diff --git a/src/librssguard/gui/notifications/toastnotification.cpp b/src/librssguard/gui/notifications/toastnotification.cpp index c057be392..1062c82e6 100644 --- a/src/librssguard/gui/notifications/toastnotification.cpp +++ b/src/librssguard/gui/notifications/toastnotification.cpp @@ -8,15 +8,6 @@ #include #endif -void ToastNotification::setupHeading() { - auto fon = m_ui.m_lblTitle->font(); - - fon.setBold(true); - fon.setPointSize(fon.pointSize() * 1.2); - - m_ui.m_lblTitle->setFont(fon); -} - ToastNotification::ToastNotification(Notification::Event event, const GuiMessage& msg, const GuiAction& action, @@ -24,7 +15,7 @@ ToastNotification::ToastNotification(Notification::Event event, : BaseToastNotification() { m_ui.setupUi(this); - setupHeading(); + setupHeading(m_ui.m_lblTitle); setupCloseButton(m_ui.m_btnClose); setupTimedClosing(); diff --git a/src/librssguard/gui/notifications/toastnotification.h b/src/librssguard/gui/notifications/toastnotification.h index c919fe023..463671914 100644 --- a/src/librssguard/gui/notifications/toastnotification.h +++ b/src/librssguard/gui/notifications/toastnotification.h @@ -19,7 +19,6 @@ class ToastNotification : public BaseToastNotification { QWidget* parent = nullptr); private: - void setupHeading(); void loadNotification(Notification::Event event, const GuiMessage& msg, const GuiAction& action); QIcon iconForType(QSystemTrayIcon::MessageIcon icon) const; From a52ab346256f404e18aeead9f1c3e3d2a12c3dfa Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 22 Sep 2023 13:15:04 +0200 Subject: [PATCH 06/11] lang source! --- localization/rssguard_en.ts | 138 +++++++++++++++++++++++++----------- 1 file changed, 96 insertions(+), 42 deletions(-) diff --git a/localization/rssguard_en.ts b/localization/rssguard_en.ts index 4ded2526f..a6fb8d2b2 100644 --- a/localization/rssguard_en.ts +++ b/localization/rssguard_en.ts @@ -127,67 +127,67 @@ Error: %1 Application - + Application is already running. Application is already running - + Output directory is not writable. Output directory is not writable - + Settings file not copied to output directory successfully. Settings file not copied to output directory successfully. - + Database restoration was not initiated. Make sure that output directory is writable. Database restoration was not initiated. Make sure that output directory is writable. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that output directory is writable. - + Cannot add feed Cannot add feed - + Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. - + Unread articles fetched - + Go to changelog - + AdBlock needs to be configured - + Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -195,21 +195,57 @@ version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running - + Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + + + + + Go to previous page + + + + + Go to next page + + + + + Open article in article list + + + + + Open article in web browser + + + + + %n feeds fetched + + + + + + AuthenticationDetails @@ -307,7 +343,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification @@ -5116,14 +5152,14 @@ Login tokens expiration: %2 en - + LANG_AUTHOR Name of translator - optional. Martin Rotter - + + %n other feeds. @@ -5309,6 +5345,26 @@ List of supported readers: Published articles + + + top-left + + + + + top-right + + + + + bottom-left + + + + + bottom-right + + Readability @@ -6721,43 +6777,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - - Enable notifications - - Notifications type + + Balloon notifications type - + Native notifications (tray icon must be enabled) - + Custom notifications - + Position - + + Screen + + + + Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + + SettingsShortcuts @@ -7474,32 +7533,27 @@ Unread news: %2 ToastNotification - - Dialog - - - - + ... - + 11 - + TextLabel - + PushButton - + Do it! From 09b4de7e13cacf0239f1a5db81a26b9b2d6b7dc7 Mon Sep 17 00:00:00 2001 From: martinrotter Date: Fri, 22 Sep 2023 13:23:45 +0200 Subject: [PATCH 07/11] New Crowdin updates (#1107) --- localization/rssguard_cs.ts | 144 ++++++++++++++++++++++----------- localization/rssguard_da.ts | 142 +++++++++++++++++++++----------- localization/rssguard_de.ts | 142 +++++++++++++++++++++----------- localization/rssguard_en_GB.ts | 142 +++++++++++++++++++++----------- localization/rssguard_en_US.ts | 142 +++++++++++++++++++++----------- localization/rssguard_es.ts | 142 +++++++++++++++++++++----------- localization/rssguard_fi.ts | 142 +++++++++++++++++++++----------- localization/rssguard_fr.ts | 142 +++++++++++++++++++++----------- localization/rssguard_gl.ts | 142 +++++++++++++++++++++----------- localization/rssguard_he.ts | 144 ++++++++++++++++++++++----------- localization/rssguard_hi.ts | 142 +++++++++++++++++++++----------- localization/rssguard_hu.ts | 142 +++++++++++++++++++++----------- localization/rssguard_id.ts | 141 +++++++++++++++++++++----------- localization/rssguard_it.ts | 142 +++++++++++++++++++++----------- localization/rssguard_ja.ts | 141 +++++++++++++++++++++----------- localization/rssguard_lt.ts | 144 ++++++++++++++++++++++----------- localization/rssguard_lv.ts | 143 +++++++++++++++++++++----------- localization/rssguard_nl.ts | 142 +++++++++++++++++++++----------- localization/rssguard_no.ts | 142 +++++++++++++++++++++----------- localization/rssguard_pl.ts | 144 ++++++++++++++++++++++----------- localization/rssguard_pt.ts | 142 +++++++++++++++++++++----------- localization/rssguard_pt_BR.ts | 142 +++++++++++++++++++++----------- localization/rssguard_ru.ts | 144 ++++++++++++++++++++++----------- localization/rssguard_sk.ts | 144 ++++++++++++++++++++++----------- localization/rssguard_sv.ts | 142 +++++++++++++++++++++----------- localization/rssguard_tr.ts | 142 +++++++++++++++++++++----------- localization/rssguard_uk.ts | 144 ++++++++++++++++++++++----------- localization/rssguard_vi.ts | 141 +++++++++++++++++++++----------- localization/rssguard_zh_CN.ts | 139 +++++++++++++++++++++---------- localization/rssguard_zh_TW.ts | 141 +++++++++++++++++++++----------- 30 files changed, 2920 insertions(+), 1348 deletions(-) diff --git a/localization/rssguard_cs.ts b/localization/rssguard_cs.ts index 41cc194f5..7c0c4b553 100644 --- a/localization/rssguard_cs.ts +++ b/localization/rssguard_cs.ts @@ -129,67 +129,67 @@ Chyba: %1 Application - + Application is already running. Aplikace již běží - + Output directory is not writable. Nelze psát do cílové složky - + Settings file not copied to output directory successfully. Soubor nastavení nebyl zkopírován do cílového adresáře. - + Database restoration was not initiated. Make sure that output directory is writable. Obnovení databáze nebylo spuštěno. Ujistěte se, že cílový adresář je zapisovatelný. - + Settings restoration was not initiated. Make sure that output directory is writable. Obnovení nastavení nebylo spuštěno. Ujistěte se, že cílový adresář je zapisovatelný. - + Cannot add feed Nelze přidat kanál - + Feed cannot be added because there is no active account which can add feeds. Kanál nemůže být přidán, protože nemáte aktivovaný žádný účet který umí přidávat kanály. - + Packages %1 were updated. Balíčky %1 byly aktualizovány. - + Unread articles fetched Staženy nepřečtené zprávy - + Go to changelog Zobrazit seznam změn - + AdBlock needs to be configured Je třeba nastavit AdBlock - + Welcome Vítejte - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,59 @@ Prosím, zkontrolujte novinky kliknutím na tuto bublinu. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock není korektně nakonfigurován. Běžte do "Nastavení" -> "Node.js" a zkontrolujte nastavení. - + Already running Již běží - + Packages %1 were NOT updated because of error: %2. Balíčky %1 NEBYLY aktualizovány kvůli chybě: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +350,7 @@ na tuto bublinu. BaseToastNotification - + Close this notification Close this notification @@ -5173,14 +5211,14 @@ Tokeny vyprší: %2 cs - + LANG_AUTHOR Name of translator - optional. Martin Rotter - + + %n other feeds. @@ -5380,6 +5418,26 @@ Podporované čtečky: Published articles Publikováno + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6821,45 +6879,46 @@ Po instalaci Node.js také restartujte dialog "Nastavení". SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Pro funkční notifikace je třeba mít povolenou tray ikonu. - -Jsou obsaženy zabudované zvuky, napište ":" a seznam se zobrazí. - Enable notifications Povolit notifikace - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifikace + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7587,32 +7646,27 @@ Nepřečtené zprávy: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_da.ts b/localization/rssguard_da.ts index f1c55e603..f4a067560 100644 --- a/localization/rssguard_da.ts +++ b/localization/rssguard_da.ts @@ -129,67 +129,67 @@ Fejl: %1 Application - + Application is already running. Programmet kører allerede - + Output directory is not writable. Målbiblioteket er ikke skrivbart - + Settings file not copied to output directory successfully. Indstillinger kunne ikke kopieres til uddatabibliotek. - + Database restoration was not initiated. Make sure that output directory is writable. Gendannelse af database ikke påbegyndt. Sørg for at målbiblioteket er skrivbart. - + Settings restoration was not initiated. Make sure that output directory is writable. Gendannelse af indstillinger ikke påbegyndt. Sørg for at målbiblioteket er skrivbart. - + Cannot add feed Kan ikke tilføje nyhedskilde - + Feed cannot be added because there is no active account which can add feeds. Nyhedskilde kan ikke tilføjes, da der ikke er nogen aktiv konto at tilføje den til. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Ulæste artikler hentet - + Go to changelog Gå til ændringslog - + AdBlock needs to be configured AdBlock skal indstilles - + Welcome Velkommen - + Welcome to %1. Please, check NEW stuff included in this @@ -201,21 +201,57 @@ version ved at klikke på denne pop up påmindelse. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Kører allerede - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -313,7 +349,7 @@ påmindelse. BaseToastNotification - + Close this notification Close this notification @@ -5145,14 +5181,14 @@ Login tokens expiration: %2 da - + LANG_AUTHOR Name of translator - optional. flywheeldk - + + %n other feeds. @@ -5346,6 +5382,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6781,45 +6837,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Slå påmindelser til - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Påmindelser + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7541,32 +7598,27 @@ Ulæste nyheder: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_de.ts b/localization/rssguard_de.ts index f3f923d02..7bc386246 100644 --- a/localization/rssguard_de.ts +++ b/localization/rssguard_de.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Die Anwendung läuft bereits. - + Output directory is not writable. Das Ausgabeverzeichnis ist nicht beschreibbar. - + Settings file not copied to output directory successfully. Einstellungsdatei konnte nicht in das Ausgabeverzeichnis geschrieben werden. - + Database restoration was not initiated. Make sure that output directory is writable. Wiederherstellung der Datenbank wurde nicht initiiert. Stellen Sie sicher, dass das Ausgabeverzeichnis beschrieben werden kann. - + Settings restoration was not initiated. Make sure that output directory is writable. Wiederherstellung der Einstellungen wurde nicht initiiert. Stellen Sie sicher, dass das Ausgabeverzeichnis beschrieben werden kann. - + Cannot add feed Kann Feed nicht hinzufügen - + Feed cannot be added because there is no active account which can add feeds. Feed konnte nicht hinzugefügt werden, weil kein aktiver Zugang existiert, der Feeds hinzufügen kann. - + Packages %1 were updated. %1 Pakete wurden aktualisiert. - + Unread articles fetched Ungelesene Artikel aktualisiert - + Go to changelog Geh zum Changelog - + AdBlock needs to be configured AdBlock muss noch konfiguriert werden - + Welcome Willkommen - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Bitte überprüfen Sie die in dieser Version enthaltene Neuerungen durch Klicken auf diese Benachrichtigung. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock ist nicht richtig konfiguriert. Gehe zu "Einstellungen" -> "Node.js" und stelle sicher, dass Node.js korrekt eingerichtet ist. - + Already running Bereits aktiv - + Packages %1 were NOT updated because of error: %2. Packete %1 wurden NICHT aktualisiert, wegen Fehler: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ durch Klicken auf diese Benachrichtigung. BaseToastNotification - + Close this notification Close this notification @@ -5144,14 +5180,14 @@ Ablauf des Login tokens: %2 de - + LANG_AUTHOR Name of translator - optional. Patrick Scheller, Peter Mattern - + + %n other feeds. @@ -5342,6 +5378,26 @@ Liste aller unterstützten Leser: Published articles Veröffentlichte Artikel + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6777,45 +6833,46 @@ Schließe und Öffne den Einstellungsdiealog erneut, nachdem du Node.js installi SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Du musst ein Taskleistensymbol aktiviert haben, um Ballon-Benachrichtigungen zu sehen. - -Es existieren auch einige integrierte Sounds. Beginne zu tippen mit ":" damit sie angezeigt werden. - Enable notifications Aktiviere Benachrichtigungen - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Benachrichtigungen + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7537,32 +7594,27 @@ Ungelesene Nachrichten: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_en_GB.ts b/localization/rssguard_en_GB.ts index e13370fba..825e89e99 100644 --- a/localization/rssguard_en_GB.ts +++ b/localization/rssguard_en_GB.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Application is already running - + Output directory is not writable. Output directory is not writable. - + Settings file not copied to output directory successfully. Failed to copy settings file to output directory. - + Database restoration was not initiated. Make sure that output directory is writable. Database restoration was not initiated. Make sure that the output directory is writable. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that the output directory is writable. - + Cannot add feed Can't add feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there are no active accounts that can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5147,14 +5183,14 @@ Login tokens expiration: %2 en_GB - + LANG_AUTHOR Name of translator - optional. Martin Rotter, ParisBrest82 - + + %n other feeds. @@ -5348,6 +5384,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6783,45 +6839,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7543,32 +7600,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_en_US.ts b/localization/rssguard_en_US.ts index 99091ff8b..8392298f7 100644 --- a/localization/rssguard_en_US.ts +++ b/localization/rssguard_en_US.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Application is already running. - + Output directory is not writable. Output directory is not writable. - + Settings file not copied to output directory successfully. Settings file not copied to output directory successfully. - + Database restoration was not initiated. Make sure that output directory is writable. Database restoration was not initiated. Make sure that output directory is writable. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that output directory is writable. - + Cannot add feed Cannot add feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5147,14 +5183,14 @@ Login tokens expiration: %2 en_US - + LANG_AUTHOR Name of translator - optional. Martin Rotter - + + %n other feeds. @@ -5348,6 +5384,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6783,45 +6839,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7543,32 +7600,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_es.ts b/localization/rssguard_es.ts index fec8a4b65..f8af4249e 100644 --- a/localization/rssguard_es.ts +++ b/localization/rssguard_es.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. La aplicación ya está en ejecución. - + Output directory is not writable. La carpeta de salida carece de permisos de escritura. - + Settings file not copied to output directory successfully. El archivo de configuración no se copió satisfactoriamente a la carpeta de salida. - + Database restoration was not initiated. Make sure that output directory is writable. La restauración de la base de datos no fue iniciada. Verifique que la carpeta de salida tiene permisos de escritura. - + Settings restoration was not initiated. Make sure that output directory is writable. Fue imposible iniciar la restauración de la configuración. Verifique que la carpeta de salida tiene permisos de escritura. - + Cannot add feed Imposible añadir la fuente - + Feed cannot be added because there is no active account which can add feeds. Imposible agregar la fuente porque se carece de una cuenta activa que pueda agregar fuentes. - + Packages %1 were updated. Se actualizaron %1 paquetes. - + Unread articles fetched Artículos sin leer obtenidos - + Go to changelog Ir al registro de cambios - + AdBlock needs to be configured AdBlock necesita ser configurado - + Welcome Bienvenido - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Por favor, consulte las NUEVAS funciones incluidas en esta versión pulsando en esta notificación emergente. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock está configurado incorrectamente. Vaya a "Configuración" -> "Node.js" y verifique si Node.js esté configurado correctamente. - + Already running Ya está ejecutándose - + Packages %1 were NOT updated because of error: %2. Imposible actualizar %1 paquetes debido al error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ versión pulsando en esta notificación emergente. BaseToastNotification - + Close this notification Cerrar esta notificación @@ -5146,14 +5182,14 @@ Expiración de identificadores de acceso: %2 es - + LANG_AUTHOR Name of translator - optional. Joel Barrios - + + %n other feeds. @@ -5347,6 +5383,26 @@ Lista de lectores compatibles: Published articles Artículos publicados + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6782,45 +6838,46 @@ Además, reinicie el cuadro de diálogo "Configuración" después de i SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Debe tener activado el "icono de la bandeja" para que funcionen las notificaciones de globos. - -Además, hay algunos sonidos incorporados. Simplemente comience a escribir ":" y aparecerán. - Enable notifications Habilitar notificaciones - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notificaciones + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7544,32 +7601,27 @@ Noticias sin leer: %2 ToastNotification - - Dialog - Diálogo - - - + ... ... - + 11 11 - + TextLabel Etiqueta de texto - + PushButton Pulsar botón - + Do it! ¡Hacerlo! diff --git a/localization/rssguard_fi.ts b/localization/rssguard_fi.ts index 6c2838c6d..6a734f08b 100644 --- a/localization/rssguard_fi.ts +++ b/localization/rssguard_fi.ts @@ -129,67 +129,67 @@ Virhe: %1 Application - + Application is already running. Sovellus on jo käynnissä - + Output directory is not writable. Kohdekansioon ei voi kirjoittaa. - + Settings file not copied to output directory successfully. Asetustiedoston kopiointi kohdekansioon epäonnistui. - + Database restoration was not initiated. Make sure that output directory is writable. Tietokannan palautusta ei aloitettu. Varmista, että kohdekansioon voi kirjoittaa. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that output directory is writable. - + Cannot add feed Syötettä ei voi lisätä - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Siirry muutoslokiin - + AdBlock needs to be configured AdBlockin asetukset tulee määrittää - + Welcome Tervetuloa - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5147,14 +5183,14 @@ Login tokens expiration: %2 fi - + LANG_AUTHOR Name of translator - optional. artnay - + + %n other feeds. @@ -5348,6 +5384,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6783,45 +6839,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Käytä ilmoituksia - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Ilmoitukset + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7543,32 +7600,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_fr.ts b/localization/rssguard_fr.ts index fbb3bdb8e..ce6e36f2e 100644 --- a/localization/rssguard_fr.ts +++ b/localization/rssguard_fr.ts @@ -129,67 +129,67 @@ Erreur : %1 Application - + Application is already running. L'application est déjà lancée - + Output directory is not writable. Le répertoire de destination n'est pas accessible en écriture - + Settings file not copied to output directory successfully. Le fichier de réglages n'a pas été copié correctement dans le répertoire de destination. - + Database restoration was not initiated. Make sure that output directory is writable. La restauration de la base de données n'a pas été initiée. Vérifier que le répertoire de destination est accessible en écriture. - + Settings restoration was not initiated. Make sure that output directory is writable. La restauration des paramètres n'a pas été initiée. Vérifier que le répertoire de destination est accessible en écriture. - + Cannot add feed Impossible d'ajouter le flux - + Feed cannot be added because there is no active account which can add feeds. Le flux ne peut pas être ajouté car il n'y a aucun compte actif autorisant l'ajout de flux. - + Packages %1 were updated. Les paquets %1 ont été mis à jour. - + Unread articles fetched Articles non lus obtenus - + Go to changelog Consulter le journal des modifications - + AdBlock needs to be configured AdBlock doit être configuré - + Welcome Bienvenue - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Découvrez les nouveautés de cette version en cliquant sur cette notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock n'a pas été configuré correctement. Allez dans "Paramètres" -> "Node.js" et vérifiez que Node.js ait été correctement configuré. - + Already running Déjà en fonctionnement - + Packages %1 were NOT updated because of error: %2. Les paquets %1 n'ont PAS été mis à jour à cause de l'erreur : %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ version en cliquant sur cette notification. BaseToastNotification - + Close this notification Fermer cette notification @@ -5172,14 +5208,14 @@ supplémentaire fr - + LANG_AUTHOR Name of translator - optional. Darkitty, Lenade, leperlier.n, lucassifoni, ParisBrest82, peletloick, Rinbo, sylvie.pierrard - + + %n other feeds. @@ -5373,6 +5409,26 @@ Liste d'agrégateurs compatibles: Published articles Articles publiés + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6808,45 +6864,46 @@ Et aussi, redémarrez la fenêtre "Paramètres" après avoir installé SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Vous devez avoir "icône sur la barre d'icônes" activé pour que les notifications de type ballons fonctionnent. - -Aussi, il y a des sons pré-ajoutés. Si vous tapez ":", ils se présenteront. - Enable notifications Activer les notifications - - Notifications type - Type de notifications + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Notifications natives (la barre d'icônes doit être activée) - + Custom notifications Notifications personnalisées - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7568,32 +7625,27 @@ Actualités non-lus: %2 ToastNotification - - Dialog - Dialogue - - - + ... ... - + 11 11 - + TextLabel LabelTexte - + PushButton BouttonPush - + Do it! C'est parti! diff --git a/localization/rssguard_gl.ts b/localization/rssguard_gl.ts index 1d72c0167..813829332 100644 --- a/localization/rssguard_gl.ts +++ b/localization/rssguard_gl.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. O aplicativo xa está a funcionar - + Output directory is not writable. Non pode escribir no directorio de saída - + Settings file not copied to output directory successfully. Non se puido copiar o ficheiro de axustes ao directorio de saída. - + Database restoration was not initiated. Make sure that output directory is writable. Non se iniciou o restablecemento da base de datos. Asegúrese de que o directorio de saída é accesible. - + Settings restoration was not initiated. Make sure that output directory is writable. Non se iniciou o restablecemento dos axustes. Asegúrese de que o directorio de saída é accesible. - + Cannot add feed Non se engadeu a fonte - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5147,14 +5183,14 @@ Login tokens expiration: %2 gl - + LANG_AUTHOR Name of translator - optional. pikamoku - + + %n other feeds. @@ -5348,6 +5384,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6783,45 +6839,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7543,32 +7600,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_he.ts b/localization/rssguard_he.ts index 114f975e5..5c6cd875a 100644 --- a/localization/rssguard_he.ts +++ b/localization/rssguard_he.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Application is already running. - + Output directory is not writable. Output directory is not writable. - + Settings file not copied to output directory successfully. Settings file not copied to output directory successfully. - + Database restoration was not initiated. Make sure that output directory is writable. Database restoration was not initiated. Make sure that output directory is writable. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that output directory is writable. - + Cannot add feed Cannot add feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,59 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +350,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5175,14 +5213,14 @@ Login tokens expiration: %2 LANG_ABBREV - + LANG_AUTHOR Name of translator - optional. LANG_AUTHOR - + + %n other feeds. @@ -5382,6 +5420,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6823,45 +6881,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7589,32 +7648,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_hi.ts b/localization/rssguard_hi.ts index 99925f9b3..7d465d83e 100644 --- a/localization/rssguard_hi.ts +++ b/localization/rssguard_hi.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Application is already running. - + Output directory is not writable. Output directory is not writable. - + Settings file not copied to output directory successfully. Settings file not copied to output directory successfully. - + Database restoration was not initiated. Make sure that output directory is writable. Database restoration was not initiated. Make sure that output directory is writable. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that output directory is writable. - + Cannot add feed Cannot add feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5147,14 +5183,14 @@ Login tokens expiration: %2 LANG_ABBREV - + LANG_AUTHOR Name of translator - optional. LANG_AUTHOR - + + %n other feeds. @@ -5348,6 +5384,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6783,45 +6839,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7543,32 +7600,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_hu.ts b/localization/rssguard_hu.ts index 7cad197a2..d411bab12 100644 --- a/localization/rssguard_hu.ts +++ b/localization/rssguard_hu.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Application is already running. - + Output directory is not writable. Output directory is not writable. - + Settings file not copied to output directory successfully. Settings file not copied to output directory successfully. - + Database restoration was not initiated. Make sure that output directory is writable. Database restoration was not initiated. Make sure that output directory is writable. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that output directory is writable. - + Cannot add feed Cannot add feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5147,14 +5183,14 @@ Login tokens expiration: %2 LANG_ABBREV - + LANG_AUTHOR Name of translator - optional. LANG_AUTHOR - + + %n other feeds. @@ -5348,6 +5384,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6783,45 +6839,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7543,32 +7600,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_id.ts b/localization/rssguard_id.ts index fb44307d5..97c8a00f5 100644 --- a/localization/rssguard_id.ts +++ b/localization/rssguard_id.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Aplikasi sedang berjalan. - + Output directory is not writable. Direktori keluaran tidak dapat ditulisi. - + Settings file not copied to output directory successfully. Berkas pengaturan tidak berhasil disalin ke direktori keluaran. - + Database restoration was not initiated. Make sure that output directory is writable. Pemulihan database tidak dapat dimulai. Pastikan direktori keluaran dapat ditulisi. - + Settings restoration was not initiated. Make sure that output directory is writable. Pemulihan pengaturan tidak dapat dimulai. Pastikan direktori keluaran dapat ditulisi. - + Cannot add feed Tidak dapat menambah feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,56 @@ Silahkan, memeriksa hal BARU yang termasuk di versi ini dengan meng-klik popup notifikasi ini. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +347,7 @@ di versi ini dengan meng-klik popup notifikasi ini. BaseToastNotification - + Close this notification Close this notification @@ -5132,14 +5167,14 @@ Waktu berakhir log masuk: %2 id - + LANG_AUTHOR Name of translator - optional. Rachman - + + %n other feeds. @@ -5329,6 +5364,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6761,45 +6816,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7518,32 +7574,27 @@ Berita belum terbaca:%2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_it.ts b/localization/rssguard_it.ts index fcee8ca65..6a4ef743e 100644 --- a/localization/rssguard_it.ts +++ b/localization/rssguard_it.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. L'applicazione è già in esecuzione. - + Output directory is not writable. La cartella di destinazione non è scrivibile. - + Settings file not copied to output directory successfully. File impostazioni non copiato con successo nella cartella di destinazione. - + Database restoration was not initiated. Make sure that output directory is writable. Ripristino database non iniziato. Assicurati che la cartella di destinazione sia scrivibile. - + Settings restoration was not initiated. Make sure that output directory is writable. Ripristino impostazioni non iniziato. Assicurati che la cartella di destinazione sia scrivibile. - + Cannot add feed Impossibile aggiungere fonte - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Controlla la NUOVA roba inclusa in questa versione facendo clic su questa notifica a scomparsa. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ versione facendo clic su questa notifica a scomparsa. BaseToastNotification - + Close this notification Close this notification @@ -5147,14 +5183,14 @@ Login tokens expiration: %2 it - + LANG_AUTHOR Name of translator - optional. Aloysius - + + %n other feeds. @@ -5344,6 +5380,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6779,45 +6835,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7539,32 +7596,27 @@ Notizie non lette: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_ja.ts b/localization/rssguard_ja.ts index b7081e89a..a7baa99d6 100644 --- a/localization/rssguard_ja.ts +++ b/localization/rssguard_ja.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. アプリケーションは既に実行されています。 - + Output directory is not writable. 出力ディレクトリは書き込み可能ではありません。 - + Settings file not copied to output directory successfully. 設定ファイルが出力ディレクトリに正常にコピーされませんでした。 - + Database restoration was not initiated. Make sure that output directory is writable. データベースの復元が開始されませんでした。出力ディレクトリが書き込み可能であることを確認してください。 - + Settings restoration was not initiated. Make sure that output directory is writable. データベースの復元が開始されませんでした。出力ディレクトリが書き込み可能であることを確認してください。 - + Cannot add feed フィードを追加できません - + Feed cannot be added because there is no active account which can add feeds. フィードを追加できる有効なアカウントがないため、フィードを追加できません。 - + Packages %1 were updated. パッケージ %1 が更新されました。 - + Unread articles fetched 未読の記事を取得しました - + Go to changelog 更新履歴に移動 - + AdBlock needs to be configured AdBlockの設定が必要です - + Welcome ようこそ - + Welcome to %1. Please, check NEW stuff included in this @@ -199,21 +199,56 @@ version by clicking this popup notification. このバージョンに含まれる新しいものは、ポップアップ通知をクリックして確認してください。 - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock が正しく設定されていません。 "設定" -> "Node.js" に移動し、Node.js が正しく設定されているか確認してください。 - + Already running 既に実行中です - + Packages %1 were NOT updated because of error: %2. パッケージ %1 はエラーのため更新されませんでした: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + + + AuthenticationDetails @@ -311,7 +346,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification この通知を閉じる @@ -5132,14 +5167,14 @@ Login tokens expiration: %2 ja - + LANG_AUTHOR Name of translator - optional. piyo - + + %n other feeds. @@ -5330,6 +5365,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6762,45 +6817,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - バルーン通知を有効にするには、"トレイアイコン"を有効にする必要があります。 - -また、いくつかのサウンドが内蔵されています。":" と入力し始めるだけで表示されます。 - Enable notifications 通知を有効にする - - Notifications type - 通知タイプ + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) ネイティブ通知 (トレイアイコンを有効にする必要があります) - + Custom notifications カスタム通知 - + Position 位置 - + + Screen + Screen + + + Notifications 通知 + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7521,32 +7577,27 @@ Unread news: %2 ToastNotification - - Dialog - ダイアログ - - - + ... ... - + 11 11 - + TextLabel テキストラベル - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_lt.ts b/localization/rssguard_lt.ts index 9bb744cdc..7af2e14b0 100644 --- a/localization/rssguard_lt.ts +++ b/localization/rssguard_lt.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Programa jau yra vykdoma - + Output directory is not writable. Išvesties katalogas nėra įrašomas - + Settings file not copied to output directory successfully. Nustatymų failas nebuvo sėkmingai nukopijuotas į išvesties katalogą. - + Database restoration was not initiated. Make sure that output directory is writable. Duomenų bazės atkūrimas nebuvo inicijuotas. Įsitikinkite, kad išvesties katalogas yra įrašomas. - + Settings restoration was not initiated. Make sure that output directory is writable. Nustatymų atkūrimas nebuvo inicijuotas. Įsitikinkite, kad išvesties katalogas yra įrašomas. - + Cannot add feed Nepavyksta pridėti kanalo - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,59 @@ Susipažinkite su NAUJOMIS šios versijos ypatybėmis, spusteldami šį pranešimą. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +350,7 @@ versijos ypatybėmis, spusteldami šį pranešimą. BaseToastNotification - + Close this notification Close this notification @@ -5175,14 +5213,14 @@ Prisijungimo prieigos raktai nustoja galioti: %2 lt - + LANG_AUTHOR Name of translator - optional. Moo - + + %n other feeds. @@ -5382,6 +5420,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6823,45 +6881,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7589,32 +7648,27 @@ Neskaitytų naujienų: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_lv.ts b/localization/rssguard_lv.ts index 0b4d33bb4..afdeb2a70 100644 --- a/localization/rssguard_lv.ts +++ b/localization/rssguard_lv.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Application is already running. - + Output directory is not writable. Output directory is not writable. - + Settings file not copied to output directory successfully. Settings file not copied to output directory successfully. - + Database restoration was not initiated. Make sure that output directory is writable. Database restoration was not initiated. Make sure that output directory is writable. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that output directory is writable. - + Cannot add feed Cannot add feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,58 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +349,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5161,14 +5198,14 @@ Login tokens expiration: %2 LANG_ABBREV - + LANG_AUTHOR Name of translator - optional. LANG_AUTHOR - + + %n other feeds. @@ -5365,6 +5402,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6803,45 +6860,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7566,32 +7624,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_nl.ts b/localization/rssguard_nl.ts index b390dca6f..f5109ffdd 100644 --- a/localization/rssguard_nl.ts +++ b/localization/rssguard_nl.ts @@ -129,67 +129,67 @@ Fout: %1 Application - + Application is already running. RSS Guard is al gestart. - + Output directory is not writable. De uitvoermap is niet beschrijfbaar. - + Settings file not copied to output directory successfully. Het instellingenbestand is niet gekopieerd naar de uitvoermap. - + Database restoration was not initiated. Make sure that output directory is writable. Databankherstel is niet gestart. Zorg ervoor dat de uitvoermap beschrijfbaar is. - + Settings restoration was not initiated. Make sure that output directory is writable. Herstel van de instellingen is niet gestart. Zorg ervoor dat de uitvoermap beschrijfbaar is. - + Cannot add feed Kan feed niet toevoegen - + Feed cannot be added because there is no active account which can add feeds. Feed kan niet worden toegevoegd omdat er geen actief account is dat feeds kan toevoegen. - + Packages %1 were updated. Pakketten %1 zijn bijgewerkt. - + Unread articles fetched Ongelezen artikelen opgehaald - + Go to changelog Ga naar changelog - + AdBlock needs to be configured AdBlock moet worden geconfigureerd - + Welcome Welkom - + Welcome to %1. Please, check NEW stuff included in this @@ -199,21 +199,57 @@ version by clicking this popup notification. Om te zien wat er NIEUW is in deze versie: klik op deze melding. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is niet juist geconfigureerd. Ga naar "Instellingen" -> "Node.js" en controleer of Node.js correct is ingesteld. - + Already running Is al gestart - + Packages %1 were NOT updated because of error: %2. Pakketten %1 zijn niet bijgewerkt vanwege een fout: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -311,7 +347,7 @@ Om te zien wat er NIEUW is in deze versie: klik op deze melding. BaseToastNotification - + Close this notification Melding sluiten @@ -5146,14 +5182,14 @@ Logintoken verloopt: %2 nl - + LANG_AUTHOR Name of translator - optional. Elbert Pol, KyraWertho - + + %n other feeds. @@ -5347,6 +5383,26 @@ Lijst met ondersteunde lezers: Published articles Gepubliceerde artikelen + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6782,45 +6838,46 @@ Start ook het dialoogvenster "Instellingen" opnieuw nadat je Node.js h SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Ballonberichten werken alleen als het systeemvakicoon is ingeschakeld. - -Er zijn ook een aantal ingebouwde geluiden beschikbaar. Typ ":" om de lijst weer te geven. - Enable notifications Meldingen inschakelen - - Notifications type - Meldingstype + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Standaard meldingen (taakbalkicoon moet zijn ingeschakeld) - + Custom notifications Aangepaste meldingen - + Position Positie - + + Screen + Screen + + + Notifications Meldingen + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7543,32 +7600,27 @@ Ongelezen nieuws: %2 ToastNotification - - Dialog - Dialoog - - - + ... ... - + 11 11 - + TextLabel TekstLabel - + PushButton Drukknop - + Do it! Nu uitvoeren! diff --git a/localization/rssguard_no.ts b/localization/rssguard_no.ts index d9f721c1a..4b1cdf949 100644 --- a/localization/rssguard_no.ts +++ b/localization/rssguard_no.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Application is already running. - + Output directory is not writable. Output directory is not writable. - + Settings file not copied to output directory successfully. Settings file not copied to output directory successfully. - + Database restoration was not initiated. Make sure that output directory is writable. Database restoration was not initiated. Make sure that output directory is writable. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that output directory is writable. - + Cannot add feed Cannot add feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5147,14 +5183,14 @@ Login tokens expiration: %2 LANG_ABBREV - + LANG_AUTHOR Name of translator - optional. LANG_AUTHOR - + + %n other feeds. @@ -5348,6 +5384,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6783,45 +6839,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7543,32 +7600,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_pl.ts b/localization/rssguard_pl.ts index 3e4b8eb18..f186810cc 100644 --- a/localization/rssguard_pl.ts +++ b/localization/rssguard_pl.ts @@ -129,67 +129,67 @@ Błąd: %1 Application - + Application is already running. Aplikacja jest już uruchomiona - + Output directory is not writable. Katalog wyjściowy nie jest zapisywalny - + Settings file not copied to output directory successfully. Plik ustawień nie został pomyślnie skopiowany do katalogu wyjściowego. - + Database restoration was not initiated. Make sure that output directory is writable. Przywrócenie bazy danych nie zostało zainicjowane. Upewnij się, że katalog wyjściowy jest zapisywalny. - + Settings restoration was not initiated. Make sure that output directory is writable. Przywrócenie ustawień nie zostało zainicjowane. Upewnij się, że katalog wyjściowy jest zapisywalny. - + Cannot add feed Nie można dodać kanału - + Feed cannot be added because there is no active account which can add feeds. Kanał nie może być dodany, ponieważ nie ma aktywnego konta, do którego można dodawać kanały. - + Packages %1 were updated. Pakiety %1 zostały zaktualizowane. - + Unread articles fetched Pobrano nieprzeczytane artykuły - + Go to changelog Przejdź do listy zmian - + AdBlock needs to be configured AdBlock wymaga konfiguracji - + Welcome Witamy - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,59 @@ Sprawdź nowe możliwości dodane w tej wersji, klikając na to powiadomienie. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock nie jest prawidłowo skonfigurowany. Przejdź do „Ustawienia” » „Node.js” i sprawdź, czy twój Node.js jest poprawnie skonfigurowany. - + Already running Już działa - + Packages %1 were NOT updated because of error: %2. Pakiety %1 nie zostały zaktualizowane z powodu błędu: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +350,7 @@ tej wersji, klikając na to powiadomienie. BaseToastNotification - + Close this notification Close this notification @@ -5175,14 +5213,14 @@ Tokeny logowania wygasają: %2 pl - + LANG_AUTHOR Name of translator - optional. Piotr Kozica - + + %n other feeds. @@ -5382,6 +5420,26 @@ Lista obsługiwanych czytników: Published articles Opublikowane artykuły + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6823,45 +6881,46 @@ Ponadto po zainstalowaniu Node.js należy ponownie uruchomić okno dialogowe &qu SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Musisz mieć aktywowaną ikonę zasobnika systemowego, aby powiadomienia w dymkach działały. - -Istnieją również wbudowane dźwięki. Po prostu wpisz ":" i pojawią się. - Enable notifications Włącz powiadomienia - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Powiadomienia + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7589,32 +7648,27 @@ Nieprzeczytanych wiadomości: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_pt.ts b/localization/rssguard_pt.ts index f4a00e857..e498e41bd 100644 --- a/localization/rssguard_pt.ts +++ b/localization/rssguard_pt.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. O aplicativo já está em execução - + Output directory is not writable. A pasta de saída não possui permissão de escrita - + Settings file not copied to output directory successfully. Arquivo de configurações copiado com sucesso para pasta de saída. - + Database restoration was not initiated. Make sure that output directory is writable. A restauração do banco de dados não foi iniciada. Certifique-se de possuir permissão de escrita na pasta de saída. - + Settings restoration was not initiated. Make sure that output directory is writable. A restauração das configurações não foi iniciada. Certifique-se de possuir permissão de escrita na pasta de saída. - + Cannot add feed Não foi possível adicionar o feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Por favor, veja o NOVO conteúdo incluído nesta versão, clicando nesta notificação popup. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ versão, clicando nesta notificação popup. BaseToastNotification - + Close this notification Close this notification @@ -5147,14 +5183,14 @@ Expiração dos tokens de login: %2 pt_PT - + LANG_AUTHOR Name of translator - optional. Igor Rückert - + + %n other feeds. @@ -5348,6 +5384,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6783,45 +6839,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7543,32 +7600,27 @@ Notícias não lidas: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_pt_BR.ts b/localization/rssguard_pt_BR.ts index 006aab0ee..0acaa3de5 100644 --- a/localization/rssguard_pt_BR.ts +++ b/localization/rssguard_pt_BR.ts @@ -129,67 +129,67 @@ Erro: %1 Application - + Application is already running. O aplicativo já está em execução. - + Output directory is not writable. Sem permissão de escrita na pasta de saída. - + Settings file not copied to output directory successfully. Arquivo de configurações não copiado com sucesso para pasta de saída. - + Database restoration was not initiated. Make sure that output directory is writable. A restauração do banco de dados não foi iniciada. Certifique-se de possuir permissão de escrita na pasta de saída. - + Settings restoration was not initiated. Make sure that output directory is writable. A restauração das configurações não foi iniciada. Certifique-se de possuir permissão de escrita na pasta de saída. - + Cannot add feed Não foi possível adicionar o feed - + Feed cannot be added because there is no active account which can add feeds. O feed não pode ser adicionado pois não há uma conta ativa que pode adicionar feeds. - + Packages %1 were updated. Os pacotes %1 foram atualizados. - + Unread articles fetched Artigos não lidos buscados - + Go to changelog Ir para registro de alterações - + AdBlock needs to be configured O AdBlock precisa ser configurado - + Welcome Bem-vindo - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Por favor, veja o NOVO conteúdo incluído nesta versão, clicando nesta notificação popup. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. O AdBlock não está configurado corretamente. Acesse "Configurações" -> "Node.js" e veja se o Node.js está configurado corretamente. - + Already running Já está em execução - + Packages %1 were NOT updated because of error: %2. Os pacotes %1 NÃO foram atualizados devido ao erro: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ versão, clicando nesta notificação popup. BaseToastNotification - + Close this notification Close this notification @@ -5147,14 +5183,14 @@ Expiração dos tokens de login: %2 pt_BR - + LANG_AUTHOR Name of translator - optional. Igor Rückert - + + %n other feeds. @@ -5348,6 +5384,26 @@ Lista de leitores suportados: Published articles Artigos publicados + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6783,45 +6839,46 @@ Além disso, reinicie a caixa de diálogo "Configurações" após inst SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Você deve ter o "ícone da área de notificação" ativado para que as notificações de balão funcionem. - -Além disso, existem alguns sons embutidos. Basta começar a digitar ":" e eles aparecerão. - Enable notifications Ativar notificações - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notificações + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7543,32 +7600,27 @@ Notícias não lidas: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_ru.ts b/localization/rssguard_ru.ts index bdc4e9d7d..b7ce7904b 100644 --- a/localization/rssguard_ru.ts +++ b/localization/rssguard_ru.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Приложение уже запущено - + Output directory is not writable. Выходной каталог не доступен для записи - + Settings file not copied to output directory successfully. Файл настроек не скопирован в выходной каталог. - + Database restoration was not initiated. Make sure that output directory is writable. Восстановление базы данных не было начато. Убедитесь, что выходной каталог доступен для записи. - + Settings restoration was not initiated. Make sure that output directory is writable. Восстановление настроек не было начато. Убедитесь, что выходной каталог доступен для записи. - + Cannot add feed Невозможно добавить канал - + Feed cannot be added because there is no active account which can add feeds. Канал не может быть добавлен, потому что нет активной учетной записи, которая может добавлять каналы. - + Packages %1 were updated. Пакеты %1 обновлены. - + Unread articles fetched Загружены непрочитанные статьи - + Go to changelog К списку изменений - + AdBlock needs to be configured Блокировщик рекламы (AdBlock) должен быть настроен - + Welcome Добро пожаловать - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,59 @@ version by clicking this popup notification. версию, щелкнув на это всплывающее уведомление. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock настроен неправильно. Перейдите в «Настройки» -> «Node.js» и проверьте, правильно ли настроен ваш Node.js. - + Already running Уже выполняется - + Packages %1 were NOT updated because of error: %2. Пакеты %1 НЕ были обновлены из-за ошибки: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +350,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5175,14 +5213,14 @@ Login tokens expiration: %2 ru - + LANG_AUTHOR Name of translator - optional. anovik - + + %n other feeds. @@ -5382,6 +5420,26 @@ List of supported readers: Published articles Опубликованные статьи + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6823,45 +6881,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - У вас должен быть активирован «значок в трее», чтобы всплывающие уведомления работали. - -Также есть встроенные звуки. Просто начните вводить «:», и они появятся. - Enable notifications Включить уведомления - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Уведомления + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7589,32 +7648,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_sk.ts b/localization/rssguard_sk.ts index ae967f7c2..7dcf1b6c0 100644 --- a/localization/rssguard_sk.ts +++ b/localization/rssguard_sk.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Application is already running. - + Output directory is not writable. Output directory is not writable. - + Settings file not copied to output directory successfully. Settings file not copied to output directory successfully. - + Database restoration was not initiated. Make sure that output directory is writable. Database restoration was not initiated. Make sure that output directory is writable. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that output directory is writable. - + Cannot add feed Cannot add feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,59 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +350,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5175,14 +5213,14 @@ Login tokens expiration: %2 LANG_ABBREV - + LANG_AUTHOR Name of translator - optional. LANG_AUTHOR - + + %n other feeds. @@ -5382,6 +5420,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6823,45 +6881,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7589,32 +7648,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_sv.ts b/localization/rssguard_sv.ts index 5f76ab7ae..82a4e939a 100644 --- a/localization/rssguard_sv.ts +++ b/localization/rssguard_sv.ts @@ -129,67 +129,67 @@ Fel: %1 Application - + Application is already running. Programmet är redan startat. - + Output directory is not writable. Utdatamappen är inte skrivbar. - + Settings file not copied to output directory successfully. Inställningsfilen kopierades inte till utdatamappen. - + Database restoration was not initiated. Make sure that output directory is writable. Databasåterställning startades inte. Tillse att utdatamappen är skrivbar. - + Settings restoration was not initiated. Make sure that output directory is writable. Inställningsåterställning startades inte. Tillse att utdatamappen är skrivbar. - + Cannot add feed Kan inte lägga till flödet - + Feed cannot be added because there is no active account which can add feeds. Flödet kan inte läggas till eftersom det saknas ett aktivt konto som kan lägga till flöden. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock behöver konfigureras - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Kolla in NYA grejer i den här versionen genom att klicka på denna popup-avisering. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ genom att klicka på denna popup-avisering. BaseToastNotification - + Close this notification Close this notification @@ -5146,14 +5182,14 @@ Inloggningstoken upphör: %2 sv - + LANG_AUTHOR Name of translator - optional. Åke Engelbrektson - + + %n other feeds. @@ -5347,6 +5383,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6782,45 +6838,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Avisering + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7542,32 +7599,27 @@ Olästa nyheter: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_tr.ts b/localization/rssguard_tr.ts index b10c2a8f7..079fee2b1 100644 --- a/localization/rssguard_tr.ts +++ b/localization/rssguard_tr.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Application is already running. - + Output directory is not writable. Output directory is not writable. - + Settings file not copied to output directory successfully. Settings file not copied to output directory successfully. - + Database restoration was not initiated. Make sure that output directory is writable. Database restoration was not initiated. Make sure that output directory is writable. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that output directory is writable. - + Cannot add feed Cannot add feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,57 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +348,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5147,14 +5183,14 @@ Login tokens expiration: %2 LANG_ABBREV - + LANG_AUTHOR Name of translator - optional. LANG_AUTHOR - + + %n other feeds. @@ -5348,6 +5384,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6783,45 +6839,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7543,32 +7600,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_uk.ts b/localization/rssguard_uk.ts index ac2921155..990a1ac1c 100644 --- a/localization/rssguard_uk.ts +++ b/localization/rssguard_uk.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Програма вже виконується - + Output directory is not writable. Цільовий каталог недоступний для запису - + Settings file not copied to output directory successfully. Файл налаштувань не було скопійовано у цільовий каталог. - + Database restoration was not initiated. Make sure that output directory is writable. Невдале відновлення бази. Перевірте можливість запису в цільовий каталог. - + Settings restoration was not initiated. Make sure that output directory is writable. Невдале відновлення налаштувань. Перевірте можливість запису в цільовий каталог. - + Cannot add feed Неможливо додати підписку - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,59 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + %n feeds fetched + %n feeds fetched + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +350,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5174,14 +5212,14 @@ Login tokens expiration: %2 uk - + LANG_AUTHOR Name of translator - optional. SaltedBacon - + + %n other feeds. @@ -5381,6 +5419,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6822,45 +6880,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7588,32 +7647,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_vi.ts b/localization/rssguard_vi.ts index 14e22e618..e4ecb301c 100644 --- a/localization/rssguard_vi.ts +++ b/localization/rssguard_vi.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. Application is already running. - + Output directory is not writable. Output directory is not writable. - + Settings file not copied to output directory successfully. Settings file not copied to output directory successfully. - + Database restoration was not initiated. Make sure that output directory is writable. Database restoration was not initiated. Make sure that output directory is writable. - + Settings restoration was not initiated. Make sure that output directory is writable. Settings restoration was not initiated. Make sure that output directory is writable. - + Cannot add feed Cannot add feed - + Feed cannot be added because there is no active account which can add feeds. Feed cannot be added because there is no active account which can add feeds. - + Packages %1 were updated. Packages %1 were updated. - + Unread articles fetched Unread articles fetched - + Go to changelog Go to changelog - + AdBlock needs to be configured AdBlock needs to be configured - + Welcome Welcome - + Welcome to %1. Please, check NEW stuff included in this @@ -200,21 +200,56 @@ Please, check NEW stuff included in this version by clicking this popup notification. - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. - + Already running Already running - + Packages %1 were NOT updated because of error: %2. Packages %1 were NOT updated because of error: %2. + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + + + AuthenticationDetails @@ -312,7 +347,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5133,14 +5168,14 @@ Login tokens expiration: %2 LANG_ABBREV - + LANG_AUTHOR Name of translator - optional. LANG_AUTHOR - + + %n other feeds. @@ -5331,6 +5366,26 @@ List of supported readers: Published articles Published articles + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6763,45 +6818,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - Enable notifications Enable notifications - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications Notifications + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7520,32 +7576,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_zh_CN.ts b/localization/rssguard_zh_CN.ts index 0e509dd0f..8f4452665 100644 --- a/localization/rssguard_zh_CN.ts +++ b/localization/rssguard_zh_CN.ts @@ -129,67 +129,67 @@ Error: %1 Application - + Application is already running. 应用已在运行。 - + Output directory is not writable. 输出目录不可写。 - + Settings file not copied to output directory successfully. 配置文件未能成功复制到输出目录。 - + Database restoration was not initiated. Make sure that output directory is writable. 无法开始恢复数据库,请确保输出目录可写。 - + Settings restoration was not initiated. Make sure that output directory is writable. 无法开始恢复设置,请确保输出目录可写。 - + Cannot add feed 无法添加 Feed - + Feed cannot be added because there is no active account which can add feeds. 无法添加 Feed,因为没有可用帐号。 - + Packages %1 were updated. 软件包 %1 已被更新。 - + Unread articles fetched 未读文章 - + Go to changelog 查看更新日志 - + AdBlock needs to be configured AdBlock 需要进行配置 - + Welcome 欢迎 - + Welcome to %1. Please, check NEW stuff included in this @@ -199,21 +199,56 @@ version by clicking this popup notification. 请点击此弹出通知以查看本版本的新功能。 - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock 配置不正确。请前往 "设置" -> "Node.js" 检查 Node.js 配置是否正确。 - + Already running 已在运行 - + Packages %1 were NOT updated because of error: %2. 由于错误:%2,软件包 %1 没有更新。 + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + + + AuthenticationDetails @@ -311,7 +346,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5127,14 +5162,14 @@ Token 过期时间:%2 zh_CN - + LANG_AUTHOR Name of translator - optional. Hoilc - + + %n other feeds. @@ -5325,6 +5360,26 @@ List of supported readers: Published articles 发表的文章 + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6747,43 +6802,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - 你必须激活 "托盘图标 "才能让气球通知发挥作用。此外,还有一些内置的声音。只要开始输入":",它们就会显示出来。 - Enable notifications 启用通知 - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications 通知 + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7500,32 +7558,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! diff --git a/localization/rssguard_zh_TW.ts b/localization/rssguard_zh_TW.ts index 785f38cff..8fb7ab1fa 100644 --- a/localization/rssguard_zh_TW.ts +++ b/localization/rssguard_zh_TW.ts @@ -127,67 +127,67 @@ Error: %1 Application - + Application is already running. 應用程式已在執行。 - + Output directory is not writable. 輸出目錄是無法寫入。 - + Settings file not copied to output directory successfully. 設定檔複製到輸出目錄失敗。 - + Database restoration was not initiated. Make sure that output directory is writable. 未復原資料庫。請確認輸出目錄可寫入。 - + Settings restoration was not initiated. Make sure that output directory is writable. 未復原設定。請確認輸出目錄可寫入。 - + Cannot add feed 無法新增文源 - + Feed cannot be added because there is no active account which can add feeds. 無法加入文源,因為無使用的、可加入文源的帳號。 - + Packages %1 were updated. 套件 %1 更新過。 - + Unread articles fetched 下載了未讀的文章 - + Go to changelog 前往檢視變更紀錄 - + AdBlock needs to be configured 須設定 AdBlock - + Welcome 歡迎 - + Welcome to %1. Please, check NEW stuff included in this @@ -198,21 +198,56 @@ version by clicking this popup notification. 查閱此版的新鮮事。 - + AdBlock is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured. AdBlock 未恰當設定。請於 "設定" -> "Node.js",檢查 Node.js 是否恰當設定。 - + Already running 已在執行 - + Packages %1 were NOT updated because of error: %2. 套件 %1 沒更新新過,因為後面錯誤: %2。 + + ArticleListNotification + + + ... + ... + + + + Go to previous page + Go to previous page + + + + Go to next page + Go to next page + + + + Open article in article list + Open article in article list + + + + Open article in web browser + Open article in web browser + + + + %n feeds fetched + + %n feeds fetched + + + AuthenticationDetails @@ -310,7 +345,7 @@ version by clicking this popup notification. BaseToastNotification - + Close this notification Close this notification @@ -5132,14 +5167,14 @@ Login tokens expiration: %2 zh_TW - + LANG_AUTHOR Name of translator - optional. wck317 - + + %n other feeds. @@ -5330,6 +5365,26 @@ List of supported readers: Published articles 發行的文章 + + + top-left + top-left + + + + top-right + top-right + + + + bottom-left + bottom-left + + + + bottom-right + bottom-right + Readability @@ -6764,45 +6819,46 @@ Also, relaunch "Settings" dialog after you install Node.js. SettingsNotifications - - - You must have "tray icon" activated to have balloon notifications working. - -Also, there are some built-in sounds. Just start typing ":" and they will show up. - 一定得使用 "系統匣圖示",才會有氣球式提醒。 - -此外,有一些內建的聲效,只要輸入 "." 就會出現。 - Enable notifications 啟用通知 - - Notifications type - Notifications type + + Balloon notifications type + Balloon notifications type - + Native notifications (tray icon must be enabled) Native notifications (tray icon must be enabled) - + Custom notifications Custom notifications - + Position Position - + + Screen + Screen + + + Notifications 通知 + + + There are some built-in notification sounds. Just start typing ":" and they will show up. + There are some built-in notification sounds. Just start typing ":" and they will show up. + SettingsShortcuts @@ -7519,32 +7575,27 @@ Unread news: %2 ToastNotification - - Dialog - Dialog - - - + ... ... - + 11 11 - + TextLabel TextLabel - + PushButton PushButton - + Do it! Do it! From d7574afa0ebd7188e2c86d147c42230f0f4bc0e5 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 22 Sep 2023 13:24:59 +0200 Subject: [PATCH 08/11] fix build --- .../gui/notifications/articlelistnotification.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/librssguard/gui/notifications/articlelistnotification.cpp b/src/librssguard/gui/notifications/articlelistnotification.cpp index 321cd8425..79c906921 100644 --- a/src/librssguard/gui/notifications/articlelistnotification.cpp +++ b/src/librssguard/gui/notifications/articlelistnotification.cpp @@ -36,7 +36,10 @@ ArticleListNotification::ArticleListNotification(QWidget* parent) m_ui.m_treeArticles->setPalette(pal); m_ui.m_treeArticles->setModel(m_model); - connect(m_ui.m_cmbFeeds, &QComboBox::currentIndexChanged, this, &ArticleListNotification::showFeed); + connect(m_ui.m_cmbFeeds, + QOverload::of(&QComboBox::currentIndexChanged), + this, + &ArticleListNotification::showFeed); } void ArticleListNotification::loadResults(const QHash>& new_messages) { From 41139cd905c1749afcf85b69719b2a6a0009d888 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 22 Sep 2023 13:37:10 +0200 Subject: [PATCH 09/11] fix build --- .../core/articlelistnotificationmodel.cpp | 27 +++++++++++--- .../core/articlelistnotificationmodel.h | 4 +++ .../notifications/articlelistnotification.ui | 35 ++++++------------- .../gui/settings/settingsnotifications.cpp | 4 +-- 4 files changed, 39 insertions(+), 31 deletions(-) diff --git a/src/librssguard/core/articlelistnotificationmodel.cpp b/src/librssguard/core/articlelistnotificationmodel.cpp index 4cb601706..ac02a466b 100644 --- a/src/librssguard/core/articlelistnotificationmodel.cpp +++ b/src/librssguard/core/articlelistnotificationmodel.cpp @@ -10,20 +10,28 @@ ArticleListNotificationModel::ArticleListNotificationModel(QObject* parent) ArticleListNotificationModel::~ArticleListNotificationModel() {} void ArticleListNotificationModel::setArticles(const QList& msgs) { - m_articles = msgs; m_currentPage = 0; + m_articles = msgs; reloadWholeLayout(); + emit nextPagePossibleChanged(nextPageAvailable()); + emit previousPagePossibleChanged(previousPageAvailable()); } void ArticleListNotificationModel::nextPage() { - emit nextPagePossibleChanged(true); - emit previousPagePossibleChanged(true); + m_currentPage++; + reloadWholeLayout(); + + emit nextPagePossibleChanged(nextPageAvailable()); + emit previousPagePossibleChanged(previousPageAvailable()); } void ArticleListNotificationModel::previousPage() { - emit nextPagePossibleChanged(true); - emit previousPagePossibleChanged(true); + m_currentPage--; + reloadWholeLayout(); + + emit nextPagePossibleChanged(nextPageAvailable()); + emit previousPagePossibleChanged(previousPageAvailable()); } int ArticleListNotificationModel::rowCount(const QModelIndex& parent) const { @@ -37,6 +45,7 @@ int ArticleListNotificationModel::columnCount(const QModelIndex& parent) const { QVariant ArticleListNotificationModel::data(const QModelIndex& index, int role) const { switch (role) { case Qt::ItemDataRole::DisplayRole: + case Qt::ItemDataRole::ToolTipRole: return m_articles.at((m_currentPage * NOTIFICATIONS_PAGE_SIZE) + index.row()).m_title; } @@ -47,3 +56,11 @@ void ArticleListNotificationModel::reloadWholeLayout() { emit layoutAboutToBeChanged(); emit layoutChanged(); } + +bool ArticleListNotificationModel::nextPageAvailable() const { + return m_articles.size() - (NOTIFICATIONS_PAGE_SIZE * (m_currentPage + 1)) > 0; +} + +bool ArticleListNotificationModel::previousPageAvailable() const { + return m_currentPage > 0; +} diff --git a/src/librssguard/core/articlelistnotificationmodel.h b/src/librssguard/core/articlelistnotificationmodel.h index c97574d6f..17263b0f9 100644 --- a/src/librssguard/core/articlelistnotificationmodel.h +++ b/src/librssguard/core/articlelistnotificationmodel.h @@ -29,6 +29,10 @@ class ArticleListNotificationModel : public QAbstractListModel { void nextPagePossibleChanged(bool possible); void previousPagePossibleChanged(bool possible); + private: + bool nextPageAvailable() const; + bool previousPageAvailable() const; + private: QList m_articles; int m_currentPage; diff --git a/src/librssguard/gui/notifications/articlelistnotification.ui b/src/librssguard/gui/notifications/articlelistnotification.ui index 4cba4fad9..3ec01ee55 100644 --- a/src/librssguard/gui/notifications/articlelistnotification.ui +++ b/src/librssguard/gui/notifications/articlelistnotification.ui @@ -75,18 +75,7 @@ - - - Go to previous page - - - - - - - Go to next page - - + @@ -102,20 +91,18 @@ - + + + Go to previous page + + - - - Qt::Horizontal + + + Go to next page - - - 40 - 20 - - - + @@ -145,9 +132,9 @@ m_btnClose m_treeArticles + m_cmbFeeds m_btnPreviousPage m_btnNextPage - m_cmbFeeds m_btnOpenArticleList m_btnOpenWebBrowser diff --git a/src/librssguard/gui/settings/settingsnotifications.cpp b/src/librssguard/gui/settings/settingsnotifications.cpp index 5ea235ffa..084b320a0 100644 --- a/src/librssguard/gui/settings/settingsnotifications.cpp +++ b/src/librssguard/gui/settings/settingsnotifications.cpp @@ -27,8 +27,8 @@ SettingsNotifications::SettingsNotifications(Settings* settings, QWidget* parent connect(m_ui.m_rbNativeNotifications, &QRadioButton::toggled, this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_rbNativeNotifications, &QRadioButton::toggled, this, &SettingsNotifications::requireRestart); - connect(m_ui.m_sbScreen, &QSpinBox::valueChanged, this, &SettingsNotifications::dirtifySettings); - connect(m_ui.m_sbScreen, &QSpinBox::valueChanged, this, &SettingsNotifications::requireRestart); + connect(m_ui.m_sbScreen, QOverload::of(&QSpinBox::valueChanged), this, &SettingsNotifications::dirtifySettings); + connect(m_ui.m_sbScreen, QOverload::of(&QSpinBox::valueChanged), this, &SettingsNotifications::requireRestart); m_ui.m_sbScreen->setMinimum(-1); m_ui.m_sbScreen->setMaximum(QGuiApplication::screens().size() - 1); From 8b50c209b78a845e699371f6c66f7ece85880e88 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 22 Sep 2023 13:56:57 +0200 Subject: [PATCH 10/11] fix build --- src/librssguard/gui/settings/settingsnotifications.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/librssguard/gui/settings/settingsnotifications.cpp b/src/librssguard/gui/settings/settingsnotifications.cpp index 084b320a0..afce5c9a5 100644 --- a/src/librssguard/gui/settings/settingsnotifications.cpp +++ b/src/librssguard/gui/settings/settingsnotifications.cpp @@ -33,14 +33,14 @@ SettingsNotifications::SettingsNotifications(Settings* settings, QWidget* parent m_ui.m_sbScreen->setMinimum(-1); m_ui.m_sbScreen->setMaximum(QGuiApplication::screens().size() - 1); - connect(m_ui.m_sbScreen, &QSpinBox::valueChanged, this, &SettingsNotifications::showScreenInfo); + connect(m_ui.m_sbScreen, QOverload::of(&QSpinBox::valueChanged), this, &SettingsNotifications::showScreenInfo); connect(m_ui.m_cbCustomNotificationsPosition, - &QComboBox::currentIndexChanged, + QOverload::of(&QComboBox::currentIndexChanged), this, &SettingsNotifications::dirtifySettings); connect(m_ui.m_cbCustomNotificationsPosition, - &QComboBox::currentIndexChanged, + QOverload::of(&QComboBox::currentIndexChanged), this, &SettingsNotifications::requireRestart); From 6f7d192a98e1007f38355e8db996f7b1015b6bee Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 22 Sep 2023 14:32:47 +0200 Subject: [PATCH 11/11] save woprk --- .../core/articlelistnotificationmodel.cpp | 4 ++++ .../core/articlelistnotificationmodel.h | 2 ++ .../notifications/articlelistnotification.cpp | 22 +++++++++++++++++++ .../notifications/articlelistnotification.h | 4 ++++ .../notifications/articlelistnotification.ui | 12 +++++++++- 5 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/librssguard/core/articlelistnotificationmodel.cpp b/src/librssguard/core/articlelistnotificationmodel.cpp index ac02a466b..09a4a7194 100644 --- a/src/librssguard/core/articlelistnotificationmodel.cpp +++ b/src/librssguard/core/articlelistnotificationmodel.cpp @@ -18,6 +18,10 @@ void ArticleListNotificationModel::setArticles(const QList& msgs) { emit previousPagePossibleChanged(previousPageAvailable()); } +Message ArticleListNotificationModel::message(const QModelIndex& idx) const { + return m_articles.at((m_currentPage * NOTIFICATIONS_PAGE_SIZE) + idx.row()); +} + void ArticleListNotificationModel::nextPage() { m_currentPage++; reloadWholeLayout(); diff --git a/src/librssguard/core/articlelistnotificationmodel.h b/src/librssguard/core/articlelistnotificationmodel.h index 17263b0f9..e98c57a00 100644 --- a/src/librssguard/core/articlelistnotificationmodel.h +++ b/src/librssguard/core/articlelistnotificationmodel.h @@ -16,6 +16,8 @@ class ArticleListNotificationModel : public QAbstractListModel { void setArticles(const QList& msgs); + Message message(const QModelIndex& idx) const; + void nextPage(); void previousPage(); diff --git a/src/librssguard/gui/notifications/articlelistnotification.cpp b/src/librssguard/gui/notifications/articlelistnotification.cpp index 79c906921..931064150 100644 --- a/src/librssguard/gui/notifications/articlelistnotification.cpp +++ b/src/librssguard/gui/notifications/articlelistnotification.cpp @@ -5,6 +5,8 @@ #include "core/articlelistnotificationmodel.h" #include "miscellaneous/iconfactory.h" +#include + ArticleListNotification::ArticleListNotification(QWidget* parent) : BaseToastNotification(parent), m_model(new ArticleListNotificationModel(this)) { m_ui.setupUi(this); @@ -25,6 +27,12 @@ ArticleListNotification::ArticleListNotification(QWidget* parent) &ArticleListNotificationModel::previousPagePossibleChanged, m_ui.m_btnPreviousPage, &PlainToolButton::setEnabled); + connect(m_ui.m_btnNextPage, &PlainToolButton::clicked, m_model, &ArticleListNotificationModel::nextPage); + connect(m_ui.m_btnPreviousPage, &PlainToolButton::clicked, m_model, &ArticleListNotificationModel::previousPage); + connect(m_ui.m_treeArticles->selectionModel(), + &QItemSelectionModel::currentChanged, + this, + &ArticleListNotificationModel::onMessageSelected); m_ui.m_treeArticles->setAttribute(Qt::WA_NoSystemBackground, true); @@ -56,6 +64,20 @@ void ArticleListNotification::loadResults(const QHash>& ne } } +void ArticleListNotification::onMessageSelected(const QModelIndex& current, const QModelIndex& previous) { + m_ui.m_btnOpenArticleList->setEnabled(current.isValid()); + m_ui.m_btnOpenWebBrowser->setEnabled(current.isValid()); +} + void ArticleListNotification::showFeed(int index) { m_model->setArticles(m_newMessages.value(m_ui.m_cmbFeeds->itemData(index).value())); } + +Message ArticleListNotification::selectedMessage() const { + if (m_ui.m_treeArticles->currentIndex().isValid()) { + return m_model->message(m_ui.m_treeArticles->currentIndex()); + } + else { + throw ApplicationException("message cannot be loaded, wrong index"); + } +} diff --git a/src/librssguard/gui/notifications/articlelistnotification.h b/src/librssguard/gui/notifications/articlelistnotification.h index d7590abbf..a2774b7f3 100644 --- a/src/librssguard/gui/notifications/articlelistnotification.h +++ b/src/librssguard/gui/notifications/articlelistnotification.h @@ -21,8 +21,12 @@ class ArticleListNotification : public BaseToastNotification { void loadResults(const QHash>& new_messages); private slots: + void onMessageSelected(const QModelIndex& current, const QModelIndex& previous); void showFeed(int index); + private: + Message selectedMessage() const; + private: Ui::ArticleListNotification m_ui; ArticleListNotificationModel* m_model; diff --git a/src/librssguard/gui/notifications/articlelistnotification.ui b/src/librssguard/gui/notifications/articlelistnotification.ui index 3ec01ee55..cee497ca8 100644 --- a/src/librssguard/gui/notifications/articlelistnotification.ui +++ b/src/librssguard/gui/notifications/articlelistnotification.ui @@ -75,13 +75,23 @@ - + + + + 0 + 0 + + + Qt::Horizontal + + QSizePolicy::Minimum + 40