Skip to content

Commit eb27bf0

Browse files
committed
Fix download speed going negative on retry
1 parent f013eed commit eb27bf0

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

frontend/src/lib/utils/progress.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,22 @@ export function progressStats(progress: Readable<utils.Progress | null>, options
1616
};
1717

1818
const series = timeSeries(finalOptions.statsInterval);
19-
19+
2020
const stats = writable({ speed: 0, eta: 0 as number | undefined });
2121
const lastStatsUpdate = { speed: 0, eta: 0 };
22-
22+
2323
progress.subscribe(($progress) => {
2424
if (!$progress) {
2525
series.clear();
26-
} else {
26+
} else {
27+
if ((series.getLast() ?? -1) > $progress.current) {
28+
series.clear();
29+
}
2730
series.addValue($progress.current);
28-
31+
2932
const speed = series.getDerivative() ?? 0;
3033
const eta = speed !== 0 ? ($progress.total - $progress.current) / speed : undefined;
31-
34+
3235
if (Date.now() - lastStatsUpdate.speed > finalOptions.updateInterval.speed) {
3336
stats.set({ speed: speed, eta: get(stats).eta });
3437
lastStatsUpdate.speed = Date.now();

frontend/src/lib/utils/timeSeries.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export interface TimeSeries {
22
addValue: (value: number) => void;
33
getAverage: () => number;
44
getDerivative: () => number | undefined;
5+
getLast: () => number | undefined;
56
clear: () => void;
67
}
78

@@ -20,6 +21,9 @@ export function timeSeries(millisecondsLifetime: number): TimeSeries {
2021
getDerivative: () => {
2122
return (items[items.length - 1].value - items[0].value) / ((items[items.length - 1].timestamp - items[0].timestamp) / 1000); // per second
2223
},
24+
getLast: () => {
25+
return items.length > 0 ? items[items.length - 1]?.value : undefined;
26+
},
2327
clear: () => {
2428
items.length = 0;
2529
},

0 commit comments

Comments
 (0)