Skip to content

Commit 6091a64

Browse files
committed
feat: count vpn used time in frontend
1 parent d94f020 commit 6091a64

File tree

3 files changed

+41
-10
lines changed

3 files changed

+41
-10
lines changed

src/App.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { getServerIpAddress } from "./api";
2222
global.Buffer = require('buffer').Buffer;
2323

2424
function App() {
25-
const { setProfile, setMiningData, allRegions, setClosestRegion, setaAllNodes, setServerIpAddress, setServerPort } = useDaemonContext();
25+
const { setProfile, setMiningData, allRegions, setClosestRegion, setaAllNodes, setServerIpAddress, setServerPort, _vpnTimeUsedInMin } = useDaemonContext();
2626

2727
useEffect(() => {
2828
const handlePassport = async () => {
@@ -64,6 +64,9 @@ function App() {
6464
};
6565

6666
const init = async () => {
67+
const vpnTimeUsedInMin = parseInt(localStorage.getItem("vpnTimeUsedInMin") || "0");
68+
_vpnTimeUsedInMin.current = vpnTimeUsedInMin;
69+
6770
await createOrGetWallet();
6871
listenProfileVer(setProfile);
6972

src/pages/Home/index.tsx

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import "./index.css";
22
import { mappedCountryCodes } from "../../utils/regions";
3-
import { useEffect, useState } from "react";
3+
import { useEffect, useRef, useState } from "react";
44
import { useDaemonContext } from "../../providers/DaemonProvider";
55
import { getAllRegions } from "../../services/regions";
66
import BlobWrapper from '../../components/BlobWrapper';
@@ -14,16 +14,18 @@ import { useNavigate } from 'react-router-dom';
1414
import { formatMinutesToHHMM } from "../../utils/utils";
1515
import { startSilentPass, stopSilentPass } from "../../api";
1616
import PassportInfo from "../../components/PassportInfo";
17+
import { conetProvider } from "../../utils/constants";
1718

1819
interface RenderButtonProps {
1920
errorStartingSilentPass: boolean;
2021
isConnectionLoading: boolean;
2122
power: boolean;
2223
profile: any;
24+
_vpnTimeUsedInMin: number;
2325
handleTogglePower: () => void;
2426
}
2527

26-
const RenderButton = ({ errorStartingSilentPass, handleTogglePower, isConnectionLoading, power, profile }: RenderButtonProps) => {
28+
const RenderButton = ({ errorStartingSilentPass, handleTogglePower, isConnectionLoading, power, profile, _vpnTimeUsedInMin }: RenderButtonProps) => {
2729
if (isConnectionLoading)
2830
return (
2931
<div className="button-wrapper">
@@ -53,7 +55,8 @@ const RenderButton = ({ errorStartingSilentPass, handleTogglePower, isConnection
5355

5456
<div className="current-mined">
5557
<strong>Total time used</strong>
56-
<p>{formatMinutesToHHMM(parseInt(profile?.vpnTimeUsedInMin) || 0)}</p>
58+
{/* <p>{formatMinutesToHHMM(parseInt(profile?.vpnTimeUsedInMin) || 0)}</p> */}
59+
<p>{formatMinutesToHHMM(_vpnTimeUsedInMin)}</p>
5760
</div>
5861
</div>
5962
)
@@ -72,7 +75,8 @@ const RenderButton = ({ errorStartingSilentPass, handleTogglePower, isConnection
7275

7376
<div className="current-mined">
7477
<strong>Total time used</strong>
75-
<p>{formatMinutesToHHMM(parseInt(profile?.vpnTimeUsedInMin) || 0)}</p>
78+
{/* <p>{formatMinutesToHHMM(parseInt(profile?.vpnTimeUsedInMin) || 0)}</p> */}
79+
<p>{formatMinutesToHHMM(_vpnTimeUsedInMin)}</p>
7680
</div>
7781
</div>
7882

@@ -81,16 +85,37 @@ const RenderButton = ({ errorStartingSilentPass, handleTogglePower, isConnection
8185
)
8286
}
8387

88+
8489
const Home = () => {
85-
const { profile, sRegion, setSRegion, setAllRegions, allRegions, setIsRandom, getAllNodes, closestRegion } = useDaemonContext();
90+
const { profile, sRegion, setSRegion, setAllRegions, allRegions, setIsRandom, getAllNodes, closestRegion, _vpnTimeUsedInMin } = useDaemonContext();
8691
const [power, setPower] = useState<boolean>(false);
8792
const [isInitialLoading, setIsInitialLoading] = useState<boolean>(true);
8893
const [isConnectionLoading, setIsConnectionLoading] = useState<boolean>(false)
8994
const [initPercentage, setInitPercentage] = useState<number>(0);
9095
const [errorStartingSilentPass, setErrorStartingSilentPass] = useState<boolean>(false);
96+
const vpnTimeTimeout = useRef<NodeJS.Timeout>();
9197

9298
const navigate = useNavigate();
9399

100+
101+
useEffect(() => {
102+
const countMinutes = () => {
103+
const timeout = setTimeout(() => {
104+
_vpnTimeUsedInMin.current = (_vpnTimeUsedInMin.current) + 1;
105+
localStorage.setItem("vpnTimeUsedInMin", (_vpnTimeUsedInMin.current).toString());
106+
countMinutes();
107+
}, 60000)
108+
109+
vpnTimeTimeout.current = timeout;
110+
}
111+
112+
clearInterval(vpnTimeTimeout.current);
113+
114+
if (power) {
115+
countMinutes()
116+
}
117+
}, [power]);
118+
94119
useEffect(() => {
95120
const listenGetAllNodes = () => {
96121
const initpercentage = maxNodes ? currentScanNodeNumber * 100 / maxNodes : 0
@@ -250,7 +275,7 @@ const Home = () => {
250275
<img src="/assets/header-title.svg"></img>
251276
</div>
252277

253-
<RenderButton profile={profile} errorStartingSilentPass={errorStartingSilentPass} isConnectionLoading={isConnectionLoading} power={power} handleTogglePower={handleTogglePower} />
278+
<RenderButton profile={profile} errorStartingSilentPass={errorStartingSilentPass} isConnectionLoading={isConnectionLoading} power={power} handleTogglePower={handleTogglePower} _vpnTimeUsedInMin={_vpnTimeUsedInMin.current} />
254279

255280
<CopyProxyInfo />
256281

src/providers/DaemonProvider.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { createContext, useContext, ReactNode, useState, useEffect } from "react";
1+
import React, { createContext, useContext, ReactNode, useState, useEffect, useRef } from "react";
22

33
type DaemonContext = {
44
sRegion: number;
@@ -23,6 +23,7 @@ type DaemonContext = {
2323
setServerPort: (port: string) => void
2424
serverPac: string
2525
setServerPac: (pac: string) => void
26+
_vpnTimeUsedInMin: React.MutableRefObject<number>
2627
};
2728

2829
type DaemonProps = {
@@ -51,7 +52,8 @@ const defaultContextValue: DaemonContext = {
5152
serverPort: "8888",
5253
setServerPort: () => { },
5354
serverPac: "",
54-
setServerPac: () => { }
55+
setServerPac: () => { },
56+
_vpnTimeUsedInMin: { current: 0 }
5557
};
5658

5759
const Daemon = createContext<DaemonContext>(defaultContextValue);
@@ -73,6 +75,7 @@ export function DaemonProvider({ children }: DaemonProps) {
7375
const [serverIpAddress, setServerIpAddress] = useState<string>(defaultContextValue.serverIpAddress);
7476
const [serverPort, setServerPort] = useState<string>(defaultContextValue.serverPort);
7577
const [serverPac, setServerPac] = useState<string>("");
78+
const _vpnTimeUsedInMin = useRef<number>(0);
7679

7780
useEffect(() => {
7881
{
@@ -83,7 +86,7 @@ export function DaemonProvider({ children }: DaemonProps) {
8386

8487

8588
return (
86-
<Daemon.Provider value={{ sRegion, setSRegion, allRegions, setAllRegions, closestRegion, setClosestRegion, isRandom, setIsRandom, miningData, setMiningData, profile, setProfile, isMiningUp, setIsMiningUp, getAllNodes, setaAllNodes, serverIpAddress, setServerIpAddress, serverPort, setServerPort, serverPac, setServerPac }}>
89+
<Daemon.Provider value={{ sRegion, setSRegion, allRegions, setAllRegions, closestRegion, setClosestRegion, isRandom, setIsRandom, miningData, setMiningData, profile, setProfile, isMiningUp, setIsMiningUp, getAllNodes, setaAllNodes, serverIpAddress, setServerIpAddress, serverPort, setServerPort, serverPac, setServerPac, _vpnTimeUsedInMin }}>
8790
{children}
8891
</Daemon.Provider>
8992
);

0 commit comments

Comments
 (0)