From 1c798fb89937a4cb033f8602269ef3e5c0972dab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Feh=C3=A9r=20Roland?= Date: Mon, 13 Oct 2025 15:50:31 +0200 Subject: [PATCH] Do sorting It be slow --- js/trdom_menubar.js | 2 +- js/trdom_torrentmanager.js | 20 ++++++++++++++++++-- js/trtorrent.js | 6 ++++++ js/trweb.js | 10 +++++----- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/js/trdom_menubar.js b/js/trdom_menubar.js index 0afb637..9373262 100644 --- a/js/trdom_menubar.js +++ b/js/trdom_menubar.js @@ -2,7 +2,7 @@ class trdom_menubar { #element = document.createElement('div'); - getElement() { + get element() { return this.#element; } diff --git a/js/trdom_torrentmanager.js b/js/trdom_torrentmanager.js index 8251e51..9053fe8 100644 --- a/js/trdom_torrentmanager.js +++ b/js/trdom_torrentmanager.js @@ -9,7 +9,7 @@ class trdom_torrentmanager extends EventTarget { } #element = document.createElement('div'); - getElement() { + get element() { return this.#element; } @@ -24,6 +24,17 @@ class trdom_torrentmanager extends EventTarget { this.#element.classList.add('trweb_torrentlistview', 'container-fluid'); } + #putToPlace(torrent) { + let sortedTorrents = Object.values(this.#torrentDB).sort((a, b) => a.name.localeCompare(b.name)); + let previous = sortedTorrents.find((val, ind, arr) => val.name.localeCompare(torrent.name) > 0); + if (previous == undefined) { + this.element.appendChild(torrent.element); + } + else { + this.element.insertBefore(torrent.element, previous.element); + } + } + handleEvent(e) { this.#log(6, `Handling event of type ${e.type}`); switch (e.type) { @@ -32,7 +43,9 @@ class trdom_torrentmanager extends EventTarget { if (this.#torrentDB[initHash] == null) { let torrentCreated = new trtorrent(initHash); this.#torrentDB[initHash] = torrentCreated; - this.#element.appendChild(torrentCreated.element); + torrentCreated.addEventListener('torrent-renamed', this); + this.#putToPlace(torrentCreated); + //this.#element.appendChild(torrentCreated.element); for (const [srv, control] of Object.entries(e.detail.torrentControls)) { torrentCreated.addControl(srv, control) } @@ -42,6 +55,9 @@ class trdom_torrentmanager extends EventTarget { window.alert('We be ded, check console'); } break; + case 'torrent-renamed': + this.#putToPlace(e.target); + break; case 'torrentserver-added': let addedServer = e.detail.serverObject; for (const [hash, torrent] of Object.entries(this.#torrentDB)) { diff --git a/js/trtorrent.js b/js/trtorrent.js index b4378c5..3f391b8 100644 --- a/js/trtorrent.js +++ b/js/trtorrent.js @@ -50,6 +50,12 @@ class trtorrent extends EventTarget { case 'torrent-updated': if (this.#name == null) { this.name = e.detail.torrentInfo.name; + let nameChangeEvent = new CustomEvent('torrent-renamed', { + detail: { + torrentHash: this.#hash + } + }); + this.dispatchEvent(nameChangeEvent); } break; } diff --git a/js/trweb.js b/js/trweb.js index 85b5a02..85d64cc 100644 --- a/js/trweb.js +++ b/js/trweb.js @@ -72,13 +72,13 @@ class trweb { } #updateTorrentDisplay(torrent) { - let txt_name = torrent.getElement().element_name; + let txt_name = torrent.element.element_name; nukeChildren(txt_name); txt_name.appendChild(document.createTextNode(torrent.name)); for (const srv of Object.keys(this.#dom_servermanager.getServers())) { let control = torrent.getControl(srv); - let control_element = control.getElement(); + let control_element = control.element; let status = control_element.element_status; control_element.classList.remove( @@ -155,8 +155,8 @@ class trweb { this.#container = document.getElementById(this.#container); this.#container.classList.add('trweb_container'); - this.#container.appendChild(this.#dom_menubar.getElement()); - this.#container.appendChild(this.#dom_torrentmanagger.getElement()); + this.#container.appendChild(this.#dom_menubar.element); + this.#container.appendChild(this.#dom_torrentmanagger.element); this.#container.appendChild(this.#guiFooter); this.#dom_servermanager.loadServers(); @@ -192,7 +192,7 @@ class trweb { list.sort((a, b) => a.name.localeCompare(b.name)); for (const torrent of list) { - this.#dom_torrentmanagger.getElement().appendChild(torrent.element); + this.#dom_torrentmanagger.element.appendChild(torrent.element); } return list; }