Je ne veux pas rendre les choses trop complexes.
J’ai examiné une partie du code à ce sujet (merci à @tshenry pour le lien), et il ne semble pas que cela doive être aussi compliqué.
Les mentions de groupe sont actuellement déclenchées ici (lignes 78-80). La fonction expand_group_mentions() est un générateur chargé de produire les utilisateurs devant recevoir des notifications de mention de groupe (tout en respectant des règles comme SiteSetting.max_users_notified_per_group_mention).
Cela semble être un endroit naturel pour placer cette logique.
Dans la fonction create_notification, nous supprimons les notifications pour toute personne ayant déjà reçu une notification du même type. C’est pourquoi la modification d’un message contenant une mention de groupe déclenche une notification pour les nouveaux membres du groupe : une notification est en fait générée pour tous les utilisateurs du groupe, mais elle est ensuite supprimée pour les personnes qui l’ont déjà reçue.
Je suggère quelque chose de similaire, en mettant à jour la fonction expand_group_mentions() pour filtrer également les groupes qui ont un enregistrement dans la table group_mentions.
Quelque chose comme (veuillez excuser mon manque de connaissance de la syntaxe Ruby) :
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
# Ajouter une vérification pour les groupes déjà mentionnés
next if GroupMentions.where(group_id: group.id, post_id: post.id).length > 0
yield group, group.users
end
end
Cela ne résout pas le problème de l’avertissement JIT, cependant.
J’essaie d’aider à résoudre ce problème, faites-moi savoir si je suis simplement ennuyeux… ![]()