Skip to content

Commit c5aa484

Browse files
committed
feat: Add support for ReVanced CLI 5
1 parent 2a5fb3e commit c5aa484

File tree

9 files changed

+150
-74
lines changed

9 files changed

+150
-74
lines changed

public/index.js

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -273,23 +273,19 @@ function resetSettings() {
273273
setSourcesRVX();
274274
}
275275

276-
function setSourcesPreReleases() {
277-
const prereleases = document.getElementById('pre-releases').value + '';
278-
279-
if (prereleases === 'true') {
280-
document.getElementById('pre-releases').value = 'false';
281-
} else if (prereleases === 'false') {
282-
document.getElementById('pre-releases').value = 'true';
283-
}
284-
285-
setSources();
276+
function disableARSCLib() {
277+
if (localStorage.getItem('arsclib')) {
278+
document.getElementById('ARSCLibBtn').click();
279+
}
286280
}
287281

288282
function setSources() {
289283
const cliOrg = document.getElementById('cli-org').value;
290284
const cliSrc = document.getElementById('cli-src').value;
291285
const cli = `${cliOrg}/${cliSrc}`;
292286

287+
const cli4 = document.getElementById('cli4').value;
288+
293289
const patchesOrg = document.getElementById('patch-org').value;
294290
const patchesSrc = document.getElementById('patch-src').value;
295291
const patches = `${patchesOrg}/${patchesSrc}`;
@@ -302,7 +298,7 @@ function setSources() {
302298
const microgSrc = document.getElementById('microg-src').value;
303299
const microg = `${microgOrg}/${microgSrc}`;
304300

305-
const prereleases = document.getElementById('pre-releases').value + '';
301+
const prereleases = localStorage.getItem('pre-releases') + '';
306302

307303
sendCommand({
308304
event: 'setSettings',
@@ -311,21 +307,23 @@ function setSources() {
311307
patches,
312308
integrations,
313309
microg,
314-
prereleases
310+
prereleases,
311+
cli4
315312
}
316313
});
317314
}
318315

319-
function disableARSCLib() {
320-
if (localStorage.getItem('arsclib')) {
321-
document.getElementById('ARSCLibBtn').click();
322-
}
316+
function disableARSCLibBeforeSetSources() {
317+
disableARSCLib();
318+
setSources();
323319
}
324320

325321
function setSourcesRVX() {
326322
document.getElementById('cli-org').value = 'inotia00';
327323
document.getElementById('cli-src').value = 'revanced-cli';
328324

325+
document.getElementById('cli4').value = 'false';
326+
329327
document.getElementById('patch-org').value = 'inotia00';
330328
document.getElementById('patch-src').value = 'revanced-patches';
331329

@@ -335,56 +333,60 @@ function setSourcesRVX() {
335333
document.getElementById('microg-org').value = 'ReVanced';
336334
document.getElementById('microg-src').value = 'GmsCore';
337335

338-
disableARSCLib();
339-
setSources();
336+
disableARSCLibBeforeSetSources();
340337
}
341338

342339
function setSourcesRVX_anddea() {
343340
document.getElementById('cli-org').value = 'inotia00';
344341
document.getElementById('cli-src').value = 'revanced-cli';
345342

343+
document.getElementById('cli4').value = 'true';
344+
346345
document.getElementById('patch-org').value = 'anddea';
347346
document.getElementById('patch-src').value = 'revanced-patches';
348347

349348
document.getElementById('integrations-org').value = 'anddea';
350349
document.getElementById('integrations-src').value = 'revanced-integrations';
351350

352-
disableARSCLib();
353-
setSources();
351+
disableARSCLibBeforeSetSources();
354352
}
355353

356354
function setSourcesReVanced() {
357355
document.getElementById('cli-org').value = 'inotia00';
358356
document.getElementById('cli-src').value = 'revanced-cli';
359357

358+
document.getElementById('cli4').value = 'false';
359+
360360
document.getElementById('patch-org').value = 'revanced';
361361
document.getElementById('patch-src').value = 'revanced-patches';
362362

363363
document.getElementById('integrations-org').value = 'revanced';
364364
document.getElementById('integrations-src').value = 'revanced-integrations';
365365

366-
disableARSCLib();
367-
setSources();
366+
disableARSCLibBeforeSetSources();
368367
}
369368

370369
function setSourcesPiko() {
371370
document.getElementById('cli-org').value = 'inotia00';
372371
document.getElementById('cli-src').value = 'revanced-cli';
373372

373+
document.getElementById('cli4').value = 'true';
374+
374375
document.getElementById('patch-org').value = 'crimera';
375376
document.getElementById('patch-src').value = 'piko';
376377

377378
document.getElementById('integrations-org').value = 'crimera';
378379
document.getElementById('integrations-src').value = 'revanced-integrations';
379380

380-
disableARSCLib();
381-
setSources();
381+
disableARSCLibBeforeSetSources();
382382
}
383383

384384
function setSourcesRVX_ARSCLib() {
385385
document.getElementById('cli-org').value = 'inotia00';
386386
document.getElementById('cli-src').value = 'revanced-cli-arsclib';
387387

388+
document.getElementById('cli4').value = 'true';
389+
388390
document.getElementById('patch-org').value = 'inotia00';
389391
document.getElementById('patch-src').value = 'revanced-patches-arsclib';
390392

@@ -761,7 +763,7 @@ ws.onmessage = (msg) => {
761763
const patches = message.settings.patches.split('/');
762764
const integrations = message.settings.integrations.split('/');
763765
const microg = message.settings.microg.split('/');
764-
const prereleases = message.settings.prereleases;
766+
const cli4 = message.settings.cli4 == 'true';
765767

766768
const cliOrg = document.getElementById('cli-org');
767769
const cliSrc = document.getElementById('cli-src');
@@ -787,6 +789,9 @@ ws.onmessage = (msg) => {
787789
microgOrg.value = microg[0];
788790
microgSrc.value = microg[1];
789791

792+
const cli4Src = document.getElementById('cli4');
793+
cli4Src.value = cli4;
794+
790795
const preReleases = document.getElementById('pre-releases');
791796
if (typeof prereleases === 'undefined') {
792797
preReleases.value = 'false';

public/settings.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ if (localStorage.getItem('black-theme')) {
77
document.getElementById('blackBtn').checked = true;
88
}
99
if (localStorage.getItem('pre-releases')) {
10-
document.getElementById('preReleases').checked = true;
10+
document.getElementById('preReleasesBtn').checked = true;
1111
}
1212
if (localStorage.getItem('rip-libs')) {
1313
document.getElementById('ripLibsBtn').checked = true;
@@ -48,14 +48,13 @@ document.getElementById('blackBtn').addEventListener('click', function () {
4848
dElement.classList.add('black');
4949
}
5050
});
51-
document.getElementById('preReleases').addEventListener('click', function () {
51+
document.getElementById('preReleasesBtn').addEventListener('click', function () {
5252
if (localStorage.getItem('pre-releases')) {
5353
localStorage.removeItem('pre-releases');
54-
document.getElementById('set-sources-pre-releases').click();
5554
} else {
5655
localStorage.setItem('pre-releases', true);
57-
document.getElementById('set-sources-pre-releases').click();
5856
}
57+
document.getElementById('set-sources-update').click();
5958
});
6059
document.getElementById('ripLibsBtn').addEventListener('click', function () {
6160
if (localStorage.getItem('rip-libs')) {

public/settings/index.html

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ <h3>
100100
<label class="switch"
101101
><input
102102
class="check"
103-
id="preReleases"
103+
id="preReleasesBtn"
104104
type="checkbox"
105105
autocomplete="off" /><span class="slider"></span
106106
></label>
@@ -165,7 +165,7 @@ <h3><i class="fa-solid fa-server"></i>Sources</h3>
165165
<button id="set-sources-rvx-anddea" class="highlighted" onclick="setSourcesRVX_anddea();">RVX (anddea)</button>
166166
<button id="set-sources-revanced" class="highlighted" onclick="setSourcesReVanced();">ReVanced</button>
167167
<button id="set-sources-piko" class="highlighted" onclick="setSourcesPiko();">Piko</button>
168-
<button id="set-sources-pre-releases" class="highlighted" onclick="setSourcesPreReleases();"></button>
168+
<button id="set-sources-update" class="highlighted" onclick="setSources();"></button>
169169
<button id="set-sources-rvx-arsclib" class="highlighted" onclick="setSourcesRVX_ARSCLib();"></button>
170170
</div>
171171

@@ -176,19 +176,20 @@ <h3>Cli Source</h3>
176176
<input id="cli-src" class="searchBox" />
177177
</div>
178178

179+
<div>
180+
<h3>Use Cli 4</h3>
181+
<input id="cli4" class="searchBox" />
182+
</div>
183+
179184
<div>
180185
<h3>Patches Organization</h3>
181186
<input id="patch-org" class="searchBox" />
182187
<h3>Patches Source</h3>
183188
<input id="patch-src" class="searchBox" />
184189
</div>
185190

186-
<div>
187-
<h3>Integrations Organization</h3>
188-
<input id="integrations-org" class="searchBox" />
189-
<h3>Integrations Source</h3>
190-
<input id="integrations-src" class="searchBox" />
191-
</div>
191+
<input id="integrations-org" />
192+
<input id="integrations-src" />
192193

193194
<div>
194195
<h3>MicroG Organization</h3>

public/styles/settings.css

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,15 @@ p {
6969
display: none;
7070
}
7171

72-
#set-sources-pre-releases {
72+
#set-sources-update {
73+
display: none;
74+
}
75+
76+
#integrations-org {
77+
display: none;
78+
}
79+
80+
#integrations-src {
7381
display: none;
7482
}
7583

utils/FileDownloader.js

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,44 +12,51 @@ let ws;
1212
/**
1313
* @param {string} fileName
1414
*/
15-
async function overWriteJarNames(fileName) {
15+
async function overWriteJarNames(fileName, cli4) {
1616
const filePath = joinPath(global.revancedDir, fileName);
1717

1818
const source = getSources();
1919
const cli = source.cli.split('/')[1];
20-
const patches = source.patches.split('/')[1];
21-
const integrations = source.integrations.split('/')[1];
2220
const microg = source.microg.split('/')[1];
2321

2422
if (fileName.includes(cli) && fileName.endsWith('.jar')) {
2523
global.jarNames.cli = filePath;
2624
}
2725

28-
if (fileName.includes(patches) && fileName.endsWith('.jar')) {
29-
global.jarNames.patchesJar = filePath;
30-
}
31-
32-
if (fileName.includes(patches) && fileName.endsWith('.json')) {
33-
global.jarNames.patchesList = filePath;
34-
}
35-
36-
if (fileName.includes(integrations) && fileName.endsWith('.apk')) {
37-
global.jarNames.integrations = filePath;
38-
}
39-
4026
if (fileName.includes(microg)) {
4127
global.jarNames.microG = filePath;
4228
}
4329

4430
if (fileName.includes('APKEditor') && fileName.endsWith('.jar')) {
4531
global.jarNames.apkEditor = filePath;
4632
}
33+
34+
if (cli4) {
35+
const patches = source.patches.split('/')[1];
36+
const integrations = source.integrations.split('/')[1];
37+
if (fileName.includes(patches)) {
38+
if (fileName.endsWith('.jar')) {
39+
global.jarNames.patchesJar = filePath;
40+
} else if (fileName.endsWith('.json')) {
41+
global.jarNames.patchesList = filePath;
42+
}
43+
} else if (fileName.includes(integrations) && fileName.endsWith('.apk')) {
44+
global.jarNames.integrations = filePath;
45+
}
46+
} else {
47+
if (fileName.endsWith('.rvp')) {
48+
global.jarNames.patchesJar = filePath;
49+
global.jarNames.patchesList = joinPath(global.revancedDir, fileName.replace('.rvp', '.json'));
50+
} else if (fileName.endsWith('.json')) {
51+
global.jarNames.patchesList = filePath;
52+
}
53+
}
4754
}
4855

4956
/**
5057
* @param {Record<string, any>} json
5158
*/
52-
async function getDownloadLink(json, preReleases) {
59+
async function getDownloadLink(json, preReleases, cli4) {
5360
const preReleaseUrl = `https://github.com/${json.owner}/${json.repo}/releases`
5461
const preReleaseTag = 'span[class="ml-1 wb-break-all"]'
5562
const stableReleaseUrl = `https://github.com/${json.owner}/${json.repo}/releases/latest`
@@ -81,6 +88,9 @@ async function getDownloadLink(json, preReleases) {
8188

8289
json_.version = $(releaseTag).first().text().replace(/\s/g, '');
8390

91+
if (json.owner === 'inotia00' && json.repo === 'revanced-cli' && cli4) {
92+
json_.version = 'v4.6.2';
93+
}
8494
const expandedAssets = await fetchWithUserAgent(
8595
`https://github.com/${json.owner}/${json.repo}/releases/expanded_assets/${json_.version}`
8696
);
@@ -105,7 +115,7 @@ async function getDownloadLink(json, preReleases) {
105115
/**
106116
* @param {Record<string, any>} assets
107117
*/
108-
async function downloadFile(assets) {
118+
async function downloadFile(assets, cli4) {
109119
for (const asset of assets.assets) {
110120
const dir = readdirSync(global.revancedDir);
111121

@@ -117,7 +127,7 @@ async function downloadFile(assets) {
117127
if (fileExt == 'asc') continue;
118128
const fileName = `${assets.repo}-${assets.version}.${fileExt}`;
119129

120-
overWriteJarNames(fileName);
130+
overWriteJarNames(fileName, cli4);
121131

122132
if (dir.includes(fileName)) continue;
123133

@@ -180,13 +190,13 @@ async function dloadFromURL(url, outputPath, websocket) {
180190
* @param {Record<string, any>[]} repos
181191
* @param {import('ws').WebSocket} websocket
182192
*/
183-
async function downloadFiles(repos, preReleases, websocket) {
193+
async function downloadFiles(repos, preReleases, cli4, websocket) {
184194
ws = websocket;
185195

186196
for (const repo of repos) {
187-
const downloadLink = await getDownloadLink(repo, preReleases);
197+
const downloadLink = await getDownloadLink(repo, preReleases, cli4);
188198

189-
await downloadFile(downloadLink);
199+
await downloadFile(downloadLink, cli4);
190200
}
191201
}
192202

utils/Settings.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ const defaultSettings = {
66
patches: 'inotia00/revanced-patches',
77
integrations: 'inotia00/revanced-integrations',
88
microg: 'ReVanced/GmsCore',
9-
prereleases: 'false'
9+
prereleases: 'false',
10+
cli4: 'false'
1011
},
1112
patches: []
1213
};

wsEvents/getApp.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const fetch = require('node-fetch');
2-
const { readFileSync } = require('node:fs');
2+
const { existsSync, readFileSync } = require('node:fs');
3+
const exec = require('../utils/promisifiedExec.js');
34

45
async function fetchPackages(packages) {
56
const request = await fetch(
@@ -29,6 +30,14 @@ async function fetchPackages(packages) {
2930
* @param {import('ws').WebSocket} ws
3031
*/
3132
module.exports = async function getPatches(ws) {
33+
const patchesJson = `${global.jarNames.patchesList}`;
34+
if (!existsSync(patchesJson)) {
35+
const java = `${global.javaCmd}`;
36+
const cli = `${global.jarNames.cli}`;
37+
const patches = `${global.jarNames.patchesJar}`;
38+
const command = `${java} -jar ${cli} patches --path=${patchesJson} ${patches}`;
39+
await exec(command);
40+
}
3241
const patchesList = JSON.parse(
3342
readFileSync(global.jarNames.patchesList, 'utf8')
3443
);

0 commit comments

Comments
 (0)