From 67b6cf5a6f5b8fc83cc1261c8c0ddd984d5e6822 Mon Sep 17 00:00:00 2001 From: skomerko <168652295+skomerko@users.noreply.github.com> Date: Sun, 27 Oct 2024 07:54:33 +0100 Subject: [PATCH] WebUI: Don't sort rows with static trackers in Trackers table Static trackers come before anything else so in this PR I made sure they are not moved when sorting Trackers table columns. PR #21609. --- src/webui/www/private/scripts/dynamicTable.js | 50 +++++++++++++++++++ .../www/private/scripts/prop-trackers.js | 3 +- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/webui/www/private/scripts/dynamicTable.js b/src/webui/www/private/scripts/dynamicTable.js index 4533274ad..1764c874c 100644 --- a/src/webui/www/private/scripts/dynamicTable.js +++ b/src/webui/www/private/scripts/dynamicTable.js @@ -1899,7 +1899,57 @@ window.qBittorrent.DynamicTable ??= (() => { this.newColumn("leeches", "", "QBT_TR(Leeches)QBT_TR[CONTEXT=TrackerListWidget]", 75, true); this.newColumn("downloaded", "", "QBT_TR(Times Downloaded)QBT_TR[CONTEXT=TrackerListWidget]", 100, true); this.newColumn("message", "", "QBT_TR(Message)QBT_TR[CONTEXT=TrackerListWidget]", 250, true); + + this.initColumnsFunctions(); }, + + initColumnsFunctions: function() { + const naturalSort = function(row1, row2) { + if (!row1.full_data._sortable || !row2.full_data._sortable) + return 0; + + const value1 = this.getRowValue(row1); + const value2 = this.getRowValue(row2); + return window.qBittorrent.Misc.naturalSortCollator.compare(value1, value2); + }; + + this.columns["url"].compareRows = naturalSort; + this.columns["status"].compareRows = naturalSort; + this.columns["message"].compareRows = naturalSort; + + const sortNumbers = function(row1, row2) { + if (!row1.full_data._sortable || !row2.full_data._sortable) + return 0; + + const value1 = this.getRowValue(row1); + const value2 = this.getRowValue(row2); + if (value1 === "") + return -1; + if (value2 === "") + return 1; + return compareNumbers(value1, value2); + }; + + this.columns["tier"].compareRows = sortNumbers; + + const sortMixed = function(row1, row2) { + if (!row1.full_data._sortable || !row2.full_data._sortable) + return 0; + + const value1 = this.getRowValue(row1); + const value2 = this.getRowValue(row2); + if (value1 === "QBT_TR(N/A)QBT_TR[CONTEXT=TrackerListWidget]") + return -1; + if (value2 === "QBT_TR(N/A)QBT_TR[CONTEXT=TrackerListWidget]") + return 1; + return compareNumbers(value1, value2); + }; + + this.columns["peers"].compareRows = sortMixed; + this.columns["seeds"].compareRows = sortMixed; + this.columns["leeches"].compareRows = sortMixed; + this.columns["downloaded"].compareRows = sortMixed; + } }); const BulkRenameTorrentFilesTable = new Class({ diff --git a/src/webui/www/private/scripts/prop-trackers.js b/src/webui/www/private/scripts/prop-trackers.js index 51861b219..0415f0ecc 100644 --- a/src/webui/www/private/scripts/prop-trackers.js +++ b/src/webui/www/private/scripts/prop-trackers.js @@ -101,7 +101,8 @@ window.qBittorrent.PropTrackers ??= (() => { seeds: (tracker.num_seeds >= 0) ? tracker.num_seeds : "QBT_TR(N/A)QBT_TR[CONTEXT=TrackerListWidget]", leeches: (tracker.num_leeches >= 0) ? tracker.num_leeches : "QBT_TR(N/A)QBT_TR[CONTEXT=TrackerListWidget]", downloaded: (tracker.num_downloaded >= 0) ? tracker.num_downloaded : "QBT_TR(N/A)QBT_TR[CONTEXT=TrackerListWidget]", - message: tracker.msg + message: tracker.msg, + _sortable: !tracker.url.startsWith("** [") }; torrentTrackersTable.updateRowData(row);