Render nothing on status_messages create, Websockets now honestly

support multiple groups.
This commit is contained in:
Raphael 2010-08-24 14:35:41 -07:00
parent abf48cefd4
commit db33d94f07
8 changed files with 79 additions and 77 deletions

View file

@ -3,8 +3,10 @@ class GroupsController < ApplicationController
def index def index
@posts = current_user.visible_posts(:by_members_of => :all).paginate :page => params[:page], :order => 'created_at DESC' @posts = current_user.visible_posts(:by_members_of => :all).paginate :page => params[:page], :order => 'created_at DESC'
@group = :all
@friends = current_user.friends @friends = current_user.friends
@groups = current_user.groups.find_all_by_id(params[:group_ids]) if params[:group_ids]
@groups ||= current_user.groups
end end
def create def create

View file

@ -9,7 +9,7 @@ class SocketsController < ApplicationController
def outgoing(uid,object,opts={}) def outgoing(uid,object,opts={})
@_request = ActionDispatch::Request.new({}) @_request = ActionDispatch::Request.new({})
Diaspora::WebSocket.push_to_user(uid, action_hash(uid, object, :group_id => opts[:group_id])) Diaspora::WebSocket.push_to_user(uid, action_hash(uid, object, opts))
end end
end end

View file

@ -7,6 +7,7 @@ class StatusMessagesController < ApplicationController
if @status_message.created_at if @status_message.created_at
flash[:notice] = "Successfully created status message." flash[:notice] = "Successfully created status message."
render :nothing => true
else else
render :action => 'new' render :action => 'new'
end end

View file

@ -13,8 +13,8 @@ module SocketsHelper
Rails.logger.error("web socket view rendering failed for object #{object.inspect}.") Rails.logger.error("web socket view rendering failed for object #{object.inspect}.")
raise e raise e
end end
action_hash = {:class =>object.class.to_s.underscore.pluralize, :group_id => opts[:group_id] , :html => v, :post_id => obj_id(object)} action_hash = {:class =>object.class.to_s.underscore.pluralize, :html => v, :post_id => obj_id(object)}
action_hash.merge! opts
if object.is_a? Photo if object.is_a? Photo
action_hash[:photo_hash] = object.thumb_hash action_hash[:photo_hash] = object.thumb_hash
elsif object.is_a? StatusMessage elsif object.is_a? StatusMessage

View file

@ -62,9 +62,9 @@ class User
group.save group.save
target_people = target_people | group.people target_people = target_people | group.people
} }
post.push_to( target_people )
post.socket_to_uid(id) if post.respond_to?(:socket_to_uid) post.socket_to_uid(id, :group_ids => groups.map{|g| g.id}) if post.respond_to?(:socket_to_uid)
post.push_to( target_people )
self.raw_visible_posts << post self.raw_visible_posts << post
self.save self.save

View file

@ -9,7 +9,8 @@
//Attach onmessage to websocket //Attach onmessage to websocket
ws.onmessage = function(evt) { ws.onmessage = function(evt) {
var obj = jQuery.parseJSON(evt.data); var obj = jQuery.parseJSON(evt.data);
debug("got a " + obj['class'] + " for group " + obj['group_id']); console.log(obj)
debug("got a " + obj['class'] + " for groups " + obj['group_ids']);
if (obj['class']=="retractions"){ if (obj['class']=="retractions"){
processRetraction(obj['post_id']); processRetraction(obj['post_id']);
@ -19,10 +20,8 @@
}else if (obj['class']=='photos' && onPageForClass('albums')){ }else if (obj['class']=='photos' && onPageForClass('albums')){
processPhotoInAlbum(obj['photo_hash']) processPhotoInAlbum(obj['photo_hash'])
}else if (obj['class']=='status_messages'){
processStatusMessage(obj['class'], obj['html'], obj['status_message_hash'], obj['group_id'], obj['mine?'])
}else{ }else{
processPost(obj['class'], obj['html'], obj['group_id'], obj['mine?']) processPost(obj['class'], obj['html'], obj['group_ids'])
} }
@ -33,6 +32,8 @@
debug("connected..."); debug("connected...");
}; };
});
function processRetraction(post_id){ function processRetraction(post_id){
$('#' + post_id ).fadeOut(500, function(){ $('#' + post_id ).fadeOut(500, function(){
$(this).remove; $(this).remove;
@ -49,8 +50,8 @@
toggler.html().replace(/\d/,$('.comment_set', post)[0].childElementCount -1)); toggler.html().replace(/\d/,$('.comment_set', post)[0].childElementCount -1));
} }
function processPost(className, html, groupId, mineBool){ function processPost(className, html, groupIds){
if(mineBool || onPageForClass(className) || onPageForGroup(groupId)){ if(onPageForGroups(groupIds)){
$("#stream").prepend( $("#stream").prepend(
$(html).fadeIn("fast", function(){ $(html).fadeIn("fast", function(){
$("#stream label:first").inFieldLabels(); $("#stream label:first").inFieldLabels();
@ -59,19 +60,6 @@
} }
} }
function processStatusMessage(className, html, messageHash, groupId, mineBool){
processPost(className, html, groupId, mineBool);
console.log(messageHash)
if(messageHash['mine?']){
updateMyLatestStatus(messageHash);
}
}
function updateMyLatestStatus(messageHash){
$("#latest_message").text(messageHash['text']);
$("#latest_message_time").text(' - just now');
}
function processPhotoInAlbum(photoHash){ function processPhotoInAlbum(photoHash){
if (location.href.indexOf(photoHash['album_id']) == -1){ if (location.href.indexOf(photoHash['album_id']) == -1){
return ; return ;
@ -90,6 +78,17 @@
return ((location.href.indexOf(className) != -1 ) || (location.pathname == '/')) && onPageOne(); return ((location.href.indexOf(className) != -1 ) || (location.pathname == '/')) && onPageOne();
} }
function onPageForGroups(groupIds){
if(location.pathname == '/' && onPageOne()){
return true
}
var found = false;
$.each(groupIds, function(index, value) {
if(onPageForGroup(value)){ found = true };
});
return found;
}
function onPageForGroup(groupId){ function onPageForGroup(groupId){
return (location.href.indexOf(groupId) != -1 ) return (location.href.indexOf(groupId) != -1 )
} }
@ -98,4 +97,3 @@
var c = document.location.search.charAt(document.location.search.length-1); var c = document.location.search.charAt(document.location.search.length-1);
return ((c =='') || (c== '1')); return ((c =='') || (c== '1'));
} }
});

View file

@ -1,6 +1,6 @@
development: development:
debug: false debug: false
socket_debug : false socket_debug : true
socket_port: 8080 socket_port: 8080
pubsub_server: 'https://pubsubhubbub.appspot.com/' pubsub_server: 'https://pubsubhubbub.appspot.com/'

View file

@ -10,7 +10,7 @@ module Diaspora
end end
def self.subscribe(uid, ws) def self.subscribe(uid, ws)
Rails.logger.debug "Subscribing socket to #{User.first(:id => uid).email}" Rails.logger.debug "Subscribing socket to #{uid}"
self.ensure_channel(uid) self.ensure_channel(uid)
@channels[uid][0].subscribe{ |msg| ws.send msg } @channels[uid][0].subscribe{ |msg| ws.send msg }
@channels[uid][1] += 1 @channels[uid][1] += 1
@ -32,7 +32,8 @@ module Diaspora
module Socketable module Socketable
def socket_to_uid(id, opts={}) def socket_to_uid(id, opts={})
SocketsController.new.outgoing(id, self, :group_id => opts[:group_id]) puts "#{id}, #{self}, #{opts}"
SocketsController.new.outgoing(id, self, opts)
end end
def unsocket_from_uid id def unsocket_from_uid id