diff options
| author | Maksim A. Boyko <maksim.a.boyko@gmail.com> | 2012-08-24 09:01:39 -0400 |
|---|---|---|
| committer | Maksim A. Boyko <maksim.a.boyko@gmail.com> | 2012-08-24 09:01:39 -0400 |
| commit | eca342e728ea453c09dbc8a5f777685430b1208b (patch) | |
| tree | 11240cd4ef1618ee795979dadd50a75b90c48f39 /backend | |
| parent | f7afcdac43e462969282ebde5aa2dc3f166601ef (diff) | |
Backend: Add api_room_join view
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/views.py | 79 |
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): |
