Skip to content

Commit 7381990

Browse files
committed
feat(providers): add proxy provider traffic display support
1 parent 47556c4 commit 7381990

3 files changed

Lines changed: 59 additions & 2 deletions

File tree

frontend/interface/service/types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,12 @@ export interface ProviderItem {
188188
proxies: Clash.Proxy[];
189189
updatedAt: string;
190190
vehicleType: string;
191+
subscriptionInfo?: {
192+
Upload?: number;
193+
Download?: number;
194+
Total?: number;
195+
Expire?: number;
196+
};
191197
}
192198

193199
export interface Traffic {
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import parseTraffic from "@/utils/parse-traffic";
2+
import { LinearProgress, Tooltip } from "@mui/material";
3+
import { ProxiesProviderProps } from "./proxies-provider";
4+
5+
export const ProxiesProviderTraffic = ({ provider }: ProxiesProviderProps) => {
6+
const calc = () => {
7+
let progress = 0;
8+
let total = 0;
9+
let used = 0;
10+
11+
if (provider.subscriptionInfo) {
12+
const {
13+
Download: download,
14+
Upload: upload,
15+
Total: t,
16+
} = provider.subscriptionInfo;
17+
18+
total = t ?? 0;
19+
20+
used = (download ?? 0) + (upload ?? 0);
21+
22+
progress = (used / (total ?? 0)) * 100;
23+
}
24+
25+
return { progress, total, used };
26+
};
27+
28+
const { progress, total, used } = calc();
29+
30+
return (
31+
<div className="flex items-center justify-between gap-4">
32+
<div className="w-full">
33+
<LinearProgress variant="determinate" value={progress} />
34+
</div>
35+
36+
<Tooltip title={`${parseTraffic(used)} / ${parseTraffic(total)}`}>
37+
<div className="text-sm font-bold">
38+
{((used / total) * 100).toFixed(2)}%
39+
</div>
40+
</Tooltip>
41+
</div>
42+
);
43+
};
44+
45+
export default ProxiesProviderTraffic;

frontend/nyanpasu/src/components/providers/proxies-provider.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { useMessage } from "@/hooks/use-notification";
2+
import parseTraffic from "@/utils/parse-traffic";
23
import { Refresh } from "@mui/icons-material";
34
import LoadingButton from "@mui/lab/LoadingButton";
4-
import { Chip, Paper } from "@mui/material";
5+
import { Chip, LinearProgress, Paper, Tooltip } from "@mui/material";
56
import { ProviderItem, useClashCore } from "@nyanpasu/interface";
67
import { useLockFn } from "ahooks";
78
import dayjs from "dayjs";
89
import { useState } from "react";
910
import { useTranslation } from "react-i18next";
11+
import ProxiesProviderTraffic from "./proxies-provider-traffic";
1012

1113
export interface ProxiesProviderProps {
1214
provider: ProviderItem;
@@ -36,7 +38,7 @@ export const ProxiesProvider = ({ provider }: ProxiesProviderProps) => {
3638

3739
return (
3840
<Paper
39-
className="p-5 flex flex-col gap-2"
41+
className="p-5 flex flex-col gap-2 justify-between h-full"
4042
sx={{
4143
borderRadius: 6,
4244
}}
@@ -57,6 +59,10 @@ export const ProxiesProvider = ({ provider }: ProxiesProviderProps) => {
5759
</div>
5860
</div>
5961

62+
{provider.subscriptionInfo && (
63+
<ProxiesProviderTraffic provider={provider} />
64+
)}
65+
6066
<div className="flex items-center justify-between">
6167
<Chip
6268
className="font-bold truncate"

0 commit comments

Comments
 (0)