mirror of
https://github.com/fergalmoran/dss.api.git
synced 2025-12-22 09:18:13 +00:00
102 lines
3.5 KiB
Python
102 lines
3.5 KiB
Python
import datetime
|
|
from rest_framework.response import Response
|
|
from rest_framework.status import HTTP_400_BAD_REQUEST, HTTP_201_CREATED, HTTP_204_NO_CONTENT, HTTP_200_OK
|
|
from rest_framework.views import APIView
|
|
from core import realtime
|
|
from core.radio import ice_scrobbler
|
|
from core.realtime import activity
|
|
from dss import settings
|
|
from spa.models import Mix, UserProfile
|
|
from core.utils import session
|
|
|
|
|
|
class Helper(APIView):
|
|
pass
|
|
|
|
|
|
class ActivityHelper(APIView):
|
|
def get_session(self, request):
|
|
sessions = session.get_active_sessions(request.session)
|
|
|
|
return sessions[0]
|
|
|
|
|
|
class ChatHelper(ActivityHelper):
|
|
def post(self, request):
|
|
# do some persistence stuff with the chat
|
|
from core.realtime import chat
|
|
|
|
# user = self.get_session(request)
|
|
u = request.user
|
|
if not u.is_anonymous():
|
|
image = u.userprofile.get_sized_avatar_image(32, 32)
|
|
user = u.userprofile.get_nice_name()
|
|
else:
|
|
image = settings.DEFAULT_USER_IMAGE
|
|
user = settings.DEFAULT_USER_NAME
|
|
|
|
chat.post_chat(request.data['user'], image, user, request.data['message'])
|
|
return Response(request.data['message'], HTTP_201_CREATED)
|
|
|
|
|
|
class ActivityPlayHelper(ActivityHelper):
|
|
def post(self, request):
|
|
if 'id' in self.request.query_params:
|
|
try:
|
|
mix = Mix.objects.get(slug=self.request.query_params.get('id'))
|
|
mix.add_play(request.user)
|
|
data = {
|
|
'user': request.user.userprofile.get_nice_name() if request.user.is_authenticated() else settings.DEFAULT_USER_NAME,
|
|
'date': datetime.datetime.now()
|
|
}
|
|
return Response(data, HTTP_201_CREATED)
|
|
except Mix.DoesNotExist:
|
|
pass
|
|
|
|
return Response("Invalid URI or object does not exist", HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
class UserSlugCheckHelper(Helper):
|
|
def get(self, request):
|
|
try:
|
|
UserProfile.objects.get(slug=self.request.query_params.get('slug'))
|
|
return Response(status=HTTP_204_NO_CONTENT)
|
|
except UserProfile.DoesNotExist:
|
|
return Response(status=HTTP_200_OK)
|
|
|
|
|
|
class RadioHelper(Helper):
|
|
def get(self, request):
|
|
if 'rmix' in self.request.query_params:
|
|
m = Mix.objects.order_by('?').first()
|
|
ret = {
|
|
'url': m.get_stream_url(),
|
|
'slug': m.get_full_url(),
|
|
'title': str(m)
|
|
}
|
|
elif 'np' in self.request.query_params:
|
|
ret = ice_scrobbler.get_server_details()
|
|
|
|
return Response(data=ret, status=HTTP_200_OK)
|
|
|
|
def post(self, request):
|
|
try:
|
|
if 'action' in request.query_params:
|
|
action = request.query_params.get('action')
|
|
if action == 'shuffle':
|
|
ice_scrobbler.shuffle()
|
|
return Response(status=HTTP_200_OK)
|
|
if action == 'play':
|
|
m = Mix.objects.get(slug=request.query_params.get('slug'))
|
|
ice_scrobbler.play(m.get_stream_url())
|
|
return Response(status=HTTP_200_OK)
|
|
if 'update' in request.query_params and 'url' in request.query_params:
|
|
activity.post_activity('site:radio_changed', message={
|
|
'description': request.query_params.get('update'),
|
|
'url': request.query_params.get('url')
|
|
})
|
|
except:
|
|
pass
|
|
|
|
return Response(status=HTTP_400_BAD_REQUEST)
|