Do sorting

It be slow
This commit is contained in:
2025-10-13 15:50:31 +02:00
parent cabc0fbaf1
commit 1c798fb899
4 changed files with 30 additions and 8 deletions

View File

@@ -2,7 +2,7 @@
class trdom_menubar { class trdom_menubar {
#element = document.createElement('div'); #element = document.createElement('div');
getElement() { get element() {
return this.#element; return this.#element;
} }

View File

@@ -9,7 +9,7 @@ class trdom_torrentmanager extends EventTarget {
} }
#element = document.createElement('div'); #element = document.createElement('div');
getElement() { get element() {
return this.#element; return this.#element;
} }
@@ -24,6 +24,17 @@ class trdom_torrentmanager extends EventTarget {
this.#element.classList.add('trweb_torrentlistview', 'container-fluid'); 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) { handleEvent(e) {
this.#log(6, `Handling event of type ${e.type}`); this.#log(6, `Handling event of type ${e.type}`);
switch (e.type) { switch (e.type) {
@@ -32,7 +43,9 @@ class trdom_torrentmanager extends EventTarget {
if (this.#torrentDB[initHash] == null) { if (this.#torrentDB[initHash] == null) {
let torrentCreated = new trtorrent(initHash); let torrentCreated = new trtorrent(initHash);
this.#torrentDB[initHash] = torrentCreated; 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)) { for (const [srv, control] of Object.entries(e.detail.torrentControls)) {
torrentCreated.addControl(srv, control) torrentCreated.addControl(srv, control)
} }
@@ -42,6 +55,9 @@ class trdom_torrentmanager extends EventTarget {
window.alert('We be ded, check console'); window.alert('We be ded, check console');
} }
break; break;
case 'torrent-renamed':
this.#putToPlace(e.target);
break;
case 'torrentserver-added': case 'torrentserver-added':
let addedServer = e.detail.serverObject; let addedServer = e.detail.serverObject;
for (const [hash, torrent] of Object.entries(this.#torrentDB)) { for (const [hash, torrent] of Object.entries(this.#torrentDB)) {

View File

@@ -50,6 +50,12 @@ class trtorrent extends EventTarget {
case 'torrent-updated': case 'torrent-updated':
if (this.#name == null) { if (this.#name == null) {
this.name = e.detail.torrentInfo.name; this.name = e.detail.torrentInfo.name;
let nameChangeEvent = new CustomEvent('torrent-renamed', {
detail: {
torrentHash: this.#hash
}
});
this.dispatchEvent(nameChangeEvent);
} }
break; break;
} }

View File

@@ -72,13 +72,13 @@ class trweb {
} }
#updateTorrentDisplay(torrent) { #updateTorrentDisplay(torrent) {
let txt_name = torrent.getElement().element_name; let txt_name = torrent.element.element_name;
nukeChildren(txt_name); nukeChildren(txt_name);
txt_name.appendChild(document.createTextNode(torrent.name)); txt_name.appendChild(document.createTextNode(torrent.name));
for (const srv of Object.keys(this.#dom_servermanager.getServers())) { for (const srv of Object.keys(this.#dom_servermanager.getServers())) {
let control = torrent.getControl(srv); let control = torrent.getControl(srv);
let control_element = control.getElement(); let control_element = control.element;
let status = control_element.element_status; let status = control_element.element_status;
control_element.classList.remove( control_element.classList.remove(
@@ -155,8 +155,8 @@ class trweb {
this.#container = document.getElementById(this.#container); this.#container = document.getElementById(this.#container);
this.#container.classList.add('trweb_container'); this.#container.classList.add('trweb_container');
this.#container.appendChild(this.#dom_menubar.getElement()); this.#container.appendChild(this.#dom_menubar.element);
this.#container.appendChild(this.#dom_torrentmanagger.getElement()); this.#container.appendChild(this.#dom_torrentmanagger.element);
this.#container.appendChild(this.#guiFooter); this.#container.appendChild(this.#guiFooter);
this.#dom_servermanager.loadServers(); this.#dom_servermanager.loadServers();
@@ -192,7 +192,7 @@ class trweb {
list.sort((a, b) => a.name.localeCompare(b.name)); list.sort((a, b) => a.name.localeCompare(b.name));
for (const torrent of list) { for (const torrent of list) {
this.#dom_torrentmanagger.getElement().appendChild(torrent.element); this.#dom_torrentmanagger.element.appendChild(torrent.element);
} }
return list; return list;
} }