... | ... |
@@ -188,9 +188,6 @@ this.App = |
188 | 188 |
App.debug ['message received', result] |
189 | 189 |
|
190 | 190 |
if (result.chat_id) |
191 |
- _.each(App.Collections.chats.models, (chat) -> |
|
192 |
- App.debug chat.get('chatId') |
|
193 |
- ) |
|
194 | 191 |
chat = App.Collections.chats.findById(result.chat_id) |
195 | 192 |
|
196 | 193 |
Backbone.Events.trigger('openChat', chat) |
... | ... |
@@ -200,7 +197,7 @@ this.App = |
200 | 200 |
) |
201 | 201 |
|
202 | 202 |
tab.showChat() |
203 |
- contact = App.Collections.contacts.findByJid(result.from) |
|
203 |
+ contact = App.Collections.contacts.findByJid(App.stripJid(result.from)) |
|
204 | 204 |
tab.chatWindow.appendMessage(contact, new Date(), result.message) |
205 | 205 |
else |
206 | 206 |
#TODO: prepisat tuto hrozu |
... | ... |
@@ -15,9 +15,9 @@ class WsChatController < WsController |
15 | 15 |
# # toto mozem prijat len ako ucastnik multichatu (nie admin) |
16 | 16 |
# contacts = xml_contacts_to_array(answer) |
17 | 17 |
# sync_contacts_frontend(message.from, message.to, answer.attribute('chat_id').to_s, contacts) |
18 |
- #elsif answer = message.first_element('exported_chat') |
|
19 |
- # contacts = xml_contacts_to_array(message.first_element('exported_chat')) |
|
20 |
- # import_people_in_chat(message.from, message.to, answer.attribute('chat_id').to_s, contacts) |
|
18 |
+ elsif answer = message.first_element('exported_chat') |
|
19 |
+ contacts = xml_contacts_to_array(message.first_element('exported_chat')) |
|
20 |
+ import_people_in_chat(message.from, message.to, answer.attribute('chat_id').to_s, contacts) |
|
21 | 21 |
#elsif message.attribute('destroy_multichat') |
22 | 22 |
# destroy_multichat(to, chat_id) |
23 | 23 |
#elsif message.attribute('req_update_contacts') |
... | ... |
@@ -38,15 +38,15 @@ class WsChatController < WsController |
38 | 38 |
end |
39 | 39 |
end |
40 | 40 |
|
41 |
- def import_people_in_chat(from, to, chat_id, contacts) |
|
41 |
+ def import_people_in_chat(owner, me, chat_id, contacts) |
|
42 | 42 |
#Rails.logger.debug ['imported chat arrived', message.to_s, chat_id] |
43 |
- client = find_client(to) |
|
44 |
- create_opened_chat(client, chat_id, from, contacts) |
|
43 |
+ client = find_client(me.strip.to_s) |
|
44 |
+ create_opened_chat(client, chat_id, owner.to_s, contacts) |
|
45 | 45 |
|
46 | 46 |
send_message 'app.chat.importChat', |
47 |
- owner: from, |
|
47 |
+ owner: owner.strip.to_s, |
|
48 | 48 |
chat_id: chat_id, |
49 |
- contacts: contacts |
|
49 |
+ contacts: strip_all(contacts) |
|
50 | 50 |
end |
51 | 51 |
|
52 | 52 |
# Owner vytvori najprv u seba novy multichat |
... | ... |
@@ -56,7 +56,7 @@ class WsChatController < WsController |
56 | 56 |
chat_id = hash + Time.now.to_f.to_s |
57 | 57 |
client = find_client(me) |
58 | 58 |
|
59 |
- create_opened_chat(client, chat_id, me) |
|
59 |
+ create_opened_chat(client, chat_id, client.jid.to_s) |
|
60 | 60 |
|
61 | 61 |
trigger_success id: chat_id |
62 | 62 |
end |
... | ... |
@@ -67,33 +67,39 @@ class WsChatController < WsController |
67 | 67 |
|
68 | 68 |
chat_id = message[:chatId] |
69 | 69 |
add = message[:jid] |
70 |
+ add_resource = find_multichat_supported(add) |
|
70 | 71 |
|
71 |
- connection_store[:opened_chats][client][chat_id][:attendants] << add |
|
72 |
+ if add_resource |
|
73 |
+ connection_store[:opened_chats][client][chat_id][:attendants] << add_resource |
|
74 |
+ #Rails.logger.debug ['adding to multichat', add_resource] |
|
72 | 75 |
|
73 |
- contacts = connection_store[:opened_chats][client][chat_id][:attendants] |
|
76 |
+ contacts = connection_store[:opened_chats][client][chat_id][:attendants] |
|
74 | 77 |
|
75 |
- contacts.each do |contact| |
|
76 |
- client.send(MessageBuilder::export_multichat(client.jid.strip.to_s, contact, chat_id, contacts)) |
|
77 |
- end |
|
78 |
+ contacts.each do |contact| |
|
79 |
+ client.send(MessageBuilder::export_multichat(client.jid.to_s, contact, chat_id, contacts)) |
|
80 |
+ end |
|
78 | 81 |
|
79 |
- trigger_success |
|
82 |
+ trigger_success |
|
83 |
+ else |
|
84 |
+ #Rails.logger.debug ['adding to multichat failure', connection_store[:presences][add]] |
|
85 |
+ trigger_failure |
|
86 |
+ end |
|
80 | 87 |
end |
81 | 88 |
|
82 | 89 |
def send_chat_message |
83 | 90 |
me = message[:from] |
84 | 91 |
client = find_client(me) |
92 |
+ my_jid = client.jid.to_s |
|
85 | 93 |
|
86 | 94 |
if client |
87 | 95 |
chat_id = message[:chatId] |
88 | 96 |
if chat_id |
89 |
- me = client.jid.strip.to_s |
|
90 | 97 |
attendants = connection_store[:opened_chats][client][chat_id][:attendants] + [connection_store[:opened_chats][client][chat_id][:owner]] |
91 |
- attendants -= [me] |
|
98 |
+ attendants -= [my_jid] |
|
92 | 99 |
|
93 |
- messages = MessageBuilder::build_multi_messages(message[:message], me, attendants, chat_id) |
|
94 |
- #Rails.logger.debug messages |
|
100 |
+ messages = MessageBuilder::build_multi_messages(message[:message], my_jid, attendants, chat_id) |
|
95 | 101 |
else |
96 |
- messages = [MessageBuilder::build_message(message[:message], me, message[:to])] |
|
102 |
+ messages = [MessageBuilder::build_message(message[:message], my_jid, message[:to])] |
|
97 | 103 |
end |
98 | 104 |
|
99 | 105 |
# Xmpp4r doesn't support XEP-0033 (multicast messages) |
... | ... |
@@ -14,11 +14,6 @@ class WsController < WebsocketRails::BaseController |
14 | 14 |
end |
15 | 15 |
end |
16 | 16 |
|
17 |
- def find_client_jid(client_jid) |
|
18 |
- client = find_client(client_jid) |
|
19 |
- client.jid.strip.to_s |
|
20 |
- end |
|
21 |
- |
|
22 | 17 |
def where_i_am_multichat_owner |
23 | 18 |
chats_owner = {} |
24 | 19 |
|
... | ... |
@@ -73,4 +68,21 @@ class WsController < WebsocketRails::BaseController |
73 | 73 |
contact.text |
74 | 74 |
end |
75 | 75 |
end |
76 |
+ |
|
77 |
+ def find_multichat_supported(jid_stripped) |
|
78 |
+ contact = connection_store[:presences][jid_stripped.to_sym].find do |resource, info| |
|
79 |
+ info[:multichat] |
|
80 |
+ end |
|
81 |
+ contact.first |
|
82 |
+ end |
|
83 |
+ |
|
84 |
+ def strip_all(contacts) |
|
85 |
+ if contacts.is_a? Array |
|
86 |
+ contacts.map do |jid| |
|
87 |
+ Jabber::JID.new(jid).strip!.to_s |
|
88 |
+ end |
|
89 |
+ else |
|
90 |
+ contacts |
|
91 |
+ end |
|
92 |
+ end |
|
76 | 93 |
end |
77 | 94 |
\ No newline at end of file |
... | ... |
@@ -235,7 +235,7 @@ class WsRosterController < WsController |
235 | 235 |
connection_store[:clients].each do |client| |
236 | 236 |
client.add_message_callback do |message| |
237 | 237 |
if message.attribute('i_am_using_same_app') |
238 |
- connection_store[:presences][message.from.strip.to_s][message.from.to_s.to_sym][multichat: true] |
|
238 |
+ connection_store[:presences][message.from.strip.to_s][message.from.to_s.to_sym][:multichat] = true |
|
239 | 239 |
|
240 | 240 |
send_message 'app.roster.using_this_app', |
241 | 241 |
jid: message.from.strip.to_s |
... | ... |
@@ -271,7 +271,7 @@ class WsRosterController < WsController |
271 | 271 |
priority: new_presence.priority |
272 | 272 |
} |
273 | 273 |
|
274 |
- ask_if_using_this_app(connection_store[:link_roster_client][roster], new_presence.from.strip.to_s) |
|
274 |
+ ask_if_using_this_app(connection_store[:link_roster_client][roster], new_presence.from.to_s) |
|
275 | 275 |
end |
276 | 276 |
|
277 | 277 |
result[:status] = select_most_online_status(roster_item.jid.strip.to_s) |
... | ... |
@@ -297,10 +297,6 @@ class WsRosterController < WsController |
297 | 297 |
end |
298 | 298 |
|
299 | 299 |
def ask_if_using_this_app(client, contact) |
300 |
- return unless connection_store[:presences][contact] |
|
301 |
- |
|
302 |
- connection_store[:presences][contact].each do |jid_resource, state| |
|
303 |
- client.send(MessageBuilder::control_question(client.jid.to_s, jid_resource.to_s)) |
|
304 |
- end |
|
300 |
+ client.send(MessageBuilder::control_question(client.jid.to_s, contact)) |
|
305 | 301 |
end |
306 | 302 |
end |