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 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
@@ -0,0 +1,4 @@
1
+ ---
2
+ patch: 0
3
+ major: 0
4
+ minor: 1
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
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class SABnzbdTest < Test::Unit::TestCase
4
+
5
+ should "let return SABnzbd::Status using SABnzbd#status"
6
+
7
+ should "let you pause! downloading"
8
+
9
+ should "let you resume! downloading"
10
+
11
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'mocha'
5
+
6
+ class Test::Unit::TestCase
7
+ end
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
+