feat:支持windows桌面应用

This commit is contained in:
fanxb 2024-01-07 15:34:24 +08:00
parent 55af6bd54e
commit 861d5f35bf
8 changed files with 44 additions and 1625 deletions

View File

@ -2,7 +2,11 @@
![预览图](https://s3.fleyx.com/picbed/2022/11/18386180128d01eb1a59b8eacf652895.png) ![预览图](https://s3.fleyx.com/picbed/2022/11/18386180128d01eb1a59b8eacf652895.png)
renamer 的开源实现版本BS 应用,支持 arm/x86 部署使用 renamer 的开源实现版本BS 应用,支持 arm/x86 部署使用,两种使用方式:
已打包镜像到 dockerhub 中:[hub.docker.com/r/fleyx/open-renamer](https://hub.docker.com/r/fleyx/open-renamer)
1. 部署容器到 nas
已打包到 dockerhub 中:[hub.docker.com/r/fleyx/open-renamer](https://hub.docker.com/r/fleyx/open-renamer)
2. 下载桌面应用使用,目前仅支持 windows后续计划支持 mac,linux[下载地址](https://github.com/FleyX/open-renamer/releases/latest)
[点击查看参考文档](https://blog.fleyx.com/blog/detail/20221130) [点击查看参考文档](https://blog.fleyx.com/blog/detail/20221130)

3
electron/.gitignore vendored
View File

@ -2,4 +2,5 @@ node_modules
dist dist
openRenamerBackend openRenamerBackend
build build
.idea .idea
*.exe

View File

@ -7,6 +7,12 @@ const {spawn} = require('child_process');
const net = require('net'); const net = require('net');
const log = require('electron-log'); const log = require('electron-log');
const userHome = process.env.HOME || process.env.USERPROFILE;
const dataPath = path.join(userHome, "openRenamer");
log.transports.file.resolvePathFn = () => path.join(dataPath, 'logs/main.log');
async function createWindow() { async function createWindow() {
// 隐藏菜单栏 // 隐藏菜单栏
Menu.setApplicationMenu(null) Menu.setApplicationMenu(null)
@ -28,15 +34,16 @@ async function createWindow() {
let port = await startBackend() let port = await startBackend()
// 并且为你的应用加载index.html // 并且为你的应用加载index.html
// win.loadFile('./dist/index.html') // win.loadFile('./dist/index.html')
log.info("backend service started")
win.loadURL(`http://localhost:` + port); win.loadURL(`http://localhost:` + port);
win.webContents.openDevTools() // win.webContents.openDevTools()
} }
// Electron会在初始化完成并且准备好创建浏览器窗口时调用这个方法 // Electron会在初始化完成并且准备好创建浏览器窗口时调用这个方法
// 部分 API 在 ready 事件触发后才能使用。 // 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(createWindow) app.whenReady().then(createWindow)
// 当所有窗口都被关闭后退出 // 当所有窗口都被关闭后退出
app.on('window-all-closed', () => { app.on('windows-all-closed', () => {
// 在 macOS 上,除非用户用 Cmd + Q 确定地退出, // 在 macOS 上,除非用户用 Cmd + Q 确定地退出,
// 否则绝大部分应用及其菜单栏会保持激活。 // 否则绝大部分应用及其菜单栏会保持激活。
if (process.platform !== 'darwin') { if (process.platform !== 'darwin') {
@ -64,8 +71,6 @@ async function startBackend() {
} }
port = port + 1; port = port + 1;
} }
let userHome = process.env.HOME || process.env.USERPROFILE;
let dataPath = path.join(userHome, "openRenamer");
log.info("start check folder exist", __dirname, __filename) log.info("start check folder exist", __dirname, __filename)
let exist = fs.existsSync("openRenamerBackend"); let exist = fs.existsSync("openRenamerBackend");
const childProcess = spawn('node', [(exist ? '' : '../') + 'openRenamerBackend/dist/index.js'], { const childProcess = spawn('node', [(exist ? '' : '../') + 'openRenamerBackend/dist/index.js'], {
@ -86,6 +91,15 @@ async function startBackend() {
childProcess.on('close', (code) => { childProcess.on('close', (code) => {
log.info(`child process exited with code ${code}`); log.info(`child process exited with code ${code}`);
}); });
log.info("check service start");
while (true) {
await sleep(100);
let success = !(await checkPort(port));
if (success) {
log.info("service start");
break;
}
}
return port; return port;
} }
@ -106,4 +120,10 @@ function checkPort(port) {
resolve(false); resolve(false);
}) })
}) })
}
function sleep(time) {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(), time);
})
} }

View File

@ -35,17 +35,24 @@
"oneClick": false, "oneClick": false,
"allowElevation": true, "allowElevation": true,
"allowToChangeInstallationDirectory": true, "allowToChangeInstallationDirectory": true,
"installerIcon": "../openRenamerBackend/static/favicon.ico", "installerIcon": "./renamer.ico",
"uninstallerIcon": "../openRenamerBackend/static/favicon.ico", "uninstallerIcon": "./renamer.ico",
"installerHeaderIcon": "../openRenamerBackend/static/favicon.ico", "installerHeaderIcon": "./renamer.ico",
"createDesktopShortcut": true, "createDesktopShortcut": true,
"createStartMenuShortcut": true, "createStartMenuShortcut": true,
"shortcutName": "openRenamer" "shortcutName": "openRenamer"
}, },
"win": { "win": {
"icon": "./renamer.ico",
"target": [ "target": [
"nsis", "nsis",
"zip" "zip"
],
"extraFiles": [
{
"from": "windows/node.exe",
"to": "node.exe"
}
] ]
}, },
"mac": { "mac": {

1615
electron/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

1
electron/readme.md Normal file
View File

@ -0,0 +1 @@
需要下载windows版的node.js压缩包将其中的node.exe 放到windowes目录下

BIN
electron/renamer.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@ -10,6 +10,7 @@ import init from "./middleware/init";
import SqliteUtil from './util/SqliteHelper'; import SqliteUtil from './util/SqliteHelper';
import log from './util/LogUtil'; import log from './util/LogUtil';
import {updateQbInfo} from './util/QbApiUtil'; import {updateQbInfo} from './util/QbApiUtil';
import TimeUtil from "./util/TimeUtil";
console.log(config); console.log(config);