fargo 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +49 -1
- data/bin/fargo +5 -0
- data/ext/fargo/base32.c +0 -25
- data/ext/fargo/base32.h +0 -8
- data/ext/fargo/tiger.c +0 -24
- data/ext/fargo/tiger.h +0 -8
- data/ext/fargo/tigertree.c +0 -36
- data/ext/fargo/tigertree.h +0 -6
- data/ext/fargo/tth.h +0 -8
- data/ext/readline/extconf.rb +9 -0
- data/ext/readline/fargo_cli.c +28 -0
- data/ext/readline/screen.c +77 -0
- data/ext/readline/screen.h +3 -0
- data/lib/fargo.rb +3 -1
- data/lib/fargo/cli.rb +84 -0
- data/lib/fargo/cli/completion.rb +41 -0
- data/lib/fargo/cli/downloads.rb +57 -0
- data/lib/fargo/cli/help.rb +80 -0
- data/lib/fargo/cli/info.rb +55 -0
- data/lib/fargo/cli/logging.rb +87 -0
- data/lib/fargo/cli/nick_browser.rb +159 -0
- data/lib/fargo/cli/searches.rb +63 -0
- data/lib/fargo/cli/stats.rb +16 -0
- data/lib/fargo/client.rb +33 -8
- data/lib/fargo/ext/irb.rb +33 -0
- data/lib/fargo/ext/readline.rb +18 -0
- data/lib/fargo/ext/struct.rb +7 -0
- data/lib/fargo/protocol/peer_download.rb +7 -4
- data/lib/fargo/supports/chat.rb +15 -0
- data/lib/fargo/supports/downloads.rb +5 -1
- data/lib/fargo/supports/local_file_list.rb +42 -36
- data/lib/fargo/supports/remote_file_list.rb +9 -7
- data/lib/fargo/supports/searches.rb +6 -0
- data/lib/fargo/version.rb +1 -1
- data/spec/fargo/protocol/hub_spec.rb +1 -1
- data/spec/fargo/protocol/peer_upload_spec.rb +1 -1
- data/spec/fargo/search_spec.rb +6 -1
- data/spec/fargo/supports/chat_spec.rb +7 -0
- data/spec/fargo/supports/local_file_list_spec.rb +32 -1
- data/spec/spec_helper.rb +6 -3
- metadata +65 -26
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'bzip2'
|
2
|
-
require '
|
2
|
+
require 'nokogiri'
|
3
3
|
|
4
4
|
module Fargo
|
5
5
|
class Listing < Struct.new(:tth, :size, :name, :nick, :mtime, :root); end
|
@@ -39,6 +39,11 @@ module Fargo
|
|
39
39
|
|
40
40
|
@getting_file_list[nick] = true
|
41
41
|
download nick, 'files.xml.bz2'
|
42
|
+
|
43
|
+
EventMachine.add_timer 60 do
|
44
|
+
@file_list.delete nick
|
45
|
+
@getting_file_list.delete nick
|
46
|
+
end
|
42
47
|
end
|
43
48
|
|
44
49
|
# Wait for the results to arrive, timed out after some time
|
@@ -68,7 +73,7 @@ module Fargo
|
|
68
73
|
if file && File.exists?(file)
|
69
74
|
Fargo.logger.debug "Parsing file list for: '#{nick}' at '#{file}'"
|
70
75
|
xml = Bzip2::Reader.open(file).read
|
71
|
-
doc =
|
76
|
+
doc = Nokogiri::XML::Document.parse xml
|
72
77
|
|
73
78
|
construct_file_list doc.root, nil, nick
|
74
79
|
else
|
@@ -79,17 +84,14 @@ module Fargo
|
|
79
84
|
def construct_file_list node, prefix, nick
|
80
85
|
list = {}
|
81
86
|
|
82
|
-
node.
|
87
|
+
node.element_children.each do |element|
|
83
88
|
path = prefix ? prefix + "\\" + element['Name'] : element['Name']
|
84
89
|
|
85
90
|
if element.name =~ /directory/i
|
86
91
|
list[element['Name']] = construct_file_list element, path, nick
|
87
92
|
else
|
88
|
-
# Why does this consistently segfault ruby 1.8.7 when I convert
|
89
|
-
# element['Size'] to an integer before the struct is created?!
|
90
93
|
element = list[element['Name']] = Listing.new(element['TTH'],
|
91
|
-
element['Size'], path, nick)
|
92
|
-
element.size = element.size.to_i
|
94
|
+
element['Size'].to_i, path, nick)
|
93
95
|
end
|
94
96
|
end
|
95
97
|
|
@@ -26,9 +26,15 @@ module Fargo
|
|
26
26
|
@searches[search.to_s] = []
|
27
27
|
@search_objects[search.to_s] = search
|
28
28
|
search_hub search
|
29
|
+
|
30
|
+
EventMachine.add_timer(600) { remove_search search }
|
29
31
|
end
|
30
32
|
|
31
33
|
def searches
|
34
|
+
search_objects.map{ |s| s.query }
|
35
|
+
end
|
36
|
+
|
37
|
+
def search_objects
|
32
38
|
@searches.keys.map { |k| @search_objects[k] }
|
33
39
|
end
|
34
40
|
|
data/lib/fargo/version.rb
CHANGED
@@ -9,7 +9,7 @@ describe Fargo::Protocol::Hub do
|
|
9
9
|
}
|
10
10
|
include Fargo::TTH
|
11
11
|
|
12
|
-
context "searches" do
|
12
|
+
context "searches", :type => :emsync do
|
13
13
|
let(:file1) { Fargo.config.download_dir + '/file12' }
|
14
14
|
let(:file2) { Fargo.config.download_dir + '/file23' }
|
15
15
|
let(:file3) { Fargo.config.download_dir + '/file34' }
|
data/spec/fargo/search_spec.rb
CHANGED
@@ -62,7 +62,12 @@ describe Fargo::Search do
|
|
62
62
|
subject.should_not match_hash(:tth => 'foobar')
|
63
63
|
end
|
64
64
|
|
65
|
-
it "
|
65
|
+
it "extracts the query from the pattern specified" do
|
66
|
+
subject.pattern = 'a$b$c'
|
67
|
+
subject.query.should == 'a b c'
|
68
|
+
end
|
69
|
+
|
70
|
+
it "matches valid file names with a filetype of ANY" do
|
66
71
|
subject.query = 'foo bar baz'
|
67
72
|
subject.filetype = Fargo::Search::ANY
|
68
73
|
|
@@ -30,4 +30,11 @@ describe Fargo::Supports::Chat, :type => :em do
|
|
30
30
|
client.messages.should == []
|
31
31
|
client.messages_with('foo').should == []
|
32
32
|
end
|
33
|
+
|
34
|
+
it "sends the correct message when chatting" do
|
35
|
+
client.instance_variable_set('@hub', hub = mock)
|
36
|
+
hub.should_receive(:send_data).with('<fargo> hello world!|')
|
37
|
+
|
38
|
+
client.send_chat 'hello world!'
|
39
|
+
end
|
33
40
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Fargo::Supports::LocalFileList do
|
3
|
+
describe Fargo::Supports::LocalFileList, :type => :emsync do
|
4
|
+
|
5
|
+
include Fargo::TTH
|
4
6
|
|
5
7
|
before :each do
|
6
8
|
@root = Fargo.config.download_dir + '/shared'
|
@@ -29,6 +31,16 @@ describe Fargo::Supports::LocalFileList do
|
|
29
31
|
hash['shared']['c']['d'].name.should == 'shared/c/d'
|
30
32
|
end
|
31
33
|
|
34
|
+
it "caches the file list so that another client can come along" do
|
35
|
+
@client.share_directory @root
|
36
|
+
|
37
|
+
client2 = Fargo::Client.new
|
38
|
+
client2.config.override_share_size = nil
|
39
|
+
client2.local_file_list.should == @client.local_file_list
|
40
|
+
client2.share_size.should == @client.share_size
|
41
|
+
client2.shared_directories.should == @client.shared_directories
|
42
|
+
end
|
43
|
+
|
32
44
|
it "caches the size of each file shared" do
|
33
45
|
@client.share_directory @root
|
34
46
|
|
@@ -67,4 +79,23 @@ describe Fargo::Supports::LocalFileList do
|
|
67
79
|
|
68
80
|
@client.listing_for('TTH/' + listing.tth).should == listing
|
69
81
|
end
|
82
|
+
|
83
|
+
it "generates a correct file list" do
|
84
|
+
@client.share_directory @root
|
85
|
+
file = Bzip2::Reader.open(@client.config.config_dir + '/files.xml.bz2')
|
86
|
+
xml = file.read
|
87
|
+
|
88
|
+
xml.should == <<-XML
|
89
|
+
<?xml version="1.0" encoding="utf-8"?>
|
90
|
+
<FileListing Base="/" Version="1" Generator="fargo #{Fargo::VERSION}">
|
91
|
+
<Directory Name="shared">
|
92
|
+
<File Name="a" Size="1" TTH="#{file_tth(@root + '/a')}"/>
|
93
|
+
<File Name="b" Size="1" TTH="#{file_tth(@root + '/b')}"/>
|
94
|
+
<Directory Name="c">
|
95
|
+
<File Name="d" Size="1" TTH="#{file_tth(@root + '/c/d')}"/>
|
96
|
+
</Directory>
|
97
|
+
</Directory>
|
98
|
+
</FileListing>
|
99
|
+
XML
|
100
|
+
end
|
70
101
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -28,12 +28,15 @@ RSpec.configure do |c|
|
|
28
28
|
end
|
29
29
|
|
30
30
|
c.around :each, :type => :em do |example|
|
31
|
-
EventMachine.
|
31
|
+
EventMachine.run_block {
|
32
32
|
example.run
|
33
|
-
|
34
|
-
EventMachine.stop_event_loop
|
35
33
|
}
|
36
34
|
end
|
35
|
+
|
36
|
+
c.before :each, :type => :emsync do
|
37
|
+
EM.stub(:schedule).and_yield
|
38
|
+
EM.stub(:defer).and_yield
|
39
|
+
end
|
37
40
|
end
|
38
41
|
|
39
42
|
Dir[File.dirname(__FILE__) + '/support/*.rb'].each { |f| load f }
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fargo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 19
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
|
-
-
|
7
|
+
- 4
|
9
8
|
- 0
|
10
|
-
version: 0.
|
9
|
+
version: 0.4.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Alex Crichton
|
@@ -15,76 +14,100 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-
|
17
|
+
date: 2010-11-18 00:00:00 -05:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
21
|
+
name: eventmachine
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
prerelease: false
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: em-websocket
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 0
|
42
|
+
version: "0"
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: em-http-request
|
48
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
23
49
|
none: false
|
24
50
|
requirements:
|
25
51
|
- - ">="
|
26
52
|
- !ruby/object:Gem::Version
|
27
|
-
hash: 3
|
28
53
|
segments:
|
29
54
|
- 0
|
30
55
|
version: "0"
|
31
|
-
requirement: *id001
|
32
56
|
type: :runtime
|
33
|
-
name: eventmachine
|
34
57
|
prerelease: false
|
58
|
+
version_requirements: *id003
|
35
59
|
- !ruby/object:Gem::Dependency
|
36
|
-
|
60
|
+
name: activesupport
|
61
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
37
62
|
none: false
|
38
63
|
requirements:
|
39
64
|
- - ">="
|
40
65
|
- !ruby/object:Gem::Version
|
41
|
-
hash: 7
|
42
66
|
segments:
|
43
67
|
- 3
|
44
68
|
- 0
|
45
69
|
- 0
|
46
70
|
version: 3.0.0
|
47
|
-
requirement: *id002
|
48
71
|
type: :runtime
|
49
|
-
name: activesupport
|
50
72
|
prerelease: false
|
73
|
+
version_requirements: *id004
|
51
74
|
- !ruby/object:Gem::Dependency
|
52
|
-
|
75
|
+
name: nokogiri
|
76
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
53
77
|
none: false
|
54
78
|
requirements:
|
55
79
|
- - ">="
|
56
80
|
- !ruby/object:Gem::Version
|
57
|
-
hash: 3
|
58
81
|
segments:
|
59
82
|
- 0
|
60
83
|
version: "0"
|
61
|
-
requirement: *id003
|
62
84
|
type: :runtime
|
63
|
-
name: libxml-ruby
|
64
85
|
prerelease: false
|
86
|
+
version_requirements: *id005
|
65
87
|
- !ruby/object:Gem::Dependency
|
66
|
-
|
88
|
+
name: bzip2-ruby
|
89
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
67
90
|
none: false
|
68
91
|
requirements:
|
69
92
|
- - ">="
|
70
93
|
- !ruby/object:Gem::Version
|
71
|
-
hash: 3
|
72
94
|
segments:
|
73
95
|
- 0
|
74
96
|
version: "0"
|
75
|
-
requirement: *id004
|
76
97
|
type: :runtime
|
77
|
-
name: bzip2-ruby
|
78
98
|
prerelease: false
|
99
|
+
version_requirements: *id006
|
79
100
|
description: Direct Connect (DC) Client implemented in pure Ruby
|
80
101
|
email: alex@alexcrichton.com
|
81
|
-
executables:
|
82
|
-
|
102
|
+
executables:
|
103
|
+
- fargo
|
83
104
|
extensions:
|
84
105
|
- ext/fargo/extconf.rb
|
106
|
+
- ext/readline/extconf.rb
|
85
107
|
extra_rdoc_files: []
|
86
108
|
|
87
109
|
files:
|
110
|
+
- bin/fargo
|
88
111
|
- ext/fargo/base32.c
|
89
112
|
- ext/fargo/base32.h
|
90
113
|
- ext/fargo/extconf.rb
|
@@ -96,8 +119,24 @@ files:
|
|
96
119
|
- ext/fargo/tigertree.h
|
97
120
|
- ext/fargo/tth.c
|
98
121
|
- ext/fargo/tth.h
|
122
|
+
- ext/readline/extconf.rb
|
123
|
+
- ext/readline/fargo_cli.c
|
124
|
+
- ext/readline/screen.c
|
125
|
+
- ext/readline/screen.h
|
99
126
|
- lib/fargo.rb
|
127
|
+
- lib/fargo/cli.rb
|
128
|
+
- lib/fargo/cli/completion.rb
|
129
|
+
- lib/fargo/cli/downloads.rb
|
130
|
+
- lib/fargo/cli/help.rb
|
131
|
+
- lib/fargo/cli/info.rb
|
132
|
+
- lib/fargo/cli/logging.rb
|
133
|
+
- lib/fargo/cli/nick_browser.rb
|
134
|
+
- lib/fargo/cli/searches.rb
|
135
|
+
- lib/fargo/cli/stats.rb
|
100
136
|
- lib/fargo/client.rb
|
137
|
+
- lib/fargo/ext/irb.rb
|
138
|
+
- lib/fargo/ext/readline.rb
|
139
|
+
- lib/fargo/ext/struct.rb
|
101
140
|
- lib/fargo/parser.rb
|
102
141
|
- lib/fargo/protocol/dc.rb
|
103
142
|
- lib/fargo/protocol/hub.rb
|
@@ -135,8 +174,8 @@ homepage: http://github.com/alexcrichton/fargo
|
|
135
174
|
licenses: []
|
136
175
|
|
137
176
|
post_install_message:
|
138
|
-
rdoc_options:
|
139
|
-
|
177
|
+
rdoc_options: []
|
178
|
+
|
140
179
|
require_paths:
|
141
180
|
- lib
|
142
181
|
- ext
|
@@ -145,7 +184,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
145
184
|
requirements:
|
146
185
|
- - ">="
|
147
186
|
- !ruby/object:Gem::Version
|
148
|
-
hash:
|
187
|
+
hash: 4279216489116306912
|
149
188
|
segments:
|
150
189
|
- 0
|
151
190
|
version: "0"
|
@@ -154,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
193
|
requirements:
|
155
194
|
- - ">="
|
156
195
|
- !ruby/object:Gem::Version
|
157
|
-
hash:
|
196
|
+
hash: 4279216489116306912
|
158
197
|
segments:
|
159
198
|
- 0
|
160
199
|
version: "0"
|