From 2e8108aaf5aa6f4949bc2c05762bf6d92ef46366 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Mon, 12 May 2025 15:01:14 +0200 Subject: [PATCH] some refactoring and disable appimage again, i have no patience for that, just use native packages and flatpak --- .../scripts/github-actions/build-linux-mac.sh | 38 ++++----- .../src/gui/formstandardimportexport.cpp | 2 +- .../src/standardserviceroot.cpp | 2 +- src/librssguard/database/databasequeries.cpp | 4 +- .../services/abstract/category.cpp | 2 +- .../services/abstract/importantnode.cpp | 4 +- src/librssguard/services/abstract/label.cpp | 4 +- .../services/abstract/recyclebin.cpp | 2 +- .../services/abstract/rootitem.cpp | 77 ++----------------- src/librssguard/services/abstract/rootitem.h | 31 +++++++- src/librssguard/services/abstract/search.cpp | 4 +- .../services/abstract/serviceroot.cpp | 25 +++--- .../services/abstract/unreadnode.cpp | 4 +- 13 files changed, 83 insertions(+), 116 deletions(-) diff --git a/resources/scripts/github-actions/build-linux-mac.sh b/resources/scripts/github-actions/build-linux-mac.sh index 871a63303..e38ad17a9 100755 --- a/resources/scripts/github-actions/build-linux-mac.sh +++ b/resources/scripts/github-actions/build-linux-mac.sh @@ -86,31 +86,31 @@ if [ $is_linux = true ]; then echo 'Validating AppStream metadata...' appstreamcli validate "$prefix/share/metainfo/$app_id.metainfo.xml" - ## Obtain appimagetool. - appimagetool_file=$(wget -q https://github.com/probonopd/go-appimage/releases/expanded_assets/continuous -O - | grep "appimagetool-.*-x86_64.AppImage" | head -n 1 | cut -d '"' -f 2) - wget -c "https://github.com/$appimagetool_file" - chmod +x appimagetool-*.AppImage - mv appimagetool-*.AppImage appimagetool.AppImage + # ## Obtain appimagetool. + # appimagetool_file=$(wget -q https://github.com/probonopd/go-appimage/releases/expanded_assets/continuous -O - | grep "appimagetool-.*-x86_64.AppImage" | head -n 1 | cut -d '"' -f 2) + # wget -c "https://github.com/$appimagetool_file" + # chmod +x appimagetool-*.AppImage + # mv appimagetool-*.AppImage appimagetool.AppImage - export VERSION=1.0 + # export VERSION=1.0 - GH_TKN=$GITHUB_TOKEN - unset GITHUB_TOKEN + # GH_TKN=$GITHUB_TOKEN + # unset GITHUB_TOKEN - ./appimagetool.AppImage -s deploy AppDir/usr/share/applications/*.desktop - ./appimagetool.AppImage ./AppDir + # ./appimagetool.AppImage -s deploy AppDir/usr/share/applications/*.desktop + # ./appimagetool.AppImage ./AppDir - export GITHUB_TOKEN=$GH_TKN + # export GITHUB_TOKEN=$GH_TKN - ## Rename AppImaage. - set -- R*.AppImage - imagename="$1" + # ## Rename AppImaage. + # set -- R*.AppImage + # imagename="$1" - if [[ "$webengine" == "ON" ]]; then - imagenewname="rssguard-${git_tag}-${git_revision}-linux64.AppImage" - else - imagenewname="rssguard-${git_tag}-${git_revision}-lite-linux64.AppImage" - fi + # if [[ "$webengine" == "ON" ]]; then + # imagenewname="rssguard-${git_tag}-${git_revision}-linux64.AppImage" + # else + # imagenewname="rssguard-${git_tag}-${git_revision}-lite-linux64.AppImage" + # fi else # Fix .dylib linking. otool -L "$prefix/Contents/MacOS/rssguard" diff --git a/src/librssguard-standard/src/gui/formstandardimportexport.cpp b/src/librssguard-standard/src/gui/formstandardimportexport.cpp index 4b29e32f3..42abb6f8a 100644 --- a/src/librssguard-standard/src/gui/formstandardimportexport.cpp +++ b/src/librssguard-standard/src/gui/formstandardimportexport.cpp @@ -356,7 +356,7 @@ void FormStandardImportExport::importFeeds() { RootItem* parent = m_ui->m_cmbRootNode->currentData().value(); if (m_serviceRoot->mergeImportExportModel(m_model, parent, output_message)) { - m_serviceRoot->requestItemExpand(parent->getSubTree(), true); + m_serviceRoot->requestItemExpand(parent->getSubTree(), true); m_ui->m_lblResult->setStatus(WidgetWithStatus::StatusType::Ok, output_message, output_message); } else { diff --git a/src/librssguard-standard/src/standardserviceroot.cpp b/src/librssguard-standard/src/standardserviceroot.cpp index 0a4b765b1..17cb1d466 100644 --- a/src/librssguard-standard/src/standardserviceroot.cpp +++ b/src/librssguard-standard/src/standardserviceroot.cpp @@ -98,7 +98,7 @@ void StandardServiceRoot::start(bool freshly_activated) { model.checkAllItems(); if (mergeImportExportModel(&model, this, output_msg)) { - requestItemExpand(getSubTree(), true); + requestItemExpand(getSubTree(), true); } } catch (ApplicationException& ex) { diff --git a/src/librssguard/database/databasequeries.cpp b/src/librssguard/database/databasequeries.cpp index a5494a568..c4e396c11 100644 --- a/src/librssguard/database/databasequeries.cpp +++ b/src/librssguard/database/databasequeries.cpp @@ -52,7 +52,7 @@ QMap DatabaseQueries::messageTableAttributes(bool only_msg_table, field_names[MSG_DB_LABELS_IDS] = QSL("Messages.labels"); - // TODO: zpomaluje zobrazení seznamu zpráv + // TODO: zpomaluje zobrazenĂ­ seznamu zpráv /* field_names[MSG_DB_LABELS] = QSL("(SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Labels.custom_id IN (SELECT " @@ -2295,7 +2295,7 @@ bool DatabaseQueries::purgeLeftoverMessages(const QSqlDatabase& db, int account_ void DatabaseQueries::storeAccountTree(const QSqlDatabase& db, RootItem* tree_root, int account_id) { // Iterate all children. - auto str = tree_root->getSubTree(); + auto str = tree_root->getSubTree(); for (RootItem* child : std::as_const(str)) { if (child->kind() == RootItem::Kind::Category) { diff --git a/src/librssguard/services/abstract/category.cpp b/src/librssguard/services/abstract/category.cpp index 3866611d1..7e43ff2d8 100644 --- a/src/librssguard/services/abstract/category.cpp +++ b/src/librssguard/services/abstract/category.cpp @@ -75,7 +75,7 @@ QString Category::additionalTooltip() const { "Number of disabled feeds: %3") .arg(QString::number(getSubTreeFeeds().size()), QString::number(getSubTreeCategories().size() - 1), - QString::number(getSubTree([](const RootItem* ri) { + QString::number(getSubTree([](const RootItem* ri) { return ri->kind() == RootItem::Kind::Feed && ri->toFeed()->isSwitchedOff(); }).size())); } diff --git a/src/librssguard/services/abstract/importantnode.cpp b/src/librssguard/services/abstract/importantnode.cpp index 366b066b3..4ba6ec4bf 100644 --- a/src/librssguard/services/abstract/importantnode.cpp +++ b/src/librssguard/services/abstract/importantnode.cpp @@ -40,7 +40,7 @@ bool ImportantNode::cleanMessages(bool clean_read_only) { if (DatabaseQueries::cleanImportantMessages(database, clean_read_only, service->accountId())) { service->updateCounts(true); - service->itemChanged(service->getSubTree()); + service->itemChanged(service->getSubTree()); service->requestReloadMessageList(true); return true; } @@ -61,7 +61,7 @@ bool ImportantNode::markAsReadUnread(RootItem::ReadStatus status) { if (DatabaseQueries::markImportantMessagesReadUnread(database, service->accountId(), status)) { service->updateCounts(false); - service->itemChanged(service->getSubTree()); + service->itemChanged(service->getSubTree()); service->requestReloadMessageList(status == RootItem::ReadStatus::Read); return true; } diff --git a/src/librssguard/services/abstract/label.cpp b/src/librssguard/services/abstract/label.cpp index 87ece004c..9b632307f 100644 --- a/src/librssguard/services/abstract/label.cpp +++ b/src/librssguard/services/abstract/label.cpp @@ -117,7 +117,7 @@ bool Label::cleanMessages(bool clear_only_read) { if (DatabaseQueries::cleanLabelledMessages(database, clear_only_read, this)) { service->updateCounts(true); - service->itemChanged(service->getSubTree()); + service->itemChanged(service->getSubTree()); service->requestReloadMessageList(true); return true; } @@ -138,7 +138,7 @@ bool Label::markAsReadUnread(RootItem::ReadStatus status) { if (DatabaseQueries::markLabelledMessagesReadUnread(database, this, status)) { service->updateCounts(false); - service->itemChanged(service->getSubTree()); + service->itemChanged(service->getSubTree()); service->requestReloadMessageList(status == RootItem::ReadStatus::Read); return true; } diff --git a/src/librssguard/services/abstract/recyclebin.cpp b/src/librssguard/services/abstract/recyclebin.cpp index 6ca0b616d..c3e615011 100644 --- a/src/librssguard/services/abstract/recyclebin.cpp +++ b/src/librssguard/services/abstract/recyclebin.cpp @@ -119,7 +119,7 @@ bool RecycleBin::restore() { if (DatabaseQueries::restoreBin(database, parent_root->accountId())) { parent_root->updateCounts(true); - parent_root->itemChanged(parent_root->getSubTree()); + parent_root->itemChanged(parent_root->getSubTree()); parent_root->requestReloadMessageList(true); return true; } diff --git a/src/librssguard/services/abstract/rootitem.cpp b/src/librssguard/services/abstract/rootitem.cpp index 20a78b55c..ccab8dd82 100644 --- a/src/librssguard/services/abstract/rootitem.cpp +++ b/src/librssguard/services/abstract/rootitem.cpp @@ -268,81 +268,16 @@ bool RootItem::isParentOf(const RootItem* child) const { } } -QList RootItem::getSubTree() const { - QList children; - QList traversable_items; - - traversable_items.append(const_cast(this)); - - // Iterate all nested items. - while (!traversable_items.isEmpty()) { - RootItem* active_item = traversable_items.takeFirst(); - - children.append(active_item); - traversable_items.append(active_item->childItems()); - } - - return children; -} - -QList RootItem::getSubTree(std::function tester) const { - QList children; - QList traversable_items; - - traversable_items.append(const_cast(this)); - - // Iterate all nested items. - while (!traversable_items.isEmpty()) { - RootItem* active_item = traversable_items.takeFirst(); - - if (tester(active_item)) { - children.append(active_item); - } - - traversable_items.append(active_item->childItems()); - } - - return children; -} - QList RootItem::getSubTree(RootItem::Kind kind_of_item) const { - QList children; - QList traversable_items; - - traversable_items.append(const_cast(this)); - - // Iterate all nested items. - while (!traversable_items.isEmpty()) { - RootItem* active_item = traversable_items.takeFirst(); - - if (int(active_item->kind() & kind_of_item) > 0) { - children.append(active_item); - } - - traversable_items.append(active_item->childItems()); - } - - return children; + return getSubTree([kind_of_item](const RootItem* ri) { + return int(ri->kind() & kind_of_item) > 0; + }); } QList RootItem::getSubTreeCategories() const { - QList children; - QList traversable_items; - - traversable_items.append(const_cast(this)); - - // Iterate all nested items. - while (!traversable_items.isEmpty()) { - RootItem* active_item = traversable_items.takeFirst(); - - if (active_item->kind() == RootItem::Kind::Category) { - children.append(active_item->toCategory()); - } - - traversable_items.append(active_item->childItems()); - } - - return children; + return getSubTree([](const RootItem* ri) { + return ri->kind() == RootItem::Kind::Category; + }); } RootItem* RootItem::getItemFromSubTree(std::function tester) const { diff --git a/src/librssguard/services/abstract/rootitem.h b/src/librssguard/services/abstract/rootitem.h index 39db48bec..7927ccd9b 100644 --- a/src/librssguard/services/abstract/rootitem.h +++ b/src/librssguard/services/abstract/rootitem.h @@ -143,8 +143,9 @@ class RSSGUARD_DLLSPEC RootItem : public QObject { // Returns flat list of all items from subtree where this item is a root. // Returned list includes this item too. - QList getSubTree() const; - QList getSubTree(std::function tester) const; + template + QList getSubTree(std::function tester = nullptr) const; + QList getSubTree(RootItem::Kind kind_of_item) const; QList getSubTreeCategories() const; @@ -240,6 +241,32 @@ class RSSGUARD_DLLSPEC RootItem : public QObject { RootItem* m_parentItem; }; +template +QList RootItem::getSubTree(std::function tester) const { + QList children; + QList traversable_items; + + traversable_items.append(const_cast(this)); + + // Iterate all nested items. + while (!traversable_items.isEmpty()) { + RootItem* active_item = traversable_items.takeFirst(); + + if (tester) { + if (tester(active_item)) { + children.append(dynamic_cast(active_item)); + } + } + else { + children.append(dynamic_cast(active_item)); + } + + traversable_items.append(active_item->childItems()); + } + + return children; +} + inline RootItem* RootItem::parent() const { return m_parentItem; } diff --git a/src/librssguard/services/abstract/search.cpp b/src/librssguard/services/abstract/search.cpp index bd92222a4..f8ff54705 100644 --- a/src/librssguard/services/abstract/search.cpp +++ b/src/librssguard/services/abstract/search.cpp @@ -97,7 +97,7 @@ bool Search::cleanMessages(bool clear_only_read) { try { DatabaseQueries::cleanProbedMessages(database, clear_only_read, this); service->updateCounts(true); - service->itemChanged(service->getSubTree()); + service->itemChanged(service->getSubTree()); service->requestReloadMessageList(true); return true; } @@ -130,7 +130,7 @@ bool Search::markAsReadUnread(RootItem::ReadStatus status) { try { DatabaseQueries::markProbeReadUnread(database, this, status); service->updateCounts(false); - service->itemChanged(service->getSubTree()); + service->itemChanged(service->getSubTree()); service->requestReloadMessageList(status == RootItem::ReadStatus::Read); return true; } diff --git a/src/librssguard/services/abstract/serviceroot.cpp b/src/librssguard/services/abstract/serviceroot.cpp index 476568459..59ab3261e 100644 --- a/src/librssguard/services/abstract/serviceroot.cpp +++ b/src/librssguard/services/abstract/serviceroot.cpp @@ -149,7 +149,7 @@ bool ServiceRoot::markAsReadUnread(RootItem::ReadStatus status) { if (DatabaseQueries::markAccountReadUnread(database, accountId(), status)) { updateCounts(false); - itemChanged(getSubTree()); + itemChanged(getSubTree()); requestReloadMessageList(status == RootItem::ReadStatus::Read); return true; } @@ -229,7 +229,7 @@ CustomMessagePreviewer* ServiceRoot::customMessagePreviewer() { void ServiceRoot::updateCounts(bool including_total_count) { QList feeds; - auto str = getSubTree(); + auto str = getSubTree(); for (RootItem* child : std::as_const(str)) { if (child->kind() == RootItem::Kind::Feed) { @@ -350,7 +350,7 @@ bool ServiceRoot::cleanFeeds(const QList& items, bool clean_read_only) { if (DatabaseQueries::cleanFeeds(database, textualFeedIds(items), clean_read_only, accountId())) { getParentServiceRoot()->updateCounts(true); - getParentServiceRoot()->itemChanged(getParentServiceRoot()->getSubTree()); + getParentServiceRoot()->itemChanged(getParentServiceRoot()->getSubTree()); getParentServiceRoot()->requestReloadMessageList(true); return true; } @@ -391,8 +391,13 @@ ServiceRoot::LabelOperation ServiceRoot::supportedLabelOperations() const { QString ServiceRoot::additionalTooltip() const { return tr("Number of feeds: %1\n" - "Number of categories: %2") - .arg(QString::number(getSubTreeFeeds().size()), QString::number(getSubTreeCategories().size())); + "Number of categories: %2\n" + "Number of disabled feeds: %3") + .arg(QString::number(getSubTreeFeeds().size()), + QString::number(getSubTreeCategories().size()), + QString::number(getSubTree([](const RootItem* ri) { + return ri->kind() == RootItem::Kind::Feed && ri->toFeed()->isSwitchedOff(); + }).size())); } void ServiceRoot::saveAccountDataToDatabase() { @@ -720,8 +725,8 @@ void ServiceRoot::syncIn() { } setIcon(original_icon); - itemChanged(getSubTree()); - requestItemExpand(getSubTree(), true); + itemChanged(getSubTree()); + requestItemExpand(getSubTree(), true); } void ServiceRoot::performInitialAssembly(const Assignment& categories, @@ -824,7 +829,7 @@ bool ServiceRoot::markFeedsReadUnread(const QList& items, RootItem::ReadS if (DatabaseQueries::markFeedsReadUnread(database, textualFeedIds(items), accountId(), read)) { getParentServiceRoot()->updateCounts(false); - getParentServiceRoot()->itemChanged(getParentServiceRoot()->getSubTree()); + getParentServiceRoot()->itemChanged(getParentServiceRoot()->getSubTree()); getParentServiceRoot()->requestReloadMessageList(read == RootItem::ReadStatus::Read); return true; } @@ -1130,7 +1135,7 @@ bool ServiceRoot::onAfterMessagesDelete(RootItem* selected_item, const QList()); return true; } @@ -1180,7 +1185,7 @@ bool ServiceRoot::onAfterMessagesRestoredFromBin(RootItem* selected_item, const Q_UNUSED(messages) updateCounts(true); - itemChanged(getSubTree()); + itemChanged(getSubTree()); return true; } diff --git a/src/librssguard/services/abstract/unreadnode.cpp b/src/librssguard/services/abstract/unreadnode.cpp index 3563cbd1a..63ba3a6f5 100644 --- a/src/librssguard/services/abstract/unreadnode.cpp +++ b/src/librssguard/services/abstract/unreadnode.cpp @@ -40,7 +40,7 @@ bool UnreadNode::cleanMessages(bool clean_read_only) { if (DatabaseQueries::cleanUnreadMessages(database, service->accountId())) { service->updateCounts(true); - service->itemChanged(service->getSubTree()); + service->itemChanged(service->getSubTree()); service->requestReloadMessageList(true); return true; } @@ -66,7 +66,7 @@ bool UnreadNode::markAsReadUnread(RootItem::ReadStatus status) { if (DatabaseQueries::markUnreadMessagesRead(database, service->accountId())) { service->updateCounts(false); - service->itemChanged(service->getSubTree()); + service->itemChanged(service->getSubTree()); service->requestReloadMessageList(status == RootItem::ReadStatus::Read); return true; }