From 50f002fa73d74e5a8907cee38a32250886964792 Mon Sep 17 00:00:00 2001 From: petitminion Date: Sun, 15 May 2022 10:56:39 +0000 Subject: [PATCH] Create an scan Library celery task --- api/config/settings/common.py | 5 +++++ api/funkwhale_api/music/tasks.py | 17 +++++++++++++++++ .../changelog.d/scan_library_task.enhancement | 1 + 3 files changed, 23 insertions(+) create mode 100644 changes/changelog.d/scan_library_task.enhancement diff --git a/api/config/settings/common.py b/api/config/settings/common.py index d66b05a5a..82393fc5d 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -836,6 +836,11 @@ CELERY_BEAT_SCHEDULE = { ), "options": {"expires": 60 * 60}, }, + "music.library.schedule_remote_scan": { + "task": "music.library.schedule_scan", + "schedule": crontab(day_of_week="1", minute="0", hour="2"), + "options": {"expires": 60 * 60 * 24}, + }, } if env.bool("ADD_ALBUM_TAGS_FROM_TRACKS", default=True): diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index d21c2be20..51e17103a 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -79,6 +79,19 @@ def get_cover_from_fs(dir_path): return {"mimetype": m, "content": c.read()} +@celery.app.task(name="music.library.schedule_remote_scan") +def schedule_scan_for_all_remote_libraries(): + from funkwhale_api.federation import actors + + libraries = models.Library.objects.all().prefetch_related() + actor = actors.get_service_actor() + + for library in libraries: + if library.actor.is_local: + continue + library.schedule_scan(actor) + + @celery.app.task(name="music.start_library_scan") @celery.require_instance( models.LibraryScan.objects.select_related().filter(status="pending"), "library_scan" @@ -90,6 +103,10 @@ def start_library_scan(library_scan): library_scan.status = "errored" library_scan.save(update_fields=["status", "modification_date"]) raise + if "errors" in data.keys(): + library_scan.status = "errored" + library_scan.save(update_fields=["status", "modification_date"]) + raise Exception("Error from remote server : " + str(data)) library_scan.modification_date = timezone.now() library_scan.status = "scanning" library_scan.total_files = data["totalItems"] diff --git a/changes/changelog.d/scan_library_task.enhancement b/changes/changelog.d/scan_library_task.enhancement new file mode 100644 index 000000000..5c70ef040 --- /dev/null +++ b/changes/changelog.d/scan_library_task.enhancement @@ -0,0 +1 @@ +Add a celery task to scan remote library (#1712) \ No newline at end of file