... | ... |
@@ -122,39 +122,56 @@ this.App = |
122 | 122 |
isMultiChat: true |
123 | 123 |
); |
124 | 124 |
|
125 |
+ App.debug newChat.get('chatId') |
|
126 |
+ |
|
125 | 127 |
App.Collections.chats.add(newChat); |
126 | 128 |
newChat.syncContacts(chatData.contacts, chatData.owner); |
127 | 129 |
Backbone.Events.trigger('openChat', newChat) |
128 | 130 |
) |
129 | 131 |
|
130 | 132 |
App._dispatcher.bind('app.chat.messageReceived', (result) -> |
131 |
- App.debug 'message received' |
|
133 |
+ App.debug ['message received', result] |
|
132 | 134 |
|
133 |
- contact = App.Collections.contacts.findByJid(result.from) |
|
135 |
+ if (result.chat_id) |
|
136 |
+ _.each(App.Collections.chats.models, (chat) -> |
|
137 |
+ App.debug chat.get('chatId') |
|
138 |
+ ) |
|
139 |
+ chat = App.Collections.chats.findById(result.chat_id) |
|
134 | 140 |
|
135 |
- if contact |
|
136 |
- contactView = App.Collections.contacts.friendsList.hasContact(contact) || |
|
137 |
- App.Collections.contacts.activeList.hasContact(contact) |
|
138 |
- else |
|
139 |
- contact = new Xmpp.Models.Contact( |
|
140 |
- id: result.from |
|
141 |
- jid: result.from |
|
142 |
- belongsTo: [result.to] |
|
141 |
+ Backbone.Events.trigger('openChat', chat) |
|
142 |
+ |
|
143 |
+ tab = _.find(App.Views.tabbar.tabs, (tab) -> |
|
144 |
+ tab.getChatId() == result.chat_id |
|
143 | 145 |
) |
144 |
- App.Collections.contacts.add(contact, merge: true) |
|
145 |
- contactView = App.Collections.contacts.friendsList.hasContact(contact) |
|
146 | 146 |
|
147 |
- contactView.startChat() |
|
147 |
+ tab.showChat() |
|
148 |
+ contact = App.Collections.contacts.findByJid(result.from) |
|
149 |
+ tab.chatWindow.appendMessage(contact, new Date(), result.message) |
|
150 |
+ else |
|
151 |
+ #TODO: prepisat tuto hrozu |
|
152 |
+ |
|
148 | 153 |
|
149 |
- tab = _.find(App.Views.tabbar.tabs, (tab) -> |
|
150 |
- tab.hasParticipants(App.Models.me, contact) |
|
151 |
- ) |
|
154 |
+ contact = App.Collections.contacts.findByJid(result.from) |
|
155 |
+ |
|
156 |
+ if contact |
|
157 |
+ contactView = App.Collections.contacts.friendsList.hasContact(contact) || |
|
158 |
+ App.Collections.contacts.activeList.hasContact(contact) |
|
159 |
+ else |
|
160 |
+ contact = new Xmpp.Models.Contact( |
|
161 |
+ id: result.from |
|
162 |
+ jid: result.from |
|
163 |
+ belongsTo: [result.to] |
|
164 |
+ ) |
|
165 |
+ App.Collections.contacts.add(contact, merge: true) |
|
166 |
+ contactView = App.Collections.contacts.friendsList.hasContact(contact) |
|
167 |
+ |
|
168 |
+ contactView.startChat() |
|
152 | 169 |
|
153 |
- tab.chatWindow.appendMessage(contact, new Date(), result.message) |
|
170 |
+ tab = _.find(App.Views.tabbar.tabs, (tab) -> |
|
171 |
+ tab.hasParticipants(App.Models.me, contact) |
|
172 |
+ ) |
|
154 | 173 |
|
155 |
-# if (result.chat_id) |
|
156 |
-# #todo otvorit chat podla chat_id. Spytat sa servera, kto vsetko je ucastnikom |
|
157 |
-# #chat = App.Collections.chats.findById(result.chat_id) |
|
174 |
+ tab.chatWindow.appendMessage(contact, new Date(), result.message) |
|
158 | 175 |
) |
159 | 176 |
|
160 | 177 |
Models: |
... | ... |
@@ -13,8 +13,6 @@ class Xmpp.Models.Chat extends Xmpp.Models.Model |
13 | 13 |
if (@get('isMultiChat')) |
14 | 14 |
@set('withWhom', []) |
15 | 15 |
|
16 |
- #App.Com.openNewMultiChatId(@get('who').get('jid'), @get('withWhom').get('jid'), this) |
|
17 |
- |
|
18 | 16 |
appendWithWhom: (newPerson) -> |
19 | 17 |
allWithWhom = @get('withWhom'); |
20 | 18 |
|
... | ... |
@@ -57,7 +55,7 @@ class Xmpp.Models.Chat extends Xmpp.Models.Model |
57 | 57 |
|
58 | 58 |
@set('who', ownerContact) |
59 | 59 |
|
60 |
- App.debug ['importing contacts to chat', this] |
|
60 |
+ App.debug ['importing contacts to chat', this, this.get('chatId')] |
|
61 | 61 |
|
62 | 62 |
|
63 | 63 |
class Xmpp.Collections.ChatsCollection extends Backbone.Collection |
... | ... |
@@ -76,7 +74,9 @@ class Xmpp.Collections.ChatsCollection extends Backbone.Collection |
76 | 76 |
) |
77 | 77 |
|
78 | 78 |
findById: (id) -> |
79 |
- @findWhere(chatId: id) |
|
79 |
+ _.find(@models, (chat) -> |
|
80 |
+ chat.get('chatId') == id |
|
81 |
+ ) |
|
80 | 82 |
|
81 | 83 |
removeChat: (chat) -> |
82 | 84 |
@models = _.without(@openedChats, chat) |
... | ... |
@@ -20,7 +20,7 @@ class Xmpp.Models.Me extends Xmpp.Models.Contact |
20 | 20 |
sendMessage: (message, chatId, to, callbackOk, callbackFail) -> |
21 | 21 |
App.debug ['sending from:', @get('jid'), message] |
22 | 22 |
|
23 |
- if (! chatId) |
|
23 |
+ if (to) |
|
24 | 24 |
App.Com.sendMessage(message, to, @get('jid'), callbackOk, callbackFail) |
25 | 25 |
else |
26 | 26 |
App.Com.sendMultiMessage(message, chatId, @get('jid'), callbackOk, callbackFail) |
27 | 27 |
\ No newline at end of file |
... | ... |
@@ -47,15 +47,17 @@ class Xmpp.Views.Chat.WindowView extends Backbone.View |
47 | 47 |
e.preventDefault() |
48 | 48 |
$this = $(e.currentTarget) |
49 | 49 |
input = $this.find(@inputSelector) |
50 |
- message = input.val().trim() |
|
50 |
+ message = input.val() |
|
51 | 51 |
input.val('').focus() |
52 | 52 |
|
53 |
- if (message) |
|
54 |
- attendant = @tab.getAttendant().get('jid') |
|
55 |
- @tab.getOwner().sendMessage(message, @tab.getChatId(), attendant |
|
53 |
+ if (message.trim()) |
|
54 |
+ chatId = @tab.getChatId() |
|
55 |
+ attendant = if not chatId then @tab.getAttendant().get('jid') else null |
|
56 |
+ |
|
57 |
+ App.Models.me.sendMessage(message, chatId, attendant |
|
56 | 58 |
, (message) => |
57 | 59 |
@sendSuccess(@tab.getOwner(), message) |
58 |
- , (message) -> |
|
60 |
+ , (message) => |
|
59 | 61 |
@sendFail(message)) |
60 | 62 |
|
61 | 63 |
sendSuccess: (me, msg) -> |
... | ... |
@@ -65,10 +65,11 @@ class Xmpp.Views.Contacts.ContactView extends Backbone.View |
65 | 65 |
App.debug 'new multichat' |
66 | 66 |
withWhom = @model |
67 | 67 |
|
68 |
- newChat = new Xmpp.Models.Chat(isMultiChat: true); |
|
69 |
- newChat.set('who', App.Models.me); |
|
70 |
- newChat.appendWithWhom(withWhom); |
|
68 |
+ newChat = new Xmpp.Models.Chat(isMultiChat: true) |
|
69 |
+ newChat.set('who', App.Models.me) |
|
70 |
+ newChat.appendWithWhom(withWhom) |
|
71 | 71 |
|
72 |
+ App.Collections.chats.add(newChat) |
|
72 | 73 |
App.Com.openNewMultiChat(App.Models.me, withWhom, newChat) |
73 | 74 |
|
74 | 75 |
openChatById: (chatId) -> |
... | ... |
@@ -30,20 +30,20 @@ class WsChatController < WsController |
30 | 30 |
end |
31 | 31 |
|
32 | 32 |
def import_people_in_chat(message, chat_id) |
33 |
- Rails.logger.debug ['imported chat arrived', message.to_s, chat_id] |
|
33 |
+ #Rails.logger.debug ['imported chat arrived', message.to_s, chat_id] |
|
34 | 34 |
|
35 |
- client = find_client(message.to) |
|
35 |
+ client = find_client(message.to.strip.to_s) |
|
36 | 36 |
contacts = xml_contacts_to_array(message.first_element('exported_chat')) |
37 | 37 |
|
38 | 38 |
connection_store[:opened_chats] = {} if ! connection_store[:opened_chats] |
39 | 39 |
connection_store[:opened_chats][client] = {} if ! connection_store[:opened_chats][client] |
40 | 40 |
connection_store[:opened_chats][client][chat_id] = {attendants: contacts, owner: message.from.node + '@' + message.from.domain} |
41 | 41 |
|
42 |
- Rails.logger.debug [ |
|
43 |
- owner: message.from.node + '@' + message.from.domain, |
|
44 |
- chat_id: chat_id, |
|
45 |
- contacts: contacts |
|
46 |
- ] |
|
42 |
+ #Rails.logger.debug [ |
|
43 |
+ # owner: message.from.node + '@' + message.from.domain, |
|
44 |
+ # chat_id: chat_id, |
|
45 |
+ # contacts: contacts |
|
46 |
+ #] |
|
47 | 47 |
|
48 | 48 |
send_message 'app.chat.importChat', |
49 | 49 |
owner: message.from.node + '@' + message.from.domain, |
... | ... |
@@ -87,8 +87,8 @@ class WsChatController < WsController |
87 | 87 |
if client |
88 | 88 |
chat_id = message[:chatId] |
89 | 89 |
if chat_id |
90 |
- attendants = connection_store[:opened_chats][client][chat_id][:attendants] |
|
91 |
- + connection_store[:opened_chats][client][chat_id][:owner] |
|
90 |
+ attendants = connection_store[:opened_chats][client][chat_id][:attendants] + [connection_store[:opened_chats][client][chat_id][:owner]] |
|
91 |
+ attendants -= [client.jid.strip.to_s] |
|
92 | 92 |
|
93 | 93 |
messages = MessageBuilder::build_multi_messages(message[:message], client.jid.strip.to_s, attendants, chat_id) |
94 | 94 |
else |
... | ... |
@@ -97,6 +97,7 @@ class WsChatController < WsController |
97 | 97 |
|
98 | 98 |
# Xmpp4r doesn't support XEP-0033 (multicast messages) |
99 | 99 |
messages.each do |message| |
100 |
+ #Rails.logger.debug message.to_s |
|
100 | 101 |
client.send(message) |
101 | 102 |
end |
102 | 103 |
|
... | ... |
@@ -117,16 +118,17 @@ class WsChatController < WsController |
117 | 117 |
private |
118 | 118 |
|
119 | 119 |
def process_incoming_message(message) |
120 |
+ #Rails.logger.debug message |
|
120 | 121 |
send_message 'app.chat.messageReceived', |
121 | 122 |
from: message.from.strip.to_s, |
122 | 123 |
to: message.to.strip.to_s, |
123 | 124 |
message: message.body, |
124 |
- chat_id: if message.attribute(:is_simulating) then message.attribute(:chat_id) end |
|
125 |
+ chat_id: message.attribute('chat_id').to_s |
|
125 | 126 |
end |
126 | 127 |
|
127 | 128 |
def send_contacts(message, chat_id) |
128 |
- from = message.from |
|
129 |
- client = find_client(message.to) |
|
129 |
+ from = message.from.strip.to_s |
|
130 |
+ client = find_client(message.to.strip.to_s) |
|
130 | 131 |
contacts = connection_store[:opened_chats][client][chat_id][:attendants] |
131 | 132 |
client.send(MessageBuilder::send_multichat_contacts(client.jid.strip.to_s, from, chat_id, contacts)) |
132 | 133 |
end |