Browse code

Odpoved na spravu vzdy rovnakemu resourcu, z ktoreho sprava prisla

Cinan Rakosnik authored on 06/05/2013 at 23:48:47
Showing 4 changed files
... ...
@@ -2,6 +2,14 @@ this.App =
2 2
   debug: (msg) ->
3 3
     console.log msg
4 4
 
5
+  stripJid: (jid) ->
6
+    r = new RegExp('(^.*)\/.*$')
7
+    match = r.exec(jid)
8
+    if match and (match.length > 0)
9
+      return match[1]
10
+    else
11
+      return jid
12
+
5 13
   UI:
6 14
     setAutoHeight: ->
7 15
       height = $(window).height()
... ...
@@ -198,7 +206,8 @@ this.App =
198 198
           #TODO: prepisat tuto hrozu
199 199
 
200 200
 
201
-          contact = App.Collections.contacts.findByJid(result.from)
201
+          contact = App.Collections.contacts.findByJid(App.stripJid(result.from))
202
+          contact.setPreferredResource(result.from)
202 203
 
203 204
           if contact
204 205
             contactView = App.Collections.contacts.friendsList.hasContact(contact) ||
... ...
@@ -3,6 +3,7 @@ class Xmpp.Models.Contact extends Xmpp.Models.Model
3 3
 
4 4
   defaults:
5 5
     jid: ''
6
+    preferredJid: null
6 7
     name: ''
7 8
     status: 'offline'
8 9
     message: ''
... ...
@@ -24,6 +25,12 @@ class Xmpp.Models.Contact extends Xmpp.Models.Model
24 24
   setUsingMyApp: ->
25 25
     @set('usingMyApp', true)
26 26
 
27
+  setPreferredResource: (jid) ->
28
+    @set('preferredJid', jid)
29
+
30
+  getPreferredResource: ->
31
+    @get('preferredJid') || @get('jid')
32
+
27 33
 class Xmpp.Collections.ContactsCollection extends Backbone.Collection
28 34
   model: Xmpp.Models.Contact
29 35
 
... ...
@@ -83,7 +90,12 @@ class Xmpp.Collections.ContactsCollection extends Backbone.Collection
83 83
       @_switchContactBelongingList(@get(contact), @activeList, @friendsList) && @friendsList.reOrder()
84 84
 
85 85
   updateStatus: (response) ->
86
-    @get(response.jid).set(message: response.status.message, status: response.status.status)
86
+    contact = @get(response.jid)
87
+    return unless contact
88
+
89
+    contact.set(message: response.status.message, status: response.status.status)
90
+    if response.status.status == 'offline'
91
+      contact.setPreferredResource(null)
87 92
 
88 93
   udpateVcard: (response) ->
89 94
     @get(response.jid).set(name: response.vcard.name, avatar: response.vcard.avatar)
... ...
@@ -52,7 +52,7 @@ class Xmpp.Views.Chat.WindowView extends Backbone.View
52 52
 
53 53
     if (message.trim())
54 54
       chatId = @tab.getChatId()
55
-      attendant = if not chatId then @tab.getAttendant().get('jid') else null
55
+      attendant = if not chatId then @tab.getAttendant().getPreferredResource() else null
56 56
 
57 57
       App.Models.me.sendMessage(message, chatId, attendant
58 58
       , (message) =>
... ...
@@ -3,29 +3,27 @@ class WsChatController < WsController
3 3
     def start_polling_messages
4 4
         connection_store[:clients].each do |client|
5 5
             client.add_message_callback do |message|
6
-                from = message.from.strip.to_s
7
-                to   = message.to.strip.to_s
8 6
                 chat_id = message.attribute('chat_id').to_s
9 7
 
10 8
                 #noinspection RubyAssignmentExpressionInConditionalInspection
11 9
                 if message.body
12
-                    process_incoming_message(from, to, message.body, chat_id)
13
-                elsif request = message.first_element('sync_contacts_request')
14
-                    # toto mozem prijat len ako admin multichatu
15
-                    send_contacts(from, to, request.attribute('chat_id').to_s)
16
-                elsif answer = message.first_element('synced_contacts')
17
-                    # toto mozem prijat len ako ucastnik multichatu (nie admin)
18
-                    contacts = xml_contacts_to_array(answer)
19
-                    sync_contacts_frontend(from, to, answer.attribute('chat_id').to_s, contacts)
20
-                elsif answer = message.first_element('exported_chat')
21
-                    contacts = xml_contacts_to_array(message.first_element('exported_chat'))
22
-                    import_people_in_chat(from, to, answer.attribute('chat_id').to_s, contacts)
23
-                elsif message.attribute('destroy_multichat')
24
-                    destroy_multichat(to, chat_id)
25
-                elsif message.attribute('req_update_contacts')
26
-                    added   = xml_contacts_to_array(message.first_element('added'))
27
-                    removed = xml_contacts_to_array(message.first_element('removed'))
28
-                    update_attendants_in_multichat(from, to, chat_id, removed, added)
10
+                    process_incoming_message(message.from, message.to, message.body, chat_id)
11
+                #elsif request = message.first_element('sync_contacts_request')
12
+                #    # toto mozem prijat len ako admin multichatu
13
+                #    send_contacts(message.from, message.to, request.attribute('chat_id').to_s)
14
+                #elsif answer = message.first_element('synced_contacts')
15
+                #    # toto mozem prijat len ako ucastnik multichatu (nie admin)
16
+                #    contacts = xml_contacts_to_array(answer)
17
+                #    sync_contacts_frontend(message.from, message.to, answer.attribute('chat_id').to_s, contacts)
18
+                #elsif answer = message.first_element('exported_chat')
19
+                #    contacts = xml_contacts_to_array(message.first_element('exported_chat'))
20
+                #    import_people_in_chat(message.from, message.to, answer.attribute('chat_id').to_s, contacts)
21
+                #elsif message.attribute('destroy_multichat')
22
+                #    destroy_multichat(to, chat_id)
23
+                #elsif message.attribute('req_update_contacts')
24
+                #    added   = xml_contacts_to_array(message.first_element('added'))
25
+                #    removed = xml_contacts_to_array(message.first_element('removed'))
26
+                #    update_attendants_in_multichat(message.from, message.to, chat_id, removed, added)
29 27
                 end
30 28
                 #TODO: upozornit na pisanie spravy
31 29
                 #TODO: odoslat informaciu o tom, ze pisem spravu
... ...
@@ -139,10 +137,9 @@ class WsChatController < WsController
139 139
     private
140 140
 
141 141
     def process_incoming_message(from, to, body, chat_id = nil)
142
-        #Rails.logger.debug [message, message.to.strip.to_s]
143 142
         send_message 'app.chat.messageReceived',
144
-                     from: from,
145
-                     to: to,
143
+                     from: from.to_s,
144
+                     to: to.strip.to_s,
146 145
                      message: body,
147 146
                      chat_id: chat_id
148 147
     end