diff --git a/aleksis/apps/matrix/apps.py b/aleksis/apps/matrix/apps.py index 1c60d9e509f7e8e9af819f274130b8001a473be1..ac659ebee9baf82d72f7597e070489bc8c14eb3d 100644 --- a/aleksis/apps/matrix/apps.py +++ b/aleksis/apps/matrix/apps.py @@ -1,3 +1,5 @@ +from django.db.models.signals import post_save + from aleksis.core.util.apps import AppConfig @@ -11,3 +13,10 @@ class DefaultConfig(AppConfig): } licence = "EUPL-1.2+" copyright_info = (([2021, 2022], "Jonathan Weth", "dev@jonathanweth.de"),) + + def ready(self): + from aleksis.core.models import Group + + from .signals import post_save_matrix_signal + + post_save.connect(post_save_matrix_signal, sender=Group) diff --git a/aleksis/apps/matrix/signals.py b/aleksis/apps/matrix/signals.py new file mode 100644 index 0000000000000000000000000000000000000000..cf1296fec2392aab824ba0cdda75ccff11500408 --- /dev/null +++ b/aleksis/apps/matrix/signals.py @@ -0,0 +1,12 @@ +from aleksis.apps.matrix.models import MatrixRoom + +from .tasks import sync_room + + +def post_save_matrix_signal(sender, instance, created, **kwargs): + """Sync Matrix room after changing a group.""" + if created: + return + + for room in MatrixRoom.objects.filter(group=instance): + sync_room.delay(room.pk) diff --git a/aleksis/apps/matrix/tasks.py b/aleksis/apps/matrix/tasks.py index c7346d8c5eb632fd7255e678cd5ca6aeb4c18075..f61f53b92c69a36505e257a21a61b5077696371c 100644 --- a/aleksis/apps/matrix/tasks.py +++ b/aleksis/apps/matrix/tasks.py @@ -1,3 +1,4 @@ +from datetime import timedelta from typing import Sequence from aleksis.apps.matrix.models import MatrixRoom @@ -25,3 +26,11 @@ def provision_group_in_matrix(pk: int): """Provision provided group in Matrix.""" group = Group.objects.get(pk=pk) group._provision_in_matrix() + + +@app.task(run_every=timedelta(days=1)) +def sync_rooms(): + """Synchronise all Matrix rooms.""" + rooms = MatrixRoom.objects.all() + for room in rooms: + room.sync()