Exemplo n.º 1
0
def chat_by_user(request, chat_username):
    if chat_username == request.user.username:
        return redirect(reverse('chat_list'))

    chat_user = get_object_or_404(User, username=chat_username)

    msg_form = MessageForm(request.POST or None)
    if msg_form.is_valid():
        msg_text = msg_form.cleaned_data['msg_text']
        Message.objects.create(receiver=chat_user,
                               sender=request.user,
                               msg_text=msg_text)
        return redirect(reverse('chat_by_user', args=[chat_username]))

    cur_user_msgs = Message.user_msgs(request.user)
    msgs_by_user = cur_user_msgs.filter(
        Q(sender=chat_user) | Q(receiver=chat_user)).order_by('date_sent')

    all_conversations = conversations_list(request.user)

    context = {
        'all_conversations': all_conversations,
        'msg_form': msg_form,
        'new_all_msgs': msgs_by_user,
        'chat_user': chat_user,
        'chat_username': chat_username,
    }
    return render(request, 'core/chat.html', context)
Exemplo n.º 2
0
def conversations_list(user: User):
    dialog_msgs = Message.user_msgs(user)

    all_conversations = []
    used_interlocutors = set()
    for msg in dialog_msgs:
        if msg.sender == user:
            interlocutor = msg.receiver
        else:
            interlocutor = msg.sender

        if interlocutor not in used_interlocutors:
            all_conversations.append({
                "object": interlocutor,
                "date": msg.date_sent
            })
            used_interlocutors.add(interlocutor)

    for group in user.inside_group_chats.all():
        msg = Message.objects.filter(
            group_chat_in=group).order_by('-date_sent').first()
        if msg is None:
            _date = group.date_created
        else:
            _date = msg.date_sent

        all_conversations.append({"object": group, "date": _date})

    all_conversations.sort(key=lambda o: o["date"], reverse=True)

    return all_conversations