Merge branch 'master' of git://github.com/diaspora/diaspora

This commit is contained in:
maco 2010-09-17 13:10:51 +00:00
commit d12dc32c34
18 changed files with 97 additions and 39 deletions

View file

@ -28,9 +28,12 @@ gem 'redfinger', :git => 'git://github.com/rsofaer/redfinger.git'
#EventMachine #EventMachine
gem 'em-http-request',:git => 'git://github.com/igrigorik/em-http-request.git', :require => 'em-http' gem 'em-http-request',:git => 'git://github.com/igrigorik/em-http-request.git', :require => 'em-http'
gem 'em-websocket'
gem 'thin' gem 'thin'
#Websocket
gem 'em-websocket'
gem 'magent', :git => 'http://github.com/dcu/magent.git'
#File uploading #File uploading
gem 'carrierwave', :git => 'git://github.com/rsofaer/carrierwave.git' , :branch => 'master' #Untested mongomapper branch gem 'carrierwave', :git => 'git://github.com/rsofaer/carrierwave.git' , :branch => 'master' #Untested mongomapper branch
gem 'mini_magick' gem 'mini_magick'

View file

@ -47,6 +47,14 @@ GIT
bcrypt-ruby (~> 2.1.2) bcrypt-ruby (~> 2.1.2)
warden (~> 0.10.7) warden (~> 0.10.7)
GIT
remote: http://github.com/dcu/magent.git
revision: 06513f3dac812469a55f2e365c349af4d2abc92a
specs:
magent (0.4.2)
mongo (>= 0.1.0)
uuidtools (>= 2.0.0)
GIT GIT
remote: http://github.com/jnunemaker/mongomapper.git remote: http://github.com/jnunemaker/mongomapper.git
revision: 931dab779011aa7acf60c1a4c7ad19e1ba838345 revision: 931dab779011aa7acf60c1a4c7ad19e1ba838345
@ -213,6 +221,7 @@ GEM
treetop (1.4.8) treetop (1.4.8)
polyglot (>= 0.3.1) polyglot (>= 0.3.1)
tzinfo (0.3.23) tzinfo (0.3.23)
uuidtools (2.1.1)
warden (0.10.7) warden (0.10.7)
rack (>= 1.0.0) rack (>= 1.0.0)
webmock (1.3.5) webmock (1.3.5)
@ -242,6 +251,7 @@ DEPENDENCIES
haml haml
jnunemaker-validatable (= 1.8.4)! jnunemaker-validatable (= 1.8.4)!
json json
magent!
mini_magick mini_magick
mocha mocha
mongo_mapper (= 0.8.4)! mongo_mapper (= 0.8.4)!

View file

@ -12,6 +12,13 @@ GEMS: We would like to keep external dependencies unduplicated. We're using No
The privacy aware, personally controlled, do-it-all, open source social network. The privacy aware, personally controlled, do-it-all, open source social network.
**DISCLAIMER: THIS IS PRE-ALPHA SOFTWARE AND SHOULD BE TREATED ACCORDINGLY.** **DISCLAIMER: THIS IS PRE-ALPHA SOFTWARE AND SHOULD BE TREATED ACCORDINGLY.**
**PLEASE, DO NOT RUN IN PRODUCTION. IT IS FUN TO GET RUNNING, BUT EXPECT THINGS TO BE BROKEN**
Also, we really want to continue to focus on features and improving the code base. When we think it is
ready for general use, we will post more detailed instructions.
These instructions are for machines running [Ubuntu](http://www.ubuntu.com/), [Fedora](http://www.fedoraproject.org) or Mac OS X. We are developing Diaspora for the latest and greatest browsers, so please update your Firefox, Chrome or Safari to the latest and greatest. These instructions are for machines running [Ubuntu](http://www.ubuntu.com/), [Fedora](http://www.fedoraproject.org) or Mac OS X. We are developing Diaspora for the latest and greatest browsers, so please update your Firefox, Chrome or Safari to the latest and greatest.
## Preparing your system ## Preparing your system

View file

@ -47,7 +47,7 @@ class AspectsController < ApplicationController
def manage def manage
@aspect = :manage @aspect = :manage
@remote_requests = Request.for_user current_user @remote_requests = Request.for_user(current_user).all
end end
def update def update

View file

@ -14,7 +14,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, opts)) Diaspora::WebSocket.queue_to_user(uid, action_hash(uid, object, opts))
end end
end end

View file

@ -85,6 +85,7 @@ class Person
local_person local_person
elsif !identifier.include?("localhost") && !opts[:local] elsif !identifier.include?("localhost") && !opts[:local]
begin begin
puts "begin finger"
f = Redfinger.finger(identifier) f = Redfinger.finger(identifier)
rescue SocketError => e rescue SocketError => e
raise "Diaspora server for #{identifier} not found" if e.message =~ /Name or service not known/ raise "Diaspora server for #{identifier} not found" if e.message =~ /Name or service not known/

View file

@ -4,6 +4,7 @@
class Post class Post
require 'lib/diaspora/websocket'
require 'lib/encryptable' require 'lib/encryptable'
include MongoMapper::Document include MongoMapper::Document
include ApplicationHelper include ApplicationHelper

View file

@ -26,8 +26,8 @@ class Request
validates_presence_of :destination_url, :callback_url validates_presence_of :destination_url, :callback_url
before_validation :clean_link before_validation :clean_link
scope :for_user, lambda{ |user| where(:destination_url => user.person.receive_url) } scope :for_user, lambda{ |user| where(:destination_url => user.receive_url) }
scope :from_user, lambda{ |user| where(:destination_url.ne => user.person.receive_url) } scope :from_user, lambda{ |user| where(:destination_url.ne => user.receive_url) }
def self.instantiate(options = {}) def self.instantiate(options = {})
person = options[:from] person = options[:from]

View file

@ -8,6 +8,7 @@ development:
debug: false debug: false
socket_debug : false socket_debug : false
socket_port: 8080 socket_port: 8080
socket_collection_name: 'websocket'
pubsub_server: 'https://pubsubhubbub.appspot.com/' pubsub_server: 'https://pubsubhubbub.appspot.com/'
test: test:

View file

@ -58,6 +58,11 @@ namespace :deploy do
task :start do task :start do
start_mongo start_mongo
start_thin start_thin
start_websocket
end
task :start_websocket do
run("cd #{current_path} && bundle exec ruby ./script/websocket_server.rb > /dev/null&")
end end
task :start_mongo do task :start_mongo do

View file

@ -6,6 +6,11 @@
module Diaspora module Diaspora
module WebSocket module WebSocket
def self.queue_to_user(uid, data)
channel = Magent::GenericChannel.new('websocket')
channel.enqueue({:uid => uid, :data => data})
end
def self.initialize_channels def self.initialize_channels
@channels = {} @channels = {}
end end
@ -44,6 +49,5 @@ module Diaspora
def unsocket_from_uid(id, opts={}) def unsocket_from_uid(id, opts={})
SocketsController.new.outgoing(id, Retraction.for(self), opts) SocketsController.new.outgoing(id, Retraction.for(self), opts)
end end
end end
end end

View file

@ -63,6 +63,7 @@ namespace :db do
return this.diaspora_handle.charAt(this.diaspora_handle.length-1) == '@' return this.diaspora_handle.charAt(this.diaspora_handle.length-1) == '@'
}") }")
puts "Found #{people.count} people with broken diaspora_handle fields"
people.each do |person| people.each do |person|
if person.owner if person.owner
puts "Resetting diaspora handle for #{person.owner.username}" puts "Resetting diaspora handle for #{person.owner.username}"

View file

@ -262,6 +262,11 @@
close.show(); close.show();
} }
$("#fancybox-inner input[type='text'], #fancybox-inner textarea").focus(function() {
$(document).unbind('keydown.fb');
});
fancybox_set_navigation(); fancybox_set_navigation();
$(window).bind("resize.fb", $.fancybox.center); $(window).bind("resize.fb", $.fancybox.center);
@ -1074,4 +1079,4 @@
fancybox_init(); fancybox_init();
}); });
})(jQuery); })(jQuery);

File diff suppressed because one or more lines are too long

View file

@ -601,3 +601,6 @@ h1.big_text {
border: 1px solid #cccccc; border: 1px solid #cccccc;
border-bottom: none; border-bottom: none;
padding: 3px 10px; } padding: 3px 10px; }
#fancybox-close:hover {
background-color: transparent; }

View file

@ -756,3 +756,7 @@ h1.big_text
:bottom none :bottom none
:padding 3px 10px :padding 3px 10px
#fancybox-close:hover
:background
:color transparent

View file

@ -2,11 +2,24 @@
# licensed under the Affero General Public License version 3. See # licensed under the Affero General Public License version 3. See
# the COPYRIGHT file. # the COPYRIGHT file.
require File.dirname(__FILE__) + '/../config/environment'
require File.dirname(__FILE__) + '/../lib/diaspora/websocket'
require 'em-websocket' CHANNEL = Magent::GenericChannel.new('websocket')
require 'eventmachine' def process_message
require 'lib/diaspora/websocket' if CHANNEL.queue_count > 0
EM.next_tick { message = CHANNEL.dequeue
if message
Diaspora::WebSocket.push_to_user(message['uid'], message['data'])
end
EM.next_tick{ process_message}
else
EM::Timer.new(1){process_message}
end
end
EM.run {
Diaspora::WebSocket.initialize_channels Diaspora::WebSocket.initialize_channels
EventMachine::WebSocket.start( EventMachine::WebSocket.start(
@ -22,5 +35,6 @@ require 'lib/diaspora/websocket'
ws.onclose { Diaspora::WebSocket.unsubscribe(ws.request['Path'].gsub('/',''), sid) } ws.onclose { Diaspora::WebSocket.unsubscribe(ws.request['Path'].gsub('/',''), sid) }
} }
end end
process_message
} }

View file

@ -0,0 +1,24 @@
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3. See
# the COPYRIGHT file.
require File.dirname(__FILE__) + '/../spec_helper'
describe Diaspora::WebSocket do
before do
@user = Factory.create(:user)
@aspect = @user.aspect(:name => "losers")
@post = @user.build_post(:status_message, :message => "hey", :to => @aspect.id)
end
it 'should queue a job' do
Diaspora::WebSocket.should_receive(:queue_to_user)
@post.socket_to_uid(@user.id, :aspect_ids => @aspect.id)
end
it 'The queued job should reach Magent' do
Magent.should_receive(:push)
@post.socket_to_uid(@user.id, :aspect_ids => @aspect.id)
end
end