| ... | ... |
@@ -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? |