Ejemplo n.º 1
0
def sendMessage(request):
    if request.method == 'POST':
        data = request.data
        if data.get('sessionToken') == None or data.get(
                'target') == None or data.get('body') == None:
            return Response(
                {
                    'error':
                    "Invalid body parameter, body must contain 'sessionToken', 'body' and 'target'"
                },
                status=status.HTTP_400_BAD_REQUEST)
        sessionToken = data.get('sessionToken')
        target = data.get('target')
        body = data.get('body')
        sessionTokenValid, user = sessionIsValid(sessionToken)
        usernameValid, recipient = usernameisValid(target)
        if sessionTokenValid and usernameValid:
            message = MessageModel.objects.create(user=user,
                                                  recipient=recipient,
                                                  body=body)
            serializer = MessageModelSerializer(message).data
            return Response(serializer, status=status.HTTP_202_ACCEPTED)
        else:
            return Response(
                {
                    'error_header':
                    'Something went wrong',
                    'error_body':
                    "Something went wrong, please try again later.",
                    "actions": [{
                        "error_code": "1001",
                        'error_message': 'Try Again'
                    }]
                },
                status=status.HTTP_200_OK)
Ejemplo n.º 2
0
def getMessage(request):
    if request.method == 'POST':
        data = request.data
        if data.get('sessionToken') == None or data.get('messageID') == None:
            return Response(
                {
                    'error':
                    "Invalid body parameter, body must contain 'sessionToken' and 'messageID'"
                },
                status=status.HTTP_400_BAD_REQUEST)
        sessionToken = data.get('sessionToken')
        messageID = data.get('messageID')

        sessionTokenValid, user = sessionIsValid(sessionToken)
        if sessionTokenValid:
            msg = MessageModel.objects.get(
                Q(user=user, pk=messageID) | Q(recipient=user, pk=messageID))
            serializer = MessageModelSerializer(msg)
            return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
        else:
            return Response(
                {
                    'error_header':
                    'Something went wrong',
                    'error_body':
                    "Something went wrong, please try again later.",
                    "actions": [{
                        "error_code": "1001",
                        'error_message': 'Try Again'
                    }]
                },
                status=status.HTTP_200_OK)
Ejemplo n.º 3
0
def chatHistory(request):
    #using seek pagation. page_size = 15
    if request.method == 'POST':
        data = request.data
        if data.get('sessionToken') == None or data.get('target') == None:
            return Response(
                {
                    'error':
                    "Invalid body parameter, body must contain 'sessionToken' and 'target' with optional arguments 'limit' and 'before_id'"
                },
                status=status.HTTP_400_BAD_REQUEST)
        sessionToken = data.get('sessionToken')
        target = data.get('target')

        page_size = 30  #IMP_CONSTANT

        if data.get('limit') == None:
            limit = page_size
        else:
            limit = int(data.get('limit'))
            if limit > page_size:
                limit = page_size
        if data.get('before_id') == None:
            before_id = False
        else:
            before_id = int(data.get('before_id'))

        sessionTokenValid, user = sessionIsValid(sessionToken)
        usernameValid, recipient = usernameisValid(target)
        if sessionTokenValid and usernameValid:
            if before_id == False:
                msg = MessageModel.objects.all().filter(
                    Q(recipient=recipient, user=user)
                    | Q(user=recipient, recipient=user)).order_by(
                        '-pk')[:limit:-1]
            else:
                msg = MessageModel.objects.all().filter(
                    Q(recipient=recipient, user=user)
                    | Q(user=recipient, recipient=user)).filter(
                        pk__lt=before_id).order_by('-pk')[:limit:-1]

            serializer = MessageModelSerializer(msg, many=True)
            return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
        else:
            return Response(
                {
                    'error_header':
                    'Something went wrong',
                    'error_body':
                    "Something went wrong, please try again later.",
                    "actions": [{
                        "error_code": "1001",
                        'error_message': 'Try Again'
                    }]
                },
                status=status.HTTP_200_OK)
Ejemplo n.º 4
0
def messageSeen(request):
    if request.method == 'POST':
        data = request.data
        if data.get('session_token') == None or data.get(
                'target') == None or data.get('upto_id') == None:
            return Response(
                {
                    'error':
                    "Invalid body parameter, body must contain 'session_token', 'target' and 'upto_id'"
                },
                status=status.HTTP_400_BAD_REQUEST)

        session_token = data.get('session_token')
        upto_id = data.get('upto_id')
        target = data.get('target')

        sessionValid, user = sessionIsValid(session_token)
        usernameValid, recipient = usernameisValid(target)
        if sessionValid and usernameValid:
            msgs = MessageModel.objects.all().filter(
                Q(recipient=recipient, user=user)
                | Q(user=recipient, recipient=user)).filter(
                    pk__lte=upto_id, seen=False).order_by('pk')
            #print(msgs)
            for msg in msgs:
                msg.seen = True
                msg.save()

            notification = {
                'type': 'push_seen',
                'chat': user.username,
                'seen': True,
                'upto_id': '{}'.format(upto_id)
            }
            channel_layer = get_channel_layer()
            #async_to_sync(channel_layer.group_send)("{}".format(user.username), notification)
            async_to_sync(channel_layer.group_send)("{}".format(
                recipient.username), notification)

            return Response(status=status.HTTP_202_ACCEPTED)
        else:
            return Response(
                {
                    'error_header':
                    'Something went wrong',
                    'error_body':
                    "Something went wrong, please try again later.",
                    "actions": [{
                        "error_code": "1001",
                        'error_message': 'Try Again'
                    }]
                },
                status=status.HTTP_200_OK)
Ejemplo n.º 5
0
def messageLike(request):
    if request.method == 'POST':
        data = request.data
        if data.get('sessionToken') == None or data.get(
                'messageID') == None or data.get('liked') == None:
            return Response(
                {
                    'error':
                    "Invalid body parameter, body must contain 'sessionToken', 'liked' and 'messageID'"
                },
                status=status.HTTP_400_BAD_REQUEST)

        sessionToken = data.get('sessionToken')
        messageID = data.get('messageID')
        liked = data.get('liked')

        sessionTokenValid, user = sessionIsValid(sessionToken)
        if sessionTokenValid:
            try:
                msg = MessageModel.objects.get(
                    Q(user=user, pk=messageID)
                    | Q(recipient=user, pk=messageID))
            except:
                return Response(
                    {
                        'error_header':
                        'Message not found',
                        'error_body':
                        "No such message exists or you are not authorised to access this message.",
                        "actions": [{
                            "error_code": "1001",
                            'error_message': 'Understood'
                        }]
                    },
                    status=status.HTTP_200_OK)

            #print(msg)
            if liked == "True" or liked == True or liked == 1 or liked == "1":
                msg.liked = True
                msg.save()
                obj, created = likedStream.objects.update_or_create(
                    message=msg,
                    defaults={
                        "message": msg,
                        "user": user,
                        "state": True
                    },
                )
                #print(obj, created)
            else:
                msg.liked = False
                msg.save()
                obj, created = likedStream.objects.update_or_create(
                    message=msg,
                    defaults={
                        "message": msg,
                        "user": user,
                        "state": False
                    },
                )
                #print(obj, created)
            return Response(status=status.HTTP_202_ACCEPTED)
        else:
            return Response(
                {
                    'error_header':
                    'Something went wrong',
                    'error_body':
                    "Something went wrong, please try again later.",
                    "actions": [{
                        "error_code": "1001",
                        'error_message': 'Try Again'
                    }]
                },
                status=status.HTTP_200_OK)
Ejemplo n.º 6
0
def chatUsers(request):
    if request.method == 'POST':
        data = request.data
        if data.get('sessionToken') == None:
            return Response(
                {
                    'error':
                    "Invalid body parameter, body must contain 'sessionToken' and optional agument 'limit'"
                },
                status=status.HTTP_400_BAD_REQUEST)
        sessionToken = data.get('sessionToken')

        if data.get('limit') != None:
            limit = int(data.get('limit'))
        else:
            limit = 15

        sessionTokenValid, user = sessionIsValid(sessionToken)
        print(sessionTokenValid)
        if sessionTokenValid == False:
            return Response(status=status.HTTP_403_FORBIDDEN)

        if sessionTokenValid == True:

            #latest_users = MessageModel.filter(user=user).latest('pk').values('recipient').order_by('pk')

            latest_users = list(
                set(
                    MessageModel.objects.filter(user=user).values_list(
                        'recipient', flat=True).order_by('pk')))[:limit]
            allData = []

            for chat_user_pk in latest_users:
                data = {}
                i = user_details.objects.get(pk=chat_user_pk)
                data["name"] = i.name
                data["username"] = i.username
                if i.showLastsSeen:
                    try:
                        last_seen_obj = lastSeen.objects.get(user=i)
                        data["showLastsSeen"] = i.showLastsSeen
                        data["activeNow"] = last_seen_obj.activeNow
                        data["lastSeen"] = last_seen_obj.lastSeen
                    except:
                        data["showLastsSeen"] = False
                else:
                    data["showLastsSeen"] = i.showLastsSeen

                try:
                    data["profile_picture"] = i.profile_picture.url
                except:
                    data["profile_picture"] = None

                unseen_messages_count = 0
                latest_10_messages = MessageModel.objects.all().filter(
                    Q(recipient=i, user=user)
                    | Q(user=i, recipient=user)).order_by('-pk')[:10:-1]
                for message in latest_10_messages:
                    if message.seen == False:
                        unseen_messages_count = unseen_messages_count + 1

                if unseen_messages_count == 0:

                    liked = likedStream.objects.all().filter(
                        user=user,
                        timestamp__gt=latest_10_messages[-1].timestamp).exists(
                        )
                    #print(latest_10_messages[-1].timestamp)
                    #print(liked)
                    if liked:
                        data["unseen_chat"] = True
                        data["preview"] = "Liked a message"
                    else:
                        data["unseen_chat"] = False
                elif unseen_messages_count == 1:
                    data["unseen_chat"] = True
                    data["preview"] = latest_10_messages[-1].body
                elif unseen_messages_count > 9:
                    data["unseen_chat"] = True
                    data["preview"] = "9+ new messages"
                else:
                    data["unseen_chat"] = True
                    data["preview"] = "{} new messages".format(
                        str(unseen_messages_count))

                allData.append(data)
            #print(allData)
            #msg = MessageModel.objects.latest().filter(user=user)

            #serializer = MessageModelSerializer(msg, many = True)
            #msg = MessageModel.objects.latest().filter(user=user)
            return Response(allData, status=status.HTTP_202_ACCEPTED)
        else:
            return Response(
                {
                    'error_header':
                    'Something went wrong',
                    'error_body':
                    "Something went wrong, please try again later.",
                    "actions": [{
                        "error_code": "1001",
                        'error_message': 'Try Again'
                    }]
                },
                status=status.HTTP_401_UNAUTHORIZED)