gamerom 0.4.1 → 0.5.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/.github/workflows/main.yml +3 -3
- data/.rubocop.yml +4 -0
- data/.ruby-version +1 -1
- data/.tool-versions +1 -0
- data/CHANGELOG.md +14 -1
- data/Dockerfile +13 -3
- data/Gemfile +5 -3
- data/Gemfile.lock +85 -61
- data/Makefile +4 -4
- data/README.md +15 -50
- data/entrypoint.sh +1 -0
- data/exe/gamerom +16 -0
- data/gamerom.gemspec +8 -7
- data/lib/gamerom/cli.rb +5 -7
- data/lib/gamerom/game.rb +10 -2
- data/lib/gamerom/game_info.rb +1 -1
- data/lib/gamerom/repo.rb +2 -2
- data/lib/gamerom/repo_adapter.rb +10 -3
- data/lib/gamerom/repo_adapters/coolrom.rb +5 -2
- data/lib/gamerom/repo_adapters/vimm.rb +16 -1
- data/lib/gamerom/version.rb +1 -1
- data/lib/mechanizeprogress.rb +33 -2
- metadata +14 -16
- data/lib/gamerom/repo_adapters/romnation.rb +0 -110
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65b18f9a39d07cc281d8409b6a4ac6992980f450af58aef33e91148ae17c480b
|
4
|
+
data.tar.gz: 258c224ac84dafe08ae695c1dae35a7ecb7448e331c8a34cd78685c688e8e59a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b999f0ee86796dee15f20593cbad36a27051798e01213e64676b004c77452ffe1d5a986d3c50cdcd8bafc09871ccee9278e371ed059d608951fa52a9c864f2b8
|
7
|
+
data.tar.gz: c1a4433b96a14883f8114eb23687826365c2f2df850d2dc0a686d1e1b01753f1875fda3d790cae458d0def27dceaf9ad28fa901a75c28b0b8fba8a97251fb917
|
data/.github/workflows/main.yml
CHANGED
@@ -6,13 +6,13 @@ jobs:
|
|
6
6
|
build:
|
7
7
|
runs-on: ubuntu-latest
|
8
8
|
steps:
|
9
|
-
- uses: actions/checkout@
|
9
|
+
- uses: actions/checkout@v4
|
10
10
|
- name: Set up Ruby
|
11
11
|
uses: ruby/setup-ruby@v1
|
12
12
|
with:
|
13
|
-
ruby-version: 3.
|
13
|
+
ruby-version: 3.4.2
|
14
14
|
- name: Run the default task
|
15
15
|
run: |
|
16
|
-
gem install bundler -v 2.2
|
16
|
+
gem install bundler -v 2.6.2
|
17
17
|
bundle install
|
18
18
|
bundle exec rake
|
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-3.
|
1
|
+
ruby-3.4.2
|
data/.tool-versions
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby 3.4.2
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.5.0] - 2025-03-25
|
10
|
+
- feat: add ps3 platform for coolrom repo
|
11
|
+
- feat: add new platforms for vimm repo (Sega 32X, Atari 2600, Atari 5200, Atari 7800, Game Gear, Lynx, Sega CD, Master System, TurboGrafx-16, TurboGrafx-CD, Virtual Boy, XBox, XBox 360)
|
12
|
+
- feat: remove deprecated romnation repo
|
13
|
+
- feat: use ruby 3.4.2 and update all dependencies
|
14
|
+
- feat: format progress bars (colored pacman style)
|
15
|
+
- feat: handle SIGINT and SIGTERM
|
16
|
+
- fix: vimm repo game install
|
17
|
+
- fix: coolrom repo broken progress
|
18
|
+
- fix: vimm repo unable to get local issuer
|
19
|
+
- fix: vimm repo update datase (404 not found)
|
20
|
+
|
9
21
|
## [0.4.1] - 2021-05-18
|
10
22
|
- Enables specifying game identifier without using quotes
|
11
23
|
|
@@ -34,7 +46,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
34
46
|
## [0.1.0] - 2021-05-07
|
35
47
|
- Initial release
|
36
48
|
|
37
|
-
[Unreleased]: https://github.com/lucasmundim/gamerom/compare/v0.
|
49
|
+
[Unreleased]: https://github.com/lucasmundim/gamerom/compare/v0.5.0...HEAD
|
50
|
+
[0.5.0]: https://github.com/lucasmundim/gamerom/compare/v0.4.1...v0.5.0
|
38
51
|
[0.4.1]: https://github.com/lucasmundim/gamerom/compare/v0.4.0...v0.4.1
|
39
52
|
[0.4.0]: https://github.com/lucasmundim/gamerom/compare/v0.3.0...v0.4.0
|
40
53
|
[0.3.0]: https://github.com/lucasmundim/gamerom/compare/v0.2.2...v0.3.0
|
data/Dockerfile
CHANGED
@@ -1,16 +1,26 @@
|
|
1
|
-
FROM ruby:3.
|
1
|
+
FROM ruby:3.4.2-alpine
|
2
2
|
|
3
3
|
RUN apk add --no-cache --virtual .build-deps \
|
4
4
|
build-base \
|
5
|
+
ca-certificates \
|
6
|
+
curl \
|
5
7
|
git
|
6
8
|
|
7
9
|
# throw errors if Gemfile has been modified since Gemfile.lock
|
8
10
|
RUN bundle config --global frozen 1
|
9
11
|
|
12
|
+
# Add missing certificates
|
13
|
+
RUN curl -s https://letsencrypt.org/certs/2024/e5.pem -o /etc/ssl/certs/e5.pem && \
|
14
|
+
curl -s https://letsencrypt.org/certs/2024/e5.pem -o /etc/ssl/certs/e5.pem && \
|
15
|
+
curl -s https://letsencrypt.org/certs/2024/e6.pem -o /etc/ssl/certs/e6.pem && \
|
16
|
+
curl -s https://letsencrypt.org/certs/2024/r10.pem -o /etc/ssl/certs/r10.pem && \
|
17
|
+
curl -s https://letsencrypt.org/certs/2024/r11.pem -o /etc/ssl/certs/r11.pem && \
|
18
|
+
update-ca-certificates
|
19
|
+
|
10
20
|
RUN mkdir -p /bundle && chmod 777 /bundle
|
11
21
|
|
12
22
|
ENV GEM_HOME="/bundle"
|
13
|
-
ENV PATH
|
23
|
+
ENV PATH=$GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH
|
14
24
|
|
15
25
|
RUN mkdir -p /app
|
16
26
|
WORKDIR /app
|
@@ -18,4 +28,4 @@ WORKDIR /app
|
|
18
28
|
COPY . .
|
19
29
|
RUN bundle install
|
20
30
|
|
21
|
-
ENTRYPOINT ["/app/entrypoint.sh"]
|
31
|
+
ENTRYPOINT ["/app/entrypoint.sh"]
|
data/Gemfile
CHANGED
@@ -5,8 +5,10 @@ source 'https://rubygems.org'
|
|
5
5
|
# Specify your gem's dependencies in gamerom.gemspec
|
6
6
|
gemspec
|
7
7
|
|
8
|
-
gem 'rake', '~> 13.
|
8
|
+
gem 'rake', '~> 13.2.1'
|
9
9
|
|
10
|
-
gem 'rspec', '~> 3.0'
|
10
|
+
gem 'rspec', '~> 3.13.0'
|
11
11
|
|
12
|
-
gem 'rubocop', '~> 0
|
12
|
+
gem 'rubocop', '~> 1.74.0'
|
13
|
+
gem 'rubocop-rake', '~> 0.7.1'
|
14
|
+
gem 'rubocop-rspec', '~> 3.5.0'
|
data/Gemfile.lock
CHANGED
@@ -1,34 +1,40 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gamerom (0.
|
5
|
-
mechanize (~> 2.
|
4
|
+
gamerom (0.5.0)
|
5
|
+
mechanize (~> 2.14.0)
|
6
6
|
mechanize-progressbar (~> 0.2.0)
|
7
|
-
nokogiri (~> 1.
|
8
|
-
progressbar (~>
|
7
|
+
nokogiri (~> 1.18.5)
|
8
|
+
progressbar (~> 1.13.0)
|
9
9
|
rest-client (~> 2.1.0)
|
10
|
-
thor (~> 1.
|
10
|
+
thor (~> 1.3.2)
|
11
11
|
|
12
12
|
GEM
|
13
13
|
remote: https://rubygems.org/
|
14
14
|
specs:
|
15
|
-
addressable (2.7
|
16
|
-
public_suffix (>= 2.0.2, <
|
17
|
-
ast (2.4.
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
addressable (2.8.7)
|
16
|
+
public_suffix (>= 2.0.2, < 7.0)
|
17
|
+
ast (2.4.3)
|
18
|
+
base64 (0.2.0)
|
19
|
+
connection_pool (2.5.0)
|
20
|
+
diff-lcs (1.6.0)
|
21
|
+
domain_name (0.6.20240107)
|
22
22
|
http-accept (1.7.0)
|
23
|
-
http-cookie (1.0.
|
23
|
+
http-cookie (1.0.8)
|
24
24
|
domain_name (~> 0.5)
|
25
|
-
|
26
|
-
|
25
|
+
json (2.10.2)
|
26
|
+
language_server-protocol (3.17.0.4)
|
27
|
+
lint_roller (1.1.0)
|
28
|
+
logger (1.6.6)
|
29
|
+
mechanize (2.14.0)
|
30
|
+
addressable (~> 2.8)
|
31
|
+
base64
|
27
32
|
domain_name (~> 0.5, >= 0.5.20190701)
|
28
33
|
http-cookie (~> 1.0, >= 1.0.3)
|
29
|
-
mime-types (~> 3.
|
34
|
+
mime-types (~> 3.3)
|
30
35
|
net-http-digest_auth (~> 1.4, >= 1.4.1)
|
31
36
|
net-http-persistent (>= 2.5.2, < 5.0.dev)
|
37
|
+
nkf
|
32
38
|
nokogiri (~> 1.11, >= 1.11.2)
|
33
39
|
rubyntlm (~> 0.6, >= 0.6.3)
|
34
40
|
webrick (~> 1.7)
|
@@ -36,75 +42,93 @@ GEM
|
|
36
42
|
mechanize-progressbar (0.2.0)
|
37
43
|
mechanize (>= 1.0.0)
|
38
44
|
progressbar (>= 0.9.0)
|
39
|
-
mime-types (3.
|
45
|
+
mime-types (3.6.1)
|
46
|
+
logger
|
40
47
|
mime-types-data (~> 3.2015)
|
41
|
-
mime-types-data (3.
|
48
|
+
mime-types-data (3.2025.0318)
|
42
49
|
net-http-digest_auth (1.4.1)
|
43
|
-
net-http-persistent (4.0.
|
50
|
+
net-http-persistent (4.0.5)
|
44
51
|
connection_pool (~> 2.2)
|
45
52
|
netrc (0.11.0)
|
46
|
-
|
53
|
+
nkf (0.2.0)
|
54
|
+
nokogiri (1.18.5-aarch64-linux-musl)
|
47
55
|
racc (~> 1.4)
|
48
|
-
nokogiri (1.
|
56
|
+
nokogiri (1.18.5-arm64-darwin)
|
49
57
|
racc (~> 1.4)
|
50
|
-
|
51
|
-
|
58
|
+
nokogiri (1.18.5-x86_64-darwin)
|
59
|
+
racc (~> 1.4)
|
60
|
+
nokogiri (1.18.5-x86_64-linux-musl)
|
61
|
+
racc (~> 1.4)
|
62
|
+
parallel (1.26.3)
|
63
|
+
parser (3.3.7.2)
|
52
64
|
ast (~> 2.4.1)
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
65
|
+
racc
|
66
|
+
progressbar (1.13.0)
|
67
|
+
public_suffix (6.0.1)
|
68
|
+
racc (1.8.1)
|
69
|
+
rainbow (3.1.1)
|
70
|
+
rake (13.2.1)
|
71
|
+
regexp_parser (2.10.0)
|
59
72
|
rest-client (2.1.0)
|
60
73
|
http-accept (>= 1.7.0, < 2.0)
|
61
74
|
http-cookie (>= 1.0.2, < 2.0)
|
62
75
|
mime-types (>= 1.16, < 4.0)
|
63
76
|
netrc (~> 0.8)
|
64
|
-
|
65
|
-
|
66
|
-
rspec-
|
67
|
-
rspec-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
rspec-expectations (3.10.1)
|
77
|
+
rspec (3.13.0)
|
78
|
+
rspec-core (~> 3.13.0)
|
79
|
+
rspec-expectations (~> 3.13.0)
|
80
|
+
rspec-mocks (~> 3.13.0)
|
81
|
+
rspec-core (3.13.3)
|
82
|
+
rspec-support (~> 3.13.0)
|
83
|
+
rspec-expectations (3.13.3)
|
72
84
|
diff-lcs (>= 1.2.0, < 2.0)
|
73
|
-
rspec-support (~> 3.
|
74
|
-
rspec-mocks (3.
|
85
|
+
rspec-support (~> 3.13.0)
|
86
|
+
rspec-mocks (3.13.2)
|
75
87
|
diff-lcs (>= 1.2.0, < 2.0)
|
76
|
-
rspec-support (~> 3.
|
77
|
-
rspec-support (3.
|
78
|
-
rubocop (
|
88
|
+
rspec-support (~> 3.13.0)
|
89
|
+
rspec-support (3.13.2)
|
90
|
+
rubocop (1.74.0)
|
91
|
+
json (~> 2.3)
|
92
|
+
language_server-protocol (~> 3.17.0.2)
|
93
|
+
lint_roller (~> 1.1.0)
|
79
94
|
parallel (~> 1.10)
|
80
|
-
parser (>=
|
95
|
+
parser (>= 3.3.0.2)
|
81
96
|
rainbow (>= 2.2.2, < 4.0)
|
82
|
-
regexp_parser (>=
|
83
|
-
|
84
|
-
rubocop-ast (>= 0.6.0)
|
97
|
+
regexp_parser (>= 2.9.3, < 3.0)
|
98
|
+
rubocop-ast (>= 1.38.0, < 2.0)
|
85
99
|
ruby-progressbar (~> 1.7)
|
86
|
-
unicode-display_width (>=
|
87
|
-
rubocop-ast (1.
|
88
|
-
parser (>=
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
100
|
+
unicode-display_width (>= 2.4.0, < 4.0)
|
101
|
+
rubocop-ast (1.41.0)
|
102
|
+
parser (>= 3.3.7.2)
|
103
|
+
rubocop-rake (0.7.1)
|
104
|
+
lint_roller (~> 1.1)
|
105
|
+
rubocop (>= 1.72.1)
|
106
|
+
rubocop-rspec (3.5.0)
|
107
|
+
lint_roller (~> 1.1)
|
108
|
+
rubocop (~> 1.72, >= 1.72.1)
|
109
|
+
ruby-progressbar (1.13.0)
|
110
|
+
rubyntlm (0.6.5)
|
111
|
+
base64
|
112
|
+
thor (1.3.2)
|
113
|
+
unicode-display_width (3.1.4)
|
114
|
+
unicode-emoji (~> 4.0, >= 4.0.4)
|
115
|
+
unicode-emoji (4.0.4)
|
116
|
+
webrick (1.9.1)
|
97
117
|
webrobots (0.1.2)
|
98
118
|
|
99
119
|
PLATFORMS
|
120
|
+
aarch64-linux-musl
|
121
|
+
arm64-darwin-24
|
100
122
|
x86_64-darwin-20
|
101
123
|
x86_64-linux-musl
|
102
124
|
|
103
125
|
DEPENDENCIES
|
104
126
|
gamerom!
|
105
|
-
rake (~> 13.
|
106
|
-
rspec (~> 3.0)
|
107
|
-
rubocop (~> 0
|
127
|
+
rake (~> 13.2.1)
|
128
|
+
rspec (~> 3.13.0)
|
129
|
+
rubocop (~> 1.74.0)
|
130
|
+
rubocop-rake (~> 0.7.1)
|
131
|
+
rubocop-rspec (~> 3.5.0)
|
108
132
|
|
109
133
|
BUNDLED WITH
|
110
|
-
2.2
|
134
|
+
2.6.2
|
data/Makefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
VERSION
|
2
|
-
IMAGE
|
3
|
-
DOCKER_OPTS
|
1
|
+
VERSION?=$(shell cat lib/gamerom/version.rb |grep VERSION|cut -d\' -f2)
|
2
|
+
IMAGE?=lucasmundim/gamerom:${VERSION}
|
3
|
+
DOCKER_OPTS=-e UID=$(shell id -u) -e GROUP_ID=$(shell id -g) --rm -it -v ${HOME}/.gamerom:/root/.gamerom --platform=linux/amd64 ${IMAGE}
|
4
4
|
LOCAL_VOLUME_OPTS=-v ${CURDIR}:/app
|
5
5
|
DOCKER_DEVELOPMENT_OPTS=${LOCAL_VOLUME_OPTS} --entrypoint '' ${DOCKER_OPTS}
|
6
6
|
|
@@ -8,7 +8,7 @@ version:
|
|
8
8
|
@echo ${VERSION}
|
9
9
|
|
10
10
|
build:
|
11
|
-
@docker build -t ${IMAGE} .
|
11
|
+
@docker build --platform=linux/amd64 -t ${IMAGE} .
|
12
12
|
|
13
13
|
console:
|
14
14
|
@docker run ${DOCKER_DEVELOPMENT_OPTS} ./bin/console
|
data/README.md
CHANGED
@@ -6,7 +6,6 @@ It currently supports the following repositories:
|
|
6
6
|
|
7
7
|
- https://vimm.net
|
8
8
|
- https://coolrom.com.au
|
9
|
-
- https://www.romnation.net
|
10
9
|
|
11
10
|
## Installation
|
12
11
|
|
@@ -15,7 +14,7 @@ It currently supports the following repositories:
|
|
15
14
|
Add this to your .bashrc, .bash_aliases, etc:
|
16
15
|
|
17
16
|
```
|
18
|
-
alias gamerom="docker run -e UID=$(id -u) -e GROUP_ID=$(id -g) --rm -it -v ~/.gamerom:/home/runuser/.gamerom docker.io/lucasmundim/gamerom:0.
|
17
|
+
alias gamerom="docker run -e UID=$(id -u) -e GROUP_ID=$(id -g) --rm -it -v ~/.gamerom:/home/runuser/.gamerom --platform=linux/amd64 docker.io/lucasmundim/gamerom:0.5.0"
|
19
18
|
```
|
20
19
|
|
21
20
|
Use it as:
|
@@ -86,7 +85,6 @@ List available repo
|
|
86
85
|
$ gamerom repo
|
87
86
|
listing available repo...
|
88
87
|
coolrom
|
89
|
-
romnation
|
90
88
|
vimm
|
91
89
|
```
|
92
90
|
|
@@ -124,46 +122,6 @@ listing available platforms for coolrom repo...
|
|
124
122
|
psp: Sony Playstation Portable
|
125
123
|
```
|
126
124
|
|
127
|
-
```
|
128
|
-
$ gamerom platforms -r romnation
|
129
|
-
listing available platforms for romnation repo...
|
130
|
-
---
|
131
|
-
:platforms:
|
132
|
-
amstrad: Amstrad
|
133
|
-
atari2600: Atari 2600
|
134
|
-
atari5200: Atari 5200
|
135
|
-
atari7800: Atari 7800
|
136
|
-
atarijaguar: Atari Jaguar
|
137
|
-
atarilynx: Atari Lynx
|
138
|
-
colecovision: ColecoVision
|
139
|
-
commodore64: Commodore 64
|
140
|
-
gamegear: Game Gear
|
141
|
-
gb: Game Boy
|
142
|
-
gbc: Game Boy Color
|
143
|
-
gcdvectrex: Vectrex
|
144
|
-
genesis: Genesis
|
145
|
-
intellivision: Intellivision
|
146
|
-
mame: MAME
|
147
|
-
msx1: MSX
|
148
|
-
msx2: MSX2
|
149
|
-
mtx: MTX
|
150
|
-
n64: N64
|
151
|
-
neogeocd: Neo Geo CD
|
152
|
-
neogeopocket: Neo Geo Pocket
|
153
|
-
nes: NES
|
154
|
-
oric: Oric
|
155
|
-
pce: PC Engine
|
156
|
-
radioshackcolorcomputer: TRS-80
|
157
|
-
samcoupe: SAM Coupé
|
158
|
-
segacd: Sega CD
|
159
|
-
segamastersystem: Master System
|
160
|
-
snes: SNES
|
161
|
-
thompsonmo5: Thomson MO5
|
162
|
-
virtualboy: Virtual Boy
|
163
|
-
watara: Watara Supervision
|
164
|
-
wonderswan: WonderSwan
|
165
|
-
```
|
166
|
-
|
167
125
|
```
|
168
126
|
$ gamerom platform -r vimm
|
169
127
|
listing available platforms for vimm repo...
|
@@ -214,12 +172,19 @@ ID NAME REGION INSTALLED TAGS
|
|
214
172
|
Search games by KEYWORD
|
215
173
|
|
216
174
|
```
|
217
|
-
$ gamerom search -r
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
175
|
+
$ gamerom search -r vimm -p segamastersystem "Alex Kidd in Shinobi World"
|
176
|
+
$ bundle exec gamerom search --repo vimm --platform SMS "Alex Kidd"
|
177
|
+
searching available games for SMS platform on vimm repo...
|
178
|
+
ID NAME REGION INSTALLED TAGS
|
179
|
+
83680 Alex Kidd in Miracle World USA - -
|
180
|
+
83681 Alex Kidd in Miracle World USA - -
|
181
|
+
83682 Alex Kidd in Miracle World (Sega Ages) USA - -
|
182
|
+
83682 Alex Kidd in Miracle World (Sega Ages) USA - -
|
183
|
+
83684 Alex Kidd in Shinobi World USA - -
|
184
|
+
83671 Alex Kidd: High-Tech World USA - -
|
185
|
+
83673 Alex Kidd: The Lost Stars USA - -
|
186
|
+
83630 [BIOS] Alex Kidd in Miracle World USA - -
|
187
|
+
83631 [BIOS] Alex Kidd in Miracle World (Sega Ages) USA - -
|
223
188
|
```
|
224
189
|
|
225
190
|
### regions
|
@@ -585,7 +550,7 @@ Print program version
|
|
585
550
|
|
586
551
|
```
|
587
552
|
$ gamerom version
|
588
|
-
0.
|
553
|
+
0.5.0
|
589
554
|
```
|
590
555
|
|
591
556
|
## Development
|
data/entrypoint.sh
CHANGED
@@ -2,5 +2,6 @@
|
|
2
2
|
delgroup dialout
|
3
3
|
addgroup -g "$GROUP_ID" rungroup
|
4
4
|
adduser -u $UID -D -s /bin/sh -G rungroup runuser
|
5
|
+
git config --system --add safe.directory '/app'
|
5
6
|
command="cd /app && GEM_HOME="/bundle" PATH=$GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH bundle exec ./exe/gamerom ${@}"
|
6
7
|
su - runuser -c "$command"
|
data/exe/gamerom
CHANGED
@@ -3,4 +3,20 @@
|
|
3
3
|
|
4
4
|
require 'gamerom'
|
5
5
|
|
6
|
+
def shut_down
|
7
|
+
puts "\nShutting down gracefully..."
|
8
|
+
end
|
9
|
+
|
10
|
+
# Trap ^C
|
11
|
+
Signal.trap('INT') do
|
12
|
+
shut_down
|
13
|
+
exit
|
14
|
+
end
|
15
|
+
|
16
|
+
# Trap `Kill `
|
17
|
+
Signal.trap('TERM') do
|
18
|
+
shut_down
|
19
|
+
exit
|
20
|
+
end
|
21
|
+
|
6
22
|
Gamerom::Cli.start(ARGV)
|
data/gamerom.gemspec
CHANGED
@@ -12,13 +12,14 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = 'A command-line installer for game ROMs from many repositories.'
|
13
13
|
spec.homepage = 'https://github.com/lucasmundim/gamerom'
|
14
14
|
spec.license = 'MIT'
|
15
|
-
spec.required_ruby_version = Gem::Requirement.new('>= 3.
|
15
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 3.4.2')
|
16
16
|
|
17
17
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
18
18
|
|
19
19
|
spec.metadata['homepage_uri'] = spec.homepage
|
20
20
|
spec.metadata['source_code_uri'] = spec.homepage
|
21
21
|
spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/master/CHANGELOG.md"
|
22
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
22
23
|
|
23
24
|
# Specify which files should be added to the gem when it is released.
|
24
25
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -29,12 +30,12 @@ Gem::Specification.new do |spec|
|
|
29
30
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
30
31
|
spec.require_paths = ['lib']
|
31
32
|
|
32
|
-
spec.
|
33
|
-
spec.
|
34
|
-
spec.
|
35
|
-
spec.
|
36
|
-
spec.
|
37
|
-
spec.
|
33
|
+
spec.add_dependency 'mechanize', '~> 2.14.0'
|
34
|
+
spec.add_dependency 'mechanize-progressbar', '~> 0.2.0'
|
35
|
+
spec.add_dependency 'nokogiri', '~> 1.18.5'
|
36
|
+
spec.add_dependency 'progressbar', '~> 1.13.0'
|
37
|
+
spec.add_dependency 'rest-client', '~> 2.1.0'
|
38
|
+
spec.add_dependency 'thor', '~> 1.3.2'
|
38
39
|
|
39
40
|
# For more information and examples about making a new gem, checkout our
|
40
41
|
# guide at: https://bundler.io/guides/creating_gem.html
|
data/lib/gamerom/cli.rb
CHANGED
@@ -31,11 +31,11 @@ module Gamerom
|
|
31
31
|
validate_platform repo, options[:platform]
|
32
32
|
puts "showing info for game #{game_identifier} on #{options[:platform]} platform on #{options[:repo]} repo..."
|
33
33
|
game = repo.find(options[:platform], game_identifier)
|
34
|
-
if
|
34
|
+
if game.nil?
|
35
|
+
shell.say "Game #{game_identifier} not found", :red
|
36
|
+
else
|
35
37
|
puts game
|
36
38
|
puts game.filenames if game.installed?
|
37
|
-
else
|
38
|
-
shell.say "Game #{game_identifier} not found", :red
|
39
39
|
end
|
40
40
|
rescue StandardError => e
|
41
41
|
render_error e, options
|
@@ -308,10 +308,8 @@ module Gamerom
|
|
308
308
|
private
|
309
309
|
|
310
310
|
def print_game_table(games)
|
311
|
-
results =
|
312
|
-
|
313
|
-
games.each do |game|
|
314
|
-
results << [
|
311
|
+
results = games.map do |game|
|
312
|
+
[
|
315
313
|
game.id,
|
316
314
|
game.name,
|
317
315
|
game.region,
|
data/lib/gamerom/game.rb
CHANGED
@@ -1,12 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'fileutils'
|
4
|
-
require 'ostruct'
|
5
4
|
require 'yaml'
|
6
5
|
|
7
6
|
module Gamerom
|
8
7
|
# Game - Represents a game ROM
|
9
|
-
class Game
|
8
|
+
class Game
|
9
|
+
attr_accessor :id, :name, :platform, :region, :repo, :tags
|
10
|
+
|
11
|
+
def initialize(attributes = {})
|
12
|
+
@tags = []
|
13
|
+
attributes.each do |key, value|
|
14
|
+
instance_variable_set("@#{key}", value)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
10
18
|
def filenames
|
11
19
|
YAML.load_file(state_filename).map do |filename|
|
12
20
|
"#{filepath}/#{filename}"
|
data/lib/gamerom/game_info.rb
CHANGED
@@ -84,7 +84,7 @@ module Gamerom
|
|
84
84
|
tags = []
|
85
85
|
codes = @name.scan(/\[(?<code>[^\]]+)\]/).flatten
|
86
86
|
codes.each do |code|
|
87
|
-
code = Regexp.last_match(1) if code.match
|
87
|
+
code = Regexp.last_match(1) if code.match(/^(?<code>[abcfhop])[0-9]*/)
|
88
88
|
tags << TAGS[code] if TAGS.include?(code)
|
89
89
|
end
|
90
90
|
tags
|
data/lib/gamerom/repo.rb
CHANGED
data/lib/gamerom/repo_adapter.rb
CHANGED
@@ -12,14 +12,21 @@ module Gamerom
|
|
12
12
|
|
13
13
|
def games(platform)
|
14
14
|
games = []
|
15
|
-
progress_bar = ProgressBar.
|
15
|
+
progress_bar = ProgressBar.create(
|
16
|
+
title: platform,
|
17
|
+
total: sections.count,
|
18
|
+
autofinish: true,
|
19
|
+
length: 80,
|
20
|
+
format: "%t: %b\e[0;93m\u{15E7}\e[0m%i %j%% %e",
|
21
|
+
progress_mark: ' ',
|
22
|
+
remainder_mark: "\e[0;34m\u{FF65}\e[0m"
|
23
|
+
)
|
16
24
|
|
17
25
|
extract_games(platform) do |section_games, section_index|
|
18
26
|
games.append(*section_games)
|
19
|
-
progress_bar.
|
27
|
+
progress_bar.progress = section_index + 1
|
20
28
|
end
|
21
29
|
|
22
|
-
progress_bar.finish
|
23
30
|
games
|
24
31
|
end
|
25
32
|
end
|
@@ -33,6 +33,7 @@ module Gamerom
|
|
33
33
|
'saturn' => 'Sega Saturn',
|
34
34
|
'psx' => 'Sony Playstation',
|
35
35
|
'ps2' => 'Sony Playstation 2',
|
36
|
+
'ps3' => 'Sony Playstation 3',
|
36
37
|
'psp' => 'Sony Playstation Portable',
|
37
38
|
}.freeze
|
38
39
|
|
@@ -48,10 +49,12 @@ module Gamerom
|
|
48
49
|
sections.each_with_index do |section, index|
|
49
50
|
page = nokogiri_get("https://coolrom.com.au/roms/#{platform}/#{section}/")
|
50
51
|
regions = page.css('input.region').map { |i| i['name'] }
|
52
|
+
game_links = []
|
51
53
|
regions.each do |region|
|
52
|
-
|
53
|
-
|
54
|
+
region_game_links = page.css("div.#{region} a")
|
55
|
+
game_links.append(*region_game_links.map { |game_link| game(game_link, region) })
|
54
56
|
end
|
57
|
+
yield game_links, index
|
55
58
|
end
|
56
59
|
end
|
57
60
|
|
@@ -11,6 +11,10 @@ module Gamerom
|
|
11
11
|
extend Gamerom::RepoAdapter
|
12
12
|
|
13
13
|
PLATFORM = {
|
14
|
+
'32X' => 'Sega 32X',
|
15
|
+
'Atari2600' => 'Atari 2600',
|
16
|
+
'Atari5200' => 'Atari 5200',
|
17
|
+
'Atari7800' => 'Atari 7800',
|
14
18
|
'Dreamcast' => 'Dreamcast',
|
15
19
|
'DS' => 'Nintendo DS',
|
16
20
|
'GameCube' => 'GameCube',
|
@@ -18,6 +22,8 @@ module Gamerom
|
|
18
22
|
'GBA' => 'Game Boy Advance',
|
19
23
|
'GBC' => 'Game Boy Color',
|
20
24
|
'Genesis' => 'Genesis',
|
25
|
+
'GG' => 'Game Gear',
|
26
|
+
'Lynx' => 'Lynx',
|
21
27
|
'N64' => 'Nintendo 64',
|
22
28
|
'NES' => 'Nintendo',
|
23
29
|
'PS1' => 'PlayStation',
|
@@ -25,9 +31,16 @@ module Gamerom
|
|
25
31
|
'PS3' => 'PlayStation 3',
|
26
32
|
'PSP' => 'PlayStation Portable',
|
27
33
|
'Saturn' => 'Saturn',
|
34
|
+
'SegaCD' => 'Sega CD',
|
35
|
+
'SMS' => 'Master System',
|
28
36
|
'SNES' => 'Super Nintendo',
|
37
|
+
'TG16' => 'TurboGrafx-16',
|
38
|
+
'TGCD' => 'TurboGrafx-CD',
|
39
|
+
'VB' => 'Virtual Boy',
|
29
40
|
'Wii' => 'Wii',
|
30
41
|
'WiiWare' => 'WiiWare',
|
42
|
+
'Xbox' => 'Xbox',
|
43
|
+
'Xbox360' => 'Xbox 360',
|
31
44
|
}.freeze
|
32
45
|
|
33
46
|
def self.platforms
|
@@ -43,6 +56,8 @@ module Gamerom
|
|
43
56
|
page = nokogiri_get("https://vimm.net/vault/?p=list&system=#{platform}§ion=#{section}")
|
44
57
|
game_links = page.css('table.hovertable td:first-child a:first-child')
|
45
58
|
yield game_links.map { |game_link| game(game_link) }, index
|
59
|
+
rescue RestClient::NotFound
|
60
|
+
yield [], index
|
46
61
|
end
|
47
62
|
end
|
48
63
|
|
@@ -60,7 +75,7 @@ module Gamerom
|
|
60
75
|
agent.pluggable_parser.default = Mechanize::Download
|
61
76
|
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'
|
62
77
|
page = agent.get("https://vimm.net/vault/#{game.id}")
|
63
|
-
form = page.form_with(id: '
|
78
|
+
form = page.form_with(id: 'dl_form')
|
64
79
|
|
65
80
|
filenames = []
|
66
81
|
game_files = []
|
data/lib/gamerom/version.rb
CHANGED
data/lib/mechanizeprogress.rb
CHANGED
@@ -31,11 +31,11 @@ class Mechanize
|
|
31
31
|
log.debug("Read #{total} bytes total") if log && !mpbar.suppress_logger? # (7of7)a
|
32
32
|
|
33
33
|
raise Mechanize::ResponseCodeError, response if
|
34
|
-
Net::HTTPUnknownResponse
|
34
|
+
response == Net::HTTPUnknownResponse
|
35
35
|
|
36
36
|
content_length = response.content_length
|
37
37
|
|
38
|
-
unless Net::HTTP::Head
|
38
|
+
unless request == Net::HTTP::Head || response == Net::HTTPRedirection
|
39
39
|
if content_length && content_length != body_io.length
|
40
40
|
raise EOFError, "Content-Length (#{content_length}) does not match response body length (#{body_io.length})"
|
41
41
|
end
|
@@ -46,3 +46,34 @@ class Mechanize
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
49
|
+
|
50
|
+
# MechanizeProgressBar - A Monkeypatch for the mechanize progressbar
|
51
|
+
class MechanizeProgressBar
|
52
|
+
def inc(step)
|
53
|
+
@progressbar.progress = @progressbar.progress + step if @progressbar
|
54
|
+
end
|
55
|
+
|
56
|
+
def progressbar_new(pbar_opts, request, response)
|
57
|
+
out = pbar_opts[:out] || pbar_opts[:output] || $stderr
|
58
|
+
format = pbar_opts[:format] || "%j%% %b\e[0;93m\u{15E7}\e[0m%i Progress: %c/%C %a %e Speed: %rKB/sec %t"
|
59
|
+
if pbar_opts[:single]
|
60
|
+
title = pbar_opts[:title] || request['Host']
|
61
|
+
else
|
62
|
+
title = pbar_opts[:title] || ''
|
63
|
+
out.print "#{pbar_opts[:title] || uri(request)}\n"
|
64
|
+
end
|
65
|
+
total = pbar_opts[:total] || filesize(response)
|
66
|
+
pbar_class = pbar_opts[:reversed] ? ReversedProgressBar : ProgressBar
|
67
|
+
|
68
|
+
pbar_class.create(
|
69
|
+
title: title,
|
70
|
+
total: total,
|
71
|
+
output: out,
|
72
|
+
length: 120,
|
73
|
+
format: format,
|
74
|
+
rate_scale: ->(rate) { rate / 1024 },
|
75
|
+
progress_mark: ' ',
|
76
|
+
remainder_mark: "\e[0;34m\u{FF65}\e[0m"
|
77
|
+
)
|
78
|
+
end
|
79
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gamerom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lucas Mundim
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-03-25 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: mechanize
|
@@ -16,14 +15,14 @@ dependencies:
|
|
16
15
|
requirements:
|
17
16
|
- - "~>"
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
18
|
+
version: 2.14.0
|
20
19
|
type: :runtime
|
21
20
|
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
23
|
- - "~>"
|
25
24
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.
|
25
|
+
version: 2.14.0
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
27
|
name: mechanize-progressbar
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,28 +43,28 @@ dependencies:
|
|
44
43
|
requirements:
|
45
44
|
- - "~>"
|
46
45
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
46
|
+
version: 1.18.5
|
48
47
|
type: :runtime
|
49
48
|
prerelease: false
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
51
50
|
requirements:
|
52
51
|
- - "~>"
|
53
52
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
53
|
+
version: 1.18.5
|
55
54
|
- !ruby/object:Gem::Dependency
|
56
55
|
name: progressbar
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
58
|
- - "~>"
|
60
59
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
60
|
+
version: 1.13.0
|
62
61
|
type: :runtime
|
63
62
|
prerelease: false
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
65
64
|
requirements:
|
66
65
|
- - "~>"
|
67
66
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
67
|
+
version: 1.13.0
|
69
68
|
- !ruby/object:Gem::Dependency
|
70
69
|
name: rest-client
|
71
70
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +85,14 @@ dependencies:
|
|
86
85
|
requirements:
|
87
86
|
- - "~>"
|
88
87
|
- !ruby/object:Gem::Version
|
89
|
-
version: 1.
|
88
|
+
version: 1.3.2
|
90
89
|
type: :runtime
|
91
90
|
prerelease: false
|
92
91
|
version_requirements: !ruby/object:Gem::Requirement
|
93
92
|
requirements:
|
94
93
|
- - "~>"
|
95
94
|
- !ruby/object:Gem::Version
|
96
|
-
version: 1.
|
95
|
+
version: 1.3.2
|
97
96
|
description: A command-line installer for game ROMs from many repositories.
|
98
97
|
email:
|
99
98
|
- lucas.mundim@gmail.com
|
@@ -107,6 +106,7 @@ files:
|
|
107
106
|
- ".rspec"
|
108
107
|
- ".rubocop.yml"
|
109
108
|
- ".ruby-version"
|
109
|
+
- ".tool-versions"
|
110
110
|
- CHANGELOG.md
|
111
111
|
- CODE_OF_CONDUCT.md
|
112
112
|
- Dockerfile
|
@@ -129,7 +129,6 @@ files:
|
|
129
129
|
- lib/gamerom/repo.rb
|
130
130
|
- lib/gamerom/repo_adapter.rb
|
131
131
|
- lib/gamerom/repo_adapters/coolrom.rb
|
132
|
-
- lib/gamerom/repo_adapters/romnation.rb
|
133
132
|
- lib/gamerom/repo_adapters/vimm.rb
|
134
133
|
- lib/gamerom/version.rb
|
135
134
|
- lib/mechanizeprogress.rb
|
@@ -141,7 +140,7 @@ metadata:
|
|
141
140
|
homepage_uri: https://github.com/lucasmundim/gamerom
|
142
141
|
source_code_uri: https://github.com/lucasmundim/gamerom
|
143
142
|
changelog_uri: https://github.com/lucasmundim/gamerom/blob/master/CHANGELOG.md
|
144
|
-
|
143
|
+
rubygems_mfa_required: 'true'
|
145
144
|
rdoc_options: []
|
146
145
|
require_paths:
|
147
146
|
- lib
|
@@ -149,15 +148,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
149
148
|
requirements:
|
150
149
|
- - ">="
|
151
150
|
- !ruby/object:Gem::Version
|
152
|
-
version: 3.
|
151
|
+
version: 3.4.2
|
153
152
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
153
|
requirements:
|
155
154
|
- - ">="
|
156
155
|
- !ruby/object:Gem::Version
|
157
156
|
version: '0'
|
158
157
|
requirements: []
|
159
|
-
rubygems_version: 3.2
|
160
|
-
signing_key:
|
158
|
+
rubygems_version: 3.6.2
|
161
159
|
specification_version: 4
|
162
160
|
summary: The Video Game ROM downloader
|
163
161
|
test_files: []
|
@@ -1,110 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'cgi'
|
4
|
-
require 'mechanize'
|
5
|
-
require 'mechanize/progressbar'
|
6
|
-
require 'mechanizeprogress'
|
7
|
-
|
8
|
-
module Gamerom
|
9
|
-
module RepoAdapters
|
10
|
-
# Romnation - An adapter for the ROMNation repository website
|
11
|
-
class Romnation
|
12
|
-
extend Gamerom::RepoAdapter
|
13
|
-
|
14
|
-
PLATFORM = {
|
15
|
-
'amstrad' => 'Amstrad',
|
16
|
-
'atari2600' => 'Atari 2600',
|
17
|
-
'atari5200' => 'Atari 5200',
|
18
|
-
'atari7800' => 'Atari 7800',
|
19
|
-
'atarijaguar' => 'Atari Jaguar',
|
20
|
-
'atarilynx' => 'Atari Lynx',
|
21
|
-
'colecovision' => 'ColecoVision',
|
22
|
-
'commodore64' => 'Commodore 64',
|
23
|
-
'gamegear' => 'Game Gear',
|
24
|
-
'gb' => 'Game Boy',
|
25
|
-
'gbc' => 'Game Boy Color',
|
26
|
-
'gcdvectrex' => 'Vectrex',
|
27
|
-
'genesis' => 'Genesis',
|
28
|
-
'intellivision' => 'Intellivision',
|
29
|
-
'mame' => 'MAME',
|
30
|
-
'msx1' => 'MSX',
|
31
|
-
'msx2' => 'MSX2',
|
32
|
-
'mtx' => 'MTX',
|
33
|
-
'n64' => 'N64',
|
34
|
-
'neogeocd' => 'Neo Geo CD',
|
35
|
-
'neogeopocket' => 'Neo Geo Pocket',
|
36
|
-
'nes' => 'NES',
|
37
|
-
'oric' => 'Oric',
|
38
|
-
'pce' => 'PC Engine',
|
39
|
-
'radioshackcolorcomputer' => 'TRS-80',
|
40
|
-
'samcoupe' => 'SAM Coupé',
|
41
|
-
'segacd' => 'Sega CD',
|
42
|
-
'segamastersystem' => 'Master System',
|
43
|
-
'snes' => 'SNES',
|
44
|
-
'thompsonmo5' => 'Thomson MO5',
|
45
|
-
'virtualboy' => 'Virtual Boy',
|
46
|
-
'watara' => 'Watara Supervision',
|
47
|
-
'wonderswan' => 'WonderSwan',
|
48
|
-
}.freeze
|
49
|
-
|
50
|
-
def self.platforms
|
51
|
-
PLATFORM
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.sections
|
55
|
-
('a'..'z').to_a.unshift('0')
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.extract_games(platform)
|
59
|
-
sections.each_with_index do |section, index|
|
60
|
-
pages = extract_pages(platform, section)
|
61
|
-
yield extract_games_from_section_pages(platform, section, pages), index
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def self.extract_pages(platform, section)
|
66
|
-
page = nokogiri_get("https://www.romnation.net/srv/roms/#{platform}/#{section}/sort-title.html")
|
67
|
-
pages = ['1']
|
68
|
-
pages = page.css('.pagination').first.css('a').map(&:text).map(&:strip).reject(&:empty?) unless page.css('.pagination').empty?
|
69
|
-
pages
|
70
|
-
end
|
71
|
-
|
72
|
-
def self.extract_games_from_section_pages(platform, section, pages)
|
73
|
-
pages.reduce([]) do |section_games, p|
|
74
|
-
page = nokogiri_get("https://www.romnation.net/srv/roms/#{platform}/#{section}/page-#{p}_sort-title.html")
|
75
|
-
games_links = page.css('table.listings td.title a')
|
76
|
-
section_games.append(*games_links.map { |game_link| game(game_link) })
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def self.game(game_link)
|
81
|
-
game_info = GameInfo.new(game_link.text)
|
82
|
-
{
|
83
|
-
id: game_link['href'].split('/')[3].to_i,
|
84
|
-
name: game_link.text,
|
85
|
-
region: game_info.region,
|
86
|
-
tags: game_info.tags,
|
87
|
-
}
|
88
|
-
end
|
89
|
-
|
90
|
-
def self.install(game)
|
91
|
-
agent = Mechanize.new
|
92
|
-
agent.pluggable_parser.default = Mechanize::Download
|
93
|
-
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'
|
94
|
-
page = agent.get("https://www.romnation.net/download/rom/#{game.id}")
|
95
|
-
|
96
|
-
response = nil
|
97
|
-
agent.progressbar do
|
98
|
-
response = page.link_with(text: 'Download This Rom').click
|
99
|
-
end
|
100
|
-
|
101
|
-
return unless response.code.to_i == 200
|
102
|
-
|
103
|
-
filename = CGI.unescape(response.filename.split('_host=').first)
|
104
|
-
FileUtils.mkdir_p(game.filepath)
|
105
|
-
response.save!("#{game.filepath}/#{filename}")
|
106
|
-
yield [filename]
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|