Sutto-SABnzbd 0.1.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/SABnzbd.gemspec +30 -0
- data/VERSION.yml +4 -0
- data/example/simple.rb +20 -0
- data/lib/sabnzbd.rb +101 -0
- data/test/sabnzbd_test.rb +11 -0
- data/test/test_helper.rb +7 -0
- metadata +67 -0
data/SABnzbd.gemspec
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |s|
|
|
4
|
+
s.name = %q{SABnzbd}
|
|
5
|
+
s.version = "0.1.0"
|
|
6
|
+
|
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
|
+
s.authors = ["Darcy Laycock"]
|
|
9
|
+
s.date = %q{2009-01-08}
|
|
10
|
+
s.description = %q{Ruby interface to the SABnzbd usenet client}
|
|
11
|
+
s.email = %q{sutto@sutto.net}
|
|
12
|
+
s.files = ["SABnzbd-0.1.0.gem", "SABnzbd.gemspec", "VERSION.yml", "example/simple.rb", "lib/sabnzbd.rb", "test/sabnzbd_test.rb", "test/test_helper.rb"]
|
|
13
|
+
s.homepage = %q{http://github.com/Sutto/SABnzbd}
|
|
14
|
+
s.require_paths = ["lib"]
|
|
15
|
+
s.rubygems_version = %q{1.3.1}
|
|
16
|
+
s.summary = %q{Ruby interface to the SABnzbd usenet client}
|
|
17
|
+
|
|
18
|
+
if s.respond_to? :specification_version then
|
|
19
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
20
|
+
s.specification_version = 2
|
|
21
|
+
|
|
22
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
|
23
|
+
s.add_runtime_dependency(%q<httparty>, [">= 0"])
|
|
24
|
+
else
|
|
25
|
+
s.add_dependency(%q<httparty>, [">= 0"])
|
|
26
|
+
end
|
|
27
|
+
else
|
|
28
|
+
s.add_dependency(%q<httparty>, [">= 0"])
|
|
29
|
+
end
|
|
30
|
+
end
|
data/VERSION.yml
ADDED
data/example/simple.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'pathname'
|
|
3
|
+
require Pathname.new(__FILE__).dirname.parent.join('lib', 'sabnzbd')
|
|
4
|
+
|
|
5
|
+
sab = SABnzbd.new(ENV['SAB_UN'] || "", ENV['SAB_PW'] || "") # If set, provide username and password
|
|
6
|
+
|
|
7
|
+
status = sab.status
|
|
8
|
+
|
|
9
|
+
puts "******************"
|
|
10
|
+
puts "* SABnzbd Status *"
|
|
11
|
+
puts "******************"
|
|
12
|
+
|
|
13
|
+
print status.paused? ? "Currently paused" : "Currently running"
|
|
14
|
+
puts " with #{status.queue_size} items in queue"
|
|
15
|
+
puts ""
|
|
16
|
+
puts "Queue Contents:"
|
|
17
|
+
status.jobs.each_with_index do |job, idx|
|
|
18
|
+
percent = "%.2f%%" % [(1.0 - job.left / job.total)]
|
|
19
|
+
puts "#{idx + 1}) #{job.filename} - Total size is #{"%.2f" % [job.total]}MB - #{percent} done"
|
|
20
|
+
end
|
data/lib/sabnzbd.rb
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'httparty'
|
|
3
|
+
|
|
4
|
+
class SABnzbd
|
|
5
|
+
|
|
6
|
+
class Job
|
|
7
|
+
attr_accessor :id, :left, :total, :msgid, :filename
|
|
8
|
+
def initialize(id, left, total, msgid, filename)
|
|
9
|
+
self.id, self.left, self.total, self.msgid, self.filename = id, left, total, msgid, filename
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class Status
|
|
14
|
+
attr_accessor :paused, :queue_size, :jobs, :size_downloaded, :size_left, :time_left,
|
|
15
|
+
:complete_disk_free, :download_disk_free, :speed, :raw
|
|
16
|
+
|
|
17
|
+
def alive?
|
|
18
|
+
!alive
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def paused?
|
|
22
|
+
paused
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def initialize(hash)
|
|
26
|
+
self.raw = hash
|
|
27
|
+
self.paused = hash["paused"]
|
|
28
|
+
self.jobs = self.class.jobs_from(hash)
|
|
29
|
+
self.queue_size = hash["noofslots"]
|
|
30
|
+
self.size_downloaded = hash["mb"]
|
|
31
|
+
self.size_left = hash["mbleft"]
|
|
32
|
+
self.time_left = parse_time(hash)
|
|
33
|
+
self.speed = hash["kbpersec"]
|
|
34
|
+
# Disk Spaces
|
|
35
|
+
self.complete_disk_free = hash["diskspace1"]
|
|
36
|
+
self.download_disk_free = hash["diskspace2"]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.jobs_from(hash)
|
|
40
|
+
jobs = []
|
|
41
|
+
hash["jobs"].each do |j|
|
|
42
|
+
jobs << Job.new(j["id"], j["mbleft"], j["mb"], j["msgid"], j["filename"])
|
|
43
|
+
end
|
|
44
|
+
return jobs
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def parse_time(hash)
|
|
50
|
+
t = hash["timeleft"]
|
|
51
|
+
parts = t.split(":").map { |p| p.to_i }
|
|
52
|
+
return parts[2] + parts[1] * 60 + parts[0] * 3600
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
include HTTParty
|
|
58
|
+
base_uri 'localhost:8080'
|
|
59
|
+
|
|
60
|
+
def initialize(username = '', password = '')
|
|
61
|
+
login(username, password)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def login(username, password)
|
|
65
|
+
opts = {}
|
|
66
|
+
opts[:ma_username] = username unless username.blank?
|
|
67
|
+
opts[:ma_password] = password unless password.blank?
|
|
68
|
+
self.class.default_params(opts)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def status
|
|
72
|
+
results = api_call(:qstatus, :output => "json")
|
|
73
|
+
return Status.new(results)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def shutdown!
|
|
77
|
+
verify api_call(:shutdown)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def resume!
|
|
81
|
+
verify api_call(:resume)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def pause!
|
|
85
|
+
verify api_call(:pause)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def api_call(mode, opts = {})
|
|
89
|
+
opts.merge!(:mode => mode.to_s)
|
|
90
|
+
return self.class.get("/sabnzbd/api", :query => opts)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def verify(text)
|
|
94
|
+
text.strip == "ok"
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def jobs
|
|
98
|
+
Status.jobs_from(status)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: Sutto-SABnzbd
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Darcy Laycock
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-01-08 00:00:00 -08:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies:
|
|
15
|
+
- !ruby/object:Gem::Dependency
|
|
16
|
+
name: httparty
|
|
17
|
+
version_requirement:
|
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
19
|
+
requirements:
|
|
20
|
+
- - ">="
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: "0"
|
|
23
|
+
version:
|
|
24
|
+
description: Ruby interface to the SABnzbd usenet client
|
|
25
|
+
email: sutto@sutto.net
|
|
26
|
+
executables: []
|
|
27
|
+
|
|
28
|
+
extensions: []
|
|
29
|
+
|
|
30
|
+
extra_rdoc_files: []
|
|
31
|
+
|
|
32
|
+
files:
|
|
33
|
+
- SABnzbd-0.1.0.gem
|
|
34
|
+
- SABnzbd.gemspec
|
|
35
|
+
- VERSION.yml
|
|
36
|
+
- example/simple.rb
|
|
37
|
+
- lib/sabnzbd.rb
|
|
38
|
+
- test/sabnzbd_test.rb
|
|
39
|
+
- test/test_helper.rb
|
|
40
|
+
has_rdoc: false
|
|
41
|
+
homepage: http://github.com/Sutto/SABnzbd
|
|
42
|
+
post_install_message:
|
|
43
|
+
rdoc_options: []
|
|
44
|
+
|
|
45
|
+
require_paths:
|
|
46
|
+
- lib
|
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
48
|
+
requirements:
|
|
49
|
+
- - ">="
|
|
50
|
+
- !ruby/object:Gem::Version
|
|
51
|
+
version: "0"
|
|
52
|
+
version:
|
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
|
+
requirements:
|
|
55
|
+
- - ">="
|
|
56
|
+
- !ruby/object:Gem::Version
|
|
57
|
+
version: "0"
|
|
58
|
+
version:
|
|
59
|
+
requirements: []
|
|
60
|
+
|
|
61
|
+
rubyforge_project:
|
|
62
|
+
rubygems_version: 1.2.0
|
|
63
|
+
signing_key:
|
|
64
|
+
specification_version: 2
|
|
65
|
+
summary: Ruby interface to the SABnzbd usenet client
|
|
66
|
+
test_files: []
|
|
67
|
+
|