From 45b0d71dd0860dd2c4683f3f0ba2648be1e2d4fd Mon Sep 17 00:00:00 2001 From: Sucukdeluxe Date: Mon, 2 Mar 2026 12:53:54 +0100 Subject: [PATCH] Sort pinned packages by progress: most completed items first Active packages are now sorted by completed item count (descending), then by downloaded bytes, so packages with real download progress appear above packages still in link resolution phase. Co-Authored-By: Claude Opus 4.6 --- package.json | 2 +- src/renderer/App.tsx | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 81dcdbf..f77477b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "real-debrid-downloader", - "version": "1.4.84", + "version": "1.4.85", "description": "Real-Debrid Downloader Desktop (Electron + React + TypeScript)", "main": "build/main/main/main.js", "author": "Sucukdeluxe", diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index 48ec770..6988273 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -688,6 +688,19 @@ export function App(): ReactElement { if (active.length === 0 || active.length === packages.length) { return packages; } + // Sort active packages: most progress first (completed items, then downloaded bytes) + active.sort((a, b) => { + const aItems = a.itemIds.map((id) => snapshot.session.items[id]).filter(Boolean); + const bItems = b.itemIds.map((id) => snapshot.session.items[id]).filter(Boolean); + const aCompleted = aItems.filter((i) => i.status === "completed").length; + const bCompleted = bItems.filter((i) => i.status === "completed").length; + if (aCompleted !== bCompleted) { + return bCompleted - aCompleted; + } + const aBytes = aItems.reduce((s, i) => s + (i.downloadedBytes || 0), 0); + const bBytes = bItems.reduce((s, i) => s + (i.downloadedBytes || 0), 0); + return bBytes - aBytes; + }); return [...active, ...rest]; }, [packages, snapshot.session.running, snapshot.session.items]);