Merge branch 'master' of git://github.com/diaspora/diaspora
This commit is contained in:
commit
d12dc32c34
18 changed files with 97 additions and 39 deletions
5
Gemfile
5
Gemfile
|
|
@ -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'
|
||||||
|
|
|
||||||
10
Gemfile.lock
10
Gemfile.lock
|
|
@ -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)!
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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/
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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}"
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
@ -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; }
|
||||||
|
|
|
||||||
|
|
@ -756,3 +756,7 @@ h1.big_text
|
||||||
:bottom none
|
:bottom none
|
||||||
|
|
||||||
:padding 3px 10px
|
:padding 3px 10px
|
||||||
|
|
||||||
|
#fancybox-close:hover
|
||||||
|
:background
|
||||||
|
:color transparent
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
24
spec/lib/websocket_spec.rb
Normal file
24
spec/lib/websocket_spec.rb
Normal 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
|
||||||
Loading…
Reference in a new issue