def messages(request): msgs = get_chat_messages() msgs_list = pagination(request, msgs, MESSAGES_PER_PAGE) dic = {'chatmessages': msgs_list, 'PAG_TITLE': 'Messages List'} return render_to_response('whatsapp/chat.html', dic, context_instance=RequestContext(request))
def single_chat(request,key): msgs = get_chat_messages(key) msgs_list = pagination(request,msgs,MESSAGES_PER_PAGE) dic = {'activity': get_activity_data(key), 'chatmessages': msgs_list, 'gps': Messages.objects.using('msgstore').exclude((Q(longitude = '0.0') | Q(latitude = '0.0'))), 'media': Messages.objects.using('msgstore').exclude(media_url__isnull = True), 'PAG_TITLE': 'Conversation' } return render_to_response('whatsapp/chat.html',dic,context_instance=RequestContext(request))
def single_chat(request, key): """ Shows a single chat with a contact given by his jid (key) """ if not Messages.objects.using('msgstore').filter(key_remote_jid=key).count() > 0: return render_to_response('whatsapp/errors/404.html', context_instance=RequestContext(request)) msgs = get_chat_messages(key) msgs_list = pagination(request, msgs, MESSAGES_PER_PAGE) dic = { 'peer': key, 'chatmessages': msgs_list, 'gps': Messages.objects.using('msgstore').exclude((Q(longitude='0.0') | Q(latitude='0.0'))), 'media': Messages.objects.using('msgstore').exclude(media_url__isnull=True), 'PAG_TITLE': 'Conversation' } return render_to_response('whatsapp/chat.html', dic, context_instance=RequestContext(request))
def load_more_chat(request): """ This method is use for load previous 10 messages when scroll top on chat screen :return: http response with response data which required for load next 10 messages """ # get scroll count for identify how many time did scroll top scroll_count = request.POST.get('scroll_count') # get logged in user and friend object logged_in_user = get_user_object(request.user.username) friend_obj = get_user_object(request.POST.get('username')) # get all chat between logged in user and their friend sent_messages = get_chat_messages(logged_in_user, friend_obj) recevied_messages = get_chat_messages(friend_obj, logged_in_user) all_chats_list = [[m.message, str(m.sent_at), 'sent'] for m in sent_messages] for r in recevied_messages: all_chats_list.append([r.message, str(r.sent_at), 'received']) all_chats_list.sort( key=lambda x: x[1]) # sort chat as per ascending order of datetime # get previous 10 messages message_load_count = (int(scroll_count) + 1) * 10 if message_load_count >= len(all_chats_list): if (message_load_count - len(all_chats_list)) > 10: load_messages = [] next_message = "False" else: load_messages = all_chats_list[:-(int(scroll_count)) * 10] next_message = "True" more_messages = False else: load_messages = all_chats_list[-( message_load_count):-(message_load_count) + 10] next_message = "True" more_messages = True load_messages.reverse() # append 'same_date' or 'new_date' string at last index of load message list for identify that new date start from that message for i, msg in enumerate(load_messages): if not i == len(load_messages) - 1: if not load_messages[i][1].split(' ')[0] == load_messages[ i + 1][1].split(' ')[0]: load_messages[i].append('new_date') else: load_messages[i].append('same_date') else: if more_messages: if not load_messages[i][1].split(' ')[0] == all_chats_list[ -(message_load_count) - 1][1].split(' ')[0]: load_messages[i].append('new_date') else: load_messages[i].append('same_date') else: load_messages[i].append('new_date') response_data = { "scroll_count": int(scroll_count) + 1, "load_messages": load_messages, "next_message": next_message, } return HttpResponse(json.dumps(response_data), content_type="application/json")
def chatscreen(request): """ This view returns last 10 messages between logged in user and the other user. :return: http response with response data which required for show chat screen """ if request.method == "POST": # get user objects logged_in_user = get_user_object(request.user.username) friend_obj = get_user_object(request.POST.get('username')) # get friend full name and profile image from friend user object full_name = friend_obj.first_name + " " + friend_obj.last_name profile_pic_src = str(friend_obj.photo.url) # get chats between current user and their friend sent_messages = get_chat_messages(logged_in_user, friend_obj) recevied_messages = get_chat_messages(friend_obj, logged_in_user) all_chats_list = [[m.message, str(m.sent_at), 'sent'] for m in sent_messages] for r in recevied_messages: all_chats_list.append([r.message, str(r.sent_at), 'received']) # get room name for do chat room_obj = Friends.objects.filter(user1=logged_in_user, user2=friend_obj) if room_obj: room_name = Friends.objects.get(user1=logged_in_user, user2=friend_obj).room_name else: room_name = Friends.objects.get(user1=friend_obj, user2=logged_in_user).room_name all_chats_list.sort( key=lambda x: x[1]) # sort chat in ascending order as per datetime # if there are more than 10 messages then get last 10 message otherwise get all messages and append 'same_date' # or 'new_date' at last index of all_chat for identify that new date start from that message same_day = False if len(all_chats_list) > 10: if all_chats_list[-11][1].split( ' ')[0] == all_chats_list[-10][1].split(' ')[0]: same_day = True all_chats_list = all_chats_list[-10:] if len(all_chats_list): all_chats_list[0].append('same_date') for i, chat in enumerate(all_chats_list): if not i == len(all_chats_list) - 1: if not all_chats_list[i][1].split(' ')[0] == all_chats_list[ i + 1][1].split(' ')[0]: all_chats_list[i + 1].append('new_date') if not len(all_chats_list[i]) == 4: all_chats_list[i].append('same_date') else: if not len(all_chats_list[i]) == 4: all_chats_list[i].append('same_date') else: if not len(all_chats_list[i]) == 4: all_chats_list[i].append('same_date') friend_notify_room = Notifications.objects.get(user=friend_obj).room response_data = { "name": full_name, "profile-pic": profile_pic_src, "messages": all_chats_list, 'room_name_json': mark_safe(json.dumps(room_name)), 'room_name': room_name, 'user_name': request.user.username, 'friend_notify_room': friend_notify_room, 'same_day': same_day, 'friend_id': friend_obj.id, } return HttpResponse(json.dumps(response_data), content_type="application/json")
def language_detect(request, key): """ Language detection """ LANGUAGES = { 'af': 'AFRIKAANS', 'ar': 'ARABIC', 'be': 'BELARUSIAN', 'bg': 'BULGARIAN', 'ca': 'CATALAN', 'chr': 'CHEROKEE', 'cs': 'CZECH', 'cy': 'WELSH', 'da': 'DANISH', 'de': 'GERMAN', 'dv': 'DHIVEHI', 'el': 'GREEK', 'en': 'ENGLISH', 'es': 'SPANISH', 'et': 'ESTONIAN', 'fa': 'PERSIAN', 'fi': 'FINNISH', 'fil': 'TAGALOG', 'fr': 'FRENCH', 'ga': 'IRISH', 'gu': 'GUJARATI', 'he': 'HEBREW', 'hi': 'HINDI', 'hr': 'CROATIAN', 'hu': 'HUNGARIAN', 'hy': 'ARMENIAN', 'id': 'INDONESIAN', 'is': 'ICELANDIC', 'it': 'ITALIAN', 'iu': 'INUKTITUT', 'ja': 'JAPANESE', 'ka': 'GEORGIAN', 'km': 'KHMER', 'kn': 'KANNADA', 'ko': 'KOREAN', 'lo': 'LAOTHIAN', 'lt': 'LITHUANIAN', 'lv': 'LATVIAN', 'mk': 'MACEDONIAN', 'ml': 'MALAYALAM', 'ms': 'MALAY', 'nb': 'NORWEGIAN', 'nl': 'DUTCH', 'or': 'ORIYA', 'pa': 'PUNJABI', 'pl': 'POLISH', 'pt': 'PORTUGUESE', 'ro': 'ROMANIAN', 'ru': 'RUSSIAN', 'si': 'SINHALESE', 'sk': 'SLOVAK', 'sl': 'SLOVENIAN', 'sr': 'SERBIAN', 'sv': 'SWEDISH', 'sw': 'SWAHILI', 'syr': 'SYRIAC', 'ta': 'TAMIL', 'te': 'TELUGU', 'th': 'THAI', 'tr': 'TURKISH', 'uk': 'UKRAINIAN', 'vi': 'VIETNAMESE', 'yi': 'YIDDISH', 'zh': 'CHINESE', 'zh-TW': 'CHINESET', 'xxx': 'Unknown' } retval = {} msgs = get_chat_messages(key) msgs_list = pagination(request, msgs, MESSAGES_PER_PAGE) try: params = urllib.urlencode ( {'key': DLAPIKEY , 'q': '\n'.join(x['data'].encode('ascii','ignore') for x in msgs_list) } ) conn = urllib.urlopen("http://ws.detectlanguage.com/0.2/detect",params) tmp = conn.read() data = json.loads(tmp) conn.close() retval['languages'] = [] value = 100 for lang in data['data']['detections']: retval['languages'].append({'text': "%s %s" % (LANGUAGES[lang['language']],"(Reliable)" if lang['isReliable'] else ""), 'value': "%.3f" % lang['confidence']}) value -= lang['confidence'] retval['others'] = {'text': 'Others' , 'value': "%.3f" % value} except Exception,e: retval['error'] = str(e)