Browse code

FIX: Aktualizovanie zoznamu ludi v multichate

Cinan Rakosnik authored on 08/05/2013 at 11:59:29
Showing 2 changed files
... ...
@@ -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?