yotsuba 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/yotsuba/anime.rb +32 -20
- data/lib/yotsuba/download.rb +56 -23
- data/lib/yotsuba/file.rb +9 -1
- data/lib/yotsuba/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cebbf4e4596c2d1ba5105d93b01d08f217973d18
|
4
|
+
data.tar.gz: 248551e062b33657f79bcfe217c726790780a096
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50deeea2270c036f0206f5c30511c39fa507b714ee900e8cc6e36a951135d9e31b267aa907d817ba45d62f8db0cdba425ca6b9a2763fbd02a4cfea345a02f495
|
7
|
+
data.tar.gz: 1d30a778451ff5f89f32d00e2d69d3cb0ea385e5323f57e2deb64667eb4531da4050eca95cdeaa0570c299267ec64bcfdde240e9639eef350c12762bfd700dc0
|
data/lib/yotsuba/anime.rb
CHANGED
@@ -25,36 +25,48 @@ module Yotsuba
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.all
|
28
|
-
|
28
|
+
precache_animes
|
29
29
|
@@all_animes
|
30
30
|
end
|
31
31
|
|
32
32
|
def self.[](key)
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
return Anime.find_by(title: key) if key.is_a?(String)
|
34
|
+
return Anime.find_by(id: key) if key.is_a?(Fixnum)
|
35
|
+
return Anime.search(key) if key.is_a?(Regexp)
|
36
|
+
|
37
|
+
raise(ArgumentError, "Argument should be a String (title), Fixnum (id), or Regexp (matches title).")
|
38
|
+
end
|
36
39
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
40
|
+
def self.find_by(hash = {title: nil, id: nil})
|
41
|
+
precache_animes
|
42
|
+
@@all_animes.each do |anime|
|
43
|
+
match = check_property(anime, :id, hash) || check_property(anime, :title, hash)
|
44
|
+
return match if match
|
45
|
+
end
|
46
|
+
end
|
41
47
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
} if key.is_a?(Fixnum)
|
48
|
+
def self.find(id)
|
49
|
+
Anime.find_by(id: id)
|
50
|
+
end
|
46
51
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
52
|
+
def self.search(regexp)
|
53
|
+
precache_animes
|
54
|
+
results = []
|
55
|
+
@@all_animes.each do |anime|
|
56
|
+
results << anime if anime.title.match(regexp)
|
57
|
+
end
|
58
|
+
return results
|
59
|
+
end
|
51
60
|
|
52
|
-
|
61
|
+
private
|
53
62
|
|
54
|
-
|
55
|
-
|
63
|
+
def self.precache_animes
|
64
|
+
Yotsuba.get_animes if @@all_animes.length == 0
|
65
|
+
end
|
56
66
|
|
57
|
-
|
67
|
+
def self.check_property(object, symbol, hash)
|
68
|
+
hash[symbol] && object.respond_to?(symbol) && object.send(symbol) == hash[symbol] ? object : nil
|
69
|
+
end
|
58
70
|
|
59
71
|
end
|
60
72
|
end
|
data/lib/yotsuba/download.rb
CHANGED
@@ -7,27 +7,30 @@ module Yotsuba
|
|
7
7
|
class Download
|
8
8
|
include Concurrent::Async
|
9
9
|
|
10
|
-
|
10
|
+
@@all_downloads = []
|
11
11
|
|
12
|
-
|
13
|
-
@filename = options[:filename]
|
14
|
-
@link = options[:link]
|
15
|
-
@part_links = options[:part_links]
|
16
|
-
@output_dir = File.absolute_path(options[:output_dir]) if options[:output_dir]
|
17
|
-
@status = "Queued"
|
18
|
-
|
19
|
-
@output_dir ||= "."
|
12
|
+
attr_reader :status, :file, :id
|
20
13
|
|
21
|
-
|
22
|
-
|
23
|
-
|
14
|
+
def initialize(options = {animefile: nil, output_dir: "." })
|
15
|
+
@file = options[:animefile]
|
16
|
+
@output_dir = File.absolute_path(options[:output_dir])
|
17
|
+
@multiple = (@file.download_links.length > 1) if @file
|
18
|
+
@status = "Queued"
|
19
|
+
if self.valid?
|
20
|
+
@id = @@all_downloads.length + 1
|
21
|
+
@@all_downloads << self if self.valid?
|
24
22
|
end
|
23
|
+
|
25
24
|
init_mutex # Required by Concurrent::Async
|
26
25
|
end
|
27
26
|
|
27
|
+
def valid?
|
28
|
+
self.file != nil
|
29
|
+
end
|
30
|
+
|
28
31
|
def run
|
29
|
-
@path = File.join(@output_dir, @filename)
|
30
|
-
|
32
|
+
@path = @multiple ? File.join(@output_dir, @filename+".zip") : @path = File.join(@output_dir, @filename)
|
33
|
+
|
31
34
|
FileUtils.mkdir_p @output_dir
|
32
35
|
|
33
36
|
if File.exists? @path
|
@@ -35,15 +38,10 @@ module Yotsuba
|
|
35
38
|
return
|
36
39
|
end
|
37
40
|
|
38
|
-
|
39
|
-
|
40
|
-
create_request(link).run
|
41
|
-
end
|
42
|
-
finish_request
|
43
|
-
elsif @link
|
44
|
-
create_request(@link).run
|
45
|
-
finish_request
|
41
|
+
@file.download_links.each do |link|
|
42
|
+
create_request(link).run
|
46
43
|
end
|
44
|
+
finish_request
|
47
45
|
end
|
48
46
|
|
49
47
|
def run_async
|
@@ -54,10 +52,41 @@ module Yotsuba
|
|
54
52
|
File.delete(@path) if @path
|
55
53
|
end
|
56
54
|
|
57
|
-
def
|
55
|
+
def bytes_written
|
58
56
|
@path ? File.size(@path) : 0
|
59
57
|
end
|
60
58
|
|
59
|
+
def percent_downloaded
|
60
|
+
100.0 * self.bytes_written / self.file.size
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.all
|
64
|
+
@@all_downloads
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.[](key)
|
68
|
+
return self.find_by(id: key) if key.is_a?(Fixnum)
|
69
|
+
return self.find_by(file: key) if key.is_a?(AnimeFile)
|
70
|
+
return self.find_by(filename: key) if key.is_a?(String)
|
71
|
+
return self.find_by
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.find_by(hash = {id: nil, file: nil, filename: nil, status: nil, percent_downloaded: nil})
|
75
|
+
@@all_downloads.each do |download|
|
76
|
+
match = check_property(download, :id, hash) ||
|
77
|
+
check_property(download, :file, hash) ||
|
78
|
+
check_property(download, :filename, hash) ||
|
79
|
+
check_property(download, :status, hash) ||
|
80
|
+
check_property(download, :percent_downloaded, hash)
|
81
|
+
|
82
|
+
return match if match
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.find(id)
|
87
|
+
return Download.find_by(id: id)
|
88
|
+
end
|
89
|
+
|
61
90
|
private
|
62
91
|
|
63
92
|
def create_request(link)
|
@@ -81,5 +110,9 @@ module Yotsuba
|
|
81
110
|
@file_handle.close
|
82
111
|
end
|
83
112
|
|
113
|
+
def check_property(object, symbol, hash)
|
114
|
+
hash[symbol] && object.respond_to?(symbol) && object.send(symbol) == hash[symbol] ? object : nil
|
115
|
+
end
|
116
|
+
|
84
117
|
end
|
85
118
|
end
|
data/lib/yotsuba/file.rb
CHANGED
@@ -22,7 +22,15 @@ module Yotsuba
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def download(output_dir)
|
25
|
-
Download.new(
|
25
|
+
@download ||= Download.new(animefile: self, output_dir: output_dir)
|
26
|
+
end
|
27
|
+
|
28
|
+
def ==(other_file)
|
29
|
+
other_file && self.id == other_file.id
|
30
|
+
end
|
31
|
+
|
32
|
+
def eq(other_file)
|
33
|
+
self == other_file
|
26
34
|
end
|
27
35
|
|
28
36
|
end
|
data/lib/yotsuba/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yotsuba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Suchipi Izumi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|