mirror of
https://github.com/pompurin404/mihomo-party.git
synced 2024-11-16 11:42:19 +08:00
rotate the floating window icon based on net speed
Some checks are pending
Build / windows (arm64) (push) Waiting to run
Build / windows (ia32) (push) Waiting to run
Build / windows (x64) (push) Waiting to run
Build / windows7 (ia32) (push) Waiting to run
Build / windows7 (x64) (push) Waiting to run
Build / linux (arm64) (push) Waiting to run
Build / linux (x64) (push) Waiting to run
Build / macos (arm64) (push) Waiting to run
Build / macos (x64) (push) Waiting to run
Build / updater (push) Blocked by required conditions
Build / aur-release-updater (mihomo-party) (push) Blocked by required conditions
Build / aur-release-updater (mihomo-party-bin) (push) Blocked by required conditions
Build / aur-release-updater (mihomo-party-electron) (push) Blocked by required conditions
Build / aur-release-updater (mihomo-party-electron-bin) (push) Blocked by required conditions
Build / aur-git-updater (push) Waiting to run
Build / Update WinGet Package (push) Blocked by required conditions
Build / Update Homebrew cask (push) Blocked by required conditions
Some checks are pending
Build / windows (arm64) (push) Waiting to run
Build / windows (ia32) (push) Waiting to run
Build / windows (x64) (push) Waiting to run
Build / windows7 (ia32) (push) Waiting to run
Build / windows7 (x64) (push) Waiting to run
Build / linux (arm64) (push) Waiting to run
Build / linux (x64) (push) Waiting to run
Build / macos (arm64) (push) Waiting to run
Build / macos (x64) (push) Waiting to run
Build / updater (push) Blocked by required conditions
Build / aur-release-updater (mihomo-party) (push) Blocked by required conditions
Build / aur-release-updater (mihomo-party-bin) (push) Blocked by required conditions
Build / aur-release-updater (mihomo-party-electron) (push) Blocked by required conditions
Build / aur-release-updater (mihomo-party-electron-bin) (push) Blocked by required conditions
Build / aur-git-updater (push) Waiting to run
Build / Update WinGet Package (push) Blocked by required conditions
Build / Update Homebrew cask (push) Blocked by required conditions
This commit is contained in:
parent
ba92a26a1e
commit
548ac52484
|
@ -1,4 +1,4 @@
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useMemo, useState } from 'react'
|
||||||
import MihomoIcon from './components/base/mihomo-icon'
|
import MihomoIcon from './components/base/mihomo-icon'
|
||||||
import { calcTraffic } from './utils/calc'
|
import { calcTraffic } from './utils/calc'
|
||||||
import { showContextMenu, triggerMainWindow } from './utils/ipc'
|
import { showContextMenu, triggerMainWindow } from './utils/ipc'
|
||||||
|
@ -8,13 +8,27 @@ import { useControledMihomoConfig } from './hooks/use-controled-mihomo-config'
|
||||||
const FloatingApp: React.FC = () => {
|
const FloatingApp: React.FC = () => {
|
||||||
const { appConfig } = useAppConfig()
|
const { appConfig } = useAppConfig()
|
||||||
const { controledMihomoConfig } = useControledMihomoConfig()
|
const { controledMihomoConfig } = useControledMihomoConfig()
|
||||||
const { sysProxy } = appConfig || {}
|
const { sysProxy, spinFloatingIcon = true } = appConfig || {}
|
||||||
const { tun } = controledMihomoConfig || {}
|
const { tun } = controledMihomoConfig || {}
|
||||||
const sysProxyEnabled = sysProxy?.enable
|
const sysProxyEnabled = sysProxy?.enable
|
||||||
const tunEnabled = tun?.enable
|
const tunEnabled = tun?.enable
|
||||||
|
|
||||||
const [upload, setUpload] = useState(0)
|
const [upload, setUpload] = useState(0)
|
||||||
const [download, setDownload] = useState(0)
|
const [download, setDownload] = useState(0)
|
||||||
|
const slowest = 10
|
||||||
|
const fastest = 0.1
|
||||||
|
|
||||||
|
const spinDuration = useMemo(() => {
|
||||||
|
let duration = upload + download === 0 ? slowest : 409600 / (upload + download)
|
||||||
|
if (duration > slowest) {
|
||||||
|
duration = slowest
|
||||||
|
}
|
||||||
|
if (duration < fastest) {
|
||||||
|
duration = fastest
|
||||||
|
}
|
||||||
|
return duration
|
||||||
|
}, [upload, download])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
window.electron.ipcRenderer.on('mihomoTraffic', async (_e, info: IMihomoTrafficInfo) => {
|
window.electron.ipcRenderer.on('mihomoTraffic', async (_e, info: IMihomoTrafficInfo) => {
|
||||||
setUpload(info.up)
|
setUpload(info.up)
|
||||||
|
@ -24,6 +38,7 @@ const FloatingApp: React.FC = () => {
|
||||||
window.electron.ipcRenderer.removeAllListeners('mihomoTraffic')
|
window.electron.ipcRenderer.removeAllListeners('mihomoTraffic')
|
||||||
}
|
}
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="app-drag h-[100vh] w-[100vw] overflow-hidden">
|
<div className="app-drag h-[100vh] w-[100vw] overflow-hidden">
|
||||||
<div className="floating-bg border-1 border-divider flex rounded-full bg-content1 h-[calc(100%-2px)] w-[calc(100%-2px)]">
|
<div className="floating-bg border-1 border-divider flex rounded-full bg-content1 h-[calc(100%-2px)] w-[calc(100%-2px)]">
|
||||||
|
@ -36,6 +51,7 @@ const FloatingApp: React.FC = () => {
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
triggerMainWindow()
|
triggerMainWindow()
|
||||||
}}
|
}}
|
||||||
|
style={spinFloatingIcon ? { animation: `spin ${spinDuration}s linear infinite` } : {}}
|
||||||
className={`app-nodrag cursor-pointer floating-thumb ${tunEnabled ? 'bg-secondary' : sysProxyEnabled ? 'bg-primary' : 'bg-default'} hover:opacity-hover rounded-full h-[calc(100%-4px)] aspect-square`}
|
className={`app-nodrag cursor-pointer floating-thumb ${tunEnabled ? 'bg-secondary' : sysProxyEnabled ? 'bg-primary' : 'bg-default'} hover:opacity-hover rounded-full h-[calc(100%-4px)] aspect-square`}
|
||||||
>
|
>
|
||||||
<MihomoIcon className="floating-icon text-primary-foreground h-full leading-full text-[22px] mx-auto" />
|
<MihomoIcon className="floating-icon text-primary-foreground h-full leading-full text-[22px] mx-auto" />
|
||||||
|
|
|
@ -43,6 +43,7 @@ const GeneralConfig: React.FC = () => {
|
||||||
proxyInTray = true,
|
proxyInTray = true,
|
||||||
disableTray = false,
|
disableTray = false,
|
||||||
showFloatingWindow: showFloating = false,
|
showFloatingWindow: showFloating = false,
|
||||||
|
spinFloatingIcon = true,
|
||||||
useWindowFrame = false,
|
useWindowFrame = false,
|
||||||
autoQuitWithoutCore = false,
|
autoQuitWithoutCore = false,
|
||||||
autoQuitWithoutCoreDelay = 60,
|
autoQuitWithoutCoreDelay = 60,
|
||||||
|
@ -195,6 +196,16 @@ const GeneralConfig: React.FC = () => {
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
|
<SettingItem title="根据网速旋转悬浮窗图标" divider>
|
||||||
|
<Switch
|
||||||
|
size="sm"
|
||||||
|
isSelected={spinFloatingIcon}
|
||||||
|
onValueChange={async (v) => {
|
||||||
|
await patchAppConfig({ spinFloatingIcon: v })
|
||||||
|
window.electron.ipcRenderer.send('updateFloatingWindow')
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</SettingItem>
|
||||||
{showFloating && (
|
{showFloating && (
|
||||||
<SettingItem title="禁用托盘图标" divider>
|
<SettingItem title="禁用托盘图标" divider>
|
||||||
<Switch
|
<Switch
|
||||||
|
|
1
src/shared/types.d.ts
vendored
1
src/shared/types.d.ts
vendored
|
@ -212,6 +212,7 @@ interface IAppConfig {
|
||||||
proxyCols: 'auto' | '1' | '2' | '3' | '4'
|
proxyCols: 'auto' | '1' | '2' | '3' | '4'
|
||||||
connectionDirection: 'asc' | 'desc'
|
connectionDirection: 'asc' | 'desc'
|
||||||
connectionOrderBy: 'time' | 'upload' | 'download' | 'uploadSpeed' | 'downloadSpeed'
|
connectionOrderBy: 'time' | 'upload' | 'download' | 'uploadSpeed' | 'downloadSpeed'
|
||||||
|
spinFloatingIcon?: boolean
|
||||||
disableTray?: boolean
|
disableTray?: boolean
|
||||||
showFloatingWindow?: boolean
|
showFloatingWindow?: boolean
|
||||||
connectionCardStatus?: CardStatus
|
connectionCardStatus?: CardStatus
|
||||||
|
|
Loading…
Reference in New Issue
Block a user