From 7c10ad1341862217c9142dca52705c25b5c35520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=98=89=E4=BC=9F?= <8473136@qq.com> Date: Mon, 27 Nov 2023 17:03:45 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E7=89=88=E6=9C=AC=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/api/github.ts | 224 ++++++++++++++++++++++------------------- electron/main/index.ts | 4 + 2 files changed, 122 insertions(+), 106 deletions(-) diff --git a/electron/api/github.ts b/electron/api/github.ts index fe896ae..2fe8308 100644 --- a/electron/api/github.ts +++ b/electron/api/github.ts @@ -1,121 +1,133 @@ -import { app, BrowserWindow, ipcMain, net } from "electron"; -import { insertVersion } from "../storage/version"; +import {app, BrowserWindow, ipcMain, net} from "electron"; +import {insertVersion} from "../storage/version"; const fs = require("fs"); const path = require("path"); const zlib = require("zlib"); -const { download } = require("electron-dl"); +const {download} = require("electron-dl"); + + +const versionRelation = { + "win32_x64": ["window", "amd64"], + "win32_arm64": ["window", "arm64"], + "win32_ia32": ["window", "386"], + "darwin_arm64": ["darwin", "arm64"], + "darwin_amd64": ["darwin", "amd64"], +} const unTarGZ = tarGzPath => { - const tar = require("tar"); - const targetPath = path.resolve(path.join(app.getPath("userData"), "frp")); - const unzip = zlib.createGunzip(); - const readStream = fs.createReadStream(tarGzPath); - if (!fs.existsSync(unzip)) { - fs.mkdirSync(targetPath, { recursive: true }); - } - readStream.pipe(unzip).pipe( - tar.extract({ - cwd: targetPath, - filter: filePath => path.basename(filePath) === "frpc" - }) - ); - return path.join("frp", path.basename(tarGzPath, ".tar.gz")); - // .on("finish", () => { - // console.log("解压完成!"); - // }); + const tar = require("tar"); + const targetPath = path.resolve(path.join(app.getPath("userData"), "frp")); + const unzip = zlib.createGunzip(); + const readStream = fs.createReadStream(tarGzPath); + if (!fs.existsSync(unzip)) { + fs.mkdirSync(targetPath, {recursive: true}); + } + readStream.pipe(unzip).pipe( + tar.extract({ + cwd: targetPath, + filter: filePath => path.basename(filePath) === "frpc" + }) + ); + return path.join("frp", path.basename(tarGzPath, ".tar.gz")); + // .on("finish", () => { + // console.log("解压完成!"); + // }); }; export const initGitHubApi = () => { - // 版本 - let versions = []; + // 版本 + let versions = []; - const getVersion = versionId => { - return versions.find(f => f.id === versionId); - }; + const getVersion = versionId => { + return versions.find(f => f.id === versionId); + }; - const getAdaptiveAsset = versionId => { - const version = getVersion(versionId); - const arch = process.arch; - const platform = process.platform; - const { assets } = version; - const asset = assets.find( - f => f.name.indexOf(platform) != -1 && f.name.indexOf(arch) != -1 - ); - return asset; - }; - - /** - * 获取github上的frp所有版本 - */ - ipcMain.on("github.getFrpVersions", async event => { - const request = net.request({ - method: "get", - url: "https://api.github.com/repos/fatedier/frp/releases" - }); - request.on("response", response => { - let responseData: Buffer = Buffer.alloc(0); - response.on("data", (data: Buffer) => { - responseData = Buffer.concat([responseData, data]); - }); - response.on("end", () => { - versions = JSON.parse(responseData.toString()); - // const borderContent: Electron.WebContents = - // BrowserWindow.getFocusedWindow().webContents; - const downloadPath = path.join(app.getPath("userData"), "download"); - const returnVersionsData = versions - .filter(f => getAdaptiveAsset(f.id)) - .map(m => { - const asset = getAdaptiveAsset(m.id); - if (asset) { - // const absPath = `${downloadPath}/${asset.id}_${asset.name}`; - const absPath = `${downloadPath}/${asset.name}`; - m.download_completed = fs.existsSync(absPath); - } else { - console.log("buzhicih"); + const getAdaptiveAsset = versionId => { + const {assets} = getVersion(versionId); + const arch = process.arch; + const platform = process.platform; + const asset = assets.find( + f => { + const a = versionRelation[`${platform}_${arch}`] + if (a) { + const flag = a.every(item => f.name.includes(item)) + return flag; + } + return false; } - // m.download_completed = fs.existsSync( - // `${downloadPath}/${asset.id}_${asset.name}` - // ); - return m; - }); - event.reply("Download.frpVersionHook", returnVersionsData); - }); - }); - request.end(); - }); - - /** - * 下载请求 - */ - ipcMain.on("github.download", async (event, args) => { - const version = getVersion(args); - const asset = getAdaptiveAsset(args); - const { browser_download_url } = asset; - // 数据目录 - await download(BrowserWindow.getFocusedWindow(), browser_download_url, { - filename: `${asset.name}`, - directory: path.join(app.getPath("userData"), "download"), - onProgress: progress => { - event.reply("Download.frpVersionDownloadOnProgress", { - id: args, - progress: progress - }); - }, - onCompleted: () => { - const frpcVersionPath = unTarGZ( - path.join( - path.join(app.getPath("userData"), "download"), - `${asset.name}` - ) ); - version["frpcVersionPath"] = frpcVersionPath; - insertVersion(version, (err, document) => { - if (!err) { - event.reply("Download.frpVersionDownloadOnCompleted", args); - version.download_completed = true; - } + if (asset) { + console.log(asset.name) + } + return asset; + }; + + /** + * 获取github上的frp所有版本 + */ + ipcMain.on("github.getFrpVersions", async event => { + const request = net.request({ + method: "get", + url: "https://api.github.com/repos/fatedier/frp/releases" + }); + request.on("response", response => { + let responseData: Buffer = Buffer.alloc(0); + response.on("data", (data: Buffer) => { + responseData = Buffer.concat([responseData, data]); + }); + response.on("end", () => { + versions = JSON.parse(responseData.toString()); + // const borderContent: Electron.WebContents = + // BrowserWindow.getFocusedWindow().webContents; + const downloadPath = path.join(app.getPath("userData"), "download"); + const returnVersionsData = versions + .filter(f => getAdaptiveAsset(f.id)) + .map(m => { + const asset = getAdaptiveAsset(m.id); + if (asset) { + const absPath = `${downloadPath}/${asset.name}`; + m.download_completed = fs.existsSync(absPath); + } + return m; + }); + event.reply("Download.frpVersionHook", returnVersionsData); + }); + }); + request.end(); + }); + + /** + * 下载请求 + */ + ipcMain.on("github.download", async (event, args) => { + const version = getVersion(args); + const asset = getAdaptiveAsset(args); + const {browser_download_url} = asset; + // 数据目录 + await download(BrowserWindow.getFocusedWindow(), browser_download_url, { + filename: `${asset.name}`, + directory: path.join(app.getPath("userData"), "download"), + onProgress: progress => { + event.reply("Download.frpVersionDownloadOnProgress", { + id: args, + progress: progress + }); + }, + onCompleted: () => { + const frpcVersionPath = unTarGZ( + path.join( + path.join(app.getPath("userData"), "download"), + `${asset.name}` + ) + ); + version["frpcVersionPath"] = frpcVersionPath; + insertVersion(version, (err, document) => { + if (!err) { + event.reply("Download.frpVersionDownloadOnCompleted", args); + version.download_completed = true; + } + }); + } }); - } }); - }); }; diff --git a/electron/main/index.ts b/electron/main/index.ts index a0f03cc..afe01ba 100644 --- a/electron/main/index.ts +++ b/electron/main/index.ts @@ -129,6 +129,10 @@ ipcMain.handle("open-win", (_, arg) => { } }); +ipcMain.on('open-url', (event, url) => { + shell.openExternal(url).then(r => {}); +}); + initGitHubApi(); initConfigApi(); initProxyApi();