From c7b54326d641c596d8d3e076b0880e7eddc597d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=90=E6=AE=87?= Date: Sat, 7 Dec 2024 22:43:40 +0800 Subject: [PATCH] add outbound interface display --- .github/workflows/build.yml | 382 +----------------- src/main/core/mihomoApi.ts | 5 + src/main/utils/ipc.ts | 2 + .../src/components/sider/conn-card.tsx | 17 +- src/renderer/src/utils/ipc.ts | 4 + src/shared/types.d.ts | 43 ++ 6 files changed, 79 insertions(+), 374 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c72f92aa..ba4ad1c6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -69,63 +69,6 @@ jobs: body_path: changelog.md token: ${{ secrets.GITHUB_TOKEN }} - windows7: - strategy: - fail-fast: false - matrix: - arch: - - x64 - - ia32 - runs-on: windows-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup pnpm - run: npm install -g pnpm - - name: Install Dependencies - env: - npm_config_arch: ${{ matrix.arch }} - npm_config_target_arch: ${{ matrix.arch }} - run: | - pnpm install - pnpm add @mihomo-party/sysproxy-win32-${{ matrix.arch }}-msvc - pnpm add -D electron@22.3.27 - (Get-Content electron-builder.yml) -replace 'windows', 'win7' | Set-Content electron-builder.yml - pnpm prepare --${{ matrix.arch }} - - name: Build - env: - npm_config_arch: ${{ matrix.arch }} - npm_config_target_arch: ${{ matrix.arch }} - run: pnpm build:win --${{ matrix.arch }} - - name: Add Portable Flag - run: | - New-Item -Path "PORTABLE" -ItemType File - Get-ChildItem dist/*portable.7z | ForEach-Object { - 7z a $_.FullName PORTABLE - } - - name: Generate checksums - run: pnpm checksum setup.exe portable.7z - - name: Upload Artifacts - if: startsWith(github.ref, 'refs/heads/') - uses: actions/upload-artifact@v4 - with: - name: Win7 ${{ matrix.arch }} - path: | - dist/*.sha256 - dist/*setup.exe - dist/*portable.7z - if-no-files-found: error - - name: Publish Release - if: startsWith(github.ref, 'refs/tags/v') - uses: softprops/action-gh-release@v2 - with: - files: | - dist/*.sha256 - dist/*setup.exe - dist/*portable.7z - body_path: changelog.md - token: ${{ secrets.GITHUB_TOKEN }} - linux: strategy: fail-fast: false @@ -225,225 +168,34 @@ jobs: body_path: changelog.md token: ${{ secrets.GITHUB_TOKEN }} - macos10: - strategy: - fail-fast: false - matrix: - arch: - - x64 - - arm64 - runs-on: macos-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup pnpm - run: npm install -g pnpm - - name: Install Dependencies - env: - npm_config_arch: ${{ matrix.arch }} - npm_config_target_arch: ${{ matrix.arch }} - run: | - pnpm install - pnpm add @mihomo-party/sysproxy-darwin-${{ matrix.arch }} - pnpm add -D electron@32.2.2 - pnpm prepare --${{ matrix.arch }} - - name: Build - env: - npm_config_arch: ${{ matrix.arch }} - npm_config_target_arch: ${{ matrix.arch }} - run: | - sed -i "" -e "s/macos/catalina/" electron-builder.yml - chmod +x build/pkg-scripts/postinstall - pnpm build:mac --${{ matrix.arch }} - - name: Generate checksums - run: pnpm checksum .pkg - - name: Upload Artifacts - if: startsWith(github.ref, 'refs/heads/') - uses: actions/upload-artifact@v4 - with: - name: Catalina ${{ matrix.arch }} - path: | - dist/*.sha256 - dist/*.pkg - if-no-files-found: error - - name: Publish Release - if: startsWith(github.ref, 'refs/tags/v') - uses: softprops/action-gh-release@v2 - with: - files: | - dist/*.sha256 - dist/*.pkg - body_path: changelog.md - token: ${{ secrets.GITHUB_TOKEN }} - - artifact-windows: - if: startsWith(github.ref, 'refs/heads/') - needs: windows - runs-on: ubuntu-latest - concurrency: - group: artifact - cancel-in-progress: false - services: - telegram-bot-api: - image: aiogram/telegram-bot-api:latest - env: - TELEGRAM_API_ID: ${{ secrets.TELEGRAM_BOT_API_ID }} - TELEGRAM_API_HASH: ${{ secrets.TELEGRAM_BOT_API_HASH }} - ports: - - 8081:8081 - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup pnpm - run: npm install -g pnpm - - name: Install Dependencies - run: pnpm install - - name: Download Artifacts - uses: actions/download-artifact@v4 - with: - pattern: 'Windows*' - merge-multiple: true - - name: Upload Artifacts - env: - TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} - ARTIFACT_TARGET: windows - run: pnpm artifact - - artifact-windows7: - if: startsWith(github.ref, 'refs/heads/') - needs: windows7 - runs-on: ubuntu-latest - concurrency: - group: artifact - cancel-in-progress: false - services: - telegram-bot-api: - image: aiogram/telegram-bot-api:latest - env: - TELEGRAM_API_ID: ${{ secrets.TELEGRAM_BOT_API_ID }} - TELEGRAM_API_HASH: ${{ secrets.TELEGRAM_BOT_API_HASH }} - ports: - - 8081:8081 - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup pnpm - run: npm install -g pnpm - - name: Install Dependencies - run: pnpm install - - name: Download Artifacts - uses: actions/download-artifact@v4 - with: - pattern: 'Win7*' - merge-multiple: true - - name: Upload Artifacts - env: - TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} - ARTIFACT_TARGET: windows7 - run: pnpm artifact - - artifact-macos: + artifact: if: startsWith(github.ref, 'refs/heads/') - needs: macos + needs: [windows, linux, macos] runs-on: ubuntu-latest concurrency: group: artifact cancel-in-progress: false - services: - telegram-bot-api: - image: aiogram/telegram-bot-api:latest - env: - TELEGRAM_API_ID: ${{ secrets.TELEGRAM_BOT_API_ID }} - TELEGRAM_API_HASH: ${{ secrets.TELEGRAM_BOT_API_HASH }} - ports: - - 8081:8081 steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup pnpm - run: npm install -g pnpm - - name: Install Dependencies - run: pnpm install - name: Download Artifacts uses: actions/download-artifact@v4 with: - pattern: 'MacOS*' + path: bin/ merge-multiple: true - - name: Upload Artifacts - env: - TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} - ARTIFACT_TARGET: macos - run: pnpm artifact - artifact-macos10: - if: startsWith(github.ref, 'refs/heads/') - needs: macos10 - runs-on: ubuntu-latest - concurrency: - group: artifact - cancel-in-progress: false - services: - telegram-bot-api: - image: aiogram/telegram-bot-api:latest - env: - TELEGRAM_API_ID: ${{ secrets.TELEGRAM_BOT_API_ID }} - TELEGRAM_API_HASH: ${{ secrets.TELEGRAM_BOT_API_HASH }} - ports: - - 8081:8081 - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup pnpm - run: npm install -g pnpm - - name: Install Dependencies - run: pnpm install - - name: Download Artifacts - uses: actions/download-artifact@v4 + - name: Upload Prerelease + uses: softprops/action-gh-release@v1 + if: ${{ success() }} with: - pattern: 'Catalina*' - merge-multiple: true - - name: Upload Artifacts - env: - TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} - ARTIFACT_TARGET: macos10 - run: pnpm artifact - - artifact-linux: - if: startsWith(github.ref, 'refs/heads/') - needs: linux - runs-on: ubuntu-latest - concurrency: - group: artifact - cancel-in-progress: false - services: - telegram-bot-api: - image: aiogram/telegram-bot-api:latest - env: - TELEGRAM_API_ID: ${{ secrets.TELEGRAM_BOT_API_ID }} - TELEGRAM_API_HASH: ${{ secrets.TELEGRAM_BOT_API_HASH }} - ports: - - 8081:8081 - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup pnpm - run: npm install -g pnpm - - name: Install Dependencies - run: pnpm install - - name: Download Artifacts - uses: actions/download-artifact@v4 - with: - pattern: 'Linux*' - merge-multiple: true - - name: Upload Artifacts - env: - TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} - ARTIFACT_TARGET: linux - run: pnpm artifact + tag_name: pre-release + files: | + bin/* + prerelease: true + generate_release_notes: true + body_path: release.txt updater: if: startsWith(github.ref, 'refs/tags/v') - needs: [windows, macos, windows7, macos10] + needs: [windows, macos, linux] runs-on: ubuntu-latest steps: - name: Checkout @@ -452,10 +204,6 @@ jobs: run: npm install -g pnpm - name: Install Dependencies run: pnpm install - - name: Telegram Notification - env: - TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} - run: pnpm telegram - name: Generate latest.yml run: pnpm updater - name: Publish Release @@ -463,106 +211,4 @@ jobs: with: files: latest.yml body_path: changelog.md - token: ${{ secrets.GITHUB_TOKEN }} - - aur-release-updater: - strategy: - fail-fast: false - matrix: - pkgname: - - mihomo-party-electron-bin - - mihomo-party-electron - - mihomo-party-bin - - mihomo-party - if: startsWith(github.ref, 'refs/tags/v') - needs: linux - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Update Version - run: | - sed -i "s/pkgver=.*/pkgver=$(echo ${{ github.ref }} | tr -d 'refs/tags/v')/" aur/${{ matrix.pkgname }}/PKGBUILD - - name: Update Checksums - if: matrix.pkgname == 'mihomo-party' || matrix.pkgname == 'mihomo-party-electron' - run: | - wget https://github.com/mihomo-party-org/mihomo-party/archive/refs/tags/$(echo ${{ github.ref }} | tr -d 'refs/tags/').tar.gz -O release.tar.gz - sed -i "s/sha256sums=.*/sha256sums=(\"$(sha256sum ./release.tar.gz | awk '{print $1}')\"/" aur/mihomo-party/PKGBUILD - sed -i "s/sha256sums=.*/sha256sums=(\"$(sha256sum ./release.tar.gz | awk '{print $1}')\"/" aur/mihomo-party-electron/PKGBUILD - - name: Update Checksums - if: matrix.pkgname == 'mihomo-party-bin' || matrix.pkgname == 'mihomo-party-electron-bin' - run: | - wget https://github.com/mihomo-party-org/mihomo-party/releases/download/$(echo ${{ github.ref }} | tr -d 'refs/tags/')/mihomo-party-linux-$(echo ${{ github.ref }} | tr -d 'refs/tags/v')-amd64.deb -O amd64.deb - wget https://github.com/mihomo-party-org/mihomo-party/releases/download/$(echo ${{ github.ref }} | tr -d 'refs/tags/')/mihomo-party-linux-$(echo ${{ github.ref }} | tr -d 'refs/tags/v')-arm64.deb -O arm64.deb - sed -i "s/sha256sums_x86_64=.*/sha256sums_x86_64=(\"$(sha256sum ./amd64.deb | awk '{print $1}')\")/" aur/mihomo-party-bin/PKGBUILD - sed -i "s/sha256sums_aarch64=.*/sha256sums_aarch64=(\"$(sha256sum ./arm64.deb | awk '{print $1}')\")/" aur/mihomo-party-bin/PKGBUILD - sed -i "s/sha256sums_x86_64=.*/sha256sums_x86_64=(\"$(sha256sum ./amd64.deb | awk '{print $1}')\")/" aur/mihomo-party-electron-bin/PKGBUILD - sed -i "s/sha256sums_aarch64=.*/sha256sums_aarch64=(\"$(sha256sum ./arm64.deb | awk '{print $1}')\")/" aur/mihomo-party-electron-bin/PKGBUILD - - name: Publish AUR package - uses: KSXGitHub/github-actions-deploy-aur@v2.7.2 - with: - pkgname: ${{ matrix.pkgname }} - pkgbuild: aur/${{ matrix.pkgname }}/PKGBUILD - commit_username: pompurin404 - commit_email: pompurin404@mihomo.party - ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} - commit_message: Update AUR package - ssh_keyscan_types: rsa,ed25519 - allow_empty_commits: false - - aur-git-updater: - if: startsWith(github.ref, 'refs/heads/') - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: update version - run: | - sed -i "s/pkgver=.*/pkgver=$(git describe --long 2>/dev/null | sed 's/\([^-]*-g\)/r\1/;s/-/./g' | tr -d 'v')/" aur/mihomo-party-git/PKGBUILD - - name: Publish AUR package - uses: KSXGitHub/github-actions-deploy-aur@v2.7.2 - with: - pkgname: mihomo-party-git - pkgbuild: aur/mihomo-party-git/PKGBUILD - commit_username: pompurin404 - commit_email: pompurin404@mihomo.party - ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} - commit_message: Update AUR package - ssh_keyscan_types: rsa,ed25519 - allow_empty_commits: false - - winget: - if: startsWith(github.ref, 'refs/tags/v') - name: Update WinGet Package - needs: windows - runs-on: ubuntu-latest - steps: - - name: Get Tag Name - run: echo "VERSION=$(echo ${{ github.ref }} | tr -d 'refs/tags/v')" >> $GITHUB_ENV - - name: Submit to Winget - uses: vedantmgoyal9/winget-releaser@main - with: - identifier: Mihomo-Party.Mihomo-Party - version: ${{env.VERSION}} - release-tag: v${{env.VERSION}} - installers-regex: 'mihomo-party-windows-.*setup\.exe$' - token: ${{ secrets.POMPURIN404_TOKEN }} - - homebrew: - if: startsWith(github.ref, 'refs/tags/v') - name: Update Homebrew cask - needs: [macos, macos10] - runs-on: macos-latest - steps: - - name: Set up Git - run: | - git config --global user.email mihomo-party-bot[bot]@users.noreply.github.com - git config --global user.name mihomo-party-bot[bot] - - name: Update Homebrew cask - env: - HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.POMPURIN404_TOKEN }} - run: | - brew tap mihomo-party-org/mihomo-party - brew update - brew bump-cask-pr mihomo-party --version $(echo ${{ github.ref }} | tr -d 'refs/tags/v') --no-browse + token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/src/main/core/mihomoApi.ts b/src/main/core/mihomoApi.ts index 89d309da..1f109bc1 100644 --- a/src/main/core/mihomoApi.ts +++ b/src/main/core/mihomoApi.ts @@ -46,6 +46,11 @@ export async function mihomoVersion(): Promise { return await instance.get('/version') } +export const mihomoConfig = async (): Promise => { + const instance = await getAxios() + return await instance.get('/configs') +} + export const patchMihomoConfig = async (patch: Partial): Promise => { const instance = await getAxios() return await instance.patch('/configs', patch) diff --git a/src/main/utils/ipc.ts b/src/main/utils/ipc.ts index 304da090..bde712b2 100644 --- a/src/main/utils/ipc.ts +++ b/src/main/utils/ipc.ts @@ -16,6 +16,7 @@ import { mihomoUpgrade, mihomoUpgradeGeo, mihomoVersion, + mihomoConfig, patchMihomoConfig } from '../core/mihomoApi' import { checkAutoRun, disableAutoRun, enableAutoRun } from '../sys/autoRun' @@ -112,6 +113,7 @@ function ipcErrorWrapper( // eslint-disable-next-line @typescript-eslint/no-e } export function registerIpcMainHandlers(): void { ipcMain.handle('mihomoVersion', ipcErrorWrapper(mihomoVersion)) + ipcMain.handle('mihomoConfig', ipcErrorWrapper(mihomoConfig)) ipcMain.handle('mihomoCloseConnection', (_e, id) => ipcErrorWrapper(mihomoCloseConnection)(id)) ipcMain.handle('mihomoCloseAllConnections', ipcErrorWrapper(mihomoCloseAllConnections)) ipcMain.handle('mihomoRules', ipcErrorWrapper(mihomoRules)) diff --git a/src/renderer/src/components/sider/conn-card.tsx b/src/renderer/src/components/sider/conn-card.tsx index 923319bb..6902888f 100644 --- a/src/renderer/src/components/sider/conn-card.tsx +++ b/src/renderer/src/components/sider/conn-card.tsx @@ -2,6 +2,7 @@ import { Button, Card, CardBody, CardFooter, Tooltip } from '@nextui-org/react' import { FaCircleArrowDown, FaCircleArrowUp } from 'react-icons/fa6' import { useLocation, useNavigate } from 'react-router-dom' import { calcTraffic } from '@renderer/utils/calc' +import { mihomoConfig } from '@renderer/utils/ipc' import React, { useEffect, useState } from 'react' import { useSortable } from '@dnd-kit/sortable' import { CSS } from '@dnd-kit/utilities' @@ -30,6 +31,7 @@ const ConnCard: React.FC = (props) => { const [upload, setUpload] = useState(0) const [download, setDownload] = useState(0) + const [interfaceName, setInterfaceName] = useState('') const { attributes, listeners, @@ -66,6 +68,7 @@ const ConnCard: React.FC = (props) => { window.electron.ipcRenderer.on('mihomoTraffic', async (_e, info: IMihomoTrafficInfo) => { setUpload(info.up) setDownload(info.down) + mihomoConfig().then(config => setInterfaceName(config['interface-name'])); const data = series data.shift() data.push(info.up + info.down) @@ -159,11 +162,12 @@ const ConnCard: React.FC = (props) => { -

- 连接 -

+

连接

+

{interfaceName}

+
= (props) => { - )} - + ) + } + ) } diff --git a/src/renderer/src/utils/ipc.ts b/src/renderer/src/utils/ipc.ts index a95178b5..d0cc1c65 100644 --- a/src/renderer/src/utils/ipc.ts +++ b/src/renderer/src/utils/ipc.ts @@ -13,6 +13,10 @@ export async function mihomoVersion(): Promise { return ipcErrorWrapper(await window.electron.ipcRenderer.invoke('mihomoVersion')) } +export async function mihomoConfig(): Promise { + return ipcErrorWrapper(await window.electron.ipcRenderer.invoke('mihomoConfig')) +} + export async function mihomoCloseConnection(id: string): Promise { return ipcErrorWrapper(await window.electron.ipcRenderer.invoke('mihomoCloseConnection', id)) } diff --git a/src/shared/types.d.ts b/src/shared/types.d.ts index 3f80cf7d..c53a9ad8 100644 --- a/src/shared/types.d.ts +++ b/src/shared/types.d.ts @@ -47,6 +47,49 @@ interface IMihomoVersion { meta: boolean } +interface IMihomoConfigs { + port: number + 'socks-port': number + 'redir-port': number + 'tproxy-port': number + 'mixed-port': number + tun: IMihomoTunDetail + 'allow-lan': boolean + 'skip-auth-prefixes': string[] + 'lan-allowed-ips': string[] + 'lan-disallowed-ips': string[] + 'bind-address': string + 'interface-name': string + mode: OutboundMode + 'unified-delay': boolean + 'log-level': LogLevel + ipv6: boolean + 'routing-mark': number + 'tcp-concurrent': boolean + 'find-process-mode': FindProcessMode + 'geodata-mode': boolean + 'global-client-fingerprint': string + 'global-ua': string + 'etag-support': boolean + 'keep-alive-idle': number + 'keep-alive-interval': number + 'disable-keep-alive': boolean + sniffing: boolean +} + +interface IMihomoTunDetail { + enable: boolean + stack: TunStack + 'auto-route': boolean + 'auto-redirect'?: boolean + 'auto-detect-interface': boolean + 'dns-hijack': string[] + device: string + mtu: number + 'inet4-address': string[] + 'inet6-address': string[] +} + interface IMihomoTrafficInfo { up: number down: number