| ... | ... |
@@ -14,15 +14,13 @@ class WsController < WebsocketRails::BaseController |
| 14 | 14 |
end |
| 15 | 15 |
end |
| 16 | 16 |
|
| 17 |
- def where_i_am_multichat_owner |
|
| 18 |
- chats_owner = {}
|
|
| 19 |
- |
|
| 20 |
- if connection_store[:opened_chats] |
|
| 21 |
- connection_store[:clients].each do |client| |
|
| 22 |
- connection_store[:opened_chats][client].each do |chat_id, contacts| |
|
| 23 |
- if contacts[:owner] == client.jid.to_s |
|
| 24 |
- chats_owner[client] = chat_id |
|
| 25 |
- end |
|
| 17 |
+ def where_i_am_multichat_owner(client) |
|
| 18 |
+ chats_owner = [] |
|
| 19 |
+ |
|
| 20 |
+ if connection_store[:opened_chats] and connection_store[:opened_chats][client] |
|
| 21 |
+ connection_store[:opened_chats][client].each do |chat_id, contacts| |
|
| 22 |
+ if contacts[:owner] == client.jid.to_s |
|
| 23 |
+ chats_owner << chat_id |
|
| 26 | 24 |
end |
| 27 | 25 |
end |
| 28 | 26 |
end |
| ... | ... |
@@ -30,11 +28,11 @@ class WsController < WebsocketRails::BaseController |
| 30 | 30 |
chats_owner |
| 31 | 31 |
end |
| 32 | 32 |
|
| 33 |
- def kick_from_all_multichats(kick) |
|
| 34 |
- chats = where_i_am_multichat_owner() |
|
| 35 |
- chats.each do |client, chat_id| |
|
| 33 |
+ def kick_from_all_multichats(client, somebody_to_kick) |
|
| 34 |
+ chats = where_i_am_multichat_owner(client) |
|
| 35 |
+ chats.each do |chat_id| |
|
| 36 | 36 |
contacts = connection_store[:opened_chats][client][chat_id][:attendants] |
| 37 |
- contacts -= [kick.to_s] |
|
| 37 |
+ contacts -= [somebody_to_kick.to_s] |
|
| 38 | 38 |
|
| 39 | 39 |
if contacts.empty? |
| 40 | 40 |
destroy_multichat(client.jid, chat_id) |
| ... | ... |
@@ -48,6 +46,16 @@ class WsController < WebsocketRails::BaseController |
| 48 | 48 |
end |
| 49 | 49 |
end |
| 50 | 50 |
|
| 51 |
+ def kick_myself_from_multichat(client, owner) |
|
| 52 |
+ if connection_store[:opened_chats] and connection_store[:opened_chats][client] |
|
| 53 |
+ connection_store[:opened_chats][client].each do |chat_id, chat| |
|
| 54 |
+ if chat[:owner] == owner.to_s and chat[:attendants].include? client.jid.to_s |
|
| 55 |
+ destroy_multichat(client.jid, chat_id) |
|
| 56 |
+ end |
|
| 57 |
+ end |
|
| 58 |
+ end |
|
| 59 |
+ end |
|
| 60 |
+ |
|
| 51 | 61 |
def sync_contacts_frontend(owner, me, chat_id, contacts) |
| 52 | 62 |
send_message 'app.chat.updateSyncedContacts', |
| 53 | 63 |
me: me.strip.to_s, |
| ... | ... |
@@ -255,8 +255,12 @@ class WsRosterController < WsController |
| 255 | 255 |
connection_store[:presences][roster_item.jid.strip.to_s.to_sym].delete(new_presence.from.to_s) |
| 256 | 256 |
end |
| 257 | 257 |
|
| 258 |
+ client = connection_store[:link_roster_client][roster] |
|
| 258 | 259 |
# mozno treba vyhodit cloveka z multichatu, ak som jeho owner |
| 259 |
- kick_from_all_multichats(new_presence.from) |
|
| 260 |
+ kick_from_all_multichats(client, new_presence.from) |
|
| 261 |
+ |
|
| 262 |
+ # mozno treba sa odpojit z multichatu, ak sa odpojil jeho owner |
|
| 263 |
+ kick_myself_from_multichat(client, new_presence.from) |
|
| 260 | 264 |
else |
| 261 | 265 |
status = uniform_presence(new_presence.show) |
| 262 | 266 |
result = {message: new_presence.status.to_s}
|