Files
trweb/js/trdom_torrentmanager.js

64 lines
2.0 KiB
JavaScript
Raw Normal View History

"use strict";
class trdom_torrentmanager extends EventTarget {
#logcb;
#log(loglevel, msg) {
if (this.#logcb !== null) {
this.#logcb('trdom_torrentmanager', loglevel, msg);
}
}
#element = document.createElement('div');
getElement() {
return this.#element;
}
#torrentDB = {};
get torrents() {
return this.#torrentDB;
}
constructor(logcb = null) {
super();
this.#logcb = logcb;
this.#element.classList.add('trweb_torrentlistview', 'container-fluid');
}
handleEvent(e) {
this.#log(6, `Handling event of type ${e.type}`);
switch (e.type) {
// if we get info of a torrent that we don't have in the DB, create it,
// then alert trdom_servermanager so it can add server controls to it
// that'll also handle alerting trtorrents of new servers
case 'torrent-update':
let hash = e.detail.torrentHash;
if (this.#torrentDB[hash] == null) {
let torrent = new trtorrent(hash);
this.#torrentDB[hash] = torrent;
this.#element.appendChild(torrent.element);
this.dispatchEvent(new CustomEvent(
'torrent-created',
{
detail: {
torrentHash: hash,
torrentObject: torrent,
torrentInfo: e.detail.torrentInfo,
serverName: e.detail.serverName,
serverObject: e.detail.serverObject
}
}
));
}
break;
case 'torrentserver-added':
let server = e.detail.serverObject;
// see this handler
server.addEventListener('torrent-update', this);
break;
default:
this.#log(5, `Event type ${e.type} not supported`);
break;
}
}
}