summaryrefslogtreecommitdiff
path: root/backend/views.py
diff options
context:
space:
mode:
authorMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-08-24 09:01:39 -0400
committerMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-08-24 09:01:39 -0400
commiteca342e728ea453c09dbc8a5f777685430b1208b (patch)
tree11240cd4ef1618ee795979dadd50a75b90c48f39 /backend/views.py
parentf7afcdac43e462969282ebde5aa2dc3f166601ef (diff)
Backend: Add api_room_join view
Diffstat (limited to 'backend/views.py')
-rw-r--r--backend/views.py79
1 files changed, 62 insertions, 17 deletions
diff --git a/backend/views.py b/backend/views.py
index 82dcee2..dbbca47 100644
--- a/backend/views.py
+++ b/backend/views.py
@@ -58,7 +58,8 @@ def response_success(message='OK', response=None):
response = HttpResponse()
headers(response)
response.write(API_HEADER)
- response.write(message + '\n')
+ if message:
+ response.write(message + '\n')
return response
def check_form_fields(request, form_fields):
@@ -89,7 +90,7 @@ def user_response_str(request, user=None):
user_access = 0
return '%d\t%s\t%s\t%d\n' % (user_id, username, session_id, user_access)
-def video_response_str(videos):
+def videos_response_str(videos):
""" Return string with list of videos
"""
strio = cStringIO.StringIO()
@@ -106,6 +107,29 @@ def video_response_str(videos):
]))
return strio.getvalue()
+def settings_response_str(label, settings):
+ """ Return string of settings
+ """
+ strio = cStringIO.StringIO()
+ for key, value in settings.iteritems():
+ strio.write('%s\n' % '\t'.join([label, key, value]))
+ return strio.getvalue()
+
+def texts_response_str(texts):
+ """ Return string of chat messages
+ """
+ strio = cStringIO.StringIO()
+ for text in texts:
+ strio.write('%d\t%s\t%d\t%d\t%s\t%s\n' % (
+ text.id,
+ datetime_to_timestamp(text.datetime),
+ text.user.id,
+ text.room.id,
+ text.user.username,
+ text.settings.get('text', '')
+ ))
+ return strio.getvalue()
+
def thraw(settings_text):
settings = dict()
if settings_text:
@@ -378,7 +402,7 @@ def api_room_watch(request):
last =int(request.POST['last']) - 1
videos = SJContent.objects.filter(room=room, content_type='video').order_by('-datetime')
if videos and last <= datetime_to_timestamp(videos[0].datetime):
- response.write(video_response_str(videos))
+ response.write(videos_response_str(videos))
return response
@require_POST
@@ -418,29 +442,50 @@ def api_room_view(request):
user_profile.save()
response = response_success('\t'.join([u.username for u in room.users.all()]))
videos = SJContent.objects.filter(room=room, content_type='video').order_by('-datetime')
- response.write(video_response_str(videos))
- for key, value in room.settings.iteritems():
- response.write('%s\n' % '\t'.join(['ROOM', key, value]))
- for text in SJContent.objects.filter(room=room, content_type='text').order_by('-datetime').distinct()[0:ROOM_CHAT_LOG_SIZE]:
- response.write('%d\t%s\t%d\t%d\t%s\t%s\n' % (
- text.id,
- datetime_to_timestamp(text.datetime),
- text.user.id,
- room.id,
- text.user.username,
- text.settings.get('text', '')
- ))
+ response.write(videos_response_str(videos))
+ response.write(settings_response_str('ROOM', room.settings))
+ texts = SJContent.objects.filter(room=room, content_type='text').order_by('-datetime').distinct()[0:ROOM_CHAT_LOG_SIZE]
+ response.write(texts_response_str(texts))
return response
@require_POST
def api_room_join(request):
""" Private API
"""
- form_fields = ['room', 'enqueue']
+ user = request.user
+ if not user.is_authenticated():
+ return response_error('no logged in')
+ user_profile = user.get_profile()
+ form_fields = ['room']
response = check_form_fields(request, form_fields)
if response:
return response
- return HttpResponse('Not implemented yet!\n')
+ try:
+ room = SJRoom.objects.get(name=request.POST['room'])
+ except SJRoom.DoesNotExist:
+ if request.POST['room'] and user_profile.access > ACCESS_USER:
+ #print '--> New room', request.POST['room']
+ room = SJRoom.objects.create(user=user, datetime=datetime.now(), name=request.POST['room'])
+ else:
+ return response_error('no room')
+ if user not in room.users.all():
+ room.users.add(user)
+ room.save()
+ user_profile.lastseen_chat = datetime.now()
+ user_profile.save()
+ response = response_success('%d\t%s\t%d' % (user.id, user.username, user_profile.access))
+ response.write('%s\n' % '\t'.join([u.username for u in room.users.all()]))
+
+ videos = SJContent.objects.filter(room=room, content_type='video').order_by('-datetime')
+ response.write(videos_response_str(videos))
+ if 'enqueue' in request.POST and request.POST['enqueue']:
+ #print 'EXPECTED TO ENQUEUE', request.POST['enqueue']
+ videos = SJContent.objects.filter(room=room, content_type='video', id=request.POST['enqueue'])
+ response.write(videos_response_str(videos))
+ response.write(settings_response_str('ROOM', room.settings))
+ texts = SJContent.objects.filter(room=room, content_type='text').order_by('-datetime').distinct()[0:ROOM_CHAT_LOG_SIZE]
+ response.write(texts_response_str(texts))
+ return response
@require_POST
def api_room_read(request):