|
1 | 1 | // WRAITH Transfer - Transfer List Component |
2 | 2 |
|
3 | | -import { useEffect, useRef } from 'react'; |
| 3 | +import { useEffect, useRef, useState } from 'react'; |
4 | 4 | import { useTransferStore } from '../stores/transferStore'; |
5 | 5 | import type { TransferInfo } from '../types'; |
6 | 6 |
|
@@ -37,24 +37,23 @@ function TransferItem({ transfer }: { transfer: TransferInfo }) { |
37 | 37 | const { cancelTransfer } = useTransferStore(); |
38 | 38 | const progressPercent = Math.round(transfer.progress * 100); |
39 | 39 |
|
40 | | - // Track previous state for speed calculation |
| 40 | + // Track previous state for speed calculation using state for time initialization |
41 | 41 | const prevBytesRef = useRef(transfer.transferred_bytes); |
42 | | - const prevTimeRef = useRef(Date.now()); |
43 | | - const speedRef = useRef(0); |
| 42 | + const [prevTime, setPrevTime] = useState(() => Date.now()); |
| 43 | + const [speed, setSpeed] = useState(0); |
44 | 44 |
|
45 | 45 | useEffect(() => { |
46 | 46 | const now = Date.now(); |
47 | | - const timeDiff = (now - prevTimeRef.current) / 1000; // seconds |
| 47 | + const timeDiff = (now - prevTime) / 1000; // seconds |
48 | 48 |
|
49 | 49 | if (timeDiff >= 1.0 && transfer.status === 'in_progress') { |
50 | 50 | const bytesDiff = transfer.transferred_bytes - prevBytesRef.current; |
51 | | - speedRef.current = bytesDiff / timeDiff; |
| 51 | + setSpeed(bytesDiff / timeDiff); |
52 | 52 | prevBytesRef.current = transfer.transferred_bytes; |
53 | | - prevTimeRef.current = now; |
| 53 | + setPrevTime(now); |
54 | 54 | } |
55 | | - }, [transfer.transferred_bytes, transfer.status]); |
| 55 | + }, [transfer.transferred_bytes, transfer.status, prevTime]); |
56 | 56 |
|
57 | | - const speed = speedRef.current; |
58 | 57 | const remainingBytes = transfer.total_bytes - transfer.transferred_bytes; |
59 | 58 | const eta = speed > 0 ? remainingBytes / speed : 0; |
60 | 59 |
|
|
0 commit comments