From d7c4d03f7d583767bc23406579e11bcc884dec18 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Fri, 28 Aug 2026 20:46:44 +0200 Subject: feat: count a card's messages, not its replies The expander pill read "N replies" while the row stood for the conversation: a thread of one message and four replies said "4 replies" over rows that listed all five messages. The user's model is messages, so it now reads "5 messages". A thread of one still shows nothing: its row is the message, the pill is the expander, and there is nothing to open. ReplyCountRole becomes MessageCountRole and CardLayout::Input::replyCount becomes messageCount, so the names stop lying about what they carry. The label is now translated under a CardLayout context, with Italian "messaggio"/"messaggi" shipped; %n's untranslated fallback on this Qt does not pluralise, so the two forms are separate entries. The card's densest geometry test needs 460px rather than 400 now that the pill is one character wider. --- src/types.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/types.h') diff --git a/src/types.h b/src/types.h index 8e24cd1..ee2627f 100644 --- a/src/types.h +++ b/src/types.h @@ -190,9 +190,9 @@ struct MessageNode QStringList tags; QString filePath; - /// Reply depth within the thread. 0 is the thread's first message, which - /// occupies the ROOT row rather than a child row: the user's model is - /// "N replies", so a thread of 7 shows 1 root and 6 descendants. + /// Reply depth within the thread. 0 is the thread's first message: since + /// item 177 a conversation lists it as a child row too, but it carries no + /// nesting. 1 is a direct reply. int depth = 0; bool isUnread() const { return tags.contains(QStringLiteral("unread")); } -- cgit v1.2.3