Commit 00320acf7d6c64fbcfc3688f98b6f22c16d1372f
1 parent
41d26bb7
Exists in
staging
and in
3 other branches
chat-workarounds: ensure availabilities through noosfero
This patch is part of several workarounds done to fix ejabberd problems with usernames bigger than 8 chars. For more information check: https://github.com/processone/ejabberd/issues/1152
Showing
3 changed files
with
50 additions
and
16 deletions
Show diff stats
app/controllers/public/account_controller.rb
... | ... | @@ -157,6 +157,7 @@ class AccountController < ApplicationController |
157 | 157 | if logged_in? |
158 | 158 | self.current_user.forget_me |
159 | 159 | end |
160 | + current_user.update({:chat_status_at => DateTime.now}.merge({:last_chat_status => current_user.chat_status, :chat_status => 'offline'})) | |
160 | 161 | reset_session |
161 | 162 | session[:notice] = _("You have been logged out.") |
162 | 163 | redirect_to :controller => 'home', :action => 'index' | ... | ... |
app/controllers/public/chat_controller.rb
... | ... | @@ -120,6 +120,15 @@ class ChatController < PublicController |
120 | 120 | render :text => rosters.to_json |
121 | 121 | end |
122 | 122 | |
123 | + def availabilities | |
124 | + availabilities = user.friends.map do |friend| | |
125 | + status = friend.user.chat_status | |
126 | + status = 'offline' if status.blank? | |
127 | + {:jid => friend.jid, :status => status} | |
128 | + end | |
129 | + render :text => availabilities.to_json | |
130 | + end | |
131 | + | |
123 | 132 | protected |
124 | 133 | |
125 | 134 | def check_environment_feature | ... | ... |
public/javascripts/chat.js
... | ... | @@ -282,7 +282,7 @@ jQuery(function($) { |
282 | 282 | |
283 | 283 | $.ajax({ |
284 | 284 | url: '/chat/rosters', |
285 | - dataType: 'json,' | |
285 | + dataType: 'json', | |
286 | 286 | success: function(data){ |
287 | 287 | $(data.friends).each(function(index, friend){ |
288 | 288 | var jid = friend.jid; |
... | ... | @@ -321,6 +321,7 @@ jQuery(function($) { |
321 | 321 | Jabber.connection.addHandler(Jabber.on_presence, null, "presence"); |
322 | 322 | Jabber.send_availability_status(Jabber.presence_status); |
323 | 323 | load_defaults(); |
324 | + updateAvailabilities(); | |
324 | 325 | }); |
325 | 326 | }, |
326 | 327 | error: function(data, textStatus, jqXHR){ |
... | ... | @@ -412,21 +413,7 @@ jQuery(function($) { |
412 | 413 | else { |
413 | 414 | log('receiving contact presence from ' + presence.from + ' as ' + presence.show); |
414 | 415 | var jid = Strophe.getBareJidFromJid(presence.from); |
415 | - if (jid != Jabber.connection.jid) { | |
416 | - var jid_id = Jabber.jid_to_id(jid); | |
417 | - var name = Jabber.name_of(jid_id); | |
418 | - if(presence.show == 'chat') | |
419 | - Jabber.remove_notice(jid_id); | |
420 | - Jabber.insert_or_update_contact(jid, name, presence.show); | |
421 | - Jabber.update_chat_title(); | |
422 | - } | |
423 | - else { | |
424 | - // why server sends presence from myself to me? | |
425 | - log('ignoring presence from myself'); | |
426 | - if(presence.show=='offline') { | |
427 | - Jabber.send_availability_status(Jabber.presence_status); | |
428 | - } | |
429 | - } | |
416 | + setFriendStatus(jid, presence.show); | |
430 | 417 | } |
431 | 418 | } |
432 | 419 | return true; |
... | ... | @@ -905,6 +892,24 @@ jQuery(function($) { |
905 | 892 | } |
906 | 893 | } |
907 | 894 | |
895 | + function setFriendStatus(jid, status) { | |
896 | + if (jid != Jabber.connection.jid) { | |
897 | + var jid_id = Jabber.jid_to_id(jid); | |
898 | + var name = Jabber.name_of(jid_id); | |
899 | + if(status == 'chat') | |
900 | + Jabber.remove_notice(jid_id); | |
901 | + Jabber.insert_or_update_contact(jid, name, status); | |
902 | + Jabber.update_chat_title(); | |
903 | + } | |
904 | + else { | |
905 | + // why server sends presence from myself to me? | |
906 | + log('ignoring presence from myself'); | |
907 | + if(status=='offline') { | |
908 | + Jabber.send_availability_status(Jabber.presence_status); | |
909 | + } | |
910 | + } | |
911 | + } | |
912 | + | |
908 | 913 | $('.title-bar a').click(function() { |
909 | 914 | $(this).parents('.status-group').find('.buddies').toggle('fast'); |
910 | 915 | return false; |
... | ... | @@ -974,4 +979,23 @@ jQuery(function($) { |
974 | 979 | |
975 | 980 | window.onfocus = function() {Jabber.window_visibility = true}; |
976 | 981 | window.onblur = function() {Jabber.window_visibility = false}; |
982 | + | |
983 | + //FIXME Workaround to solve availability problems | |
984 | + function updateAvailabilities() { | |
985 | + $.ajax({ | |
986 | + url: '/chat/availabilities', | |
987 | + dataType: 'json', | |
988 | + success: function(data){ | |
989 | + $(data).each(function(index, friend){ | |
990 | + var jid_id = Jabber.jid_to_id(friend.jid); | |
991 | + if (Jabber.jids[jid_id].presence != friend.status) | |
992 | + setFriendStatus(friend.jid, friend.status) | |
993 | + }); | |
994 | + }, | |
995 | + complete: function(data){ setTimeout(updateAvailabilities, 10000) }, | |
996 | + error: function(data, textStatus, jqXHR){ | |
997 | + console.log(data); | |
998 | + }, | |
999 | + }); | |
1000 | + } | |
977 | 1001 | }); | ... | ... |