Compare commits

...

2 Commits

Author SHA1 Message Date
b2f155c0b4 Use EventTarget
Getting torrent info from servers now uses Events
instead of magic callbacks.
2025-10-09 13:08:24 +02:00
4986ee0ea5 Logging: filter for loglevel 2025-10-09 13:07:51 +02:00
3 changed files with 64 additions and 8 deletions

View File

@@ -1,6 +1,6 @@
"use strict";
class trdom_servermanager {
class trdom_servermanager extends EventTarget {
#logcb;
#log(loglevel, msg) {
@@ -14,7 +14,12 @@ class trdom_servermanager {
return this.#servers;
}
#registerServer;
#registerServer = function(name, initdata) {
let server = new trserver(initdata, function(msg) {this.#logcb(`server:${name}`, 6, msg);}.bind(this));
this.#servers[name] = server;
server.addEventListener('torrent-update', this);
server.refreshTorrentList();
}
#loadcb;
#loadServers() {
@@ -49,12 +54,38 @@ class trdom_servermanager {
}
constructor (loadcb = null, savecb = null, logcb = null, registerServer = null) {
super();
this.#loadcb = loadcb;
this.#savecb = savecb;
this.#logcb = logcb
this.#registerServer = registerServer;
//this.#registerServer = registerServer;
//this.#servers = this.#loadServers();
}
handleEvent(e) {
this.#log(6, `Handling event of type ${e.type}`);
switch (e.type) {
case 'torrent-update':
for (const [srv, server] of Object.entries(this.#servers)) {
if (e.target == server) {
let newEvent = new CustomEvent('torrent-update', {
'detail': {
'torrentHash': e.detail.torrentHash,
'torrentInfo': e.detail.torrentInfo,
'serverName': srv
}
});
this.dispatchEvent(newEvent);
return;
}
}
this.#log(2, `Got update event for unknown server:\n${JSON.stringify(e.detail)}`);
break;
default:
this.#log(5, `Event type ${e.type} not supported`);
break;
}
}
}

View File

@@ -1,6 +1,6 @@
"use strict";
class trserver {
class trserver extends EventTarget {
#rpcurl;
#authHeader;
#sessionHeader;
@@ -9,9 +9,18 @@ class trserver {
#isOnline = false;
#logger = function(msg) {};
#torrentCallback = function(hash, torrentInfo) {};
#torrentCallback = function(hash, torrentInfo) {
let e = new CustomEvent('torrent-update', {
'detail': {
'torrentHash': hash,
'torrentInfo': torrentInfo
}
});
this.dispatchEvent(e);
};
constructor (initdata, logger, tcb) {
constructor (initdata, logger = null, tcb = null) {
super();
this.#rpcurl = initdata.rpcurl;
if (logger != null) {
this.#logger = logger;

View File

@@ -8,7 +8,11 @@ class trweb {
#loadcb = function(key) {return localStorage.getItem(`trweb.${key}`)};
#savecb = function(key, value) {localStorage.setItem(`trweb.${key}`, value)};
#logger = function(msg) {};
#logcb = function(module, loglevel, msg) {this.#logger(`${module}: ${msg}`)}.bind(this);
#logcb = function(module, loglevel, msg) {
if (loglevel <= 5) {
this.#logger(`${module}: ${msg}`);
}
}.bind(this);
#timer;
@@ -30,7 +34,9 @@ class trweb {
this.#logger = logger;
}
this.#dom_servermanager = new trdom_servermanager(this.#loadcb, this.#savecb, this.#logcb, this.#registerServer)
this.#dom_servermanager = new trdom_servermanager(this.#loadcb, this.#savecb, this.#logcb, this.#registerServer);
this.#dom_servermanager.addEventListener('torrent-update', this);
this.#guiFooter = document.createElement('div');
this.#guiFooter.classList.add('trweb_footer');
@@ -178,6 +184,16 @@ class trweb {
this.#dom_servermanager.saveServers();
this.setTimer();
break;
case 'torrent-update':
let mergedTorrentInfo = this.#knownTorrents[e.detail.torrentHash];
if (mergedTorrentInfo == null) {
mergedTorrentInfo = this.#createTorrentEntry(e.detail.torrentHash);
}
mergedTorrentInfo.setStatus(e.detail.serverName, e.detail.torrentInfo);
mergedTorrentInfo.name = e.detail.torrentInfo.name;
this.#updateTorrentDisplay(mergedTorrentInfo);
break;
}
}