| ... | ... |
@@ -106,6 +106,17 @@ this.App = |
| 106 | 106 |
App.Collections.contacts.subscriptionChanged(subscription) |
| 107 | 107 |
) |
| 108 | 108 |
|
| 109 |
+ App._dispatcher.bind('app.chat.importChat', (chatData) ->
|
|
| 110 |
+ newChat = new Xmpp.Models.Chat( |
|
| 111 |
+ chatId: chatData.chat_id, |
|
| 112 |
+ isMultiChat: true |
|
| 113 |
+ ); |
|
| 114 |
+ |
|
| 115 |
+ App.Collections.chats.add(newChat); |
|
| 116 |
+ newChat.syncContacts(chatData.contacts, chatData.owner); |
|
| 117 |
+ Backbone.Events.trigger('openChat', newChat)
|
|
| 118 |
+ ) |
|
| 119 |
+ |
|
| 109 | 120 |
App._dispatcher.bind('app.chat.messageReceived', (result) ->
|
| 110 | 121 |
App.debug 'message received' |
| 111 | 122 |
|
| ... | ... |
@@ -29,6 +29,34 @@ class Xmpp.Models.Chat extends Xmpp.Models.Model |
| 29 | 29 |
App.debug ['multichat has id', id] |
| 30 | 30 |
@set('chatId', id)
|
| 31 | 31 |
|
| 32 |
+ syncContacts: (contacts, owner) -> |
|
| 33 |
+ contactsWithoutMe = _.filter(contacts, (jid) -> |
|
| 34 |
+ jid != App.Models.me.get('jid')
|
|
| 35 |
+ ) |
|
| 36 |
+ |
|
| 37 |
+ attendants = _.map(contactsWithoutMe, (jid) => |
|
| 38 |
+ contact = App.Collections.contacts.findByJid(jid) |
|
| 39 |
+ if not contact |
|
| 40 |
+ newTempContact = @createTempContact(jid) |
|
| 41 |
+ App.Collections.contacts.add(newTempContact) |
|
| 42 |
+ contact = newTempContact |
|
| 43 |
+ |
|
| 44 |
+ contact |
|
| 45 |
+ ) |
|
| 46 |
+ |
|
| 47 |
+ @set('withWhom', attendants);
|
|
| 48 |
+ |
|
| 49 |
+ if owner |
|
| 50 |
+ ownerContact = App.Collections.contacts.findByJid(owner) |
|
| 51 |
+ if not ownerContact |
|
| 52 |
+ ownerContact = @createTempContact(owner) |
|
| 53 |
+ App.Collections.contacts.add(ownerContact) |
|
| 54 |
+ |
|
| 55 |
+ @set('who', ownerContact)
|
|
| 56 |
+ |
|
| 57 |
+ App.debug ['importing contacts to chat', this] |
|
| 58 |
+ |
|
| 59 |
+ |
|
| 32 | 60 |
class Xmpp.Collections.ChatsCollection extends Backbone.Collection |
| 33 | 61 |
model: Xmpp.Models.Chat |
| 34 | 62 |
|
| ... | ... |
@@ -48,4 +76,8 @@ class Xmpp.Collections.ChatsCollection extends Backbone.Collection |
| 48 | 48 |
@findWhere(chatId: id) |
| 49 | 49 |
|
| 50 | 50 |
removeChat: (chat) -> |
| 51 |
- @models = _.without(@openedChats, chat) |
|
| 52 | 51 |
\ No newline at end of file |
| 52 |
+ @models = _.without(@openedChats, chat) |
|
| 53 |
+ |
|
| 54 |
+ createTempContact: (jid) -> |
|
| 55 |
+ newTempContact = new Xmpp.Models.Contact(jid: jid, belongsTo: [App.Models.me]) |
|
| 56 |
+ newTempContact |
|
| 53 | 57 |
\ No newline at end of file |
| ... | ... |
@@ -9,12 +9,12 @@ class WsChatController < WsController |
| 9 | 9 |
process_incoming_message(message) |
| 10 | 10 |
elsif request = message.first_element('sync_contacts_request')
|
| 11 | 11 |
# toto mozem prijat len ako admin multichatu |
| 12 |
- send_contacts(message, request.attribute('chat_id'))
|
|
| 12 |
+ send_contacts(message, request.attribute('chat_id').to_s)
|
|
| 13 | 13 |
elsif answer = message.first_element('synced_contacts')
|
| 14 | 14 |
# toto mozem prijat len ako ucastnik multichatu (nie admin) |
| 15 |
- sync_contacts_frontend(message, answer.attribute('chat_id'))
|
|
| 16 |
- elsif message.first_element('exported_chat')
|
|
| 17 |
- import_people_in_chat(message) |
|
| 15 |
+ sync_contacts_frontend(message, answer.attribute('chat_id').to_s)
|
|
| 16 |
+ elsif answer = message.first_element('exported_chat')
|
|
| 17 |
+ import_people_in_chat(message, answer.attribute('chat_id').to_s)
|
|
| 18 | 18 |
end |
| 19 | 19 |
#TODO: upozornit na pisanie spravy |
| 20 | 20 |
#TODO: odoslat informaciu o tom, ze pisem spravu |
| ... | ... |
@@ -29,14 +29,26 @@ class WsChatController < WsController |
| 29 | 29 |
end |
| 30 | 30 |
end |
| 31 | 31 |
|
| 32 |
- def import_people_in_chat(message) |
|
| 32 |
+ def import_people_in_chat(message, chat_id) |
|
| 33 |
+ Rails.logger.debug ['imported chat arrived', message.to_s, chat_id] |
|
| 34 |
+ |
|
| 33 | 35 |
client = find_client(message.to) |
| 34 |
- chat_id = message.attribute('chat_id')
|
|
| 35 | 36 |
contacts = xml_contacts_to_array(message.first_element('exported_chat'))
|
| 36 | 37 |
|
| 37 | 38 |
connection_store[:opened_chats] = {} if ! connection_store[:opened_chats]
|
| 38 | 39 |
connection_store[:opened_chats][client] = {} if ! connection_store[:opened_chats][client]
|
| 39 |
- connection_store[:opened_chats][client][chat_id] = {attendants: contacts, owner: message.from}
|
|
| 40 |
+ connection_store[:opened_chats][client][chat_id] = {attendants: contacts, owner: message.from.node + '@' + message.from.domain}
|
|
| 41 |
+ |
|
| 42 |
+ Rails.logger.debug [ |
|
| 43 |
+ owner: message.from.node + '@' + message.from.domain, |
|
| 44 |
+ chat_id: chat_id, |
|
| 45 |
+ contacts: contacts |
|
| 46 |
+ ] |
|
| 47 |
+ |
|
| 48 |
+ send_message 'app.chat.importChat', |
|
| 49 |
+ owner: message.from.node + '@' + message.from.domain, |
|
| 50 |
+ chat_id: chat_id, |
|
| 51 |
+ contacts: contacts |
|
| 40 | 52 |
end |
| 41 | 53 |
|
| 42 | 54 |
# Owner vytvori najprv u seba novy multichat |