martinrotter / rssguard

Feed reader (and podcast player) which supports RSS/ATOM/JSON and many web-based feed services.
GNU General Public License v3.0
1.54k stars 124 forks source link

[BUG]: Add new category : list not refreshed with new category #872

Closed starbuck3000 closed 1 year ago

starbuck3000 commented 1 year ago

Brief description of the issue

When adding a category, the category creation dialog closes after pressing "Ok" and the new category does not appear in the list of categories. No error is shown. I can see in the debug log that the categories may have been created (my log shows multiple attempts at creating a "Red" category).

How to reproduce the bug?

  1. Launch RG
  2. Right-click on RSS/Atom account, select "Add new category"
  3. In the dialog, enter "Red"
  4. Press "Ok"

Notes on bug reproduction:

  1. In the debug log, I removed the lines that show the title of feeds or categories. Nothing else was removed.
  2. Following my installation of RG, I imported an OPML export from QuiteRSS. No other feeds or categories were added since I tried adding a new category. When launching "fetch items" the feeds are correctly refreshed and all items downloaded. The bug occurred once I tried adding a new category in RG.

What was the expected result?

A category named "Red" should be added to the tree on the left pane. It seems the pane is never refreshed because the debug log shows multiple entries for each time I tried creating the category.

What actually happened?

The left pane remains unchanged. Reading the debug log seems to indicate that the category was somehow created.

Debug log

time=" 0.014" type="debug" -> core: Initializing settings in 'G:\Installed\RSSGuard\data4\config\config.ini' (portable way). time=" 0.023" type="debug" -> database: File-based SQLite database connection 'DatabaseFactory' to file 'G:\Installed\RSSGuard\data4\database\database.db' seems to be established. time=" 0.023" type="debug" -> database: File-based SQLite database has version '4'. time=" 0.025" type="debug" -> gui: Available icon theme paths: QList(:/icons, :/graphics, G:/Installed/RSSGuard\data4\icons, G:/Installed/RSSGuard\icons) time=" 0.026" type="debug" -> gui: Installed icon themes are: '', 'Breeze', 'Breeze Dark', 'Faenza', 'Numix' time=" 0.026" type="debug" -> gui: Loading icon theme 'Breeze'. time=" 0.068" type="debug" -> gui: Found path of base skin: ':\skins\nudus-base'. time=" 0.069" type="debug" -> gui: Trying to load base file ':\skins\nudus-base\html_wrapper.html' for the skin. time=" 0.069" type="debug" -> gui: Local file ':\skins\nudus-light\html_style.css' exists, using it for the skin. time=" 0.069" type="debug" -> gui: Trying to load base file ':\skins\nudus-base\html_enclosure_image.html' for the skin. time=" 0.069" type="debug" -> gui: Trying to load base file ':\skins\nudus-base\html_single_message.html' for the skin. time=" 0.069" type="debug" -> gui: Trying to load base file ':\skins\nudus-base\html_enclosure_every.html' for the skin. time=" 0.070" type="debug" -> gui: Local file ':\skins\nudus-light\qt_style.qss' exists, using it for the skin. time=" 0.070" type="debug" -> gui: Trying to load base file ':\skins\nudus-base\html_adblocked.html' for the skin. time=" 0.070" type="debug" -> gui: Setting style: 'Fusion'. time=" 0.071" type="debug" -> gui: Skin 'nudus-light' loaded. time=" 0.071" type="warning" -> network: Activating application-wide custom proxy, address: '127.0.0.1', type: '1'. time=" 0.077" type="debug" -> core: OpenSSL version: 'OpenSSL 1.1.1q 5 Jul 2022'. time=" 0.077" type="debug" -> core: OpenSSL supported: 'true'. time=" 0.078" type="debug" -> core: Starting RSS Guard 4.2.7. time=" 0.078" type="debug" -> core: Instantiated class 'Application'. time=" 0.078" type="debug" -> core: Starting to load active localization. Desired localization is 'xx_XX'. time=" 0.079" type="warning" -> core: Application localization 'xx_XX' was not loaded. Loading 'en_US' instead. time=" 0.079" type="warning" -> core: Qt localization 'en_US' WAS NOT loaded successfully. time=" 0.082" type="debug" -> database: SQLite database connection 'MessagesModel' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.084" type="debug" -> message-model: Repopulated model, SQL statement is now: 'SELECT Messages.id, Messages.is_read, Messages.is_important, Messages.is_deleted, Messages.is_pdeleted, Messages.feed, Messages.title, Messages.url, Messages.author, Messages.date_created, Messages.contents, Messages.enclosures, Messages.score, Messages.account_id, Messages.custom_id, Messages.custom_hash, Feeds.title, CASE WHEN length(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Labels.id IN (SELECT LabelsInMessages.label FROM LabelsInMessages WHERE LabelsInMessages.account_id = Messages.account_id AND LabelsInMessages.message = Messages.custom_id)) as msg_labels FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id WHERE 0 > 1;'. time=" 0.085" type="debug" -> core: Auto-download timer started with interval 10000 ms. time=" 0.085" type="debug" -> core: Creating FeedDownloader singleton. time=" 0.087" type="debug" -> gui: Creating main application form in thread: '0x5cec'. time=" 0.095" type="debug" -> gui: Current row changed - proxy 'QModelIndex(-1,-1,0x0,QObject(0x0))', source 'QModelIndex(-1,-1,0x0,QObject(0x0))'. time=" 0.101" type="warning" -> network: Using application-wide proxy. time=" 0.101" type="warning" -> network: Used proxy address: '127.0.0.1', type: '1'. time=" 0.101" type="debug" -> network: Settings of BaseNetworkAccessManager loaded. time=" 0.102" type="warning" -> network: Using application-wide proxy. time=" 0.103" type="warning" -> network: Used proxy address: '127.0.0.1', type: '1'. time=" 0.103" type="debug" -> network: Settings of BaseNetworkAccessManager loaded. time=" 0.109" type="warning" -> network: Using application-wide proxy. time=" 0.109" type="warning" -> network: Used proxy address: '127.0.0.1', type: '1'. time=" 0.109" type="debug" -> network: Settings of BaseNetworkAccessManager loaded. time=" 0.123" type="debug" -> gui: Creating tray icon menu. time=" 0.124" type="debug" -> CTRL is NOT pressed while sorting articles - sorting with standard mode. time=" 0.124" type="debug" -> message-model: Repopulated model, SQL statement is now: 'SELECT Messages.id, Messages.is_read, Messages.is_important, Messages.is_deleted, Messages.is_pdeleted, Messages.feed, Messages.title, Messages.url, Messages.author, Messages.date_created, Messages.contents, Messages.enclosures, Messages.score, Messages.account_id, Messages.custom_id, Messages.custom_hash, Feeds.title, CASE WHEN length(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Labels.id IN (SELECT LabelsInMessages.label FROM LabelsInMessages WHERE LabelsInMessages.account_id = Messages.account_id AND LabelsInMessages.message = Messages.custom_id)) as msg_labels FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id WHERE 0 > 1 ORDER BY Messages.id DESC;'. time=" 0.124" type="debug" -> gui: Reloading of msg selections took 1 miliseconds. time=" 0.159" type="debug" -> CTRL is NOT pressed while sorting articles - sorting with standard mode. time=" 0.159" type="debug" -> message-model: Repopulated model, SQL statement is now: 'SELECT Messages.id, Messages.is_read, Messages.is_important, Messages.is_deleted, Messages.is_pdeleted, Messages.feed, Messages.title, Messages.url, Messages.author, Messages.date_created, Messages.contents, Messages.enclosures, Messages.score, Messages.account_id, Messages.custom_id, Messages.custom_hash, Feeds.title, CASE WHEN length(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Labels.id IN (SELECT LabelsInMessages.label FROM LabelsInMessages WHERE LabelsInMessages.account_id = Messages.account_id AND LabelsInMessages.message = Messages.custom_id)) as msg_labels FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id WHERE 0 > 1 ORDER BY Messages.date_created DESC, Messages.id DESC;'. time=" 0.161" type="debug" -> core: Showing the main window when the application is starting. time=" 0.177" type="debug" -> database: SQLite database connection 'FeedReader' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.178" type="debug" -> database: SQLite database connection 'FeedlyEntryPoint' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.180" type="debug" -> database: SQLite database connection 'GmailEntryPoint' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.181" type="debug" -> database: SQLite database connection 'GreaderEntryPoint' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.182" type="debug" -> database: SQLite database connection 'OwnCloudServiceEntryPoint' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.182" type="debug" -> database: SQLite database connection 'StandardServiceEntryPoint' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.183" type="debug" -> core: Filter accepts row 'John Doe (RSS/ATOM/JSON)' and filter result is: 'true'. time=" 0.184" type="debug" -> database: SQLite database connection 'StandardServiceRoot' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.184" type="debug" -> core: Custom ID of feed when loading from DB is '1'. time=" 0.184" type="debug" -> core: Custom ID of feed when loading from DB is '2'. time=" 0.185" type="debug" -> core: Custom ID of feed when loading from DB is '3'. time=" 0.185" type="debug" -> core: Custom ID of feed when loading from DB is '4'. time=" 0.185" type="debug" -> core: Custom ID of feed when loading from DB is '5'. time=" 0.185" type="debug" -> core: Custom ID of feed when loading from DB is '6'. time=" 0.185" type="debug" -> core: Custom ID of feed when loading from DB is '7'. time=" 0.185" type="debug" -> core: Custom ID of feed when loading from DB is '8'. time=" 0.186" type="debug" -> core: Custom ID of feed when loading from DB is '9'. time=" 0.186" type="debug" -> core: Custom ID of feed when loading from DB is '10'. time=" 0.186" type="debug" -> core: Custom ID of feed when loading from DB is '11'. time=" 0.186" type="debug" -> core: Custom ID of feed when loading from DB is '12'. time=" 0.186" type="debug" -> core: Custom ID of feed when loading from DB is '13'. time=" 0.186" type="debug" -> core: Custom ID of feed when loading from DB is '14'. time=" 0.186" type="debug" -> core: Custom ID of feed when loading from DB is '15'. time=" 0.186" type="debug" -> core: Custom ID of feed when loading from DB is '16'. time=" 0.187" type="debug" -> core: Custom ID of feed when loading from DB is '17'. time=" 0.187" type="debug" -> core: Custom ID of feed when loading from DB is '18'. time=" 0.187" type="debug" -> core: Custom ID of feed when loading from DB is '19'. time=" 0.187" type="debug" -> core: Custom ID of feed when loading from DB is '20'. time=" 0.187" type="debug" -> core: Custom ID of feed when loading from DB is '21'. time=" 0.187" type="debug" -> core: Custom ID of feed when loading from DB is '22'. time=" 0.187" type="debug" -> core: Custom ID of feed when loading from DB is '23'. time=" 0.188" type="debug" -> core: Custom ID of feed when loading from DB is '24'. time=" 0.188" type="debug" -> core: Custom ID of feed when loading from DB is '25'. time=" 0.188" type="debug" -> core: Custom ID of feed when loading from DB is '26'. time=" 0.188" type="debug" -> core: Custom ID of feed when loading from DB is '27'. time=" 0.188" type="debug" -> core: Custom ID of feed when loading from DB is '28'. time=" 0.188" type="debug" -> core: Custom ID of feed when loading from DB is '29'. time=" 0.189" type="debug" -> core: Custom ID of feed when loading from DB is '30'. time=" 0.189" type="debug" -> core: Custom ID of feed when loading from DB is '31'. time=" 0.189" type="debug" -> core: Custom ID of feed when loading from DB is '32'. time=" 0.190" type="debug" -> core: Custom ID of feed when loading from DB is '33'. time=" 0.190" type="debug" -> core: Custom ID of feed when loading from DB is '34'. time=" 0.190" type="debug" -> core: Custom ID of feed when loading from DB is '35'. time=" 0.191" type="debug" -> core: Custom ID of feed when loading from DB is '36'. time=" 0.191" type="debug" -> core: Custom ID of feed when loading from DB is '37'. time=" 0.191" type="debug" -> core: Custom ID of feed when loading from DB is '38'. time=" 0.191" type="debug" -> core: Custom ID of feed when loading from DB is '39'. time=" 0.191" type="debug" -> core: Custom ID of feed when loading from DB is '40'. time=" 0.192" type="debug" -> core: Custom ID of feed when loading from DB is '41'. time=" 0.192" type="debug" -> core: Custom ID of feed when loading from DB is '42'. time=" 0.192" type="debug" -> core: Custom ID of feed when loading from DB is '43'. time=" 0.192" type="debug" -> core: Custom ID of feed when loading from DB is '44'. time=" 0.193" type="debug" -> core: Custom ID of feed when loading from DB is '45'. time=" 0.193" type="debug" -> core: Custom ID of feed when loading from DB is '46'. time=" 0.194" type="debug" -> core: Custom ID of feed when loading from DB is '47'. time=" 0.194" type="debug" -> core: Custom ID of feed when loading from DB is '48'. time=" 0.195" type="debug" -> core: Custom ID of feed when loading from DB is '49'. time=" 0.195" type="debug" -> core: Custom ID of feed when loading from DB is '50'. time=" 0.195" type="debug" -> core: Custom ID of feed when loading from DB is '51'. time=" 0.195" type="debug" -> core: Custom ID of feed when loading from DB is '52'. time=" 0.195" type="debug" -> core: Custom ID of feed when loading from DB is '53'. time=" 0.196" type="debug" -> database: SQLite database connection 'RecycleBin' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.200" type="debug" -> database: SQLite database connection 'ImportantNode' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.204" type="debug" -> database: SQLite database connection 'RootItem' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.208" type="debug" -> database: SQLite connection 'StandardServiceRoot' is already active. time=" 0.208" type="debug" -> database: SQLite database connection 'StandardServiceRoot' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.212" type="debug" -> database: SQLite database connection 'TtRssServiceEntryPoint' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 0.213" type="debug" -> gui: User wants to have tray icon. time=" 0.213" type="debug" -> gui: Tray icon is available, showing now. time=" 0.215" type="debug" -> gui: Creating SystemTrayIcon instance. time=" 0.221" type="debug" -> gui: Showing tray icon immediately. time=" 0.231" type="debug" -> gui: Tray icon displayed. time=" 0.231" type="debug" -> gui: Feed list item expanded - John Doe (RSS/ATOM/JSON) time=" 0.231" type="debug" -> core: Filter accepts row 'Recycle bin' and filter result is: 'true'. time=" 0.231" type="debug" -> core: Filter accepts row 'Important articles' and filter result is: 'true'. time=" 0.232" type="debug" -> core: Filter accepts row 'Unread articles' and filter result is: 'true'. time=" 0.232" type="debug" -> core: Filter accepts row 'Labels' and filter result is: 'true'. time=" 0.234" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 0.234" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 0.234" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 0.234" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 0.234" type="debug" -> core: Filter accepts row 'Red-xxx' and filter result is: 'false'. time=" 0.235" type="debug" -> core: Filter accepts row 'xxxxxxxx' and filter result is: 'false'. time=" 0.235" type="debug" -> core: Filter accepts row 'QuiteRSS' and filter result is: 'false'. time=" 0.235" type="debug" -> gui: Feed list item expanded - Labels time=" 0.238" type="debug" -> core: No execution message received from other app instances. time=" 0.248" type="debug" -> core: Filter accepts row 'Test (RSS/ATOM/JSON)' and filter result is: 'true'. time=" 0.250" type="debug" -> core: Filter accepts row 'Labels' and filter result is: 'true'. time=" 0.250" type="debug" -> core: Filter accepts row 'Important articles' and filter result is: 'true'. time=" 0.250" type="debug" -> core: Filter accepts row 'Unread articles' and filter result is: 'true'. time=" 0.250" type="debug" -> core: Filter accepts row 'Recycle bin' and filter result is: 'true'. time=" 0.250" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 0.250" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 0.250" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 0.251" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 0.251" type="debug" -> core: Filter accepts row 'Red-xxx' and filter result is: 'false'. time=" 0.251" type="debug" -> core: Filter accepts row 'xxxxxxxx' and filter result is: 'false'. time=" 0.261" type="debug" -> gui: Message splitter moved. time=" 1.073" type="warning" -> network: Using application-wide proxy. time=" 1.073" type="warning" -> network: Used proxy address: '127.0.0.1', type: '1'. time=" 1.074" type="debug" -> network: Settings of BaseNetworkAccessManager loaded. time=" 4.146" type="debug" -> CTRL is NOT pressed while sorting articles - sorting with standard mode. time=" 4.146" type="debug" -> Displaying messages from account: '1'. time=" 4.193" type="debug" -> message-model: Repopulated model, SQL statement is now: 'SELECT Messages.id, Messages.is_read, Messages.is_important, Messages.is_deleted, Messages.is_pdeleted, Messages.feed, Messages.title, Messages.url, Messages.author, Messages.date_created, Messages.contents, Messages.enclosures, Messages.score, Messages.account_id, Messages.custom_id, Messages.custom_hash, Feeds.title, CASE WHEN length(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Labels.id IN (SELECT LabelsInMessages.label FROM LabelsInMessages WHERE LabelsInMessages.account_id = Messages.account_id AND LabelsInMessages.message = Messages.custom_id)) as msg_labels FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id WHERE Messages.is_deleted = 0 AND Messages.is_pdeleted = 0 AND Messages.account_id = 1 ORDER BY Messages.date_created DESC, Messages.id DESC;'. time=" 4.203" type="debug" -> core: Filter accepts row 'John Doe (RSS/ATOM/JSON)' and filter result is: 'true'. time=" 4.205" type="debug" -> core: Filter accepts row 'Labels' and filter result is: 'true'. time=" 4.205" type="debug" -> core: Filter accepts row 'Important articles' and filter result is: 'true'. time=" 4.205" type="debug" -> core: Filter accepts row 'Unread articles' and filter result is: 'true'. time=" 4.205" type="debug" -> core: Filter accepts row 'Recycle bin' and filter result is: 'true'. time=" 4.206" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 4.206" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 4.206" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 4.206" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 4.206" type="debug" -> core: Filter accepts row 'Red-xxx' and filter result is: 'false'. time=" 4.206" type="debug" -> core: Filter accepts row 'xxxxx' and filter result is: 'false'. time=" 7.607" type="debug" -> database: SQLite database connection 'FormCategoryDetails' to file 'G:/Installed/RSSGuard/data4/database/database.db' seems to be established. time=" 7.608" type="debug" -> core: Filter accepts row 'John Doe (RSS/ATOM/JSON)' and filter result is: 'true'. time=" 7.608" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 7.609" type="debug" -> feed-model: There is request to reload feed model, reloading the 1 items individually. time=" 7.609" type="debug" -> core: Filter accepts row 'Red' and filter result is: 'false'. time=" 7.609" type="debug" -> core: Filter accepts row 'John Doe (RSS/ATOM/JSON)' and filter result is: 'true'. time=" 7.609" type="debug" -> core: Filter accepts row 'John Doe (RSS/ATOM/JSON)' and filter result is: 'true'. time=" 7.642" type="debug" -> gui: Destroying FormCategoryDetails instance. time=" 11.816" type="debug" -> gui: Main window's close event time=" 11.821" type="debug" -> gui: Main window's hide event time=" 11.827" type="debug" -> core: Cleaning up resources and saving application state. time=" 11.827" type="debug" -> core: Close lock was obtained safely. time=" 11.827" type="debug" -> core: Stopping StandardServiceRoot instance. time=" 11.827" type="debug" -> feed-downloader: Destroying FeedDownloader instance. time=" 11.839" type="debug" -> gui: Destroying FormMain instance. time=" 11.839" type="debug" -> gui: Destroying TabWidget instance. time=" 11.839" type="debug" -> gui: Destroying FeedMessageViewer instance. time=" 11.840" type="debug" -> gui: Destroying BaseToolBar instance. time=" 11.841" type="debug" -> network: Destroying Downloader instance. time=" 11.841" type="debug" -> network: Destroying SilentNetworkAccessManager instance. time=" 11.841" type="debug" -> network: Destroying Downloader instance. time=" 11.841" type="debug" -> network: Destroying SilentNetworkAccessManager instance. time=" 11.842" type="debug" -> gui: Destroying MessagesView instance. time=" 11.842" type="debug" -> gui: Destroying BaseToolBar instance. time=" 11.842" type="debug" -> gui: Destroying FeedsView instance. time=" 11.843" type="debug" -> gui: Destroying TabBar instance. time=" 11.843" type="debug" -> gui: Destroying StatusBar instance. time=" 11.843" type="debug" -> gui: Destroying SystemTrayIcon instance. time=" 11.848" type="debug" -> core: Destroying Application instance. time=" 11.848" type="debug" -> core: Destroying Mutex instance. time=" 11.852" type="debug" -> gui: Destroying IconFactory instance. time=" 11.852" type="debug" -> core: Destroying FeedReader instance. time=" 11.852" type="debug" -> feed-model: Destroying FeedsModel instance. time=" 11.853" type="debug" -> feed-model: Destroying FeedsProxyModel instance time=" 11.853" type="debug" -> message-model: Destroying MessagesModel instance. time=" 11.858" type="debug" -> message-model: Destroying MessagesProxyModel instance.

Operating system and version

martinrotter commented 1 year ago

As stated in log:

Filter accepts row 'Red' and filter result is: 'false'.

Perhaps you have enabled to display only "unread" nodes or somehow filtered in another way.

martinrotter commented 1 year ago

I checked and cannot reproduce.

starbuck3000 commented 1 year ago

Perhaps you have enabled to display only "unread" nodes or somehow filtered in another way.

I just relaunched the client and clicked the envelopes icons to select "no extra filtering", nothing changed. Then I looked into the menus and noticed there is a key shortcut "U", which toogles the display of feeds without unread items. Pressing "U" made all the missing categories appear for the first time...

The obvious explanation is that I have enabled this feature myself (I have no idea how/when) after finishing the import of an OPML file. I had been looking for visual clues in the interface that would let me suspect something was being hidden (I clicked all the "envelopes" icons to see if something was filtered), but found nothing.

I can consider this matter solved, you deserve a big thank you for your help!

martinrotter commented 1 year ago

You are right that there could be some kind of visual feedback to let users know that feed list is actually filtered.