diff options
| author | Maksim A. Boyko <maksim.a.boyko@gmail.com> | 2012-08-25 05:30:47 -0400 |
|---|---|---|
| committer | Maksim A. Boyko <maksim.a.boyko@gmail.com> | 2012-08-25 05:30:47 -0400 |
| commit | d63b9814434ca388c5321eeffb5ac4b29c885f21 (patch) | |
| tree | d790b223b4a287613aa066e251d270f36ce76ad8 /backend/views.py | |
| parent | e0dbe938afd10060adc14d400daa18cdea8daf98 (diff) | |
Backed:
fixtures: Add settings_update field
models: Update SJSettingsModel
views: Add likes_response_str, lastseen_datetime, api_room_read,
api_room_poll
Diffstat (limited to 'backend/views.py')
| -rw-r--r-- | backend/views.py | 129 |
1 files changed, 121 insertions, 8 deletions
diff --git a/backend/views.py b/backend/views.py index dbbca47..afd21f0 100644 --- a/backend/views.py +++ b/backend/views.py @@ -27,6 +27,7 @@ ROOM_VIDEO_LOG_SIZE = 50 ACCESS_USER = 0 ACCESS_MODERATOR = 1 ACCESS_ADMIN = 9 +LASTSEEN_TIMEOUT= 7 # # Common funtions @@ -130,6 +131,14 @@ def texts_response_str(texts): )) return strio.getvalue() +def likes_response_str(likes): + """ Return string of likes + """ + strio = cStringIO.StringIO() + for like in likes: + strio.write('LIKE\t%s\n' % like.user.username) + return strio.getvalue() + def thraw(settings_text): settings = dict() if settings_text: @@ -151,6 +160,9 @@ def now_timestamp(): def yesterday_datetime(): return datetime.now() - timedelta(days=1) +def lastseen_datetime(): + return datetime.now() - timedelta(seconds=LASTSEEN_TIMEOUT) + # # AUTH API # @@ -402,7 +414,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(videos_response_str(videos)) + response.write(videos_response_str([v for v in videos if last <= datetime_to_timestamp(v.datetime)])) return response @require_POST @@ -441,7 +453,7 @@ def api_room_view(request): user_profile.lastseen_chat = datetime.now() 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') + videos = SJContent.objects.filter(room=room, content_type='video').order_by('-datetime')[0:ROOM_VIDEO_LOG_SIZE] 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] @@ -450,7 +462,7 @@ def api_room_view(request): @require_POST def api_room_join(request): - """ Private API + """ Join user into a room. Private API """ user = request.user if not user.is_authenticated(): @@ -475,7 +487,6 @@ def api_room_join(request): 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']: @@ -491,50 +502,132 @@ def api_room_join(request): def api_room_read(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: + return response_error('no room') + response = response_success(str(datetime_to_timestamp(datetime.now()))) + response.write('%s\n' % '\t'.join([u.username for u in room.users.all()])) + last = 0 + if 'last' in request.POST: + last =int(request.POST['last']) - 15 + if last <= datetime_to_timestamp(room.settings_update): + response.write(settings_response_str('ROOM', room.settings)) + videos = SJContent.objects.filter(room=room, content_type='video').order_by('-datetime') + if videos and last <= datetime_to_timestamp(videos[0].datetime): + response.write(videos_response_str([v for v in videos if last <= datetime_to_timestamp(v.datetime)])) + texts = SJContent.objects.filter(room=room, content_type='text').order_by('-datetime') + if texts and last <= datetime_to_timestamp(texts[0].datetime): + response.write(texts_response_str([t for t in texts if last <= datetime_to_timestamp(t.datetime)])) + return response @require_POST def api_room_poll(request): """ Private API """ - form_fields = ['room', 'last', 'cam'] + 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: + return response_error('no room') + nowtime = datetime.now() + lastseentime = lastseen_datetime() + if user not in room.users.all(): + room.users.add(user) + room.save() + user_profile.lastseen_chat = nowtime + user_profile.save() + room.users.filter(sjuserprofile__lastseen_chat__lt=lastseentime).delete() + room.save() + if 'cam' in request.POST and request.POST['cam']: + user_profile.lastseen_webcam = nowtime + user_profile.save() + response = response_success(str(datetime_to_timestamp(nowtime))) + response.write('%s\n' % '\t'.join([u.username for u in room.users.all()])) + last = 0 + if 'last' in request.POST: + last =int(request.POST['last']) - 15 + if last <= datetime_to_timestamp(room.settings_update): + response.write(settings_response_str('ROOM', room.settings)) + videos = SJContent.objects.filter(room=room, content_type='video').order_by('-datetime') + if videos and last <= datetime_to_timestamp(videos[0].datetime): + response.write(videos_response_str([v for v in videos if last <= datetime_to_timestamp(v.datetime)])) + texts = SJContent.objects.filter(room=room, content_type='text').order_by('-datetime') + if texts and last <= datetime_to_timestamp(texts[0].datetime): + response.write(texts_response_str([t for t in texts if last <= datetime_to_timestamp(t.datetime)])) + likes = SJLike.objects.filter(content__content_type='video', content__user=user) + response.write(likes_response_str(likes)) + user_webcams = room.users.filter(sjuserprofile__lastseen_webcam__gt=lastseentime) + response.write('CAM\t%d\n' % user_webcams.count()) + return response @require_POST def api_room_settings(request): """ Private API """ + user = request.user + if not user.is_authenticated(): + return response_error('no logged in') + user_profile = user.get_profile() form_fields = ['room', 'settings'] response = check_form_fields(request, form_fields) if response: return response + try: + room = SJRoom.objects.get(name=request.POST['room']) + except: + return response_error('no room') return HttpResponse('Not implemented yet!\n') @require_POST def api_room_say(request): """ Private API """ + user = request.user + if not user.is_authenticated(): + return response_error('no logged in') + user_profile = user.get_profile() form_fields = ['room', 'msg'] response = check_form_fields(request, form_fields) if response: return response + try: + room = SJRoom.objects.get(name=request.POST['room']) + except: + return response_error('no room') return HttpResponse('Not implemented yet!\n') @require_POST def api_room_video(request): """ Private API """ + user = request.user + if not user.is_authenticated(): + return response_error('no logged in') + user_profile = user.get_profile() form_fields = ['room', 'msg'] response = check_form_fields(request, form_fields) if response: return response + try: + room = SJRoom.objects.get(name=request.POST['room']) + except: + return response_error('no room') return HttpResponse('Not implemented yet!\n') # @@ -555,6 +648,10 @@ def api_video_date(request): def api_video_view(request): """ Private API """ + user = request.user + if not user.is_authenticated(): + return response_error('no logged in') + user_profile = user.get_profile() form_fields = ['video'] response = check_form_fields(request, form_fields) if response: @@ -565,6 +662,10 @@ def api_video_view(request): def api_video_like(request): """ Private API """ + user = request.user + if not user.is_authenticated(): + return response_error('no logged in') + user_profile = user.get_profile() form_fields = ['video'] response = check_form_fields(request, form_fields) if response: @@ -575,6 +676,10 @@ def api_video_like(request): def api_video_unlike(request): """ Private API """ + user = request.user + if not user.is_authenticated(): + return response_error('no logged in') + user_profile = user.get_profile() form_fields = ['video'] response = check_form_fields(request, form_fields) if response: @@ -585,6 +690,10 @@ def api_video_unlike(request): def api_video_remove(request): """ Private API """ + user = request.user + if not user.is_authenticated(): + return response_error('no logged in') + user_profile = user.get_profile() form_fields = ['video', 'room'] response = check_form_fields(request, form_fields) if response: @@ -595,6 +704,10 @@ def api_video_remove(request): def api_video_search(request): """ Private API """ + user = request.user + if not user.is_authenticated(): + return response_error('no logged in') + user_profile = user.get_profile() form_fields = ['q', 'start', 'limit'] response = check_form_fields(request, form_fields) if response: |
