Spotify user api integration
En een begin aan een playlist maker. Doet op het moment niet veel.
This commit is contained in:
+61
-8
@@ -3,15 +3,15 @@ from django.views import View
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.template.response import TemplateResponse
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.db.models import Avg
|
||||
from django.urls import reverse
|
||||
import re
|
||||
from collections import OrderedDict
|
||||
from .models import Track, Artist, Album, Vote, Background, Profile
|
||||
from .utils import from_json, get_unvoted
|
||||
from . import spotify
|
||||
from .spotify import spt
|
||||
from .tasks import get_banter, get_and_dither_image
|
||||
|
||||
spt = spotify.Spotify()
|
||||
|
||||
class AuthView(View):
|
||||
def get(self, request):
|
||||
if request.user.is_authenticated:
|
||||
@@ -29,7 +29,7 @@ class VoteView(LoginRequiredMixin, View):
|
||||
try:
|
||||
spotify_id = self.request.POST['spotify_id']
|
||||
score = int(self.request.POST['vote'])
|
||||
score = min(max(-2, score), 2)
|
||||
score = min(max(1, score), 5)
|
||||
track = Track.objects.get(pk=spotify_id)
|
||||
try:
|
||||
Vote.objects.get(user=request.user, track=track)
|
||||
@@ -82,7 +82,8 @@ class NominateView(LoginRequiredMixin, View):
|
||||
except Track.DoesNotExist:
|
||||
try:
|
||||
json = spt.get_song_info(spotify_id)
|
||||
except:
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return TemplateResponse(request, "Nominate.html", {"error": "Fout bij het ophalen van het liedje."})
|
||||
|
||||
# Album artists
|
||||
@@ -133,12 +134,22 @@ class SettingsView(LoginRequiredMixin, View):
|
||||
"backgrounds": backgrounds,
|
||||
"currentBackground": (profile.background.id if profile.background else 1)
|
||||
}
|
||||
spt_token = profile.get_or_update_spt()
|
||||
if spt_token:
|
||||
context["sptDisplayName"] = spt.get_profile(spt_token).get('display_name')
|
||||
|
||||
return TemplateResponse(request, "Settings.html", context)
|
||||
def post(self, request):
|
||||
try:
|
||||
bg = Background.objects.get(pk=request.POST['background'])
|
||||
bg = request.POST.get('background', None)
|
||||
unlink_spotify = request.POST.get('unlink-spotify', None)
|
||||
(profile,_) = Profile.objects.get_or_create(user=request.user)
|
||||
profile.background = bg
|
||||
if bg:
|
||||
bg = Background.objects.get(pk=request.POST['background'])
|
||||
profile.background = bg
|
||||
if unlink_spotify:
|
||||
print("unlink spt")
|
||||
profile.unlink_spt()
|
||||
profile.save()
|
||||
except:
|
||||
pass
|
||||
@@ -183,4 +194,46 @@ class OverView(LoginRequiredMixin, View):
|
||||
context = {
|
||||
"artists": artists_ordered
|
||||
}
|
||||
return TemplateResponse(request, "Overview.html", context)
|
||||
return TemplateResponse(request, "Overview.html", context)
|
||||
|
||||
class PlaylistMake(LoginRequiredMixin, View):
|
||||
def get(self, request, count=None):
|
||||
context = {}
|
||||
if count:
|
||||
#tracks = Track.objects.order_by('score')[count]
|
||||
tracks = Track.objects.annotate(average_points=Avg('vote__points')).order_by('-average_points')[:count]
|
||||
context["tracks"] = tracks
|
||||
return TemplateResponse(request, "PlaylistMaker.html", context)
|
||||
def post(self, request):
|
||||
try:
|
||||
count = int(self.request.POST['count'])
|
||||
return self.get(request, count=count)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return self.get(request)
|
||||
|
||||
class SpotifyView(LoginRequiredMixin, View):
|
||||
def get(self, request):
|
||||
url = spt.get_oauth_redirect()
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
class SpotifyCallbackView(LoginRequiredMixin, View):
|
||||
def get(self, request):
|
||||
error = self.request.GET.get('error')
|
||||
code = self.request.GET.get('code')
|
||||
if error:
|
||||
return TemplateResponse(request, "Nominate.html", {"error": "Je moet wel accepteren, pannenkoek."})
|
||||
elif code:
|
||||
(profile,_) = Profile.objects.get_or_create(user=request.user)
|
||||
profile.init_spt(code)
|
||||
# data = spt.get_user_token(code)
|
||||
# access = data.get('access_token', None)
|
||||
# refresh = data.get('refresh_token', None)
|
||||
# expires = data.get('expires_in', 3600)
|
||||
|
||||
# if access and refresh:
|
||||
# profile.set_spotify(access, refresh, expires)
|
||||
# else:
|
||||
# return TemplateResponse(request, "Nominate.html", {"error": "No."})
|
||||
return HttpResponseRedirect(reverse('settings'))
|
||||
#return TemplateResponse(request, "Nominate.html", {"warning": code})
|
||||
|
||||
Reference in New Issue
Block a user