diff --git a/autotests/receivetypingnotificationmanagertest.cpp b/autotests/receivetypingnotificationmanagertest.cpp --- a/autotests/receivetypingnotificationmanagertest.cpp +++ b/autotests/receivetypingnotificationmanagertest.cpp @@ -59,26 +59,34 @@ QCOMPARE(spy.count(), 1); manager.insertTypingNotification(QStringLiteral("room2"), QStringLiteral("user3"), true); - QCOMPARE(manager.typingNotification(QStringLiteral("room2")), QStringLiteral("user2 is typing..., user3 is typing...")); + QCOMPARE(manager.typingNotification(QStringLiteral("room2")), QStringLiteral("user2 and user3 are typing...")); QCOMPARE(spy.count(), 2); + manager.insertTypingNotification(QStringLiteral("room2"), QStringLiteral("user1"), true); + QCOMPARE(manager.typingNotification(QStringLiteral("room2")), QStringLiteral("user2, user3 and user1 are typing...")); + QCOMPARE(spy.count(), 3); + //Remove typing manager.insertTypingNotification(QStringLiteral("room2"), QStringLiteral("user3"), false); + QCOMPARE(manager.typingNotification(QStringLiteral("room2")), QStringLiteral("user2 and user1 are typing...")); + QCOMPARE(spy.count(), 4); + + manager.insertTypingNotification(QStringLiteral("room2"), QStringLiteral("user1"), false); QCOMPARE(manager.typingNotification(QStringLiteral("room2")), QStringLiteral("user2 is typing...")); - QCOMPARE(spy.count(), 3); + QCOMPARE(spy.count(), 5); manager.insertTypingNotification(QStringLiteral("room2"), QStringLiteral("user3"), false); QCOMPARE(manager.typingNotification(QStringLiteral("room2")), QStringLiteral("user2 is typing...")); - QCOMPARE(spy.count(), 3); + QCOMPARE(spy.count(), 5); manager.insertTypingNotification(QStringLiteral("room2"), QStringLiteral("user2"), false); QVERIFY(manager.typingNotification(QStringLiteral("room2")).isEmpty()); - QCOMPARE(spy.count(), 4); + QCOMPARE(spy.count(), 6); //No user/roomId manager.insertTypingNotification(QStringLiteral("room2"), QStringLiteral("user2"), false); QVERIFY(manager.typingNotification(QStringLiteral("room2")).isEmpty()); - QCOMPARE(spy.count(), 4); + QCOMPARE(spy.count(), 6); spy.clear(); QVERIFY(manager.typingNotification(QStringLiteral("room5")).isEmpty()); diff --git a/src/ruqolacore/receivetypingnotificationmanager.cpp b/src/ruqolacore/receivetypingnotificationmanager.cpp --- a/src/ruqolacore/receivetypingnotificationmanager.cpp +++ b/src/ruqolacore/receivetypingnotificationmanager.cpp @@ -66,14 +66,24 @@ QString ReceiveTypingNotificationManager::generateNotification(const QStringList &userNames) const { - QString notificationStr; - for (const QString &user : userNames) { - if (!notificationStr.isEmpty()) { - notificationStr += QLatin1String(", "); + if (userNames.isEmpty()) { + return QString(); + } else if (userNames.count() == 1) { + return i18n("%1 is typing...", userNames[0]); + } else { + QString notificationStr; + for (int i = 0; i < userNames.count(); ++i) { + const QString user = userNames.at(i); + if (i == 0) { + notificationStr = user; + } else if (i < userNames.count() - 1) { + notificationStr = i18n("%1, %2", notificationStr, user); + } else { + notificationStr = i18n("%1 and %2", notificationStr, user); + } } - notificationStr += i18n("%1 is typing...", user); + return i18n("%1 are typing...", notificationStr); } - return notificationStr; } QString ReceiveTypingNotificationManager::typingNotification(const QString &roomId) const