app/controllers/ws_controller.rb
2a61cdcc
 class WsController < WebsocketRails::BaseController
 
     protected
 
0f555f4a
     def create_opened_chat(client, chat_id, owner = '', attendants = [])
         connection_store[:opened_chats] = {} if ! connection_store[:opened_chats]
         connection_store[:opened_chats][client] = {} if ! connection_store[:opened_chats][client]
         connection_store[:opened_chats][client][chat_id] = {owner: owner, attendants: attendants}
     end
 
2a61cdcc
     def find_client(client_jid)
         connection_store[:clients].find do |client|
             client.jid.strip.to_s == client_jid
         end
     end
 
88c1de39
     def where_i_am_multichat_owner
5011e360
         chats_owner = {}
f64ad4df
 
         if connection_store[:opened_chats]
             connection_store[:clients].each do |client|
                 connection_store[:opened_chats][client].each do |chat_id, contacts|
90472b75
                     if contacts[:owner] == client.jid.to_s
                         chats_owner[client] = chat_id
                     end
5011e360
                 end
             end
         end
 
         chats_owner
     end
 
88c1de39
     def kick_from_all_multichats(kick)
         chats = where_i_am_multichat_owner()
5011e360
         chats.each do |client, chat_id|
             contacts = connection_store[:opened_chats][client][chat_id][:attendants]
90472b75
             contacts -= [kick.to_s]
5011e360
 
             if contacts.empty?
90472b75
                 destroy_multichat(client.jid, chat_id)
5011e360
             else
                 contacts.each do |contact|
90472b75
                     client.send(MessageBuilder::send_multichat_contacts(client.jid.to_s, contact, chat_id, contacts))
5011e360
                 end
 
90472b75
                 sync_contacts_frontend(client.jid, client.jid, chat_id, contacts)
5011e360
             end
         end
     end
 
90472b75
     def sync_contacts_frontend(owner, me, chat_id, contacts)
5011e360
         send_message 'app.chat.updateSyncedContacts',
90472b75
                      me: me.strip.to_s,
                      contacts: strip_all(contacts),
                      owner: owner.strip.to_s,
5011e360
                      chat_id: chat_id
     end
 
90472b75
     def destroy_multichat(me, chat_id)
         client = find_client(me.strip.to_s)
88c1de39
         connection_store[:opened_chats][client].delete(chat_id)
 
         send_message 'app.chat.destroyMultichat', chat_id: chat_id
     end
 
5011e360
     def xml_contacts_to_array(xml_contacts)
         xml_contacts.get_elements('contact').map do |contact|
             contact.text
         end
     end
e513299a
 
     def find_multichat_supported(jid_stripped)
         contact = connection_store[:presences][jid_stripped.to_sym].find do |resource, info|
             info[:multichat]
         end
         contact.first
     end
 
     def strip_all(contacts)
         if contacts.is_a? Array
             contacts.map do |jid|
                 Jabber::JID.new(jid).strip!.to_s
             end
         else
             contacts
         end
     end
2a61cdcc
 end