diff --git a/README.md b/README.md index 0373e8d..5227281 100644 --- a/README.md +++ b/README.md @@ -210,10 +210,9 @@ Right Alt Right GUI ``` - -Update Repository +Repository ------- -Clone again to the latest state. +You can add 5 fork repositories for QMK and Vial. If you get an error like this, please update the repository. ``` error: branch 'x.x.x' not found. diff --git a/command.js b/command.js index d8f3564..1cb246e 100644 --- a/command.js +++ b/command.js @@ -33,17 +33,6 @@ const url = (path) => new URL(`${fwMakerUrl}${path}`).href let isDockerUp = false let skipCheckDocker = !fwMakerUrl.includes("127.0.0.1") ? !fwMakerUrl.includes("127.0.0.1") : false -const tagZeroFill2Int = (str) => { - const s = str - .replace(/\.(\d{1})\./, ".0$1.") - .replace(/\.(\d{2})$/, ".0$1") - .replace(/\.(\d{1})$/, ".00$1") - .replace(/\./g, "") - return parseInt(s) -} - -const parseZeroLastDigit = (num) => parseInt(num.toString().slice(0, -1)) * 10 - const fileAppend = (data, key, obj) => { const buffer = fs.readFileSync(obj.path) data.append(key, buffer, { @@ -78,9 +67,11 @@ const responseStreamLog = async (res, mainWindow, channel) => { } const command = { - upImage: (mainWindow) => { + upImage: async (mainWindow) => { if(!skipCheckDocker){ - const res = spawn(appSpawn("docker compose build && docker compose up -d"), { shell: true }) + const result = await appExe("docker images") + const cmd = result.stdout.match("gpk_fwmaker_0003") ? "docker compose start" : "docker compose build && docker compose up -d" + const res = spawn(appSpawn(cmd), { shell: true }) streamLog(res, mainWindow, true) } }, @@ -103,21 +94,19 @@ const command = { tags: async () => { const res = await instance(url('/tags/qmk')).catch(e => e) if(res.status === 200) { - const dat = res.data - const limit = parseZeroLastDigit(tagZeroFill2Int(dat[0]) - 3000) - const tags = dat.filter(v => tagZeroFill2Int(v) >= limit) - return tags + return res.data } else { return [] } }, build: async (dat, mainWindow) => { - const u = `/build/${dat.fw}` - const data = dat.fw === "qmk" ? { + const u = dat.fw === "QMK" || dat.fw === "Vial" ? `/build/${dat.fw.toLowerCase()}` : `/build/custom` + const data = dat.fw === "QMK" ? { kb: dat.kb, km: dat.km, tag: dat.tag, } : { + fw: dat.fw.toLowerCase(), kb: dat.kb, km: dat.km, commit: dat.commit, @@ -181,7 +170,19 @@ const command = { return res.data }, updateRepository: async (fw, mainWindow) => { - const res = await axios(url(`/update/repository/${fw}`), {responseType: 'stream'}) + const res = await axios(url(`/update/repository/${fw.toLowerCase()}`), {responseType: 'stream'}) + await responseStreamLog(res, mainWindow, "streamLog") + }, + updateRepositoryCustom: async (obj, mainWindow) => { + const res = await axios({ + url: url("/update/repository/custom"), + method: 'post', + responseType: 'stream', + data: { + id: obj.id.toLowerCase(), + url: obj.url + } + }).catch(e => {}) await responseStreamLog(res, mainWindow, "streamLog") }, convertViaJson: async (file) => { diff --git a/gpk_fwmaker/Dockerfile b/gpk_fwmaker/Dockerfile index b927056..494eb1e 100644 --- a/gpk_fwmaker/Dockerfile +++ b/gpk_fwmaker/Dockerfile @@ -28,6 +28,8 @@ WORKDIR /root/vial-qmk RUN make git-submodule +WORKDIR /root/custom_repository + COPY ./firmware-scripts/ /firmware-scripts COPY ./server/ /server diff --git a/gpk_fwmaker/compose.yml b/gpk_fwmaker/compose.yml index 5736f2e..146c52a 100644 --- a/gpk_fwmaker/compose.yml +++ b/gpk_fwmaker/compose.yml @@ -1,6 +1,7 @@ services: gpk_fwmaker: build: . + image: gpk_fwmaker_0003 volumes: - ~/GPKFW:/root/keyboards tty: true diff --git a/gpk_fwmaker/server/package.json b/gpk_fwmaker/server/package.json index 86a024c..ea1d15b 100644 --- a/gpk_fwmaker/server/package.json +++ b/gpk_fwmaker/server/package.json @@ -1,7 +1,7 @@ { "name": "gpk_fwmaker_sever", "private": true, - "version": "0.0.1", + "version": "0.0.2", "description": "GPK_FWMaker_Sever", "author": "Daraku-Neko", "dependencies": { diff --git a/gpk_fwmaker/server/src/app.js b/gpk_fwmaker/server/src/app.js index 22a7c31..3b60a63 100644 --- a/gpk_fwmaker/server/src/app.js +++ b/gpk_fwmaker/server/src/app.js @@ -4,10 +4,10 @@ const {cmd, streamError} = require('./command') const app = express() const multer = require("multer") -const server = app.listen(3000, async() =>console.log("Node.js is listening to PORT:" + server.address().port)) +const server = app.listen(3000, async () => console.log("Node.js is listening to PORT:" + server.address().port)) -const streamResponce = async (res, fn) => { - res.writeHead(200, { "Content-Type": "text/event-stream"}) +const streamResponse = async (res, fn) => { + res.writeHead(200, {"Content-Type": "text/event-stream"}) await fn() } @@ -15,7 +15,7 @@ const bufferToJson = (buf) => JSON.parse(buf.toString()) const jsonToStr = (obj) => JSON.stringify(obj, null, 2) -app.use(bodyParser.urlencoded({ extended: true })) +app.use(bodyParser.urlencoded({extended: true})) app.use(bodyParser.json()) app.get('/', async (req, res) => res.send('GPK FWMaker!')) @@ -29,6 +29,35 @@ app.get('/update/repository/qmk', async (req, res) => await cmd.updateRepository app.get('/update/repository/vial', async (req, res) => await cmd.updateRepositoryVial(res)) +app.post('/update/repository/custom', async (req, res) => { + const fn = async () => { + try { + const id = req.body.id + const url = req.body.url + await cmd.updateRepositoryCustom(res, id, url) + } catch (e) { + streamError(res, e) + } + } + await streamResponse(res, fn) +}) + +app.post('/delete/repository/custom', async (req, res) => { + const fn = async () => { + try { + const id = req.body.id + await cmd.deleteRepositoryCustom(res, id) + } catch (e) { + streamError(res, e) + } + } + await streamResponse(res, fn) +}) + +app.get('/update/repository/qmk', async (req, res) => await cmd.updateRepositoryQmk(res)) + +app.get('/update/repository/vial', async (req, res) => await cmd.updateRepositoryVial(res)) + app.post('/build/qmk', async (req, res) => { const fn = async () => { try { @@ -44,9 +73,9 @@ app.post('/build/qmk', async (req, res) => { streamError(res, e) } } - await streamResponce(res, fn) + await streamResponse(res, fn) }) - + app.post('/build/vial', async (req, res) => { const fn = async () => { try { @@ -58,23 +87,48 @@ app.post('/build/vial', async (req, res) => { await cmd.checkoutVial(res, repo, commit) await cmd.cpConfigsToVial(kbDir) await cmd.buildVialFirmware(res, kb, km) - } catch (e) { streamError(res, e) } + } catch (e) { + streamError(res, e) + } } - await streamResponce(res, fn) + await streamResponse(res, fn) }) - + + +app.post('/build/custom', async (req, res) => { + const fn = async () => { + try { + const fw = req.body.fw + const kb = req.body.kb + const kbDir = kb.replace(/\/.*/g, "") + const km = req.body.km.replace(/:.*|flash/g, "") + const commit = req.body.commit + const obj = await cmd.checkoutCustom(res, fw, commit) + console.log("checkoutCustom") + await cmd.cpConfigsToCustom(obj.dir, kbDir) + console.log("cpConfigsToCustom") + + await cmd.buildCustomFirmware(res, obj, kb, km) + } catch (e) { + streamError(res, e) + } + } + + await streamResponse(res, fn) +}) + app.post('/generate/qmk/file', async (req, res) => { try { const kb = req.body.kb - const kbL = kb.toLowerCase().replace(/-| /g,"_") + const kbL = kb.toLowerCase().replace(/-| /g, "_") const kbDir = kbL.replace(/\/.*/g, "") const mcu = req.body.mcu const layout = req.body.layout const user = req.body.user const result = await cmd.generateQmkFile(kbL, mcu, layout, user) - const infoQmk = bufferToJson(await cmd.readQmkFile(kbDir, 'info.json')) + const infoQmk = bufferToJson(await cmd.readQmkFile(kbDir, 'info.json')) infoQmk.keyboard_name = kb infoQmk.manufacturer = user infoQmk.maintainer = user @@ -95,7 +149,7 @@ app.get('/generate/vial/id', async (req, res) => { } }) -app.post('/convert/via/json', multer().fields([{ name: 'info' }, { name: 'kle' }]), async (req, res) => { +app.post('/convert/via/json', multer().fields([{name: 'info'}, {name: 'kle'}]), async (req, res) => { try { const info = bufferToJson(req.files['info'][0].buffer) const kle = bufferToJson(req.files['kle'][0].buffer) @@ -132,7 +186,7 @@ app.post('/convert/kle/qmk', multer().single('kle'), async (req, res) => { try { const params = JSON.parse(req.body.params) const kb = params.kb - const fileKb = kb.toLowerCase().replace(/-| /g,"_") + const fileKb = kb.toLowerCase().replace(/-| /g, "_") const kbDir = fileKb.replace(/\/.*/g, "") const mcu = params.mcu const layout = "fullsize_ansi" @@ -140,26 +194,26 @@ app.post('/convert/kle/qmk', multer().single('kle'), async (req, res) => { const vid = params.vid const pid = params.pid const option = params.option - + const rows = params.rows.split(",") const cols = params.cols.split(",") - + const kle = bufferToJson(req.file.buffer) const kleFileName = 'kle.json' await cmd.writeFirmFiles(kleFileName, jsonToStr(kle)) await cmd.generateQmkFile(fileKb, mcu, layout, user) await cmd.generateFirmFiles(kleFileName) - + const vialFirm = bufferToJson(await cmd.readFirmFiles('vial.json')) - if(option === 2) { + if (option === 2) { await cmd.write('/root/keyboards/via.json', jsonToStr(vialFirm)) res.send("finish!!") return } - const infoQmk = bufferToJson(await cmd.readQmkFile(fileKb, 'info.json')) - const infoFirm = bufferToJson(await cmd.readFirmFiles('info.json')) + const infoQmk = bufferToJson(await cmd.readQmkFile(fileKb, 'info.json')) + const infoFirm = bufferToJson(await cmd.readFirmFiles('info.json')) infoQmk.keyboard_name = kb infoQmk.manufacturer = user infoQmk.maintainer = user @@ -177,19 +231,19 @@ app.post('/convert/kle/qmk', multer().single('kle'), async (req, res) => { await cmd.writeQmkFile(fileKb, 'info.json', jsonToStr(infoQmk)) let configQmk = await cmd.readQmkFile(fileKb, 'config.h') - if(option === 1){ + if (option === 1) { const configFirm = await cmd.readFirmFiles('config.h') configQmk = configQmk + configFirm } await cmd.writeQmkFile(fileKb, 'config.h', configQmk) - + const kbFirm = await cmd.readFirmFiles('kb.h') await cmd.writeQmkFile(fileKb, `${fileKb}.h`, kbFirm) const kmFirm = await cmd.readFirmFiles('keymap.c') await cmd.writeQmkFile(fileKb, 'keymaps/default/keymap.c', kmFirm) - if(option === 1){ + if (option === 1) { vialFirm.name = kb vialFirm.vendorId = vid vialFirm.productId = pid diff --git a/gpk_fwmaker/server/src/command.js b/gpk_fwmaker/server/src/command.js index b354981..af365db 100644 --- a/gpk_fwmaker/server/src/command.js +++ b/gpk_fwmaker/server/src/command.js @@ -5,6 +5,7 @@ const fs = require('fs'); const dirQMK = '/root/qmk_firmware' const dirVial = '/root/vial-qmk' +const dirCustomRepo = `/root/custom_repository` const dirFirmFiles = '/firmware-scripts/' const execCd = async (dir, line) => await exec(`cd ${dir} && ${line}`) @@ -21,7 +22,10 @@ const streamWriteLine = async (dir, line, res) => { const streamWriteLineQMK = async (line, res) => await streamWriteLine(dirQMK, line, res) const streamWriteLineVial = async (line, res) => await streamWriteLine(dirVial, line, res) -const findFirmwareL = (dir) => `find ${dir}/* -maxdepth 0 -regex ".*\\.\\(bin\\|hex\\|uf2\\)"` +const findFirmwareL = (dir) => { + const d = dir.match(/\/$/) ? dir : `${dir}/` + return `find ${d}* -maxdepth 0 -regex ".*\\.\\(bin\\|hex\\|uf2\\)"` +} const cpFirmwareL = (dir) => `${findFirmwareL(dir)} -type f -exec cp {} /root/keyboards \\;` const rmL = (path) => `rm -rf ${path}` @@ -47,6 +51,28 @@ const streamError = (res, e) => { res.end(e.toString()) } +const buildCustomFW = async (res, dir, branch, kb, km) => { + await exec(`${findFirmwareL(dir)} -delete`) + const line = `cd ${dir} && { make ${kb}:${km} || true; } && git checkout ${branch} > /dev/null 2>&1 && ${cpFirmwareL(dir)}` + await streamLog(line, res) +} + +const cpCfgToCustom = async (dir, kbDir) => { + await exec(rmKeyboardsL(dir)) + await exec(`cp -rf /root/keyboards/${kbDir} ${dir}/keyboards`) +} + +const checkoutRepo = async (res, dir, fw, commit) => { + await exec(rmKeyboardsL(dir)) + const result = await exec(`cd ${dir} && git symbolic-ref --short HEAD`) + const branch = result.stdout.replaceAll('\n', '') + await streamWriteLine(dir, `git fetch origin`, res) + await streamWriteLine(dir, `git reset --hard ${branch}`, res) + await streamWriteLine(dir, `git checkout ${commit.length > 0 ? commit : branch}`, res) + await streamWriteLine(dir, `make git-submodule`, res) + return branch +} + const cmd = { tags: async () => { const result = await execQMK(`git ls-remote --tags`) @@ -63,7 +89,8 @@ const cmd = { }, checkoutQmk: async (res, tag) => { await exec(rmKeyboardsL(dirQMK)) - await streamWriteLineQMK("git reset --hard HEAD^", res) + await streamWriteLineQMK(`git fetch origin`, res) + await streamWriteLineQMK(`git reset --hard master`, res) try { await streamWriteLineQMK(`git checkout -b ${tag} refs/tags/${tag}`, res) } catch (e){ await streamWriteLineQMK(`git branch -D ${tag}`, res) await streamWriteLineQMK(`git checkout -b ${tag} refs/tags/${tag}`, res) @@ -71,24 +98,21 @@ const cmd = { await streamWriteLineQMK(`make git-submodule\n`, res) await exec(rmKeyboardsL(dirQMK)) }, - checkoutVial: async (res, repo, commit) => { - await exec(rmKeyboardsL(dirVial)) - await streamWriteLineVial(`git fetch origin`, res) - await streamWriteLineVial(`git reset --hard origin/${repo}`, res) - await streamWriteLineVial(`git checkout ${commit}`, res) - await streamWriteLineVial(`make git-submodule\n`, res) - await exec(rmKeyboardsL(dirVial)) + checkoutVial: async (res, repo, commit) => await checkoutRepo(res, dirVial, repo, commit), + checkoutCustom: async (res, fw, commit) => { + const baseDir = `${dirCustomRepo}/${fw}` + const result = await exec(`cd ${baseDir} && ls -d */`) + const dir = `${baseDir}/${result.stdout.split("\n")[0]}` + const branch = await checkoutRepo(res, dir, fw, commit) + return {branch: branch, dir: dir} }, buildQmkFirmware: async (res, kb, km) => { await exec(`${findFirmwareL(dirQMK)} -delete`) const line = `qmk compile -kb ${kb} -km ${km} && ${cpFirmwareL(dirQMK)}` streamLog(line, res) }, - buildVialFirmware: async (res, kb, km) => { - await exec(`${findFirmwareL(dirVial)} -delete`) - const line = `cd ${dirVial} && make ${kb}:${km} && ${cpFirmwareL(dirVial)}` - streamLog(line, res) - }, + buildVialFirmware: async (res, kb, km) => await buildCustomFW(res, dirVial, "vial", kb, km), + buildCustomFirmware: async (res, obj, kb, km) => await buildCustomFW(res, obj.dir, obj.branch, kb, km), updateRepositoryQmk: async (res) => { await exec(rmL(dirQMK)) const line = "cd /root && qmk setup -y" @@ -99,6 +123,17 @@ const cmd = { const line = `cd /root && git clone https://github.com/vial-kb/vial-qmk.git && cd ${dirVial} && make git-submodule` streamLog(line, res) }, + updateRepositoryCustom: async (res, customDir, url) => { + const dir = `${dirCustomRepo}/${customDir}` + const cloneDir = `${dir}/${url.match(/\/([^/]+)\.git$/)[1]}` + const line = `rm -rf ${dir} && mkdir ${dir} && cd ${dir} && git clone ${url} && cd ${cloneDir} && make git-submodule` + streamLog(line, res) + }, + deleteRepositoryCustom: async (res, customDir) => { + const dir = `${dirCustomRepo}/${customDir}` + const line = `rm -rf ${dir}` + streamLog(line, res) + }, generateQmkFile: async (kb, mcu, layout, user) => { await exec(rmKeyboardsL(dirQMK)) const result = await exec(`qmk new-keyboard -kb ${kb} -t ${mcu} -l ${layout} -u ${user}`) @@ -120,10 +155,8 @@ const cmd = { await exec(rmKeyboardsL(dirQMK)) await exec(`cp -rf /root/keyboards/${kbDir} ${dirQMK}/keyboards`) }, - cpConfigsToVial: async (kbDir) => { - await exec(rmKeyboardsL(dirVial)) - await exec(`cp -rf /root/keyboards/${kbDir} ${dirVial}/keyboards`) - }, + cpConfigsToVial: async (kbDir) => await cpCfgToCustom(dirVial, kbDir), + cpConfigsToCustom: async (dir, kbDir) => await cpCfgToCustom(dir, kbDir), cpDefaultToVail: async (kbDir) => { await exec(`mkdir -p ${dirQMK}/keyboards/${kbDir}/keymaps/vial`) await exec(`cp -rf ${dirQMK}/keyboards/${kbDir}/keymaps/default/* ${dirQMK}/keyboards/${kbDir}/keymaps/vial`) diff --git a/index.js b/index.js index 1e95375..34e300d 100644 --- a/index.js +++ b/index.js @@ -55,6 +55,7 @@ ipcMain.handle('buildCache', () => command.buildCache(process.platform==='win32 ipcMain.handle('generateQMKFile', async (e, dat) => await command.generateQMKFile(dat)) ipcMain.handle('generateVialId', async () => await command.generateVialId()) ipcMain.handle('updateRepository', async (e, fw) => await command.updateRepository(fw, mainWindow)) +ipcMain.handle('updateRepositoryCustom', async (e, obj) => await command.updateRepositoryCustom(obj, mainWindow)) ipcMain.handle('getState', async () => await store.get('state')) ipcMain.handle('setState', async (e, obj) => { await store.set('state', obj) diff --git a/package.json b/package.json index fd071a8..9a3868f 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "dist:linux": "npm run build && electron-builder -l" }, "name": "gpk_fwbuilder", - "version": "0.8.0", + "version": "0.9.0", "description": "GPK FWBuilder", "homepage": "https://github.com/darakuneko", "author": { @@ -18,20 +18,20 @@ }, "devDependencies": { "@electron/rebuild": "3.3.0", - "electron": "26.1.0", + "electron": "26.2.1", "electron-builder": "24.6.4", "webpack-cli": "5.1.4" }, "main": "./index.js", "dependencies": { - "@babel/core": "7.22.15", - "@babel/preset-env": "7.22.15", + "@babel/core": "7.22.20", + "@babel/preset-env": "7.22.20", "@babel/preset-react": "7.22.15", "@emotion/babel-preset-css-prop": "11.11.0", "@emotion/react": "11.11.1", "@emotion/styled": "11.11.0", - "@mui/icons-material": "5.14.8", - "@mui/material": "5.14.8", + "@mui/icons-material": "5.14.9", + "@mui/material": "5.14.10", "ansi-to-html": "0.7.2", "axios": "1.5.0", "babel-loader": "9.1.3", diff --git a/preload.js b/preload.js index 1d0df3b..0cb12c2 100644 --- a/preload.js +++ b/preload.js @@ -1,4 +1,4 @@ -const { contextBridge, ipcRenderer } = require('electron') +const {contextBridge, ipcRenderer} = require('electron') process.once('loaded', async () => { global.ipcRenderer = ipcRenderer @@ -9,13 +9,14 @@ process.once('loaded', async () => { existSever: async () => await ipcRenderer.invoke('existSever'), tags: async () => await ipcRenderer.invoke('tags'), build: async (dat) => await ipcRenderer.invoke('build', dat), - buildCompleted: async () => await ipcRenderer.invoke('buildCompleted'), - buildCache: async () => await ipcRenderer.invoke('buildCache'), + buildCompleted: async () => await ipcRenderer.invoke('buildCompleted'), + buildCache: async () => await ipcRenderer.invoke('buildCache'), updateRepository: async (fw) => await ipcRenderer.invoke('updateRepository', fw), + updateRepositoryCustom: async (obj) => await ipcRenderer.invoke('updateRepositoryCustom', obj), generateQMKFile: async (dat) => await ipcRenderer.invoke('generateQMKFile', dat), generateVialId: async () => await ipcRenderer.invoke('generateVialId'), - getState: async() => await ipcRenderer.invoke('getState'), - setState: async(obj) => await ipcRenderer.invoke('setState', obj), + getState: async () => await ipcRenderer.invoke('getState'), + setState: async (obj) => await ipcRenderer.invoke('setState', obj), rebuildImage: async () => await ipcRenderer.invoke('rebuildImage'), convertViaJson: async (file) => await ipcRenderer.invoke('convertViaJson', file), convertKleJson: async (obj) => await ipcRenderer.invoke('convertKleJson', obj), diff --git a/src/content.js b/src/content.js index a0b8fbe..657cb2f 100644 --- a/src/content.js +++ b/src/content.js @@ -1,4 +1,4 @@ -import React, {useCallback, useEffect, useRef, useState} from 'react' +import React, {useEffect, useState} from 'react' import Box from "@mui/material/Box" import Tabs from "@mui/material/Tabs" import Tab from "@mui/material/Tab" @@ -8,10 +8,11 @@ import Build from "./renderer/build" import Logs from "./renderer/logs" import {buildBoxHeight, convertBoxHeight, neon, neonKeyFrame} from "./style" import parse from 'html-react-parser' -import Tool from "./renderer/tool" -import Generate from "./renderer/generate"; -import Convert from "./renderer/convert"; -import Setting from "./renderer/setting"; +import Repository from "./renderer/repository" +import Image from "./renderer/image" +import Generate from "./renderer/generate" +import Convert from "./renderer/convert" +import Setting from "./renderer/setting" const {api} = window @@ -26,13 +27,14 @@ const Content = () => { let id const checkFn = async () => { const exist = await api.existSever() - if(exist === 200 || exist === 503){ + if (exist === 200 || exist === 503) { const reStoreState = await api.getState() state.version = await api.appVersion() - if(reStoreState?.build) state.build = reStoreState.build - if(reStoreState?.generate) state.generate = reStoreState.generate - if(reStoreState?.convert) state.convert = reStoreState.convert - if(reStoreState?.setting) state.setting = reStoreState.setting + if (reStoreState?.build) state.build = reStoreState.build + if (reStoreState?.generate) state.generate = reStoreState.generate + if (reStoreState?.convert) state.convert = reStoreState.convert + if (reStoreState?.repository) state.repository = reStoreState.repository + if (reStoreState?.setting) state.setting = reStoreState.setting state.setting.fwDir = state.setting.fwDir ? state.setting.fwDir : await api.getLocalFWdir() state.build.tags = await api.tags() state.build.tag = state.build.tag ? state.build.tag : state.build.tags[0] @@ -40,7 +42,7 @@ const Content = () => { setState(state) clearInterval(id) setInitServer(false) - } else if(exist === 404) { + } else if (exist === 404) { state.logs = 'connecting....\nIf the connection does not work for a long time, please start up again or delete the docker image once.' setState(state) } @@ -48,7 +50,8 @@ const Content = () => { id = setInterval(await checkFn, 1000) } fn() - return () => {} + return () => { + } }, []) useEffect(() => { @@ -57,7 +60,8 @@ const Content = () => { const state = await getState() await api.setState(state) }) - return () => {} + return () => { + } }, []) useEffect(() => { @@ -66,7 +70,8 @@ const Content = () => { s.logs = log setState(s) }) - return () => {} + return () => { + } }, []) useEffect(() => { @@ -75,7 +80,8 @@ const Content = () => { log.match(/@@@@init@@@@/m) ? state.logs = '' : state.logs = state.logs + log setState(state) }) - return () => {} + return () => { + } }, []) const handleSkipDockerCheck = async () => { @@ -88,6 +94,11 @@ const Content = () => { setState(state) } + const tabHeight = (tab) => { + if (tab === 2) return convertBoxHeight + return buildBoxHeight + } + return (