@@ -428,17 +370,32 @@
$('.order-block').on('click',function(){
var orderId = $(this).attr('data-id');
});
- });
- window.onload = function(){
+ $('.user-block').on('click', function(){
+ var userId = $(this).attr('data-id');
+ $("#contact-chat-form #recipentId").val(userId);
+ var inbox = document.getElementById('message-chat-space');
+ inbox.innerHTML = '';
+ socket.send_contact_message(userId);
+ });
+ $('#contact-chat-add-message').on('click', function(){
+ var chatMessage = $("#chat").val();
+ var recipentId = $("#recipentId").val();
+ var senderId = $("#senderId").val();
-{# form.onsubmit = function(e){#}
-{# e.preventDefault();#}
-{# console.log('submit click');#}
-{# socket.send_message(form);#}
-{# }#}
- };
+ socket.add_contact_message({
+ "format_type": "add_message_contact",
+ "data": {
+ "sender_id": senderId,
+ "recipent_id": recipentId,
+ "chat_message": chatMessage,
+ }
+ });
+
+ $("#chat").val("");
+ });
+ });
var SocketHandler = function(){
var url = 'ws://127.0.0.1:8888/chat';
@@ -450,10 +407,28 @@
};
sock.onmessage = function(event){
console.log(event.data);
- message = JSON.parse(event.data);
- var inbox = document.getElementById('message_chat');
- inbox.innerHTML += '
' + message.msg + '
';
+ var message = JSON.parse(event.data);
+ var inbox = document.getElementById('message-chat-space');
+ inbox.innerHTML += '
' +
+ '
' + message.msg +'
';
+
+ };
+
+ this.send_contact_message = function(userId){
+ var data = {
+ "format_type": "add_message",
+ "user_id": userId
+ }
+ sock.send(JSON.stringify(data));
+ console.log(data);
};
+
+ this.add_contact_message = function(messageData){
+ console.log(messageData);
+ sock.send(JSON.stringify(messageData));
+ };
+
this.send_message = function(form){
var elements = form.elements;
var data = {};
@@ -464,7 +439,7 @@
}
}
sock.send(JSON.stringify(data));
- var textareaMessage = document.getElementById("message");
+ var textareaMessage = document.getElementById("message");
textareaMessage.value = "";
}
diff --git a/chat/testapp.py b/chat/testapp.py
index dc79397..cfddf02 100644
--- a/chat/testapp.py
+++ b/chat/testapp.py
@@ -6,7 +6,7 @@ from tornado.options import parse_command_line
import psycopg2
import momoko
-
+import json
settings = {
'cookie_secret': '__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__',
@@ -19,12 +19,28 @@ settings = {
'server_traceback': True,
}
+
class BaseHandler(web.RequestHandler):
@property
def db(self):
return self.application.db
+class TestHandler(web.RequestHandler):
+ @property
+ def db(self):
+ return self.application.db
+
+ @gen.coroutine
+ def get(self, *args, **kwargs):
+ sql = "SELECT text,created FROM chat_message"
+ cursor = yield self.db.execute(sql)
+ data = cursor.fetchall()
+ for d in data:
+ print(d[1])
+ print(type(d[1]))
+ print(str(d[1]))
+
class TutorialHandler(websocket.WebSocketHandler):
@property
@@ -35,26 +51,51 @@ class TutorialHandler(websocket.WebSocketHandler):
def open(self, *args, **kwargs):
self.waiters.add(self)
- # cursor = self.db.execute("SELECT * FROM users_user WHERE id=2")
- # data = cursor.fetchone()
print({'hello': 'test'})
- @gen.coroutine
+ # @gen.coroutine
def on_message(self, message):
parsed = escape.json_decode(message)
+ print(parsed)
+
if 'dummy' in parsed:
return
- insert_sql = "INSERT INTO chat_message (id,text,created,order_id, user_id) VALUES (DEFAULT,'{0}',NOW(),6,4)".format(str(parsed['message']))
+ if parsed['format_type'] == 'add_message_contact':
+ self.add_message_for_contact(parsed['data']['chat_message'], parsed['data']['sender_id'], parsed['data']['recipent_id'])
+ else:
+ self.get_messages_from_order(parsed['user_id'])
- yield self.db.execute(insert_sql)
+ def on_close(self):
+ self.waiters.remove(self)
- cursor = yield self.db.execute("SELECT * FROM chat_message")
- data = cursor.fetchall()
+ #
+ # insert_sql = "INSERT INTO chat_message (id,text,created,order_id, user_id) VALUES (DEFAULT,'{0}',NOW(),6,4)".format(str(parsed['message']))
+ # yield self.db.execute(insert_sql)
+ #
+ # # cursor = yield self.db.execute("SELECT * FROM chat_message")
+ # # data = cursor.fetchall()
+ # for waiter in self.waiters:
+ # waiter.write_message({'msg': parsed['message']})
+ @gen.coroutine
+ def add_message_for_contact(self, message, sender_id, recipent_id):
+ insert_sql = "INSERT INTO chat_message (id,text,created,order_id, sender_id,recipent_id, private_type) " \
+ "VALUES (DEFAULT,'{0}',NOW(),NULL,{1},{2},'true')".format(message,sender_id, recipent_id)
+ yield self.db.execute(insert_sql)
+ # last_select_sql = "SELECT text FROM chat_message "
+ # last_message = yield self.db.execute("SELECT ")
for waiter in self.waiters:
- waiter.write_message({'msg': parsed['message']})
+ waiter.write_message({'msg': message})
+ @gen.coroutine
+ def get_messages_from_order(self, order_id):
+ sql = "SELECT text FROM chat_message WHERE recipent_id=" + order_id
+ cursor = yield self.db.execute(sql)
+ messages = cursor.fetchall()
+ for msg in messages:
+ for waiter in self.waiters:
+ waiter.write_message({'msg': msg[0]})
def check_origin(self, origin):
return True
@@ -71,6 +112,7 @@ class Application(web.Application):
def __init__(self):
handlers = [
(r"/chat", TutorialHandler),
+ (r"/test", TestHandler),
]
super().__init__(handlers=handlers, **settings)
diff --git a/chat/views.py b/chat/views.py
index 1590b8a..02a5960 100644
--- a/chat/views.py
+++ b/chat/views.py
@@ -15,7 +15,7 @@ class ChatUserView(View):
else:
orders = request.user.orders.all()
contractor_contacts = request.user.sender_messages.values('recipent_id').distinct('recipent_id').\
- values('recipent_id__email', 'recipent_id__first_name', 'recipent_id__last_name')
+ values('recipent_id__email', 'recipent_id__first_name', 'recipent_id__last_name', 'recipent_id__id')
chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)).order_by('created')
self.template_name = 'chat_contractor.html'