import { useEffect, useState } from 'react'; import { browser } from 'wxt/browser'; import { request } from '@/platform/messaging/runtime'; import type { ExtensionState, ProxyStatus } from '@/types/models'; import type { ProxyViewProps } from './types'; import { Check, Info, Monitor } from 'lucide-react'; import { Tooltip, TooltipProvider } from '@/components/ui/tooltip'; import './proxy-status.css'; export function useProxyStatus(state: ExtensionState): ProxyStatus { const [status, setStatus] = useState({ control: 'loading', label: '正在读取实际代理…' }); useEffect(() => { let revision = 0; const refresh = async () => { const current = ++revision; try { const value = await request('proxy.status'); if (current === revision) setStatus(value); } catch { if (current === revision) setStatus({ control: 'unavailable', label: '实际代理读取失败' }); } }; const listener = (message: unknown) => { if ((message as { action?: string })?.action === 'proxy.status.changed') void refresh(); }; browser.runtime.onMessage.addListener(listener); void refresh(); return () => { revision++; browser.runtime.onMessage.removeListener(listener); }; }, [state]); return status; } export function ProxyStatusBar({ status }: { status: ProxyStatus }) { const source = status.control === 'controlled_by_this_extension' ? '本扩展控制' : status.control === 'controlled_by_other_extensions' ? '其他扩展控制' : status.control === 'not_controllable' ? '浏览器限制修改,请检查管理策略' : status.control === 'controllable_by_this_extension' ? '非本扩展控制,可选择出口接管' : '状态未确认'; return
实际代理{status.label}
; } export function StartupProxyOption({ state, status, setState, run, busy }: Pick & { status: ProxyStatus }) { if (state.bridge.managedInstance?.manager === 'ytray' && state.startupProxy === 'direct') return null; const active = Boolean(status.followingStartup); const manager = state.bridge.managedInstance?.manager === 'ytray' ? 'YTray' : state.bridge.managedInstance?.manager === 'yakit' ? 'Yakit' : '浏览器'; const detail = state.startupProxy ? `${manager} · ${state.startupProxy === 'direct' ? '启动时直连' : state.startupProxy}` : `${manager}启动参数或系统默认设置`; return
; }