add optional logging, cleanup fixes
This commit is contained in:
@@ -1,20 +1,20 @@
|
||||
const childProcess = require("child_process");
|
||||
|
||||
const runFile = (folder, file, args, onExit) => {
|
||||
childProcess.execFile(file, args, {
|
||||
cwd: folder
|
||||
}, (_err, _stdout, _stdin) => {
|
||||
if (onExit) onExit();
|
||||
})
|
||||
}
|
||||
childProcess.execFile(file, args, {
|
||||
cwd: folder,
|
||||
}, (_err, _stdout, _stdin) => {
|
||||
if (onExit) onExit();
|
||||
});
|
||||
};
|
||||
|
||||
const runFileDetached = (folder, file, args) => {
|
||||
const subProcess = childProcess.spawn(file + (args ? " " + args : ''), {
|
||||
cwd: folder,
|
||||
detached: true,
|
||||
stdio: 'ignore'
|
||||
});
|
||||
subProcess.unref();
|
||||
}
|
||||
const subProcess = childProcess.spawn(file + (args ? " " + args : ""), {
|
||||
cwd: folder,
|
||||
detached: true,
|
||||
stdio: "ignore",
|
||||
});
|
||||
subProcess.unref();
|
||||
};
|
||||
|
||||
module.exports = { runFile, runFileDetached };
|
||||
module.exports = { runFile, runFileDetached };
|
||||
|
15
electron/fileUtil.js
Normal file
15
electron/fileUtil.js
Normal file
@@ -0,0 +1,15 @@
|
||||
const fs = require("fs");
|
||||
|
||||
function isWritable(filePath) {
|
||||
let fileAccess = false;
|
||||
try {
|
||||
fs.closeSync(fs.openSync(filePath, "r+"));
|
||||
fileAccess = true;
|
||||
} catch {
|
||||
}
|
||||
return fileAccess;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
isWritable,
|
||||
};
|
@@ -1,13 +1,13 @@
|
||||
function formatBytes(bytes, decimals = 2) {
|
||||
if (!+bytes) return '0 Bytes'
|
||||
if (!+bytes) return "0 B";
|
||||
|
||||
const k = 1024
|
||||
const dm = decimals < 0 ? 0 : decimals
|
||||
const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
|
||||
const k = 1024;
|
||||
const dm = decimals < 0 ? 0 : decimals;
|
||||
const sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
|
||||
|
||||
const i = Math.floor(Math.log(bytes) / Math.log(k))
|
||||
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
||||
|
||||
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))}${sizes[i]}`
|
||||
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))}${sizes[i]}`;
|
||||
}
|
||||
|
||||
module.exports = { formatBytes };
|
||||
module.exports = { formatBytes };
|
||||
|
44
electron/logging.js
Normal file
44
electron/logging.js
Normal file
@@ -0,0 +1,44 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
class Logger {
|
||||
constructor(directory) {
|
||||
this.directory = directory;
|
||||
this.enabled = false;
|
||||
}
|
||||
|
||||
async init() {
|
||||
const filename = `${new Date().toISOString().replace(/:/g, "-")}.log`;
|
||||
this.logPath = path.join(this.directory, filename);
|
||||
}
|
||||
|
||||
async log(message) {
|
||||
if (this.logPath === undefined || this.enabled == false) {
|
||||
return;
|
||||
}
|
||||
if (!fs.existsSync(this.logPath)) {
|
||||
await fs.promises.mkdir(this.directory, { recursive: true });
|
||||
await fs.promises.writeFile(this.logPath, "");
|
||||
}
|
||||
const logMessage = `[${new Date().toISOString()}] LOG: ${message}`;
|
||||
await fs.promises.appendFile(this.logPath, `${logMessage}\n`);
|
||||
console.log(logMessage);
|
||||
}
|
||||
|
||||
async error(message, error) {
|
||||
if (this.logPath === undefined || this.enabled == false) {
|
||||
return;
|
||||
}
|
||||
if (!fs.existsSync(this.logPath)) {
|
||||
await fs.promises.mkdir(this.directory, { recursive: true });
|
||||
await fs.promises.writeFile(this.logPath, "");
|
||||
}
|
||||
const errorMessage = `[${
|
||||
new Date().toISOString()
|
||||
}] ERROR: ${message}\n${error.stack}`;
|
||||
await fs.promises.appendFile(this.logPath, `${errorMessage}\n`);
|
||||
console.error(errorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Logger;
|
@@ -18,8 +18,8 @@ const gamemodes = {
|
||||
4: "osu!(rx)",
|
||||
5: "taiko(rx)",
|
||||
6: "catch(rx)",
|
||||
8: "osu!(ap)"
|
||||
}
|
||||
8: "osu!(ap)",
|
||||
};
|
||||
const osuEntities = [
|
||||
"avcodec-51.dll",
|
||||
"avformat-52.dll",
|
||||
@@ -44,7 +44,7 @@ const osuEntities = [
|
||||
"scores.db",
|
||||
];
|
||||
|
||||
const ezppLauncherUpdateList = "https://ez-pp.farm/ezpplauncher"
|
||||
const ezppLauncherUpdateList = "https://ez-pp.farm/ezpplauncher";
|
||||
|
||||
async function isValidOsuFolder(path) {
|
||||
const allFiles = await fs.promises.readdir(path);
|
||||
@@ -184,31 +184,24 @@ function downloadUpdateFiles(osuPath, updateFiles) {
|
||||
|
||||
const startDownload = async () => {
|
||||
for (const updatePatch of updateFiles) {
|
||||
const fileName = updatePatch.filename;
|
||||
const fileSize = updatePatch.filesize;
|
||||
const fileURL = updatePatch.url_full;
|
||||
|
||||
const axiosDownloadWithProgress = await axios.get(fileURL, {
|
||||
responseType: "stream",
|
||||
onDownloadProgress: (progressEvent) => {
|
||||
const { loaded, total } = progressEvent;
|
||||
eventEmitter.emit("data", {
|
||||
fileName,
|
||||
loaded,
|
||||
total,
|
||||
progress: Math.floor((loaded / total) * 100),
|
||||
});
|
||||
},
|
||||
});
|
||||
axiosDownloadWithProgress.data.on("end", () => {
|
||||
eventEmitter.emit("data", {
|
||||
fileName,
|
||||
loaded: fileSize,
|
||||
total: fileSize,
|
||||
progress: 100,
|
||||
});
|
||||
});
|
||||
try {
|
||||
const fileName = updatePatch.filename;
|
||||
const fileSize = updatePatch.filesize;
|
||||
const fileURL = updatePatch.url_full;
|
||||
|
||||
const axiosDownloadWithProgress = await axios.get(fileURL, {
|
||||
responseType: "stream",
|
||||
onDownloadProgress: (progressEvent) => {
|
||||
const { loaded, total } = progressEvent;
|
||||
eventEmitter.emit("data", {
|
||||
fileName,
|
||||
loaded,
|
||||
total,
|
||||
progress: Math.floor((loaded / total) * 100),
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
if (fs.existsSync(path.join(osuPath, fileName))) {
|
||||
await fs.promises.rm(path.join(osuPath, fileName), {
|
||||
force: true,
|
||||
@@ -222,6 +215,7 @@ function downloadUpdateFiles(osuPath, updateFiles) {
|
||||
console.log(err);
|
||||
eventEmitter.emit("error", {
|
||||
fileName,
|
||||
error: err,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -248,10 +242,16 @@ function runOsuWithDevServer(osuPath, serverDomain, onExit) {
|
||||
|
||||
async function getEZPPLauncherUpdateFiles(osuPath) {
|
||||
const filesToDownload = [];
|
||||
const updateFilesRequest = await fetch(ezppLauncherUpdateList, { method: "PATCH" });
|
||||
const updateFilesRequest = await fetch(ezppLauncherUpdateList, {
|
||||
method: "PATCH",
|
||||
});
|
||||
const updateFiles = await updateFilesRequest.json();
|
||||
for (const updateFile of updateFiles) {
|
||||
const filePath = path.join(osuPath, ...updateFile.folder.split("/"), updateFile.name);
|
||||
const filePath = path.join(
|
||||
osuPath,
|
||||
...updateFile.folder.split("/"),
|
||||
updateFile.name,
|
||||
);
|
||||
if (fs.existsSync(filePath)) {
|
||||
const fileHash = updateFile.md5.toLowerCase();
|
||||
const localFileHash = crypto.createHash("md5").update(
|
||||
@@ -272,22 +272,30 @@ async function downloadEZPPLauncherUpdateFiles(osuPath, updateFiles) {
|
||||
|
||||
const startDownload = async () => {
|
||||
for (const updateFile of updateFiles) {
|
||||
const filePath = path.join(osuPath, ...updateFile.folder.split("/"), updateFile.name);
|
||||
const folder = path.dirname(filePath);
|
||||
if (!fs.existsSync(folder)) await fs.promises.mkdir(folder, { recursive: true });
|
||||
const axiosDownloadWithProgress = await axios.get(updateFile.url, {
|
||||
responseType: "stream",
|
||||
onDownloadProgress: (progressEvent) => {
|
||||
const { loaded, total } = progressEvent;
|
||||
eventEmitter.emit("data", {
|
||||
fileName: path.basename(filePath),
|
||||
loaded,
|
||||
total,
|
||||
progress: Math.floor((loaded / total) * 100),
|
||||
});
|
||||
},
|
||||
});
|
||||
try {
|
||||
const filePath = path.join(
|
||||
osuPath,
|
||||
...updateFile.folder.split("/"),
|
||||
updateFile.name,
|
||||
);
|
||||
const folder = path.dirname(filePath);
|
||||
if (!fs.existsSync(folder)) {
|
||||
await fs.promises.mkdir(folder, { recursive: true });
|
||||
}
|
||||
const axiosDownloadWithProgress = await axios.get(updateFile.url, {
|
||||
responseType: "stream",
|
||||
onDownloadProgress: (progressEvent) => {
|
||||
const fileSize = updateFile.size;
|
||||
const { loaded } = progressEvent;
|
||||
eventEmitter.emit("data", {
|
||||
fileName: path.basename(filePath),
|
||||
loaded,
|
||||
total: fileSize,
|
||||
progress: Math.floor((loaded / fileSize) * 100),
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
if (fs.existsSync(filePath)) {
|
||||
await fs.promises.rm(filePath, {
|
||||
force: true,
|
||||
@@ -301,10 +309,11 @@ async function downloadEZPPLauncherUpdateFiles(osuPath, updateFiles) {
|
||||
console.log(err);
|
||||
eventEmitter.emit("error", {
|
||||
fileName: path.basename(filePath),
|
||||
error: err,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
eventEmitter,
|
||||
@@ -316,7 +325,11 @@ async function replaceUIFiles(osuPath, revert) {
|
||||
if (!revert) {
|
||||
const ezppUIFile = path.join(osuPath, "EZPPLauncher", "ezpp!ui.dll");
|
||||
const oldOsuUIFile = path.join(osuPath, "osu!ui.dll");
|
||||
const ezppGameplayFile = path.join(osuPath, "EZPPLauncher", "ezpp!gameplay.dll");
|
||||
const ezppGameplayFile = path.join(
|
||||
osuPath,
|
||||
"EZPPLauncher",
|
||||
"ezpp!gameplay.dll",
|
||||
);
|
||||
const oldOsuGameplayFile = path.join(osuPath, "osu!gameplay.dll");
|
||||
|
||||
await fs.promises.rename(
|
||||
@@ -334,7 +347,11 @@ async function replaceUIFiles(osuPath, revert) {
|
||||
const oldOsuUIFile = path.join(osuPath, "osu!ui.dll");
|
||||
const ezppUIFile = path.join(osuPath, "EZPPLauncher", "ezpp!ui.dll");
|
||||
const oldOsuGameplayFile = path.join(osuPath, "osu!gameplay.dll");
|
||||
const ezppGameplayFile = path.join(osuPath, "EZPPLauncher", "ezpp!gameplay.dll");
|
||||
const ezppGameplayFile = path.join(
|
||||
osuPath,
|
||||
"EZPPLauncher",
|
||||
"ezpp!gameplay.dll",
|
||||
);
|
||||
|
||||
await fs.promises.rename(oldOsuUIFile, ezppUIFile);
|
||||
await fs.promises.rename(
|
||||
@@ -413,5 +430,5 @@ module.exports = {
|
||||
runOsuUpdater,
|
||||
getEZPPLauncherUpdateFiles,
|
||||
downloadEZPPLauncherUpdateFiles,
|
||||
gamemodes
|
||||
gamemodes,
|
||||
};
|
||||
|
@@ -35,7 +35,9 @@ module.exports = {
|
||||
richPresence = new DiscordRPC.AutoClient({ transport: "ipc" });
|
||||
richPresence.endlessLogin({ clientId });
|
||||
richPresence.once("ready", () => {
|
||||
console.log("connected presence with user " + richPresence.user.username);
|
||||
console.log(
|
||||
"connected presence with user " + richPresence.user.username,
|
||||
);
|
||||
richPresence.setActivity(currentStatus);
|
||||
intervalId = setInterval(() => {
|
||||
richPresence.setActivity(currentStatus);
|
||||
|
Reference in New Issue
Block a user