From 9fed5fc8449f55ec3c3669f16050a2e50d6a21e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=98=89=E4=BC=9F?= <8473136@qq.com> Date: Wed, 21 Aug 2024 22:31:12 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E9=85=8D=E7=BD=AE=E5=AF=BC?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/api/config.ts | 138 ++++++++++++------ electron/api/frpc.ts | 4 +- src/components/IconifyIcon/src/offlineIcon.ts | 7 + src/layout/compoenets/Breadcrumb.vue | 19 ++- src/styles/layout.scss | 38 +++-- src/views/config/index.vue | 84 +++++++++-- src/views/download/index.vue | 2 +- src/views/proxy/index.vue | 7 +- 8 files changed, 213 insertions(+), 86 deletions(-) diff --git a/electron/api/config.ts b/electron/api/config.ts index b99a1ba..4bd9776 100644 --- a/electron/api/config.ts +++ b/electron/api/config.ts @@ -1,52 +1,102 @@ -import {app, ipcMain} from "electron"; -import {getConfig, saveConfig} from "../storage/config"; -import {listVersion} from "../storage/version"; +import { app, dialog, ipcMain } from "electron"; +import { getConfig, saveConfig } from "../storage/config"; +import { listVersion } from "../storage/version"; +import { generateConfig, genIniConfig, genTomlConfig } from "./frpc"; +import { exec } from "child_process"; +import { listProxy } from "../storage/proxy"; +import path from "path"; +import fs from "fs"; -const log = require('electron-log'); +const log = require("electron-log"); export const initConfigApi = () => { - ipcMain.on("config.saveConfig", async (event, args) => { - saveConfig(args, (err, numberOfUpdated, upsert) => { - if (!err) { - const start = args.systemSelfStart || false; - log.info("开启自启状态", start) - app.setLoginItemSettings({ - openAtLogin: start, //win - openAsHidden: start, //macOs - }); + ipcMain.on("config.saveConfig", async (event, args) => { + saveConfig(args, (err, numberOfUpdated, upsert) => { + if (!err) { + const start = args.systemSelfStart || false; + log.info("开启自启状态", start); + app.setLoginItemSettings({ + openAtLogin: start, //win + openAsHidden: start //macOs + }); + } + event.reply("Config.saveConfig.hook", { + err: err, + numberOfUpdated: numberOfUpdated, + upsert: upsert + }); + }); + }); + + ipcMain.on("config.getConfig", async (event, args) => { + getConfig((err, doc) => { + event.reply("Config.getConfig.hook", { + err: err, + data: doc + }); + }); + }); + + ipcMain.on("config.versions", event => { + listVersion((err, doc) => { + event.reply("Config.versions.hook", { + err: err, + data: doc + }); + }); + }); + + ipcMain.on("config.hasConfig", event => { + getConfig((err, doc) => { + event.reply("Config.getConfig.hook", { + err: err, + data: doc + }); + }); + }); + + ipcMain.on("config.exportConfig", async (event, args) => { + const result = await dialog.showOpenDialog({ + properties: ["openDirectory"] + }); + const outputDirectory = result.filePaths[0]; + log.info(`导出目录 ${outputDirectory} 类型:${args}`); + getConfig((err1, config) => { + if (!err1 && config) { + listProxy((err2, proxys) => { + if (!err2) { + let configContent = ""; + if (args === "ini") { + configContent = genIniConfig(config, proxys); + } else if (args === "toml") { + configContent = genTomlConfig(config, proxys); } - event.reply("Config.saveConfig.hook", { - err: err, - numberOfUpdated: numberOfUpdated, - upsert: upsert - }); - }); - }); - - ipcMain.on("config.getConfig", async (event, args) => { - getConfig((err, doc) => { - event.reply("Config.getConfig.hook", { - err: err, - data: doc - }); - }); - }); - - ipcMain.on("config.versions", event => { - listVersion((err, doc) => { - event.reply("Config.versions.hook", { - err: err, - data: doc - }); - }); - }); - - ipcMain.on("config.hasConfig", event => { - getConfig((err, doc) => { - event.reply("Config.getConfig.hook", { - err: err, - data: doc + const configPath = path.join( + outputDirectory, + `frpc-desktop.${args}` + ); + fs.writeFile( + configPath, // 配置文件目录 + configContent, // 配置文件内容 + { flag: "w" }, + err => { + if (!err) { + // callback(filename); + event.reply("config.exportConfig.hook", { + data: "导出错误", + err: err + }); + } + } + ); + event.reply("Config.exportConfig.hook", { + data: { + configPath: configPath + } }); + } }); + } }); + }); }; diff --git a/electron/api/frpc.ts b/electron/api/frpc.ts index f26a0b0..41799ef 100644 --- a/electron/api/frpc.ts +++ b/electron/api/frpc.ts @@ -38,7 +38,7 @@ const getFrpcVersionWorkerPath = ( * @param config * @param proxys */ -const genTomlConfig = (config: FrpConfig, proxys: Proxy[]) => { +export const genTomlConfig = (config: FrpConfig, proxys: Proxy[]) => { const proxyToml = proxys.map(m => { let toml = ` [[${m.type === "stcp" && m.stcpModel === "visitors" ? "visitors" : "proxies"}]] @@ -155,7 +155,7 @@ ${proxyToml.join("")} * @param config * @param proxys */ -const genIniConfig = (config: FrpConfig, proxys: Proxy[]) => { +export const genIniConfig = (config: FrpConfig, proxys: Proxy[]) => { const proxyIni = proxys.map(m => { let ini = ` [${m.name}] diff --git a/src/components/IconifyIcon/src/offlineIcon.ts b/src/components/IconifyIcon/src/offlineIcon.ts index 1dee587..531f98a 100644 --- a/src/components/IconifyIcon/src/offlineIcon.ts +++ b/src/components/IconifyIcon/src/offlineIcon.ts @@ -29,6 +29,9 @@ import ContentCopy from "@iconify-icons/material-symbols/content-copy"; import ContentPasteGo from "@iconify-icons/material-symbols/content-paste-go"; import Edit from "@iconify-icons/material-symbols/edit"; import CheckBox from "@iconify-icons/material-symbols/check-box"; +import ExportNotesOutline from "@iconify-icons/material-symbols/export-notes-outline"; +import uploadRounded from "@iconify-icons/material-symbols/upload-rounded"; +import downloadRounded from "@iconify-icons/material-symbols/download-rounded"; addIcon("cloud", Cloud); addIcon("rocket-launch-rounded", RocketLaunchRounded); @@ -53,4 +56,8 @@ addIcon("content-copy", ContentCopy); addIcon("content-paste-go", ContentPasteGo); addIcon("edit", Edit); addIcon("check-box", CheckBox); +addIcon("export", ExportNotesOutline); +addIcon("uploadRounded", uploadRounded); +addIcon("downloadRounded", downloadRounded); + diff --git a/src/layout/compoenets/Breadcrumb.vue b/src/layout/compoenets/Breadcrumb.vue index b4d8e89..c82b54c 100644 --- a/src/layout/compoenets/Breadcrumb.vue +++ b/src/layout/compoenets/Breadcrumb.vue @@ -1,9 +1,7 @@ diff --git a/src/views/download/index.vue b/src/views/download/index.vue index 7d9af59..a655f3b 100644 --- a/src/views/download/index.vue +++ b/src/views/download/index.vue @@ -117,7 +117,7 @@ onUnmounted(() => {
下载源: - + {
-
+ -
+