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.64k stars 125 forks source link

[BUG]: Assigned Labels column in the GUI not updated when a Label is added to an article. #1212

Open 72757373656c6c opened 1 year ago

72757373656c6c commented 1 year ago

Brief description of the issue

The GUI's Assigned Labels column is not immediately updated when a label is assigned to an article.

How to reproduce the bug?

  1. Create a label.
  2. Add the field "Assigned Labels" to the Article list view.
  3. Click on a Feed (i.e., Feed_A)
  4. Assign the label to an article, either by right-clicking > Labels or clicking the icon in the Article Viewer. Note: The Assigned Labels column does not reflect this change (yet).
  5. Click a different feed, and now come back to Feed_A and review the articles. The Assigned Labels column now reflects the change.

What was the expected result?

When I assigned the Label to the article, I expected to see the Label's name in the column "Assigned Labels".

What actually happened?

The "Assigned Labels" column was not updated in the GUI until I went to another feed and then came back.

Debug log

time="     0.093" type="debug" -> core: Initializing settings in '~/.config/RSS Guard 4/config/config.ini' (non-portable way).
time="     0.093" type="debug" -> core: Starting to load active localization. Desired localization is 'en_US'.
time="     0.094" type="debug" -> core: Application localization 'en_US' loaded successfully, specifically sublocalization 'en_US' was loaded.
time="     0.094" type="warning" -> core: Qt localization 'en_US' WAS NOT loaded successfully.
time="     0.095" type="warning" -> network: Using off-the-record WebEngine profile.
time="     0.186" type="debug" -> database: File-based SQLite database connection 'DatabaseFactory' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.186" type="debug" -> database: File-based SQLite database has version '7'.
time="     0.186" type="debug" -> gui: Available icon theme paths: QList(~/.local/share/icons, /usr/local/share/icons, /usr/share/icons, :/icons, :/graphics, ~/.config/RSS Guard 4/icons, /usr/bin/icons)
time="     0.187" type="debug" -> gui: Icon theme 'Papirus-Maia' already loaded.
time="     0.187" type="debug" -> gui: Found path of base skin: ':/skins/nudus-base'.
time="     0.187" type="debug" -> gui: Local file ':/skins/nudus-dark/html_wrapper.html' exists, using it for the skin.
time="     0.187" type="debug" -> gui: Local file ':/skins/nudus-dark/html_style.css' exists, using it for the skin.
time="     0.187" type="debug" -> gui: Trying to load base file ':/skins/nudus-base/html_enclosure_image.html' for the skin.
time="     0.187" type="debug" -> gui: Trying to load base file ':/skins/nudus-base/html_single_message.html' for the skin.
time="     0.187" type="debug" -> gui: Trying to load base file ':/skins/nudus-base/html_enclosure_every.html' for the skin.
time="     0.187" type="debug" -> gui: Local file ':/skins/nudus-dark/qt_style.qss' exists, using it for the skin.
time="     0.187" type="debug" -> gui: Trying to load base file ':/skins/nudus-base/html_adblocked.html' for the skin.
time="     0.187" type="debug" -> gui: OS defines color scheme: 'Qt::ColorScheme::Unknown'.
time="     0.187" type="debug" -> gui: Setting style: 'Fusion'.
time="     0.189" type="debug" -> gui: Activating alternative palette.
time="     0.189" type="debug" -> gui: Skin 'nudus-dark' loaded.
time="     0.189" type="debug" -> core: Loading user CSS style file '~/.config/RSS Guard 4/web/user-styles.css'.
time="     0.189" type="debug" -> network: Persistent web data storage path: '~/.config/RSS Guard 4/web/storage'.
time="     0.189" type="debug" -> network: Disabling application-wide proxy completely.
time="     0.189" type="debug" -> core: SQLite version: '3.43.1'.
time="     0.197" type="debug" -> core: OpenSSL version: 'OpenSSL 3.1.4 24 Oct 2023'.
time="     0.197" type="debug" -> core: OpenSSL supported: 'true'.
time="     0.197" type="debug" -> core: Global thread pool has 8 threads.
time="     0.197" type="debug" -> core: Instantiated class  'Application'.
time="     0.199" type="debug" -> database: SQLite database connection 'MessagesModel' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.207" 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, Feeds.is_rtl, CASE WHEN LENGTH(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE "%." || Labels.custom_id || ".%") as msg_labels, Messages.labels FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id WHERE 0 > 1;'.
time="     0.207" type="debug" -> core: Auto-download timer started with interval 10000 ms.
time="     0.207" type="debug" -> core: Creating FeedDownloader singleton.
time="     0.207" type="debug" -> gui: Creating main application form in thread: '0x7f8b84eb6040'.
time="     0.210" type="debug" -> gui: Current row changed - proxy 'QModelIndex(-1,-1,0x0,QObject(0x0))', source 'QModelIndex(-1,-1,0x0,QObject(0x0))'.
time="     0.213" type="debug" -> network: Settings of BaseNetworkAccessManager loaded.
time="     0.218" type="debug" -> doh set to ""  --  SystemOnly
time="     0.231" type="debug" -> gui: Creating tray icon menu.
time="     0.310" type="debug" -> core: OS asked application to save its state.
time="     0.311" type="debug" -> CTRL is NOT pressed while sorting articles - sorting with standard mode.
time="     0.311" type="debug" -> CTRL is NOT pressed while sorting articles - sorting with standard mode.
time="     0.312" type="debug" -> CTRL is NOT pressed while sorting articles - sorting with standard mode.
time="     0.312" 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, Feeds.is_rtl, CASE WHEN LENGTH(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE "%." || Labels.custom_id || ".%") as msg_labels, Messages.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.is_important DESC, Messages.id DESC;'.
time="     0.317" type="debug" -> core: Showing the main window when the application is starting.
time="     0.324" type="debug" -> database: SQLite database connection 'FeedReader' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.324" type="debug" -> database: SQLite database connection 'FeedlyEntryPoint' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.325" type="debug" -> database: SQLite database connection 'GmailEntryPoint' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.325" type="debug" -> database: SQLite database connection 'GreaderEntryPoint' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.325" type="debug" -> database: SQLite database connection 'OwnCloudServiceEntryPoint' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.326" type="debug" -> database: SQLite database connection 'StandardServiceEntryPoint' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.327" type="debug" -> database: SQLite database connection 'StandardServiceRoot' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.328" type="debug" -> core: Custom ID of feed when loading from DB is '1'.
time="     0.328" type="debug" -> core: Custom ID of feed when loading from DB is '2'.
time="     0.328" type="debug" -> core: Custom ID of feed when loading from DB is '3'.

...skipping...

time="     0.363" type="debug" -> core: Custom ID of feed when loading from DB is '477'.
time="     0.364" type="debug" -> database: SQLite database connection 'RecycleBin' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.369" type="debug" -> database: SQLite database connection 'ImportantNode' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.371" type="debug" -> database: SQLite database connection 'UnreadNode' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.374" type="debug" -> database: SQLite database connection 'LabelsNode' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.400" type="debug" -> database: SQLite connection 'StandardServiceRoot' is already active.
time="     0.400" type="debug" -> database: SQLite database connection 'StandardServiceRoot' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.408" type="debug" -> database: SQLite database connection 'TtRssServiceEntryPoint' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="     0.409" type="debug" -> gui: Feed list item expanded - Feeds (RSS/ATOM/JSON)
time="     0.409" type="debug" -> gui: Feed list item expanded - Labels
time="     0.409" type="debug" -> gui: Feed list item expanded - ===============Linux
time="     0.409" type="debug" -> gui: Feed list item expanded - ================People
time="     0.409" type="debug" -> gui: Feed list item expanded - Graveyard
time="     0.409" type="debug" -> gui: Feed list item expanded - Linux Kernel
time="     0.409" type="debug" -> gui: Feed list item expanded - Distributions

... skipping ...

time="     0.411" type="debug" -> core: No execution message received from other app instances.
time="     0.580" type="debug" -> gui: Hovered link: 'QUrl()'.
time="     6.042" type="debug" -> CTRL is NOT pressed while sorting articles - sorting with standard mode.
time="     6.043" type="debug" -> core: Displaying messages from feeds IDs: ''445'' and URLs: 'https://www.archlinux.org/feeds/news/'.
time="     6.049" 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, Feeds.is_rtl, CASE WHEN LENGTH(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE "%." || Labels.custom_id || ".%") as msg_labels, Messages.labels FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id WHERE Feeds.custom_id IN ('445') AND Messages.is_deleted = 0 AND Messages.is_pdeleted = 0 AND Messages.account_id = 1 ORDER BY Messages.date_created DESC, Messages.is_important DESC, Messages.id DESC;'.
time="    13.250" type="debug" -> gui: Message list got focus with reason 'Qt::MouseFocusReason'.
time="    13.250" type="debug" -> gui: Current row changed - proxy 'QModelIndex(1,6,0x5567e898f830,MessagesProxyModel(0x5567e8bc0970, name = MessagesProxyModel))', source 'QModelIndex(1,6,0x0,MessagesModel(0x5567e88e1e40))'.
time="    13.367" type="debug" -> gui: Hovered link: 'QUrl()'.
time="    16.065" type="debug" -> database: SQLite database connection 'Label' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="    16.085" type="debug" -> database: SQLite connection 'Label' is already active.
time="    16.085" type="debug" -> database: SQLite database connection 'Label' to file '~/.config/RSS Guard 4/database/database.db' seems to be established.
time="    16.089" type="debug" -> feed-model: There is request to reload feed model, reloading the 1 items individually.
time="    48.059" type="debug" -> CTRL is NOT pressed while sorting articles - sorting with standard mode.
time="    48.059" type="debug" -> core: Displaying messages from feeds IDs: ''446'' and URLs: 'https://bugs.archlinux.org/feed.php?feed_type=rss2'.
time="    48.066" 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, Feeds.is_rtl, CASE WHEN LENGTH(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE "%." || Labels.custom_id || ".%") as msg_labels, Messages.labels FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id WHERE Feeds.custom_id IN ('446') AND Messages.is_deleted = 0 AND Messages.is_pdeleted = 0 AND Messages.account_id = 1 ORDER BY Messages.date_created DESC, Messages.is_important DESC, Messages.id DESC;'.
time="    51.083" type="debug" -> CTRL is NOT pressed while sorting articles - sorting with standard mode.
time="    51.083" type="debug" -> core: Displaying messages from feeds IDs: ''445'' and URLs: 'https://www.archlinux.org/feeds/news/'.
time="    51.090" 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, Feeds.is_rtl, CASE WHEN LENGTH(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE "%." || Labels.custom_id || ".%") as msg_labels, Messages.labels FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id WHERE Feeds.custom_id IN ('445') AND Messages.is_deleted = 0 AND Messages.is_pdeleted = 0 AND Messages.account_id = 1 ORDER BY Messages.date_created DESC, Messages.is_important DESC, Messages.id DESC;'.

 ... blank lines added...

time="    89.211" type="debug" -> gui: Main window's close event
time="    89.211" type="debug" -> gui: Main window's hide event
time="    89.217" type="debug" -> core: Cleaning up resources and saving application state.
time="    89.217" type="debug" -> core: Close lock was obtained safely.
time="    89.217" type="debug" -> core: Stopping StandardServiceRoot instance.
time="    89.217" type="debug" -> feed-downloader: Destroying FeedDownloader instance.
time="    89.278" type="debug" -> gui: Destroying FormMain instance.
time="    89.279" type="debug" -> gui: Destroying TabWidget instance.
time="    89.279" type="debug" -> gui: Destroying FeedMessageViewer instance.
time="    89.280" type="debug" -> gui: Destroying BaseToolBar instance.
time="    89.281" type="debug" -> network: Destroying Downloader instance.
time="    89.281" type="debug" -> network: Destroying SilentNetworkAccessManager instance.
time="    89.288" type="debug" -> gui: Destroying MessagesView instance.
time="    89.288" type="debug" -> gui: Destroying BaseToolBar instance.
time="    89.288" type="debug" -> gui: Destroying FeedsView instance.
time="    89.289" type="debug" -> gui: Destroying TabBar instance.
time="    89.289" type="debug" -> gui: Destroying StatusBar instance.
time="    89.295" type="debug" -> core: Destroying Application instance.
time="    89.295" type="debug" -> core: Destroying Mutex instance.
time="    89.312" type="debug" -> gui: Destroying IconFactory instance.
time="    89.312" type="debug" -> core: Destroying FeedReader instance.
time="    89.312" type="debug" -> feed-model: Destroying FeedsModel instance.
time="    89.313" type="debug" -> feed-model: Destroying FeedsProxyModel instance
time="    89.313" type="debug" -> message-model: Destroying MessagesModel instance.
time="    89.325" type="debug" -> message-model: Destroying MessagesProxyModel instance.

Operating system and version

martinrotter commented 1 year ago

So far, this was meant to be a feature, there are performance reasons why this is not updated immediatelly. Simply re-select the feed and it should be allright.

72757373656c6c commented 1 year ago

It is unfortunate that there is no immediate user feedback that the label was added in the Article list view. I knew I selected a label, but it wasn't showing up. This was a different behavior from the Important column, which immediately showed an icon in the Article list and the icon in the Article Viewer was enabled.

You are correct, the label does appear if I select another feed and then come back to the original feed, and I also noticed that on the right click > Labels there is an indicator (dot) on the label icon.

Perhaps a documentation update like: When a label is added to an article, the Article List will reflect this change when the feed is reselected.