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|
                 #    if contacts[:owner] == client.jid.strip.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]
             contacts -= [kick]
 
             if contacts.empty?
88c1de39
                 destroy_multichat(client.jid.strip.to_s, chat_id)
5011e360
             else
                 contacts.each do |contact|
                     client.send(MessageBuilder::send_multichat_contacts(client.jid.strip.to_s, contact, chat_id, contacts))
                 end
 
9948b399
                 sync_contacts_frontend('', client.jid.strip.to_s, chat_id, contacts)
5011e360
             end
         end
     end
 
9948b399
     def sync_contacts_frontend(from, to, chat_id, contacts)
5011e360
         send_message 'app.chat.updateSyncedContacts',
9948b399
                      me: to,
5011e360
                      contacts: contacts,
9948b399
                      owner: from,
5011e360
                      chat_id: chat_id
     end
 
88c1de39
     def destroy_multichat(to, chat_id)
         client = find_client(to)
         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