added patching rx/ap, could be buggy
This commit is contained in:
parent
b70af50634
commit
58fa4a6329
17
app.js
17
app.js
|
@ -11,8 +11,10 @@ const windowName = require('get-window-by-name');
|
||||||
const terminalUtil = require('./terminalUtil');
|
const terminalUtil = require('./terminalUtil');
|
||||||
const osUtil = require('./osUtil');
|
const osUtil = require('./osUtil');
|
||||||
const appInfo = require('./appInfo');
|
const appInfo = require('./appInfo');
|
||||||
|
const executeUtil = require("./executeUtil");
|
||||||
const { DownloaderHelper } = require('node-downloader-helper');
|
const { DownloaderHelper } = require('node-downloader-helper');
|
||||||
|
|
||||||
|
let patcherLoc = undefined;
|
||||||
let tempOsuPath;
|
let tempOsuPath;
|
||||||
let osuWindowInfo;
|
let osuWindowInfo;
|
||||||
let isIngame;
|
let isIngame;
|
||||||
|
@ -36,6 +38,13 @@ const run = () => {
|
||||||
if (!osuLoaded) {
|
if (!osuLoaded) {
|
||||||
osuLoaded = true;
|
osuLoaded = true;
|
||||||
//TODO: do patch
|
//TODO: do patch
|
||||||
|
setTimeout(() => {
|
||||||
|
console.log("yes");
|
||||||
|
if (patcherLoc) {
|
||||||
|
console.log("running " + patcherLoc + " in dir " + path.dirname(patcherLoc));
|
||||||
|
executeUtil.runFileDetached(path.dirname(patcherLoc), patcherLoc);
|
||||||
|
}
|
||||||
|
}, 5000);
|
||||||
}
|
}
|
||||||
const windowTitle = firstInstance.processTitle;
|
const windowTitle = firstInstance.processTitle;
|
||||||
let rpcOsuVersion = "";
|
let rpcOsuVersion = "";
|
||||||
|
@ -215,8 +224,13 @@ const run = () => {
|
||||||
app.on('window-all-closed', () => {
|
app.on('window-all-closed', () => {
|
||||||
app.quit()
|
app.quit()
|
||||||
})
|
})
|
||||||
ipcMain.handle('launch', async () => {
|
ipcMain.handle('launch', async (e, opts) => {
|
||||||
|
console.log(opts);
|
||||||
|
const patch = "patch" in opts && opts.patch;
|
||||||
const osuFolder = await config.get("osuPath");
|
const osuFolder = await config.get("osuPath");
|
||||||
|
if (patch) patcherLoc = path.join(osuFolder, "EZPPLauncher", "patcher.exe");
|
||||||
|
else patcherLoc = undefined;
|
||||||
|
|
||||||
await osuUtil.updateOsuCfg(path.join(osuFolder, "osu!.cfg"));
|
await osuUtil.updateOsuCfg(path.join(osuFolder, "osu!.cfg"));
|
||||||
const osuConfig = await osuUtil.getLatestConfig(tempOsuPath);
|
const osuConfig = await osuUtil.getLatestConfig(tempOsuPath);
|
||||||
const username = await config.get('username');
|
const username = await config.get('username');
|
||||||
|
@ -240,6 +254,7 @@ const run = () => {
|
||||||
if (!mainWindow.isVisible()) mainWindow.show();
|
if (!mainWindow.isVisible()) mainWindow.show();
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
isIngame = false;
|
isIngame = false;
|
||||||
|
osuLoaded = false;
|
||||||
await osuUtil.replaceUI(osuFolder, false);
|
await osuUtil.replaceUI(osuFolder, false);
|
||||||
await doUpdateCheck(mainWindow);
|
await doUpdateCheck(mainWindow);
|
||||||
mainWindow.closable = true;
|
mainWindow.closable = true;
|
||||||
|
|
|
@ -4,11 +4,12 @@ module.exports = {
|
||||||
childProcess.execFile(file, args, {
|
childProcess.execFile(file, args, {
|
||||||
cwd: folder
|
cwd: folder
|
||||||
}, (_err, _stdout, _stderr) => {
|
}, (_err, _stdout, _stderr) => {
|
||||||
onExit();
|
if (onExit)
|
||||||
|
onExit();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
runFileDetached: (folder, file, args) => {
|
runFileDetached: (folder, file, args) => {
|
||||||
const subprocess = childProcess.spawn(file + " " + args, {
|
const subprocess = childProcess.spawn(file + (args ? " " + args : ''), {
|
||||||
cwd: folder,
|
cwd: folder,
|
||||||
detached: true,
|
detached: true,
|
||||||
stdio: 'ignore'
|
stdio: 'ignore'
|
||||||
|
|
|
@ -64,8 +64,8 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="launch-button-section">
|
<div class="launch-button-section">
|
||||||
<button class="btn btn-lg btn-launch btn-accent" id="launch-btn" disabled>Launch</button>
|
<button class="btn btn-lg btn-launch btn-accent" id="launch-btn" disabled>Launch</button>
|
||||||
<div class="patch-checkbox" style="display: none;">
|
<div class="patch-checkbox">
|
||||||
<input type="checkbox" id="enablePatching" disabled />
|
<input type="checkbox" id="enablePatching" checked/>
|
||||||
<label for="enablePatching" style="display: initial;">enable
|
<label for="enablePatching" style="display: initial;">enable
|
||||||
Patching</label>
|
Patching</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
76
osuUtil.js
76
osuUtil.js
|
@ -11,6 +11,14 @@ const checkUpdateURL = "https://osu.ppy.sh/web/check-updates.php?action=check&st
|
||||||
const customUIDLLPath = "https://ez-pp.farm/assets/ezpp!ui.dll";
|
const customUIDLLPath = "https://ez-pp.farm/assets/ezpp!ui.dll";
|
||||||
const customUIDLLHash = "https://ez-pp.farm/assets/ezpp!ui.md5";
|
const customUIDLLHash = "https://ez-pp.farm/assets/ezpp!ui.md5";
|
||||||
const customUIDLLName = "ezpp!ui.dll";
|
const customUIDLLName = "ezpp!ui.dll";
|
||||||
|
|
||||||
|
const patcherHook = "https://ez-pp.farm/assets/patch.hook.dll";
|
||||||
|
const patcherHookHash = "https://ez-pp.farm/assets/patch.hook.md5";
|
||||||
|
const patcherHookName = "patch.hook.dll";
|
||||||
|
const patcherExe = "https://ez-pp.farm/assets/patcher.exe";
|
||||||
|
const patcherExeHash = "https://ez-pp.farm/assets/patcher.md5"
|
||||||
|
const patcherExeName = "patcher.exe";
|
||||||
|
|
||||||
const ignoredOsuEntities = [
|
const ignoredOsuEntities = [
|
||||||
'osu!auth.dll',
|
'osu!auth.dll',
|
||||||
]
|
]
|
||||||
|
@ -86,6 +94,11 @@ async function getEZPPUIMD5() {
|
||||||
return releaseData.data;
|
return releaseData.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getMD5Hash(url) {
|
||||||
|
const releaseData = await axios.get(url, {});
|
||||||
|
return releaseData.data;
|
||||||
|
}
|
||||||
|
|
||||||
async function filesThatNeedUpdate(osuPath, updateFiles) {
|
async function filesThatNeedUpdate(osuPath, updateFiles) {
|
||||||
const filesToDownload = [];
|
const filesToDownload = [];
|
||||||
for (const updatedFile of updateFiles) {
|
for (const updatedFile of updateFiles) {
|
||||||
|
@ -122,11 +135,56 @@ async function filesThatNeedUpdate(osuPath, updateFiles) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const ezppUI = path.join(osuPath, "EZPPLauncher", customUIDLLName);
|
const ezppUI = path.join(osuPath, "EZPPLauncher", customUIDLLName);
|
||||||
|
const hook = path.join(osuPath, "EZPPLauncher", patcherHookName);
|
||||||
|
const patcher = path.join(osuPath, "EZPPLauncher", patcherExeName);
|
||||||
|
|
||||||
|
if (await fu.existsAsync(hook)) {
|
||||||
|
const latestHookMd5Hash = (await getMD5Hash(patcherHookHash)).toLowerCase().trim();
|
||||||
|
const binaryHookContents = await fs.promises.readFile(hook);
|
||||||
|
const existingHookMD5 = crypto.createHash("md5").update(binaryHookContents).digest("hex").toLowerCase().trim();
|
||||||
|
if (existingHookMD5 != latestHookMd5Hash) {
|
||||||
|
filesToDownload.push({
|
||||||
|
folder: "EZPPLauncher",
|
||||||
|
fileName: patcherHookName,
|
||||||
|
fileURL: patcherHook
|
||||||
|
});
|
||||||
|
console.log("patcher has wrong hashsum (" + existingHookMD5 + " / " + latestHookMd5Hash + ")");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
filesToDownload.push({
|
||||||
|
folder: "EZPPLauncher",
|
||||||
|
fileName: patcherHookName,
|
||||||
|
fileURL: patcherHook
|
||||||
|
});
|
||||||
|
console.log("patcher does not exist");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (await fu.existsAsync(patcher)) {
|
||||||
|
const latestPatchMd5Hash = (await getMD5Hash(patcherExeHash)).toLowerCase().trim();
|
||||||
|
const binaryPatchContents = await fs.promises.readFile(patcher);
|
||||||
|
const existingPatchMD5 = crypto.createHash("md5").update(binaryPatchContents).digest("hex").toLowerCase().trim();
|
||||||
|
if (existingPatchMD5 != latestPatchMd5Hash) {
|
||||||
|
filesToDownload.push({
|
||||||
|
folder: "EZPPLauncher",
|
||||||
|
fileName: patcherExeName,
|
||||||
|
fileURL: patcherExe
|
||||||
|
});
|
||||||
|
console.log("patcher has wrong hashsum (" + existingPatchMD5 + " / " + latestPatchMd5Hash + ")")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
filesToDownload.push({
|
||||||
|
folder: "EZPPLauncher",
|
||||||
|
fileName: patcherExeName,
|
||||||
|
fileURL: patcherExe
|
||||||
|
});
|
||||||
|
console.log("patcher does not exist");
|
||||||
|
}
|
||||||
|
|
||||||
if (await fu.existsAsync(ezppUI)) {
|
if (await fu.existsAsync(ezppUI)) {
|
||||||
const latestMd5Hash = await getEZPPUIMD5();
|
const latestUIMd5Hash = (await getMD5Hash(customUIDLLHash)).toLowerCase().trim();
|
||||||
const binaryUIContents = await fs.promises.readFile(ezppUI);
|
const binaryUIContents = await fs.promises.readFile(ezppUI);
|
||||||
const existingUIMD5 = crypto.createHash("md5").update(binaryUIContents).digest("hex");
|
const existingUIMD5 = crypto.createHash("md5").update(binaryUIContents).digest("hex").toLowerCase().trim();
|
||||||
if (existingUIMD5 != latestMd5Hash) {
|
if (existingUIMD5 != latestUIMd5Hash) {
|
||||||
filesToDownload.push({
|
filesToDownload.push({
|
||||||
folder: "EZPPLauncher",
|
folder: "EZPPLauncher",
|
||||||
fileName: "ezpp!ui.dll",
|
fileName: "ezpp!ui.dll",
|
||||||
|
@ -141,6 +199,8 @@ async function filesThatNeedUpdate(osuPath, updateFiles) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(JSON.stringify(filesToDownload, null, 2))
|
||||||
|
|
||||||
return filesToDownload;
|
return filesToDownload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,16 +209,18 @@ async function downloadUpdateFiles(osuPath, filesToUpdate) {
|
||||||
let completedIndex = 0;
|
let completedIndex = 0;
|
||||||
filesToUpdate.forEach(async (fileToUpdate) => {
|
filesToUpdate.forEach(async (fileToUpdate) => {
|
||||||
|
|
||||||
|
let tempPath = osuPath;
|
||||||
|
|
||||||
if ("folder" in fileToUpdate) {
|
if ("folder" in fileToUpdate) {
|
||||||
osuPath = path.join(osuPath, fileToUpdate.folder);
|
tempPath = path.join(tempPath, fileToUpdate.folder);
|
||||||
if (!(await fu.existsAsync(osuPath))) await fs.promises.mkdir(osuPath);
|
if (!(await fu.existsAsync(tempPath))) await fs.promises.mkdir(tempPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
const filePath = path.join(osuPath, fileToUpdate.fileName);
|
const filePath = path.join(tempPath, fileToUpdate.fileName);
|
||||||
if (await fu.existsAsync(filePath))
|
if (await fu.existsAsync(filePath))
|
||||||
await fs.promises.rm(filePath);
|
await fs.promises.rm(filePath);
|
||||||
|
|
||||||
const fileDownload = new DownloaderHelper(fileToUpdate.fileURL, osuPath, {
|
const fileDownload = new DownloaderHelper(fileToUpdate.fileURL, tempPath, {
|
||||||
fileName: fileToUpdate.fileName,
|
fileName: fileToUpdate.fileName,
|
||||||
override: true,
|
override: true,
|
||||||
});
|
});
|
||||||
|
|
|
@ -48,7 +48,7 @@ window.addEventListener('DOMContentLoaded', () => {
|
||||||
case "up-to-date":
|
case "up-to-date":
|
||||||
$("#launch-btn").attr('disabled', true);
|
$("#launch-btn").attr('disabled', true);
|
||||||
$('#launch-btn').html('Launching...');
|
$('#launch-btn').html('Launching...');
|
||||||
const result = await ipcRenderer.invoke("launch");
|
const result = await ipcRenderer.invoke("launch", { patch: true });
|
||||||
if (!result) {
|
if (!result) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Uh oh!',
|
title: 'Uh oh!',
|
||||||
|
|
Loading…
Reference in New Issue
Block a user