| ... | ... |
@@ -137,6 +137,12 @@ this.App = |
| 137 | 137 |
answerFriendRequest: (jid, answer) -> |
| 138 | 138 |
App.Com.trigger(event: 'app.roster.answerFriendRequest', data: { jid: jid, answer: answer})
|
| 139 | 139 |
|
| 140 |
+ checkSavingHistory: (me, chatId, attendant, onSuccess) -> |
|
| 141 |
+ App.Com.trigger(event: 'app.chat.canSaveHistory', data: {me: me, chatId: chatId, attendant: attendant}, success: onSuccess)
|
|
| 142 |
+ |
|
| 143 |
+ setHistory: (me, chatId, attendant, state, onSuccess) -> |
|
| 144 |
+ App.Com.trigger(event: 'app.chat.setHistorySaving', data: {me: me, chatId: chatId, attendant: attendant, enable: state}, success: onSuccess)
|
|
| 145 |
+ |
|
| 140 | 146 |
_setupBackboneComponents: -> |
| 141 | 147 |
App.Collections.contacts = new Xmpp.Collections.ContactsCollection() |
| 142 | 148 |
App.Collections.chats = new Xmpp.Collections.ChatsCollection() |
| ... | ... |
@@ -2,9 +2,11 @@ |
| 2 | 2 |
.history-settings |
| 3 | 3 |
%a.left{href: '#'} Load history
|
| 4 | 4 |
|
| 5 |
- %input.right{ type: 'checkbox', name: 'enable-history', value: '1', id: 'ihistory' }
|
|
| 6 |
- %label.right{ for: 'ihistory' } Disable history
|
|
| 7 |
- %span.right.current History recording is enabled. |
|
| 5 |
+ %input.hidden{ type: 'checkbox', name: 'enable-history', value: '1', id: 'ihistory', checked: 'checked'}
|
|
| 6 |
+ %label.right.action.enabled{ for: 'ihistory' } Disable history
|
|
| 7 |
+ %label.right.action.disabled.hidden{ for: 'ihistory' } Enable history
|
|
| 8 |
+ %span.right.current.enabled History recording is enabled. |
|
| 9 |
+ %span.right.current.disabled.hidden History recording is disabled. |
|
| 8 | 10 |
.messages#height-setter-2 |
| 9 | 11 |
-for view in @history |
| 10 | 12 |
#{view}
|
| ... | ... |
@@ -6,20 +6,31 @@ class Xmpp.Views.Chat.WindowView extends Backbone.View |
| 6 | 6 |
inputSelector: 'input[type=text]' |
| 7 | 7 |
|
| 8 | 8 |
maxHistoryLength: 20 |
| 9 |
+ savingHistory: true |
|
| 9 | 10 |
|
| 10 | 11 |
events: |
| 11 | 12 |
'submit #msg-writer': (e) -> @sendMessage(e) |
| 13 |
+ 'change .history-settings input': 'changeHistorySettings' |
|
| 12 | 14 |
|
| 13 |
- initialize: () -> |
|
| 15 |
+ initialize: (options) -> |
|
| 14 | 16 |
_.bindAll(this) |
| 15 |
- @tab = @attributes['tab'] |
|
| 16 | 17 |
@historyStack = [] |
| 18 |
+ @tab = options.tab |
|
| 19 |
+ |
|
| 20 |
+ chatId = @tab.getChatId() |
|
| 21 |
+ attendant = if not chatId then @tab.getAttendant().getPreferredResource() else null |
|
| 22 |
+ App.Com.checkSavingHistory(App.Models.me.get('jid'), chatId, attendant, (canSave) =>
|
|
| 23 |
+ @savingHistory = canSave |
|
| 24 |
+ @_changeHistoryVisibly(@savingHistory) |
|
| 25 |
+ ) |
|
| 17 | 26 |
|
| 18 | 27 |
render: -> |
| 19 | 28 |
historyStackHtml = _.map(@historyStack, (view) -> |
| 20 | 29 |
view.render().el.outerHTML |
| 21 | 30 |
) |
| 22 | 31 |
$(@el).html(@template(showWriter: true, history: historyStackHtml)) |
| 32 |
+ @_changeHistoryVisibly(@savingHistory) |
|
| 33 |
+ |
|
| 23 | 34 |
@show() |
| 24 | 35 |
return this |
| 25 | 36 |
|
| ... | ... |
@@ -80,4 +91,26 @@ class Xmpp.Views.Chat.WindowView extends Backbone.View |
| 80 | 80 |
if (@historyStack.length + 1 >= @maxHistoryLength) |
| 81 | 81 |
@historyStack = @historyStack.slice(@historyStack.length - @maxHistoryLength + 1) |
| 82 | 82 |
|
| 83 |
- @historyStack.push(view) |
|
| 84 | 83 |
\ No newline at end of file |
| 84 |
+ @historyStack.push(view) |
|
| 85 |
+ |
|
| 86 |
+ changeHistorySettings: (e) -> |
|
| 87 |
+ $input = $(e.currentTarget) |
|
| 88 |
+ state = $input.is(':checked')
|
|
| 89 |
+ |
|
| 90 |
+ chatId = @tab.getChatId() |
|
| 91 |
+ attendant = if not chatId then @tab.getAttendant().getPreferredResource() else null |
|
| 92 |
+ App.Com.setHistory(App.Models.me.get('jid'), chatId, attendant, state, =>
|
|
| 93 |
+ @savingHistory = state |
|
| 94 |
+ @_changeHistoryVisibly(state) |
|
| 95 |
+ ) |
|
| 96 |
+ |
|
| 97 |
+ _changeHistoryVisibly: (currentState) -> |
|
| 98 |
+ if currentState |
|
| 99 |
+ toEnable = '.enabled' |
|
| 100 |
+ toDisable = '.disabled' |
|
| 101 |
+ else |
|
| 102 |
+ toEnable = '.disabled' |
|
| 103 |
+ toDisable = '.enabled' |
|
| 104 |
+ |
|
| 105 |
+ $(@el).find(".action#{toEnable}, .current#{toEnable}").show()
|
|
| 106 |
+ $(@el).find(".action#{toDisable}, .current#{toDisable}").hide()
|
|
| 85 | 107 |
\ No newline at end of file |
| ... | ... |
@@ -56,7 +56,7 @@ class Xmpp.Views.Tabbar.TabView extends Backbone.View |
| 56 | 56 |
|
| 57 | 57 |
showChat: -> |
| 58 | 58 |
if !@chatWindow |
| 59 |
- @chatWindow = new Xmpp.Views.Chat.WindowView(attributes: {tab: this})
|
|
| 59 |
+ @chatWindow = new Xmpp.Views.Chat.WindowView(tab: this) |
|
| 60 | 60 |
App.debug 'zobrazujem NOVY chat window' |
| 61 | 61 |
else |
| 62 | 62 |
App.debug 'zobrazujem EXISTUJUCI chat window' |
| ... | ... |
@@ -128,7 +128,7 @@ class WsChatController < WsController |
| 128 | 128 |
|
| 129 | 129 |
stripped_me = client.jid.strip.to_s |
| 130 | 130 |
stripped_to = Jabber::JID.new(message[:to]).strip!.to_s |
| 131 |
- if User.can_save_conversation(stripped_me, stripped_to, chat_id) |
|
| 131 |
+ if can_save_conversation?(stripped_me, stripped_to, chat_id) |
|
| 132 | 132 |
Rails.logger.debug ['saving send message', stripped_me] |
| 133 | 133 |
History.save_message(stripped_me, stripped_me, message[:message], stripped_to, chat_id) |
| 134 | 134 |
end |
| ... | ... |
@@ -201,13 +201,40 @@ class WsChatController < WsController |
| 201 | 201 |
client.send(MessageBuilder::make_new_owner(client.jid.to_s, new_owner_jid, chat_id)) if new_owner_jid |
| 202 | 202 |
end |
| 203 | 203 |
|
| 204 |
+ def can_save_conversation?(stripped_me = nil, stripped_attendant = nil, chat_id = nil) |
|
| 205 |
+ me = message[:me] || stripped_me |
|
| 206 |
+ attendant = message[:attendant] || stripped_attendant |
|
| 207 |
+ _chat_id = message[:chatId] || chat_id |
|
| 208 |
+ |
|
| 209 |
+ result = User.can_save_conversation?(me, attendant, _chat_id) |
|
| 210 |
+ |
|
| 211 |
+ if message[:me] |
|
| 212 |
+ trigger_success result |
|
| 213 |
+ else |
|
| 214 |
+ result |
|
| 215 |
+ end |
|
| 216 |
+ end |
|
| 217 |
+ |
|
| 218 |
+ def set_history_saving |
|
| 219 |
+ save = message[:enable] |
|
| 220 |
+ me = message[:me] |
|
| 221 |
+ attendant = message[:attendant] |
|
| 222 |
+ chat_id = message[:chatId] |
|
| 223 |
+ |
|
| 224 |
+ trigger_failure unless find_client(me) |
|
| 225 |
+ |
|
| 226 |
+ save = save.is_a?(FalseClass) ? 0 : 1 |
|
| 227 |
+ |
|
| 228 |
+ User.set_history_saving(save, me, attendant, chat_id) && trigger_success |
|
| 229 |
+ end |
|
| 230 |
+ |
|
| 204 | 231 |
private |
| 205 | 232 |
|
| 206 | 233 |
def process_incoming_message(from, me, body, chat_id = nil) |
| 207 | 234 |
stripped_me = me.strip.to_s |
| 208 | 235 |
stripped_from = from.strip.to_s |
| 209 | 236 |
|
| 210 |
- if User.can_save_conversation(stripped_me, stripped_from, chat_id) |
|
| 237 |
+ if can_save_conversation?(stripped_me, stripped_from, chat_id) |
|
| 211 | 238 |
Rails.logger.debug ['saving received message', stripped_me, chat_id] |
| 212 | 239 |
History.save_message(stripped_me, stripped_from, body, stripped_from, chat_id) |
| 213 | 240 |
end |
| ... | ... |
@@ -46,7 +46,7 @@ class User |
| 46 | 46 |
end |
| 47 | 47 |
end |
| 48 | 48 |
|
| 49 |
- def self.can_save_conversation(my_jid, friend_jid, chat_id = nil) |
|
| 49 |
+ def self.can_save_conversation?(my_jid, friend_jid, chat_id = nil) |
|
| 50 | 50 |
if chat_id.blank? |
| 51 | 51 |
found = User.where('accounts.jid' => my_jid)
|
| 52 | 52 |
.elem_match('accounts.conversation_settings' => {jid: friend_jid, value: 0})
|
| ... | ... |
@@ -57,4 +57,51 @@ class User |
| 57 | 57 |
|
| 58 | 58 |
found.first.nil? |
| 59 | 59 |
end |
| 60 |
+ |
|
| 61 |
+ def self.set_history_saving(enable, my_jid, friend_jid, chat_id = nil) |
|
| 62 |
+ Rails.logger.debug [ enable, my_jid, friend_jid, chat_id] |
|
| 63 |
+ if chat_id.blank? |
|
| 64 |
+ user = User.where('accounts.jid' => my_jid)
|
|
| 65 |
+ .elem_match('accounts.conversation_settings' => {jid: friend_jid})
|
|
| 66 |
+ .only('accounts.$.jid')
|
|
| 67 |
+ .first |
|
| 68 |
+ |
|
| 69 |
+ if user.nil? |
|
| 70 |
+ user = User.where('accounts.jid' => my_jid).only('accounts.$.jid').first
|
|
| 71 |
+ new_settings = {
|
|
| 72 |
+ jid: friend_jid, |
|
| 73 |
+ value: enable |
|
| 74 |
+ } |
|
| 75 |
+ user.accounts.first.conversation_settings << new_settings |
|
| 76 |
+ else |
|
| 77 |
+ settings = user.accounts.first.conversation_settings.find do |friend| |
|
| 78 |
+ friend['jid'] == friend_jid |
|
| 79 |
+ end |
|
| 80 |
+ settings['value'] = enable |
|
| 81 |
+ end |
|
| 82 |
+ |
|
| 83 |
+ user.save |
|
| 84 |
+ else |
|
| 85 |
+ user = User.where('accounts.jid' => my_jid)
|
|
| 86 |
+ .elem_match('accounts.conversation_settings' => {chat_id: chat_id})
|
|
| 87 |
+ .only('accounts.$.jid')
|
|
| 88 |
+ .first |
|
| 89 |
+ |
|
| 90 |
+ if user.nil? |
|
| 91 |
+ user = User.where('accounts.jid' => my_jid).only('accounts.$.jid').first
|
|
| 92 |
+ new_settings = {
|
|
| 93 |
+ chat_id: chat_id, |
|
| 94 |
+ value: enable |
|
| 95 |
+ } |
|
| 96 |
+ user.accounts.first.conversation_settings << new_settings |
|
| 97 |
+ else |
|
| 98 |
+ settings = user.accounts.first.conversation_settings.find do |chat| |
|
| 99 |
+ chat['chat_id'] == chat_id |
|
| 100 |
+ end |
|
| 101 |
+ settings['value'] = enable |
|
| 102 |
+ end |
|
| 103 |
+ |
|
| 104 |
+ user.save |
|
| 105 |
+ end |
|
| 106 |
+ end |
|
| 60 | 107 |
end |
| 61 | 108 |
\ No newline at end of file |
| ... | ... |
@@ -70,6 +70,8 @@ WebsocketRails::EventMap.describe do |
| 70 | 70 |
subscribe :iClosedMultichat, to: WsChatController, with_method: :i_closed_multichat |
| 71 | 71 |
subscribe :kickFromMultichat, to: WsChatController, with_method: :kick_from_multichat |
| 72 | 72 |
subscribe :switchOwnership, to: WsChatController, with_method: :switch_ownership |
| 73 |
+ subscribe :canSaveHistory, to: WsChatController, with_method: :can_save_conversation? |
|
| 74 |
+ subscribe :setHistorySaving, to: WsChatController, with_method: :set_history_saving |
|
| 73 | 75 |
end |
| 74 | 76 |
end |
| 75 | 77 |
end |