138 lines
4.8 KiB
JavaScript
138 lines
4.8 KiB
JavaScript
const { app, BrowserWindow, ipcMain, dialog } = require('electron');
|
|
const { setupTitlebar, attachTitlebarToWindow } = require('custom-electron-titlebar/main');
|
|
const windowManager = require('./ui/windowManager');
|
|
const osuUtil = require('./osuUtil');
|
|
const config = require('./config');
|
|
const fs = require('fs');
|
|
|
|
let tempOsuPath;
|
|
|
|
const run = () => {
|
|
const gotTheLock = app.requestSingleInstanceLock()
|
|
if (!gotTheLock) {
|
|
app.quit();
|
|
return;
|
|
}
|
|
|
|
setupTitlebar();
|
|
|
|
let mainWindow;
|
|
app.whenReady().then(() => {
|
|
|
|
mainWindow = createWindow();
|
|
mainWindow.on('show', async () => {
|
|
await doUpdateCheck(mainWindow);
|
|
})
|
|
app.on('activate', function () {
|
|
if (BrowserWindow.getAllWindows().length === 0) mainWindow = createWindow();
|
|
})
|
|
app.on('window-all-closed', () => {
|
|
app.quit()
|
|
})
|
|
ipcMain.handle('launch', async () => {
|
|
const result = await osuUtil.startOsuWithDevServer(tempOsuPath, "ez-pp.farm", async () => {
|
|
await doUpdateCheck(mainWindow);
|
|
});
|
|
return result;
|
|
})
|
|
ipcMain.on('do-update-check', async () => {
|
|
await doUpdateCheck(mainWindow);
|
|
})
|
|
ipcMain.on('do-update', async () => {
|
|
const osuPath = await config.get("osuPath", "");
|
|
const isValid = await osuUtil.isValidOsuFolder(osuPath);
|
|
if (osuPath.trim == "" || !isValid) {
|
|
mainWindow.webContents.send('status_update', {
|
|
type: "error",
|
|
message: "Invalid osu! folder"
|
|
});
|
|
return;
|
|
}
|
|
if (fs.existsSync(osuPath)) {
|
|
tempOsuPath = osuPath;
|
|
const osuConfig = await osuUtil.getLatestConfig(tempOsuPath);
|
|
const lastVersion = await osuConfig.get("LastVersion");
|
|
let releaseStream = "stable40";
|
|
if (lastVersion.endsWith("cuttingedge"))
|
|
releaseStream = "cuttingedge"
|
|
else if (lastVersion.endsWith("beta"))
|
|
releaseStream = "beta";
|
|
|
|
const releaseFiles = await osuUtil.getUpdateFiles(releaseStream);
|
|
const filesToDownload = await osuUtil.filesThatNeedUpdate(tempOsuPath, releaseFiles);
|
|
const downloadTask = await osuUtil.downloadUpdateFiles(osuPath, filesToDownload);
|
|
downloadTask.on('completed', () => {
|
|
mainWindow.webContents.send('status_update', {
|
|
type: "update-complete"
|
|
})
|
|
});
|
|
|
|
} else
|
|
mainWindow.webContents.send('status_update', {
|
|
type: "error",
|
|
message: "Invalid osu! folder"
|
|
});
|
|
})
|
|
ipcMain.handle('set-osu-dir', async (event) => {
|
|
const yes = await dialog.showOpenDialog({
|
|
properties: ['openDirectory']
|
|
})
|
|
if (yes.filePaths.length <= 0)
|
|
return undefined;
|
|
const folderPath = yes.filePaths[0];
|
|
const validOsuDir = await osuUtil.isValidOsuFolder(folderPath);
|
|
|
|
if (validOsuDir) await config.set("osuPath", folderPath);
|
|
|
|
return validOsuDir;
|
|
})
|
|
})
|
|
}
|
|
|
|
async function doUpdateCheck(window) {
|
|
const osuPath = await config.get("osuPath", "");
|
|
const isValid = await osuUtil.isValidOsuFolder(osuPath);
|
|
if (osuPath.trim == "" || !isValid) {
|
|
window.webContents.send('status_update', {
|
|
type: "missing-folder"
|
|
})
|
|
return;
|
|
}
|
|
if (fs.existsSync(osuPath)) {
|
|
tempOsuPath = osuPath;
|
|
const osuConfig = await osuUtil.getLatestConfig(tempOsuPath);
|
|
const lastVersion = await osuConfig.get("LastVersion");
|
|
let releaseStream = "stable40";
|
|
if (lastVersion.endsWith("cuttingedge"))
|
|
releaseStream = "cuttingedge"
|
|
else if (lastVersion.endsWith("beta"))
|
|
releaseStream = "beta";
|
|
|
|
const releaseFiles = await osuUtil.getUpdateFiles(releaseStream);
|
|
const filesToDownload = await osuUtil.filesThatNeedUpdate(tempOsuPath, releaseFiles);
|
|
window.webContents.send('status_update', {
|
|
type: filesToDownload.length > 0 ? "update-available" : "up-to-date"
|
|
})
|
|
} else
|
|
window.webContents.send('status_update', {
|
|
type: "missing-folder"
|
|
})
|
|
}
|
|
|
|
function createWindow() {
|
|
// Create the browser window.
|
|
const win = windowManager.createWindow(520, 350);
|
|
|
|
win.loadFile('./html/index.html');
|
|
|
|
attachTitlebarToWindow(win);
|
|
win.webContents.setWindowOpenHandler(() => "deny");
|
|
win.webContents.on('did-finish-load', function () {
|
|
if (win.webContents.getZoomFactor() != 0.9)
|
|
win.webContents.setZoomFactor(0.9)
|
|
});
|
|
|
|
return win;
|
|
}
|
|
|
|
run(); |