summaryrefslogtreecommitdiff
path: root/backend/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'backend/views.py')
-rw-r--r--backend/views.py58
1 files changed, 52 insertions, 6 deletions
diff --git a/backend/views.py b/backend/views.py
index 1311382..fa1f761 100644
--- a/backend/views.py
+++ b/backend/views.py
@@ -8,14 +8,19 @@ from django.template import loader
from django.template import Context
from django.shortcuts import render_to_response
from django.conf import settings
+from django.db.models import Q
from datetime import datetime
import sha
from backend.models import SJUserProfile
+from backend.models import SJVideo
+from backend.models import SJLike
API_HEADER = '#@scanjam 0.3b\n'
+ROOM_VIDEO_LOG_SIZE = 50
+
#
# Common funtions
#
@@ -224,23 +229,64 @@ def api_auth_password(request):
@require_POST
def api_user_videos(request):
- """ Public API
+ """ Get list of user videos. Public API
"""
- form_fields = ['user', 'start']
+ form_fields = ['user']
response = check_form_fields(request, form_fields)
if response:
return response
- return HttpResponse('Not implemented yet!\n')
+ try:
+ query = Q(user=auth.models.User.objects.get(id=request.POST['user']))
+ except auth.models.User.DoesNotExist:
+ return api_error_headers('no such user')
+ except:
+ return api_error_headers('db error')
+ if 'start' in request.POST:
+ try:
+ timestamp = float(request.POST['start'])
+ query = query & Q(date__lte=datetime.fromtimestamp(timestamp))
+ except:
+ pass
+ videos = SJVideo.objects.filter(query).order_by('-date')[0:ROOM_VIDEO_LOG_SIZE]
+ if not videos:
+ return api_error_headers('no videos')
+ response = api_ok_headers()
+ response.write('\n'.join(['\t'.join([str(v.id),
+ str(v.date),
+ str(v.user.id),
+ v.user.username,
+ v.url,
+ v.title]) for v in videos]))
+ return response
@require_POST
def api_user_likes(request):
- """ Public API
+ """ Get list of liked videos. Public API
"""
- form_fields = ['user', 'start']
+ form_fields = ['user']
response = check_form_fields(request, form_fields)
if response:
return response
- return HttpResponse('Not implemented yet!\n')
+ try:
+ query = Q(sjlike__user=auth.models.User.objects.get(id=request.POST['user']))
+ except auth.models.User.DoesNotExist:
+ return api_error_headers('no such user')
+ except:
+ return api_error_headers('db error')
+ if 'start' in request.POST:
+ try:
+ timestamp = float(request.POST['start'])
+ query = query & Q(date__lte=datetime.fromtimestamp(timestamp))
+ except:
+ pass
+ videos = SJVideo.objects.filter(query).order_by('-date')[0:ROOM_VIDEO_LOG_SIZE]
+ if not videos:
+ return api_error_headers('no videos')
+ response = api_ok_headers()
+ response.write('\n'.join(['\t'.join([str(v.user.id),
+ str(v.id),
+ str(v.date)]) for v in videos]))
+ return response
@require_POST
def api_user_top(request):