gamerom 0.1.0 → 0.2.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/CHANGELOG.md +18 -0
- data/Gemfile.lock +7 -1
- data/README.md +2 -2
- data/gamerom.gemspec +3 -1
- data/lib/gamerom/cli.rb +1 -1
- data/lib/gamerom/game.rb +10 -7
- data/lib/gamerom/repo_adapters/coolrom.rb +15 -12
- data/lib/gamerom/repo_adapters/vimm.rb +30 -9
- data/lib/gamerom/version.rb +1 -1
- data/lib/mechanizeprogress.rb +44 -0
- metadata +33 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 964cf92bf92c6fc0be0fb61f0fd6f9f216debb7231ccbfdc31da38b49b93463c
|
4
|
+
data.tar.gz: 2601482af6610a7b639a19f3b16fddf988fccb74a65732fa3b64c97e97cb2d4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce291c55b28cef9805292a5bd53f60a86bd51d5de665707f80cbfb1e38cb363843e9f3355303a625de3a706d07b5d52ea7cb6f565fa81ba96ea684fe067d35e3
|
7
|
+
data.tar.gz: 9b7d17f0ab5f1115f38d0364a05b6a2e9e3d0b57b4ad0965d882ea16f05b46138dfea43d46bbb1e61c3aca02b7e77a634dfbb1de9aafe9e9c8db24ed63c4ce7f
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
|
+
|
7
|
+
## [Unreleased]
|
8
|
+
|
9
|
+
## [0.2.0] - 2021-05-08
|
10
|
+
- Add support for downloading multiple disc ROMs on vimm repo
|
11
|
+
- Add progress bar to the install process
|
12
|
+
|
13
|
+
## [0.1.0] - 2021-05-07
|
14
|
+
- Initial release
|
15
|
+
|
16
|
+
[Unreleased]: https://github.com/lucasmundim/gamerom/compare/v0.2.0...HEAD
|
17
|
+
[0.2.0]: https://github.com/lucasmundim/gamerom/compare/v0.1.0...v0.2.0
|
18
|
+
[0.1.0]: https://github.com/lucasmundim/gamerom/releases/tag/v0.1.0
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gamerom (0.
|
4
|
+
gamerom (0.2.0)
|
5
5
|
mechanize (~> 2.8.0)
|
6
|
+
mechanize-progressbar (~> 0.2.0)
|
6
7
|
nokogiri (~> 1.11.3)
|
8
|
+
progressbar (~> 0.9.0)
|
7
9
|
rest-client (~> 2.1.0)
|
8
10
|
thor (~> 1.1.0)
|
9
11
|
|
@@ -31,6 +33,9 @@ GEM
|
|
31
33
|
rubyntlm (~> 0.6, >= 0.6.3)
|
32
34
|
webrick (~> 1.7)
|
33
35
|
webrobots (~> 0.1.2)
|
36
|
+
mechanize-progressbar (0.2.0)
|
37
|
+
mechanize (>= 1.0.0)
|
38
|
+
progressbar (>= 0.9.0)
|
34
39
|
mime-types (3.3.1)
|
35
40
|
mime-types-data (~> 3.2015)
|
36
41
|
mime-types-data (3.2021.0225)
|
@@ -45,6 +50,7 @@ GEM
|
|
45
50
|
parallel (1.20.1)
|
46
51
|
parser (3.0.1.0)
|
47
52
|
ast (~> 2.4.1)
|
53
|
+
progressbar (0.9.2)
|
48
54
|
public_suffix (4.0.6)
|
49
55
|
racc (1.5.2)
|
50
56
|
rainbow (3.0.0)
|
data/README.md
CHANGED
@@ -14,7 +14,7 @@ It currently supports the following repositories:
|
|
14
14
|
Add this to your .bashrc, .bash_aliases, etc:
|
15
15
|
|
16
16
|
```
|
17
|
-
alias gamerom='docker run --rm -it -v ~/.gamerom:/root/.gamerom docker.io/lucasmundim/gamerom:0.
|
17
|
+
alias gamerom='docker run --rm -it -v ~/.gamerom:/root/.gamerom docker.io/lucasmundim/gamerom:0.2.0'
|
18
18
|
```
|
19
19
|
|
20
20
|
Use it as:
|
@@ -539,7 +539,7 @@ Print program version
|
|
539
539
|
|
540
540
|
```
|
541
541
|
$ gamerom version
|
542
|
-
0.
|
542
|
+
0.2.0
|
543
543
|
```
|
544
544
|
|
545
545
|
## Development
|
data/gamerom.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
|
19
19
|
spec.metadata["homepage_uri"] = spec.homepage
|
20
20
|
spec.metadata["source_code_uri"] = spec.homepage
|
21
|
-
spec.metadata["changelog_uri"] = "#{spec.homepage}/CHANGELOG.md"
|
21
|
+
spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
|
22
22
|
|
23
23
|
# Specify which files should be added to the gem when it is released.
|
24
24
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -30,7 +30,9 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
32
|
spec.add_runtime_dependency "mechanize", "~> 2.8.0"
|
33
|
+
spec.add_runtime_dependency "mechanize-progressbar", "~> 0.2.0"
|
33
34
|
spec.add_runtime_dependency "nokogiri", "~> 1.11.3"
|
35
|
+
spec.add_runtime_dependency "progressbar", "~> 0.9.0"
|
34
36
|
spec.add_runtime_dependency "rest-client", "~> 2.1.0"
|
35
37
|
spec.add_runtime_dependency "thor", "~> 1.1.0"
|
36
38
|
|
data/lib/gamerom/cli.rb
CHANGED
data/lib/gamerom/game.rb
CHANGED
@@ -2,11 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'fileutils'
|
4
4
|
require 'ostruct'
|
5
|
+
require 'yaml'
|
5
6
|
|
6
7
|
module Gamerom
|
7
8
|
class Game < OpenStruct
|
8
|
-
def
|
9
|
-
|
9
|
+
def filenames
|
10
|
+
YAML.load_file(self.state_filename).map do |filename|
|
11
|
+
"#{self.filepath}/#{filename}"
|
12
|
+
end
|
10
13
|
end
|
11
14
|
|
12
15
|
def filepath
|
@@ -14,8 +17,8 @@ module Gamerom
|
|
14
17
|
end
|
15
18
|
|
16
19
|
def install
|
17
|
-
self.repo.install self do |
|
18
|
-
self.update_state
|
20
|
+
self.repo.install self do |filenames|
|
21
|
+
self.update_state filenames
|
19
22
|
end
|
20
23
|
end
|
21
24
|
|
@@ -32,13 +35,13 @@ module Gamerom
|
|
32
35
|
end
|
33
36
|
|
34
37
|
def uninstall
|
35
|
-
FileUtils.rm_rf self.
|
38
|
+
FileUtils.rm_rf self.filenames
|
36
39
|
FileUtils.rm_rf self.state_filename
|
37
40
|
end
|
38
41
|
|
39
|
-
def update_state
|
42
|
+
def update_state filenames
|
40
43
|
FileUtils.mkdir_p("#{Gamerom::STATE_DIR}/#{self.repo.name}/#{self.platform}/#{self.region}")
|
41
|
-
File.write(self.state_filename,
|
44
|
+
File.write(self.state_filename, filenames.to_yaml)
|
42
45
|
end
|
43
46
|
|
44
47
|
private
|
@@ -1,5 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'mechanize'
|
4
|
+
require 'mechanize/progressbar'
|
5
|
+
require 'mechanizeprogress'
|
3
6
|
require 'nokogiri'
|
4
7
|
require 'rest-client'
|
5
8
|
|
@@ -58,19 +61,19 @@ module Gamerom
|
|
58
61
|
end
|
59
62
|
|
60
63
|
def self.install(game)
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
if response.code == 200
|
70
|
-
filename = response.
|
64
|
+
agent = Mechanize.new
|
65
|
+
agent.pluggable_parser.default = Mechanize::Download
|
66
|
+
agent.user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
|
67
|
+
|
68
|
+
response = nil
|
69
|
+
agent.progressbar{
|
70
|
+
response = agent.get("https://coolrom.com.au/downloader.php?id=#{game.id}")
|
71
|
+
}
|
72
|
+
if response.code.to_i == 200
|
73
|
+
filename = response.filename
|
71
74
|
FileUtils.mkdir_p(game.filepath)
|
72
|
-
|
73
|
-
yield filename
|
75
|
+
response.save!("#{game.filepath}/#{filename}")
|
76
|
+
yield [filename]
|
74
77
|
end
|
75
78
|
end
|
76
79
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'mechanize'
|
4
|
+
require 'mechanize/progressbar'
|
5
|
+
require 'mechanizeprogress'
|
4
6
|
require 'nokogiri'
|
5
7
|
require 'rest-client'
|
6
8
|
|
@@ -50,21 +52,40 @@ module Gamerom
|
|
50
52
|
end
|
51
53
|
|
52
54
|
def self.install(game)
|
55
|
+
FileUtils.mkdir_p(game.filepath)
|
53
56
|
agent = Mechanize.new
|
54
57
|
agent.pluggable_parser.default = Mechanize::Download
|
55
58
|
agent.user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
|
56
59
|
page = agent.get("https://vimm.net/vault/#{game.id}")
|
57
60
|
form = page.form_with(:id => 'download_form')
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
61
|
+
|
62
|
+
filenames = []
|
63
|
+
game_files = []
|
64
|
+
multiple_disks = page.css('#download_disc_number')
|
65
|
+
|
66
|
+
if multiple_disks.empty?
|
67
|
+
game_files << { id: game.id, name: 'single file rom' }
|
68
|
+
else
|
69
|
+
puts "multiple discs detected"
|
70
|
+
game_files.concat multiple_disks.children[1..-2].map { |disk| { name: disk.text, id: disk['value']} }
|
71
|
+
end
|
72
|
+
|
73
|
+
game_files.each do |game_file|
|
74
|
+
puts "downloading #{game_file[:name]}"
|
75
|
+
form.action = "https://download4.vimm.net/download/?mediaId=#{game_file[:id]}"
|
76
|
+
form.method = 'GET'
|
77
|
+
button = form.button_with(:type => "submit")
|
78
|
+
response = nil
|
79
|
+
agent.progressbar{
|
80
|
+
response = form.click_button(button)
|
81
|
+
}
|
82
|
+
if response.code.to_i == 200
|
83
|
+
filename = response.filename
|
84
|
+
response.save!("#{game.filepath}/#{filename}")
|
85
|
+
filenames << filename
|
86
|
+
end
|
67
87
|
end
|
88
|
+
yield filenames
|
68
89
|
end
|
69
90
|
end
|
70
91
|
end
|
data/lib/gamerom/version.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
class Mechanize
|
2
|
+
include MechanizeProgressBarAPI # (1of7)a
|
3
|
+
class HTTP
|
4
|
+
class Agent
|
5
|
+
def response_read response, request, uri = nil
|
6
|
+
body_io = StringIO.new
|
7
|
+
body_io.set_encoding Encoding::BINARY if body_io.respond_to? :set_encoding
|
8
|
+
total = 0
|
9
|
+
mpbar = MechanizeProgressBar.new(self.context, request, response) # (2of7)a
|
10
|
+
|
11
|
+
begin
|
12
|
+
response.read_body { |part|
|
13
|
+
total += part.length
|
14
|
+
body_io.write(part)
|
15
|
+
# log.debug("Read #{part.length} bytes (#{total} total)") if log
|
16
|
+
log.debug("Read #{part.length} bytes (#{total} total)") if log && !mpbar.suppress_logger? # (3of7)m
|
17
|
+
mpbar.inc(part.length) # (4of7)a
|
18
|
+
}
|
19
|
+
rescue Net::HTTP::Persistent::Error => e
|
20
|
+
body_io.rewind
|
21
|
+
raise Mechanize::ResponseReadError.new(e, response, body_io)
|
22
|
+
ensure # (5of7)a
|
23
|
+
mpbar.finish # (6of7)a
|
24
|
+
end
|
25
|
+
|
26
|
+
body_io.rewind
|
27
|
+
log.debug("Read #{total} bytes total") if log && !mpbar.suppress_logger? # (7of7)a
|
28
|
+
|
29
|
+
raise Mechanize::ResponseCodeError, response if
|
30
|
+
Net::HTTPUnknownResponse === response
|
31
|
+
|
32
|
+
content_length = response.content_length
|
33
|
+
|
34
|
+
unless Net::HTTP::Head === request or Net::HTTPRedirection === response then
|
35
|
+
raise EOFError, "Content-Length (#{content_length}) does not match " \
|
36
|
+
"response body length (#{body_io.length})" if
|
37
|
+
content_length and content_length != body_io.length
|
38
|
+
end
|
39
|
+
|
40
|
+
body_io
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gamerom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lucas Mundim
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-05-
|
11
|
+
date: 2021-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mechanize
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 2.8.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mechanize-progressbar
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.2.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.2.0
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: nokogiri
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,20 @@ dependencies:
|
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: 1.11.3
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: progressbar
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.9.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.9.0
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: rest-client
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -79,6 +107,7 @@ files:
|
|
79
107
|
- ".rspec"
|
80
108
|
- ".rubocop.yml"
|
81
109
|
- ".ruby-version"
|
110
|
+
- CHANGELOG.md
|
82
111
|
- CODE_OF_CONDUCT.md
|
83
112
|
- Dockerfile
|
84
113
|
- Gemfile
|
@@ -99,6 +128,7 @@ files:
|
|
99
128
|
- lib/gamerom/repo_adapters/coolrom.rb
|
100
129
|
- lib/gamerom/repo_adapters/vimm.rb
|
101
130
|
- lib/gamerom/version.rb
|
131
|
+
- lib/mechanizeprogress.rb
|
102
132
|
homepage: https://github.com/lucasmundim/gamerom
|
103
133
|
licenses:
|
104
134
|
- MIT
|
@@ -106,7 +136,7 @@ metadata:
|
|
106
136
|
allowed_push_host: https://rubygems.org
|
107
137
|
homepage_uri: https://github.com/lucasmundim/gamerom
|
108
138
|
source_code_uri: https://github.com/lucasmundim/gamerom
|
109
|
-
changelog_uri: https://github.com/lucasmundim/gamerom/CHANGELOG.md
|
139
|
+
changelog_uri: https://github.com/lucasmundim/gamerom/blob/master/CHANGELOG.md
|
110
140
|
post_install_message:
|
111
141
|
rdoc_options: []
|
112
142
|
require_paths:
|