コード例 #1
0
ファイル: views.py プロジェクト: radiac/django-conversate
def _api_check(request, room, room_slug, last_pk, spoke=False):
    """
    Interal function to check for new messages and return a json response
    """
    if not last_pk:
        return utils.jsonResponse({
            'success':  False,
            'error':    'No pointer provided',
        })
        
    # Register the ping
    has_focus = request.POST.get('hasFocus', 'false') == 'true'
    _update_room_user(request, room, has_focus, spoke)
    
    # Prep list of messages
    messages = list(room.messages.filter(pk__gt=last_pk))
    data = [
        {
            'pk':   msg.pk,
            'time': msg.timestamp,
            'user': msg.user.username,
            'content':  msg.content,
        } for msg in messages
    ]
    
    return utils.jsonResponse({
        'success':  True,
        'last':     last_pk if not messages else messages[-1].pk,
        'time':     int(time.time()),
        'messages': data,
        'users':    _room_users(room, request.user),
    })
コード例 #2
0
ファイル: views.py プロジェクト: radiac/django-conversate
def api_history(request, room, room_slug):
    first_pk = request.POST.get('first', None)
    messages = room.messages.filter(pk__lt=first_pk)
    
    # Paginate
    msg_count = messages.count()
    remaining = 0
    if msg_count > settings.PAGE_SIZE:
        remaining = msg_count - settings.PAGE_SIZE
        messages = messages[remaining:]
    
    # Need all messages now, force lookup
    # Need last message for javascript
    messages = list(messages)
    first_message = messages[0] if len(messages) > 0 else None
    data = [
        {
            'pk':   msg.pk,
            'time': msg.timestamp,
            'user': msg.user.username,
            'content':  msg.content,
        } for msg in messages
    ]
    
    return utils.jsonResponse({
        'success':  True,
        'first':    first_message.pk,
        'remaining':    remaining,
        'messages':     data,
    })
コード例 #3
0
ファイル: views.py プロジェクト: radiac/django-conversate
def api_send(request, room, room_slug):
    """
    API: send message
    """
    if request.POST:
        form = forms.MessageForm(request.POST)
        if form.is_valid():
            message = form.save(commit=False)
            message.room = room
            message.user = request.user
            message.save()
            
            # Get response and update users before sending mail alerts
            response = _api_check(
                request, room, room_slug,
                last_pk=request.POST.get('last', None),
                spoke=True,
            )
            _mail_alert(request, room)
            
            return response
        else:
            error = 'Invalid message'
    else:
        error = 'Invalid request'
    
    return utils.jsonResponse({
        'success':  False,
        'error':    error,
    })