Forráskód Böngészése

Remove seen Talk notificatios from Tray window.

Signed-off-by: alex-z <blackslayer4@gmail.com>
alex-z 2 éve
szülő
commit
6843441226

+ 9 - 0
src/gui/tray/activitylistmodel.cpp

@@ -640,6 +640,15 @@ void ActivityListModel::removeActivityFromActivityList(const Activity &activity)
     }
 }
 
+void ActivityListModel::checkAndRemoveSeenActivities(const OCC::ActivityList &newActivities)
+{
+    for (const auto &activity : _finalList) {
+        if (activity._objectType == QStringLiteral("chat") && !newActivities.contains(activity)) {
+            removeActivityFromActivityList(activity);
+        }
+    }
+}
+
 void ActivityListModel::slotTriggerDefaultAction(const int activityIndex)
 {
     if (activityIndex < 0 || activityIndex >= _finalList.size()) {

+ 2 - 0
src/gui/tray/activitylistmodel.h

@@ -134,6 +134,8 @@ public slots:
     void removeActivityFromActivityList(int row);
     void removeActivityFromActivityList(const OCC::Activity &activity);
 
+    void checkAndRemoveSeenActivities(const OCC::ActivityList &newActivities);
+
     void setAccountState(OCC::AccountState *state);
     void setReplyMessageSent(const int activityIndex, const QString &message);
     void setCurrentItem(const int currentItem);

+ 8 - 0
src/gui/tray/usermodel.cpp

@@ -221,13 +221,21 @@ void User::slotBuildNotificationDisplay(const ActivityList &list)
         return;
     }
 
+    auto chatNotificationsReceivedCount = 0;
+
     for(const auto &activity : qAsConst(toNotifyList)) {
         if (activity._objectType == QStringLiteral("chat")) {
+            ++chatNotificationsReceivedCount;
             showDesktopTalkNotification(activity);
         } else {
             showDesktopNotification(activity);
         }
     }
+
+    if (chatNotificationsReceivedCount < _lastChatNotificationsReceivedCount) {
+        _activityModel->checkAndRemoveSeenActivities(toNotifyList);
+    }
+    _lastChatNotificationsReceivedCount = chatNotificationsReceivedCount;
 }
 
 void User::slotBuildIncomingCallDialogs(const ActivityList &list)

+ 2 - 0
src/gui/tray/usermodel.h

@@ -182,6 +182,8 @@ private:
     // number of currently running notification requests. If non zero,
     // no query for notifications is started.
     int _notificationRequestsRunning = 0;
+
+    int _lastChatNotificationsReceivedCount = 0;
 };
 
 class UserModel : public QAbstractListModel