download_tv 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -2
- data/.travis.yml +0 -2
- data/bin/tv +16 -0
- data/lib/download_tv/configuration.rb +39 -0
- data/lib/download_tv/downloader.rb +12 -12
- data/lib/download_tv/grabbers/tpb.rb +2 -2
- data/lib/download_tv/myepisodes.rb +5 -6
- data/lib/download_tv/torrent.rb +1 -1
- data/lib/download_tv/version.rb +1 -1
- data/lib/download_tv.rb +1 -0
- data/test/downloader_test.rb +29 -9
- data/test/grabbers_test.rb +1 -1
- metadata +2 -2
- data/lib/download_tv/config_example.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd6399aa4f4c7b47b11bfef2797f874a009e9336
|
4
|
+
data.tar.gz: 6db536e4abc9ff2e58090ca782a29d2dc28149d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88d2844361b6213fe0eea64d0e14cbdcacd42a9f8ce75e29c5136c9fc4a9c748ebc6fb60226d186eee17080c7b5ae40953b8af304f52daaba09bd4d359a00eb6
|
7
|
+
data.tar.gz: ed7969953514c6e45be2ee25c808426c4ae3e66482a1e79bd11c632e801cc5f60e941675105a236d9bc652d306f13ed8b3133a4293f08f4d5e46f4b21f0426e4
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/bin/tv
CHANGED
@@ -5,6 +5,8 @@ require 'download_tv'
|
|
5
5
|
|
6
6
|
options = {}
|
7
7
|
options[:offset] = 0
|
8
|
+
options[:auto] = true
|
9
|
+
options[:subs] = true
|
8
10
|
options[:dry] = false
|
9
11
|
options[:cmd] = "run"
|
10
12
|
|
@@ -28,10 +30,22 @@ opt_parser = OptionParser.new do |opts|
|
|
28
30
|
options[:arg] = s
|
29
31
|
end
|
30
32
|
|
33
|
+
opts.on("-c", "--configure", "Configures defaults") do
|
34
|
+
options[:cmd] = "config"
|
35
|
+
end
|
36
|
+
|
31
37
|
opts.on("--dry-run", "Don't write to the date file") do |n|
|
32
38
|
options[:dry] = n
|
33
39
|
end
|
34
40
|
|
41
|
+
opts.on("-a", "--[no-]auto", "Automatically find links") do |n|
|
42
|
+
options[:auto] = n
|
43
|
+
end
|
44
|
+
|
45
|
+
opts.on("-s", "--[no-]subtitles", "Download subtitles") do |n|
|
46
|
+
options[:subs] = n
|
47
|
+
end
|
48
|
+
|
35
49
|
opts.on_tail("-h", "--help", "Show this message") do
|
36
50
|
puts opts
|
37
51
|
exit
|
@@ -49,6 +63,8 @@ begin
|
|
49
63
|
dl.download_single_show(options[:arg])
|
50
64
|
when "file"
|
51
65
|
dl.download_from_file(options[:arg])
|
66
|
+
when "config"
|
67
|
+
DownloadTV::Configuration.new.change_configuration
|
52
68
|
end
|
53
69
|
rescue Interrupt
|
54
70
|
puts "Interrupt signal detected. Exiting..."
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module DownloadTV
|
2
|
+
class Configuration
|
3
|
+
attr_reader :content
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
if File.exists? "config.rb"
|
7
|
+
@content = File.open("config", "rb") {|f| Marshal.load(f)}
|
8
|
+
else
|
9
|
+
@content = {}
|
10
|
+
change_configuration
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def change_configuration
|
16
|
+
if @content[:myepisodes_user]
|
17
|
+
print "Enter your MyEpisodes username (#{@content[:myepisodes_user]}) : "
|
18
|
+
else
|
19
|
+
print "Enter your MyEpisodes username : "
|
20
|
+
end
|
21
|
+
@content[:myepisodes_user] = STDIN.gets.chomp
|
22
|
+
puts
|
23
|
+
|
24
|
+
print "Save cookie? (y)/n: "
|
25
|
+
@content[:cookie] = STDIN.gets.chomp.downcase != "n"
|
26
|
+
puts
|
27
|
+
|
28
|
+
puts "Enter a comma-separated list of shows to ignore: (#{@content[:ignored]})"
|
29
|
+
@content[:ignored] = STDIN.gets.chomp
|
30
|
+
puts
|
31
|
+
|
32
|
+
serialize()
|
33
|
+
end
|
34
|
+
|
35
|
+
def serialize()
|
36
|
+
File.open("config", "wb") {|f| Marshal.dump(@content, f)}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,20 +1,20 @@
|
|
1
|
-
begin
|
2
|
-
require_relative 'config'
|
3
|
-
rescue LoadError
|
4
|
-
puts "Config file not found. Try renaming the config_example file to config.rb"
|
5
|
-
exit
|
6
|
-
end
|
7
|
-
|
8
1
|
module DownloadTV
|
9
2
|
|
10
3
|
class Downloader
|
11
4
|
|
12
5
|
attr_reader :offset, :auto, :subs
|
6
|
+
attr_accessor :config
|
13
7
|
|
14
|
-
def initialize(offset)
|
8
|
+
def initialize(offset, auto, subs, config={})
|
15
9
|
@offset = offset.abs
|
16
|
-
@auto =
|
17
|
-
|
10
|
+
@auto = auto
|
11
|
+
@subs = subs
|
12
|
+
if config.empty?
|
13
|
+
@config = Configuration.new.content # Load configuration
|
14
|
+
else
|
15
|
+
@config = config
|
16
|
+
end
|
17
|
+
|
18
18
|
Thread.abort_on_exception = true
|
19
19
|
end
|
20
20
|
|
@@ -39,7 +39,7 @@ module DownloadTV
|
|
39
39
|
|
40
40
|
date = check_date
|
41
41
|
|
42
|
-
myepisodes = MyEpisodes.new(
|
42
|
+
myepisodes = MyEpisodes.new(@config[:myepisodes_user], @config[:cookie])
|
43
43
|
# Log in using cookie by default
|
44
44
|
myepisodes.load_cookie
|
45
45
|
shows = myepisodes.get_shows(date)
|
@@ -107,7 +107,7 @@ module DownloadTV
|
|
107
107
|
# Ignored shows
|
108
108
|
s = shows.reject do |i|
|
109
109
|
# Remove season+episode
|
110
|
-
|
110
|
+
@config[:ignored].include?(i.split(" ")[0..-2].join(" "))
|
111
111
|
end
|
112
112
|
|
113
113
|
# Removes apostrophes and parens
|
@@ -2,8 +2,8 @@ module DownloadTV
|
|
2
2
|
|
3
3
|
class ThePirateBay < LinkGrabber
|
4
4
|
|
5
|
-
def initialize()
|
6
|
-
proxy =
|
5
|
+
def initialize(tpb_proxy = "https://pirateproxy.cc")
|
6
|
+
proxy = tpb_proxy.gsub(/\/+$/, "") || "https://thepiratebay.cr"
|
7
7
|
|
8
8
|
super("#{proxy}/search/%s/0/7/0")
|
9
9
|
|
@@ -2,11 +2,10 @@ module DownloadTV
|
|
2
2
|
|
3
3
|
class MyEpisodes
|
4
4
|
|
5
|
-
def initialize(user=nil,
|
5
|
+
def initialize(user=nil, save_cookie)
|
6
6
|
@agent = Mechanize.new
|
7
7
|
@user = user
|
8
|
-
@
|
9
|
-
@save_cookie = cookie_path != ""
|
8
|
+
@save_cookie = save_cookie
|
10
9
|
end
|
11
10
|
|
12
11
|
def login
|
@@ -36,8 +35,8 @@ module DownloadTV
|
|
36
35
|
end
|
37
36
|
|
38
37
|
def load_cookie
|
39
|
-
if File.exists?
|
40
|
-
@agent.cookie_jar.load
|
38
|
+
if File.exists? "cookie"
|
39
|
+
@agent.cookie_jar.load "cookie"
|
41
40
|
page = @agent.get "https://www.myepisodes.com/login.php"
|
42
41
|
if page.links[1].text == "Register"
|
43
42
|
puts "The cookie is invalid/has expired."
|
@@ -52,7 +51,7 @@ module DownloadTV
|
|
52
51
|
end
|
53
52
|
|
54
53
|
def save_cookie
|
55
|
-
@agent.cookie_jar.save(
|
54
|
+
@agent.cookie_jar.save("cookie", session: true)
|
56
55
|
@agent
|
57
56
|
|
58
57
|
end
|
data/lib/download_tv/torrent.rb
CHANGED
@@ -5,7 +5,7 @@ module DownloadTV
|
|
5
5
|
attr_reader :g_names, :g_instances, :n_grabbers
|
6
6
|
|
7
7
|
def initialize
|
8
|
-
@g_names =
|
8
|
+
@g_names = ["Eztv", "ThePirateBay", "TorrentAPI"]
|
9
9
|
@g_instances = Array.new
|
10
10
|
@n_grabbers = @g_names.size # Initial size
|
11
11
|
@tries = @n_grabbers - 1
|
data/lib/download_tv/version.rb
CHANGED
data/lib/download_tv.rb
CHANGED
data/test/downloader_test.rb
CHANGED
@@ -7,36 +7,56 @@ describe DownloadTV::Downloader do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "when creating the object" do
|
10
|
-
it "should receive
|
11
|
-
->{ DownloadTV::Downloader.new(
|
10
|
+
it "should receive three parameters" do
|
11
|
+
->{ DownloadTV::Downloader.new(0) }.must_raise ArgumentError
|
12
|
+
->{ DownloadTV::Downloader.new(0, true) }.must_raise ArgumentError
|
13
|
+
end
|
14
|
+
|
15
|
+
it "can receive an optional configuration hash" do
|
16
|
+
DownloadTV::Downloader.new(0, true, true, {:hi => 1}).config.must_equal ({:hi => 1})
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should receive an integer for the offset" do
|
20
|
+
->{ DownloadTV::Downloader.new("foo", true, true, {1=>1}) }.must_raise NoMethodError
|
12
21
|
end
|
13
22
|
|
14
23
|
it "should store the first argument as @offset" do
|
15
|
-
DownloadTV::Downloader.new(3).offset.must_equal 3
|
24
|
+
DownloadTV::Downloader.new(3, true, true, {1=>1}).offset.must_equal 3
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should store the second argument as @auto" do
|
28
|
+
DownloadTV::Downloader.new(3, true, true, {1=>1}).auto.must_equal true
|
29
|
+
DownloadTV::Downloader.new(3, false, true, {1=>1}).auto.must_equal false
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should store the second argument as @subs" do
|
33
|
+
DownloadTV::Downloader.new(3, true, true, {1=>1}).subs.must_equal true
|
34
|
+
DownloadTV::Downloader.new(3, true, false, {1=>1}).subs.must_equal false
|
16
35
|
end
|
17
36
|
|
18
37
|
end
|
19
38
|
|
20
39
|
describe "the fix_names function" do
|
40
|
+
config = {:ignored => ["Ignored"]}
|
41
|
+
dl = DownloadTV::Downloader.new(0, true, true, config)
|
42
|
+
|
21
43
|
it "should remove apostrophes and parens" do
|
22
44
|
shows = ["Mr. Foo S01E02", "Bar (UK) S00E22", "Let's S05E03"]
|
23
45
|
result = ["Mr. Foo S01E02", "Bar S00E22", "Lets S05E03"]
|
24
|
-
|
46
|
+
dl.fix_names(shows).must_equal result
|
25
47
|
end
|
26
48
|
|
27
49
|
it "should remove ignored shows" do
|
28
|
-
|
50
|
+
|
29
51
|
shows = ["Mr. Foo S01E02", "Bar (UK) S00E22", "Ignored S20E22", "Let's S05E03"]
|
30
52
|
result = ["Mr. Foo S01E02", "Bar S00E22", "Lets S05E03"]
|
31
|
-
|
53
|
+
dl.fix_names(shows).must_equal result
|
32
54
|
end
|
33
55
|
end
|
34
56
|
|
35
57
|
|
36
58
|
describe "the date file" do
|
37
|
-
dl = DownloadTV::Downloader.new(0)
|
38
|
-
|
39
|
-
|
59
|
+
dl = DownloadTV::Downloader.new(0, true, true, {1=>1})
|
40
60
|
|
41
61
|
it "should be created if it doesn't exist" do
|
42
62
|
dl.check_date
|
data/test/grabbers_test.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: download_tv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- guille
|
@@ -124,7 +124,7 @@ files:
|
|
124
124
|
- bin/tv
|
125
125
|
- download_tv.gemspec
|
126
126
|
- lib/download_tv.rb
|
127
|
-
- lib/download_tv/
|
127
|
+
- lib/download_tv/configuration.rb
|
128
128
|
- lib/download_tv/downloader.rb
|
129
129
|
- lib/download_tv/grabbers/addic7ed.rb
|
130
130
|
- lib/download_tv/grabbers/eztv.rb
|
@@ -1,12 +0,0 @@
|
|
1
|
-
module DownloadTV
|
2
|
-
CONFIG = {
|
3
|
-
myepisodes_user: "", # MyEpisodes login username
|
4
|
-
auto: true, # Try to automatically select the torrents
|
5
|
-
subs: true, # Download subtitles (not implemented yet)
|
6
|
-
cookie_path: "cookie", # Leave blank to prevent the app from storing cookies
|
7
|
-
ignored: [], # list of strings that match show names as written in myepisodes
|
8
|
-
tpb_proxy: "https://pirateproxy.cc", # URL of the TPB proxy to use
|
9
|
-
grabbers: ["Eztv", "ThePirateBay", "TorrentAPI"], # names of the classes in /grabbers
|
10
|
-
}
|
11
|
-
|
12
|
-
end
|