diff --git a/src/main/setup.js b/src/main/setup.js index e2fdf73..98e5047 100644 --- a/src/main/setup.js +++ b/src/main/setup.js @@ -37,7 +37,7 @@ async function main() { let rclone_exec = Vars.rclone_path if (!fs.existsSync(sevenzip_exec)) { - global.win.webContents.send("initializing_text", "Downloading 7z binaries...") + global.win.webContents.send("setup:step", "Downloading 7z binaries...") console.log(`Downloading 7z binaries...`) fs.mkdirSync(path.resolve(binariesPath, "7z-bin"), { recursive: true }) @@ -63,7 +63,7 @@ async function main() { const binPath = path.resolve(binariesPath, "git-bin") if (!fs.existsSync(tempPath)) { - global.win.webContents.send("initializing_text", "Downloading GIT binaries...") + global.win.webContents.send("setup:step", "Downloading GIT binaries...") console.log(`Downloading git binaries...`) let url = resolveDestBin(`https://storage.ragestudio.net/rstudio/binaries/git`, "git-bundle-2.4.0.zip") @@ -74,7 +74,7 @@ async function main() { ) } - global.win.webContents.send("initializing_text", "Extracting GIT binaries...") + global.win.webContents.send("setup:step", "Extracting GIT binaries...") console.log(`Extracting GIT...`) await new Promise((resolve, reject) => { @@ -86,7 +86,7 @@ async function main() { if (!fs.existsSync(Vars.rclone_path)) { console.log(`Downloading rclone binaries...`) - global.win.webContents.send("initializing_text", "Downloading rclone binaries...") + global.win.webContents.send("setup:step", "Downloading rclone binaries...") const tempPath = path.resolve(binariesPath, "rclone-bin.zip") @@ -97,7 +97,7 @@ async function main() { fs.createWriteStream(tempPath) ) - global.win.webContents.send("initializing_text", "Extracting rclone binaries...") + global.win.webContents.send("setup:step", "Extracting rclone binaries...") await new Promise((resolve, reject) => { fs.createReadStream(tempPath).pipe(unzipper.Extract({ path: path.resolve(binariesPath, "rclone-bin") })).on("close", resolve).on("error", reject) @@ -112,7 +112,7 @@ async function main() { if (!fs.existsSync(Vars.java_path)) { console.log(`Downloading java binaries...`) - global.win.webContents.send("initializing_text", "Downloading Java JDK...") + global.win.webContents.send("setup:step", "Downloading Java JDK...") const tempPath = path.resolve(binariesPath, "java-jdk.zip") @@ -123,7 +123,7 @@ async function main() { fs.createWriteStream(tempPath) ) - global.win.webContents.send("initializing_text", "Extracting JAVA...") + global.win.webContents.send("setup:step", "Extracting JAVA...") await new Promise((resolve, reject) => { fs.createReadStream(tempPath).pipe(unzipper.Extract({ path: path.resolve(binariesPath, "java-jdk") })).on("close", resolve).on("error", reject) @@ -140,6 +140,9 @@ async function main() { console.log(`GIT binaries: ${git_exec}`) console.log(`rclone binaries: ${rclone_exec}`) console.log(`JAVA jdk: ${Vars.java_path}`) + + global.win.webContents.send("setup:step", undefined) + global.win.webContents.send("setup:done") } export default main \ No newline at end of file diff --git a/src/renderer/src/App.jsx b/src/renderer/src/App.jsx index 69c180c..fe31cd6 100644 --- a/src/renderer/src/App.jsx +++ b/src/renderer/src/App.jsx @@ -1,61 +1,19 @@ +import GlobalApp from "./GlobalApp.jsx" + import React from "react" -import versions from "utils/getVersions" import * as antd from "antd" +import versions from "utils/getVersions" import GlobalStateContext from "contexts/global" -import getRootCssVar from "utils/getRootCssVar" - -import ManifestInfo from "components/ManifestInfo" -import PackageUpdateAvailable from "components/PackageUpdateAvailable" -import InstallConfigAsk from "components/InstallConfigAsk" - import AppLayout from "layout" import AppModalDialog from "layout/components/ModalDialog" +import AppDrawer from "layout/components/Drawer" import { InternalRouter, PageRender } from "./router.jsx" -globalThis.getRootCssVar = getRootCssVar -globalThis.notification = antd.notification -globalThis.message = antd.message - // create a global app context -window.app = { - applyUpdate: () => { - antd.message.loading("Updating, please wait...") - - ipc.exec("updater:apply") - }, - invokeInstall: (manifest) => { - console.log(`installation invoked >`, manifest) - - app.modal.open(ManifestInfo, { - manifest: manifest, - close: () => { - app.modal.close() - } - }) - }, - pkgUpdateAvailable: (update_data) => { - app.modal.open(PackageUpdateAvailable, { - update: update_data, - close: () => { - app.modal.close() - } - }) - }, - pkgInstallWizard: (manifest) => { - app.modal.open(InstallConfigAsk, { - manifest: manifest, - close: () => { - app.modal.close() - } - }) - }, - checkUpdates: () => { - ipc.exec("updater:check") - }, -} +window.app = GlobalApp class App extends React.Component { state = { @@ -92,20 +50,35 @@ class App extends React.Component { antd.message[data.type || "info"](data.message) }, "app:update_available": (event, data) => { - this.onUpdateAvailable(data) + if (this.state.loading) { + return false + } + + this.setState({ + updateAvailable: true, + }) + + app.appUpdateAvailable(data) }, "pkg:install:ask": (event, data) => { + if (this.state.loading) { + return false + } + app.pkgInstallWizard(data) }, "pkg:update_available": (event, data) => { + if (this.state.loading) { + return false + } + app.pkgUpdateAvailable(data) }, - "initializing_text": (event, data) => { - this.setState({ - initializing_text: data, - }) - }, "installation:invoked": (event, manifest) => { + if (this.state.loading) { + return false + } + app.invokeInstall(manifest) }, "drive:authorized": (event, data) => { @@ -126,56 +99,24 @@ class App extends React.Component { message.success("Google Drive API unauthorized") }, - "app:checking_update_downloading": (event, data) => { + "setup:step": (event, data) => { this.setState({ - updateText: "Downloading update..." + setup_step: data, }) }, - "app:checking_update": (event, data) => { - this.setState({ - updateText: "Checking for updates..." - }) - }, - "app:checking_update_error": (event, data) => { - this.setState({ - updateText: null - }) - }, - } - - onUpdateAvailable = () => { - this.setState({ - updateAvailable: true, - }) - - console.log(data) - - antd.Modal.confirm({ - title: "Update Available", - content: <> -
- A new version of the application is available. -
- >, - okText: "Update", - cancelText: "Later", - onOk: () => { - app.applyUpdate() - } - }) } componentDidMount = async () => { - for (const event in this.ipcEvents) { - ipc.on(event, this.ipcEvents[event]) - } - const initResult = await ipc.exec("app:init") console.log(`Using React version > ${versions["react"]}`) console.log(`Using DOMRouter version > ${versions["react-router-dom"]}`) console.log(`[APP] app:init() | Result >`, initResult) + for (const event in this.ipcEvents) { + ipc.exclusiveListen(event, this.ipcEvents[event]) + } + app.location.push("/") this.setState({ @@ -187,12 +128,6 @@ class App extends React.Component { }) } - componentWillUnmount = () => { - for (const event in this.ipcEvents) { - ipc.off(event, this.ipcEvents[event]) - } - } - render() { return+ A new version of the application is available. +
+ >, + okText: "Update", + cancelText: "Later", + onOk: () => { + app.applyUpdate() + } + }) + } + + static checkUpdates = () => { + ipc.exec("updater:check") + } +} \ No newline at end of file diff --git a/src/renderer/src/router.jsx b/src/renderer/src/router.jsx index ea8e38a..3bcbd46 100644 --- a/src/renderer/src/router.jsx +++ b/src/renderer/src/router.jsx @@ -155,7 +155,7 @@ export const PageRender = (props) => { const globalState = React.useContext(GlobalStateContext) - if (globalState.initializing_text && globalState.loading) { + if (globalState.setup_step && globalState.loading) { return
- {globalState.initializing_text}
+ {globalState.setup_step}