diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index 6f2634be0013983849b44a20aab6a5e477593c6b..8ffa6651cb9b8e1fb60b4b3d13cd90f131818c08 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -10,10 +10,39 @@ class PeopleController < ApplicationController def index @aspect = :search + @people = Person.search(params[:q]).paginate :page => params[:page], :per_page => 25, :order => 'created_at DESC' + + + # dont do it@people.first.diaspora_handle == params[:q] + + #only do it if it is an email address + if params[:q].try(:match, Devise.email_regexp) + find_remote_user(params[:q]) + end + respond_with @people end + def find_remote_user(account) + + finger = EMWebfinger.new(account) + finger.on_person do |response| + begin + puts response.inspect + if response.class == Person + + response.socket_to_uid(current_user.id, :aspects => @aspects) + else + require File.join(Rails.root,'lib/diaspora/websocket') + puts Diaspora::WebSocket + Diaspora::WebSocket.queue_to_user(current_user.id, {:class => 'person', :query => account, :response => response}) + end + rescue + end + end + end + def show @person = Person.find(params[:id].to_id) diff --git a/app/helpers/sockets_helper.rb b/app/helpers/sockets_helper.rb index 7c70b8e216ffbd952b10d517d8efd146e126f1b6..1ad68551b9d3cf64b6b7f70d74bcf3f57dcd4ca6 100644 --- a/app/helpers/sockets_helper.rb +++ b/app/helpers/sockets_helper.rb @@ -3,17 +3,19 @@ # the COPYRIGHT file. module SocketsHelper - include ApplicationHelper + include ApplicationHelper - def obj_id(object) - (object.is_a? Post) ? object.id : object.post_id + def obj_id(object) + object.respond_to?(:post_id) ? object.post_id : object.id end def action_hash(uid, object, opts={}) begin user = User.find_by_id uid if object.is_a? Post - v = render_to_string(:partial => 'shared/stream_element', :locals => {:post => object, :current_user => user}) unless object.is_a? Retraction + v = render_to_string(:partial => 'shared/stream_element', :locals => {:post => object, :current_user => user}) + elsif object.is_a? Person + v = render_to_string(:partial => type_partial(object), :locals => {:person => object, :current_user => user}) unless object.is_a? Retraction else v = render_to_string(:partial => type_partial(object), :locals => {:post => object, :current_user => user}) unless object.is_a? Retraction end @@ -32,7 +34,7 @@ module SocketsHelper action_hash[:notification] = notification(object) end - action_hash[:mine?] = object.person && (object.person.owner.id == uid) + action_hash[:mine?] = object.person && (object.person.owner.id == uid) if object.respond_to?(:person) action_hash.to_json end diff --git a/app/models/person.rb b/app/models/person.rb index b7025a25e8b836cd6214dd38bd5e67a631c4ae64..62cc5759b5421ccda7e1aa141246d67056db6366 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -8,6 +8,8 @@ class Person include MongoMapper::Document include ROXML include Encryptor::Public + require File.join(Rails.root, 'lib/diaspora/websocket') + include Diaspora::Socketable xml_accessor :_id xml_accessor :diaspora_handle @@ -148,7 +150,6 @@ class Person } } end - protected def clean_url diff --git a/app/views/js/_websocket_js.haml b/app/views/js/_websocket_js.haml index 4e4d261707ba80868600fc9662df2b4c05f9c2c1..fa2636e353a7fe66707c072a4ef3d68fd3b5c866 100644 --- a/app/views/js/_websocket_js.haml +++ b/app/views/js/_websocket_js.haml @@ -17,6 +17,8 @@ if(obj['notice']){ processNotification(obj['notice']); + }else if (obj['class'] == 'people'){ + processPerson(obj['html']); }else{ debug("got a " + obj['class'] + " for aspects " + obj['aspect_ids']); @@ -42,6 +44,10 @@ }); + function processPerson(html){ + $('.people#stream').prepend(html).slideDown('slow', function(){}) + } + function processNotification(html){ $('#notification').html(html).fadeIn(200).delay(4000).fadeOut(200, function(){ $(this).html("");}); } @@ -97,7 +103,7 @@ function processPhotoInAlbum(photoHash){ if (location.href.indexOf(photoHash['album_id']) == -1){ return ; - } + }› html = "<div class=\'image_thumb\' id=\'"+photoHash['id']+"\' style=\'padding-right:3px;\'> \ <a href=\"/photos/"+ photoHash['id'] +"\"> \ <img alt=\"New thumbnail\" src=\""+ photoHash['thumb_url'] +"\" /> \ diff --git a/app/views/people/_person.html.haml b/app/views/people/_person.html.haml index 0a441452d0cc343ab20fea3dd0e0bf5f058f2dce..a66632e882e4081d50ca31561852616b3b5d6671 100644 --- a/app/views/people/_person.html.haml +++ b/app/views/people/_person.html.haml @@ -18,7 +18,7 @@ - elsif current_user.pending_requests.find_by_person_id(person.id) = link_to =t('.pending_request'), aspects_manage_path - else - = render :partial => 'requests/new_request_to_person', :locals => {:aspects => @aspects, :person => person} + = render :partial => 'requests/new_request_to_person', :locals => {:aspects => aspects, :person => person} .info = person.diaspora_handle diff --git a/app/views/people/index.html.haml b/app/views/people/index.html.haml index f5c3fd5e64e711f695fa28126eb4d3f005563136..cf6bb2a5594fa4c77a1a6c1aca7ead89038924cc 100644 --- a/app/views/people/index.html.haml +++ b/app/views/people/index.html.haml @@ -7,8 +7,8 @@ =t('.results_for') %u= params[:q] - %ul#stream + %ul#stream.people - for person in @people - = render 'people/person', :person => person + = render 'people/person', :person => person, :aspects => @aspects = will_paginate @people diff --git a/spec/helpers/sockets_helper_spec.rb b/spec/helpers/sockets_helper_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..bb65f4ccdd2c03d729553d79c3590bb27432fbea --- /dev/null +++ b/spec/helpers/sockets_helper_spec.rb @@ -0,0 +1,13 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. +# +require 'spec_helper' + +describe SocketsHelper do + + describe '#obj_id' do + + end + +end