diff --git a/game/models.py b/game/models.py index bf2320e..88fe6cc 100644 --- a/game/models.py +++ b/game/models.py @@ -1,12 +1,12 @@ -import google.oauth2.credentials -import googleapiclient.discovery from django.contrib.auth.models import User from django.db import models from django.db.models.functions import Lower -from django.db.models.signals import post_delete +from django.db.models.signals import post_delete, post_save from django.dispatch import receiver from django.urls import reverse +from . import tasks + class YoutubeCredentials(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) @@ -57,18 +57,22 @@ class MusikGame(models.Model): return reverse("game_detail", kwargs={"pk": self.pk}) +@receiver(post_save, sender=MusikGame) +def generateYoutubePlaylist(sender, instance, created, **kwargs): + if not instance.playlist_loading or instance.playlist: + return + + if creds := instance.group.owner.youtubecredentials: + tasks.generate_playlist.delay_on_commit(creds.credentials, instance.pk) + + @receiver(post_delete, sender=MusikGame) def deleteYoutubePlaylist(sender, instance, using, **kwargs): if not instance.playlist: return - game = instance - credentials = google.oauth2.credentials.Credentials( - **game.group.owner.youtubecredentials.credentials - ) - yt_api = googleapiclient.discovery.build("youtube", "v3", credentials=credentials) - pl_request = yt_api.playlists().delete(id=game.playlist) - pl_request.execute() + if creds := instance.group.owner.youtubecredentials: + tasks.delete_playlist.delay_on_commit(creds.credentials, instance.playlist) class MusicGameOrder(models.Model): diff --git a/game/tasks.py b/game/tasks.py index 2daa551..22a7dc0 100644 --- a/game/tasks.py +++ b/game/tasks.py @@ -43,3 +43,12 @@ def generate_playlist(creds, game_pk): game.playlist_loading = False game.save() + + +@shared_task +def delete_playlist(creds, playlist_id): + credentials = google.oauth2.credentials.Credentials(**creds) + + yt_api = googleapiclient.discovery.build("youtube", "v3", credentials=credentials) + pl_request = yt_api.playlists().delete(id=playlist_id) + pl_request.execute() diff --git a/game/views.py b/game/views.py index 41a05ed..3c434a4 100644 --- a/game/views.py +++ b/game/views.py @@ -13,7 +13,7 @@ from django.views import View from django.views.generic.detail import DetailView, SingleObjectMixin from django.views.generic.edit import CreateView, DeleteView, UpdateView -from . import forms, models, tasks, utils +from . import forms, models, utils class OwnerFilterMixin(LoginRequiredMixin): @@ -285,10 +285,9 @@ class GameCreateView(LoginRequiredMixin, CreateView): game=form.instance, player=player, music_video=music, order=order ) - if creds := self.request.user.youtubecredentials: + if self.request.user.youtubecredentials: form.instance.playlist_loading = True form.instance.save() - tasks.generate_playlist.delay_on_commit(creds.credentials, form.instance.pk) return res