From 28f011419c8f5e78093b0148fdae816bd1e02446 Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Thu, 1 Jan 2026 17:29:00 +1100 Subject: [PATCH] Fix progress bar --- packages/server/src/engine.ts | 13 +++++++++++++ packages/server/src/reassembler.ts | 8 ++++++++ 2 files changed, 21 insertions(+) diff --git a/packages/server/src/engine.ts b/packages/server/src/engine.ts index 2d1da12..b47638f 100644 --- a/packages/server/src/engine.ts +++ b/packages/server/src/engine.ts @@ -232,6 +232,19 @@ export class TorrentSession { } } + // Calculate granular progress + const verifiedBytes = Array.from({ length: this.bitfield.totalPieces }) + .filter((_, i) => this.bitfield!.has(i)) + .length * this.pieceLength; + + let bufferedBytes = 0; + for (const r of this.reassemblers.values()) { + bufferedBytes += r.getBufferedBytes(); + } + + const currentBytes = Math.min(this.totalSize, verifiedBytes + bufferedBytes); // Cap at total size + this.progress = Math.floor((currentBytes / this.totalSize) * 100); + this.scheduleWork(); } diff --git a/packages/server/src/reassembler.ts b/packages/server/src/reassembler.ts index 892e3d8..b89273f 100644 --- a/packages/server/src/reassembler.ts +++ b/packages/server/src/reassembler.ts @@ -35,4 +35,12 @@ export class PieceReassembler { } return missing; } + + public getBufferedBytes(): number { + let bytes = 0; + for (const data of this.blocks.values()) { + bytes += data.length; + } + return bytes; + } }