From 6e6218e69994e66b7df44ff3645e7c741ad143f1 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sun, 10 Apr 2022 16:05:10 +0200 Subject: [PATCH] Add tasks for syncing rooms periodically or after changes --- aleksis/apps/matrix/apps.py | 9 +++++++++ aleksis/apps/matrix/signals.py | 12 ++++++++++++ aleksis/apps/matrix/tasks.py | 9 +++++++++ 3 files changed, 30 insertions(+) create mode 100644 aleksis/apps/matrix/signals.py diff --git a/aleksis/apps/matrix/apps.py b/aleksis/apps/matrix/apps.py index 1c60d9e..ac659eb 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 0000000..cf1296f --- /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 c7346d8..f61f53b 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() -- GitLab