From db33d94f07a2864d7facb8ec2f5a5c38645b4352 Mon Sep 17 00:00:00 2001 From: Raphael Date: Tue, 24 Aug 2010 14:35:41 -0700 Subject: [PATCH] Render nothing on status_messages create, Websockets now honestly support multiple groups. --- app/controllers/groups_controller.rb | 4 +- app/controllers/sockets_controller.rb | 2 +- app/controllers/status_messages_controller.rb | 1 + app/helpers/sockets_helper.rb | 4 +- app/models/user.rb | 4 +- app/views/js/_websocket_js.haml | 134 +++++++++--------- config/app_config.yml | 2 +- lib/diaspora/websocket.rb | 5 +- 8 files changed, 79 insertions(+), 77 deletions(-) diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index aa0e618ef..b0b4eaea7 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -3,8 +3,10 @@ class GroupsController < ApplicationController def index @posts = current_user.visible_posts(:by_members_of => :all).paginate :page => params[:page], :order => 'created_at DESC' - @group = :all @friends = current_user.friends + + @groups = current_user.groups.find_all_by_id(params[:group_ids]) if params[:group_ids] + @groups ||= current_user.groups end def create diff --git a/app/controllers/sockets_controller.rb b/app/controllers/sockets_controller.rb index cdb2b5c2e..2d5ae315a 100644 --- a/app/controllers/sockets_controller.rb +++ b/app/controllers/sockets_controller.rb @@ -9,7 +9,7 @@ class SocketsController < ApplicationController def outgoing(uid,object,opts={}) @_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 diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index 3cacb1a55..1fc0ac9d1 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -7,6 +7,7 @@ class StatusMessagesController < ApplicationController if @status_message.created_at flash[:notice] = "Successfully created status message." + render :nothing => true else render :action => 'new' end diff --git a/app/helpers/sockets_helper.rb b/app/helpers/sockets_helper.rb index d4765feb7..3ac42f740 100644 --- a/app/helpers/sockets_helper.rb +++ b/app/helpers/sockets_helper.rb @@ -13,8 +13,8 @@ module SocketsHelper Rails.logger.error("web socket view rendering failed for object #{object.inspect}.") raise e 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 action_hash[:photo_hash] = object.thumb_hash elsif object.is_a? StatusMessage diff --git a/app/models/user.rb b/app/models/user.rb index b38bab105..b9beb0409 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -62,10 +62,10 @@ class User group.save target_people = target_people | group.people } + + post.socket_to_uid(id, :group_ids => groups.map{|g| g.id}) if post.respond_to?(:socket_to_uid) post.push_to( target_people ) - post.socket_to_uid(id) if post.respond_to?(:socket_to_uid) - self.raw_visible_posts << post self.save post diff --git a/app/views/js/_websocket_js.haml b/app/views/js/_websocket_js.haml index 282a07624..5305547cb 100644 --- a/app/views/js/_websocket_js.haml +++ b/app/views/js/_websocket_js.haml @@ -9,7 +9,8 @@ //Attach onmessage to websocket ws.onmessage = function(evt) { 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"){ processRetraction(obj['post_id']); @@ -19,10 +20,8 @@ }else if (obj['class']=='photos' && onPageForClass('albums')){ 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{ - processPost(obj['class'], obj['html'], obj['group_id'], obj['mine?']) + processPost(obj['class'], obj['html'], obj['group_ids']) } @@ -33,69 +32,68 @@ debug("connected..."); }; - function processRetraction(post_id){ - $('#' + post_id ).fadeOut(500, function(){ - $(this).remove; - }); - } - function processComment(post_id, html){ - post = $('#' + post_id)[0] - $(' .comment_set li:last', post ).before( - $(html).fadeIn("fast", function(){}) - ); - toggler = $('.show_post_comments', post) - toggler.html( - toggler.html().replace(/\d/,$('.comment_set', post)[0].childElementCount -1)); - } - - function processPost(className, html, groupId, mineBool){ - if(mineBool || onPageForClass(className) || onPageForGroup(groupId)){ - $("#stream").prepend( - $(html).fadeIn("fast", function(){ - $("#stream label:first").inFieldLabels(); - }) - ); - } - } - - 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){ - if (location.href.indexOf(photoHash['album_id']) == -1){ - return ; - } - html = "
\ - \ - \"New \ -
" - $("#thumbnails").append( $(html) ) - $("#"+ photoHash['id'] + " img").load( function() { - $(this).fadeIn("slow"); - }); - } - - function onPageForClass(className){ - return ((location.href.indexOf(className) != -1 ) || (location.pathname == '/')) && onPageOne(); - } - - function onPageForGroup(groupId){ - return (location.href.indexOf(groupId) != -1 ) - } - - function onPageOne() { - var c = document.location.search.charAt(document.location.search.length-1); - return ((c =='') || (c== '1')); - } }); + function processRetraction(post_id){ + $('#' + post_id ).fadeOut(500, function(){ + $(this).remove; + }); + } + + function processComment(post_id, html){ + post = $('#' + post_id)[0] + $(' .comment_set li:last', post ).before( + $(html).fadeIn("fast", function(){}) + ); + toggler = $('.show_post_comments', post) + toggler.html( + toggler.html().replace(/\d/,$('.comment_set', post)[0].childElementCount -1)); + } + + function processPost(className, html, groupIds){ + if(onPageForGroups(groupIds)){ + $("#stream").prepend( + $(html).fadeIn("fast", function(){ + $("#stream label:first").inFieldLabels(); + }) + ); + } + } + + function processPhotoInAlbum(photoHash){ + if (location.href.indexOf(photoHash['album_id']) == -1){ + return ; + } + html = "
\ + \ + \"New \ +
" + $("#thumbnails").append( $(html) ) + $("#"+ photoHash['id'] + " img").load( function() { + $(this).fadeIn("slow"); + }); + } + + function onPageForClass(className){ + 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){ + return (location.href.indexOf(groupId) != -1 ) + } + + function onPageOne() { + var c = document.location.search.charAt(document.location.search.length-1); + return ((c =='') || (c== '1')); + } diff --git a/config/app_config.yml b/config/app_config.yml index 1eee9376c..db81e9ddc 100644 --- a/config/app_config.yml +++ b/config/app_config.yml @@ -1,6 +1,6 @@ development: debug: false - socket_debug : false + socket_debug : true socket_port: 8080 pubsub_server: 'https://pubsubhubbub.appspot.com/' diff --git a/lib/diaspora/websocket.rb b/lib/diaspora/websocket.rb index d3ca511bb..3eb41ed45 100644 --- a/lib/diaspora/websocket.rb +++ b/lib/diaspora/websocket.rb @@ -10,7 +10,7 @@ module Diaspora end 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) @channels[uid][0].subscribe{ |msg| ws.send msg } @channels[uid][1] += 1 @@ -32,7 +32,8 @@ module Diaspora module Socketable 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 def unsocket_from_uid id