Newer
Older
from django.db.models import Q
from aleksis.apps.matrix.models import MatrixProfile, MatrixRoom
from aleksis.core.models import Group
from .tasks import sync_room
def post_save_matrix_signal(sender, instance, created, **kwargs):
"""Sync Matrix room after changing a group/Matrix room/Matrix profile."""
rooms = []
if isinstance(instance, Group):
rooms = MatrixRoom.objects.filter(group=instance)
elif isinstance(instance, MatrixRoom) and instance.change_tracker.has_changed("group_id"):
rooms = [instance]
elif isinstance(instance, MatrixProfile) and instance.change_tracker.changed():
rooms = MatrixRoom.objects.filter(
Q(group__members=instance.person) | Q(group__owners=instance.person)
).distinct()
for room in rooms:
sync_room.delay(room.pk)
def m2m_changed_matrix_signal(sender, instance, action, reverse, model, pk_set, **kwargs):
"""Sync Matrix room after changing group member- and ownerships."""
if action not in ("post_add", "post_remove", "post_clear"):
return
if isinstance(instance, Group):
groups = [instance]
else:
groups = Group.objects.filter(Q(members=instance) | Q(owners=instance)).distinct()
for room in MatrixRoom.objects.filter(group__in=groups):
sync_room.delay(room.pk)