Ich möchte nichts zu komplex machen.
Ich habe mir etwas von dem Code dafür angesehen (danke an @tshenry für den Link), und es scheint nicht so kompliziert zu sein.
Die Gruppen-Erwähnungen werden aktuell hier (L78–80) ausgelöst. Die Funktion expand_group_mentions() ist ein Generator, der die Benutzer ausgibt, die Gruppen-Erwähnungs-Benachrichtigungen erhalten sollen (unter Beachtung von Richtlinien wie SiteSetting.max_users_notified_per_group_mention).
Das scheint ein natürlicher Ort zu sein, um diese Logik unterzubringen.
In der Funktion create_notification unterdrücken wir Benachrichtigungen für alle, die bereits eine Benachrichtigung desselben Typs erhalten haben. Deshalb löst das Bearbeiten eines Beitrags mit einer Gruppen-Erwähnung eine Benachrichtigung für neue Gruppenmitglieder aus – es wird zwar eine Benachrichtigung für alle Benutzer der Gruppe generiert, aber für Personen, die die Benachrichtigung bereits erhalten haben, unterdrückt.
Ich schlage etwas Ähnliches vor, indem ich die Funktion expand_group_mentions() so anpasse, dass sie auch Gruppen herausfiltert, die bereits einen Eintrag in der Tabelle group_mentions haben.
Etwas in der Art (bitte entschuldigt mein mangelndes Wissen über Ruby-Syntax):
def expand_group_mentions(groups, post)
return unless post.user && groups
Group.mentionable(post.user, include_public: false).where(id: groups.map(&:id)).each do |group|
next if group.user_count >= SiteSetting.max_users_notified_per_group_mention
# Prüfen, ob die Gruppe bereits erwähnt wurde
next if GroupMentions.where(group_id: group.id, post_id: post.id).length > 0
yield group, group.users
end
end
Das löst jedoch das JIT-Warnungsproblem nicht.
Ich versuche, dabei zu helfen, das Problem zu lösen. Sagt mir gerne, ob ich nur nervig bin… 