yotsuba 0.2.0 → 0.3.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.
- 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
|