summaryrefslogtreecommitdiff
path: root/backend/views.py
diff options
context:
space:
mode:
authorMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-08-25 05:30:47 -0400
committerMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-08-25 05:30:47 -0400
commitd63b9814434ca388c5321eeffb5ac4b29c885f21 (patch)
treed790b223b4a287613aa066e251d270f36ce76ad8 /backend/views.py
parente0dbe938afd10060adc14d400daa18cdea8daf98 (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.py129
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: