... | ... |
@@ -6,13 +6,14 @@ class WsChatController < WsController |
6 | 6 |
#noinspection RubyAssignmentExpressionInConditionalInspection |
7 | 7 |
if message.body |
8 | 8 |
process_incoming_message(message.from, message.to, message.body, message.attribute('chat_id').to_s) |
9 |
- #elsif request = message.first_element('sync_contacts_request') |
|
10 |
- # # toto mozem prijat len ako admin multichatu |
|
11 |
- # send_contacts(message.from, message.to, request.attribute('chat_id').to_s) |
|
12 |
- #elsif answer = message.first_element('synced_contacts') |
|
13 |
- # # toto mozem prijat len ako ucastnik multichatu (nie admin) |
|
14 |
- # contacts = xml_contacts_to_array(answer) |
|
15 |
- # sync_contacts_frontend(message.from, message.to, answer.attribute('chat_id').to_s, contacts) |
|
9 |
+ elsif request = message.first_element('sync_contacts_request') |
|
10 |
+ # toto mozem prijat len ako admin multichatu |
|
11 |
+ send_contacts(message.from, message.to, request.attribute('chat_id').to_s) |
|
12 |
+ elsif answer = message.first_element('synced_contacts') |
|
13 |
+ # toto mozem prijat len ako ucastnik multichatu (nie admin) |
|
14 |
+ contacts = xml_contacts_to_array(answer) |
|
15 |
+ # TODO: ulozit aj v datastore kontakty |
|
16 |
+ sync_contacts_frontend(message.from, message.to, answer.attribute('chat_id').to_s, contacts) |
|
16 | 17 |
elsif answer = message.first_element('exported_chat') |
17 | 18 |
contacts = xml_contacts_to_array(message.first_element('exported_chat')) |
18 | 19 |
import_people_in_chat(message.from, message.to, answer.attribute('chat_id').to_s, contacts) |
... | ... |
@@ -138,6 +139,33 @@ class WsChatController < WsController |
138 | 138 |
connection_store[:opened_chats][client].delete(chat_id) |
139 | 139 |
end |
140 | 140 |
|
141 |
+ def kick_from_multichat |
|
142 |
+ chat_id = message[:chatId] |
|
143 |
+ client = find_client(message[:me]) |
|
144 |
+ kick_stripped = message[:kick] |
|
145 |
+ |
|
146 |
+ contacts = connection_store[:opened_chats][client][chat_id][:attendants] |
|
147 |
+ kick = contacts.find do |contact| |
|
148 |
+ contact =~ /^#{kick_stripped}/ |
|
149 |
+ end |
|
150 |
+ |
|
151 |
+ return if kick.nil? |
|
152 |
+ |
|
153 |
+ contacts -= [kick] |
|
154 |
+ connection_store[:opened_chats][client][chat_id][:attendants] = contacts |
|
155 |
+ |
|
156 |
+ client.send(MessageBuilder::kick_from_multichat(client.jid.to_s, kick, chat_id)) |
|
157 |
+ |
|
158 |
+ if contacts.empty? |
|
159 |
+ connection_store[:opened_chats][client].delete(chat_id) |
|
160 |
+ send_message 'app.chat.destroyMultichat', chat_id: chat_id |
|
161 |
+ else |
|
162 |
+ contacts.each do |contact| |
|
163 |
+ client.send(MessageBuilder::send_multichat_contacts(client.jid.to_s, contact, chat_id, contacts)) |
|
164 |
+ end |
|
165 |
+ end |
|
166 |
+ end |
|
167 |
+ |
|
141 | 168 |
private |
142 | 169 |
|
143 | 170 |
def process_incoming_message(from, to, body, chat_id = nil) |
... | ... |
@@ -148,10 +176,10 @@ class WsChatController < WsController |
148 | 148 |
chat_id: chat_id |
149 | 149 |
end |
150 | 150 |
|
151 |
- def send_contacts(from, to, chat_id) |
|
152 |
- client = find_client(to) |
|
151 |
+ def send_contacts(to, me, chat_id) |
|
152 |
+ client = find_client(me.strip.to_s) |
|
153 | 153 |
contacts = connection_store[:opened_chats][client][chat_id][:attendants] |
154 |
- client.send(MessageBuilder::send_multichat_contacts(client.jid.strip.to_s, from, chat_id, contacts)) |
|
154 |
+ client.send(MessageBuilder::send_multichat_contacts(me.to_s, to.to_s, chat_id, contacts)) |
|
155 | 155 |
end |
156 | 156 |
|
157 | 157 |
def update_attendants_in_multichat(owner, me, chat_id, removed, added) |
... | ... |
@@ -32,6 +32,7 @@ class WsController < WebsocketRails::BaseController |
32 | 32 |
chats = where_i_am_multichat_owner(client) |
33 | 33 |
chats.each do |chat_id| |
34 | 34 |
contacts = connection_store[:opened_chats][client][chat_id][:attendants] |
35 |
+ #TODO: kontrola, ak ten clovek sa nenasiel v mutlichate - tak nic nerob |
|
35 | 36 |
contacts -= [somebody_to_kick.to_s] |
36 | 37 |
|
37 | 38 |
if contacts.empty? |