diff --git a/playlist/models/album.py b/playlist/models/album.py index 69044f3..7d8af7a 100644 --- a/playlist/models/album.py +++ b/playlist/models/album.py @@ -10,4 +10,4 @@ class Album(models.Model): album_type = models.CharField(max_length=255) total_tracks = models.PositiveSmallIntegerField(null=True) image = models.ImageField(upload_to="albums/") - image_url = models.URLField(null=True) + image_url = models.URLField(null=True) \ No newline at end of file diff --git a/playlist/static/style.css b/playlist/static/style.css index d601b0b..a1ee816 100644 --- a/playlist/static/style.css +++ b/playlist/static/style.css @@ -154,7 +154,7 @@ iframe { font-weight: normal; } #album img { - max-width: 256px; + width: 256px; } input[type="range"] { diff --git a/playlist/tasks.py b/playlist/tasks.py index c159e97..ef27c50 100644 --- a/playlist/tasks.py +++ b/playlist/tasks.py @@ -1,5 +1,8 @@ from celery import shared_task from .models import Track +from django.core.files import File +from django.core.files.uploadedfile import InMemoryUploadedFile +from django.core.files.base import ContentFile import os import dotenv @@ -7,6 +10,8 @@ import dotenv import json from requests import get, post from requests.exceptions import ConnectionError +from PIL import Image +from io import BytesIO dotenv.load_dotenv() @@ -52,3 +57,17 @@ def get_banter(id): track.banter_done = True track.save() return f"{track}: {e}" + +@shared_task +def get_and_dither_image(url, instance, attribute): + """Expects a url, and a Django model cls with an ImageField attribute""" + print(f"Parsing {url} for {instance} with attribute {attribute}") + r = get(url) + print(r.content) + i = Image.open(BytesIO(r.content)) + i = i.resize(size=(128, 128)).convert("P").quantize(colors=32) + buffer = BytesIO() + i.save(fp=buffer, format='PNG') + file = InMemoryUploadedFile(ContentFile(buffer.getvalue()), None, instance.name + ".png", "image/png", buffer.tell, "utf-8") + instance.image = file + instance.save() \ No newline at end of file diff --git a/playlist/templates/Vote.html b/playlist/templates/Vote.html index 0e4f4e4..ce0e69b 100644 --- a/playlist/templates/Vote.html +++ b/playlist/templates/Vote.html @@ -10,7 +10,9 @@ Stemmen {% if error %}
{{ error }}
{% endif %}
- {% if track.album.image_url %} + {% if track.album.image %} + + {% elif track.album.image_url %} {% else %} diff --git a/playlist/views.py b/playlist/views.py index 61748ca..dee1433 100644 --- a/playlist/views.py +++ b/playlist/views.py @@ -7,7 +7,7 @@ import re from .models import Track, Artist, Album, Vote, Background, Profile from .utils import from_json, get_unvoted from . import spotify -from .tasks import get_banter +from .tasks import get_banter, get_and_dither_image spt = spotify.Spotify() @@ -22,6 +22,8 @@ class AuthView(View): class VoteView(LoginRequiredMixin, View): def get(self, request, error=None): track = get_unvoted(request.user) + if not track.album.image: + get_and_dither_image(track.album.image_url, track.album, "image") return TemplateResponse(request, "Vote.html", {"track": track, "error": error}) def post(self, request): try: