"use strict"; class trdom_torrentcontrol { #logcb; #log(loglevel, msg) { if (this.#logcb !== null) { this.#logcb('trdom_servermanager', loglevel, msg); } } #element = document.createElement('div'); getElement() { return this.#element; } #hash; #server; //TODO: remove #getKnownTorrents; handleEvent(e) { switch (e.type) { case 'click': if (e.currentTarget.hasAttributeNS('trweb', 'torrentlistfield')) { switch (e.currentTarget.getAttributeNS('trweb', 'torrentlistfield')) { case 'start': this.#server.torrent_start(this.#hash); e.stopPropagation(); break; case 'pause': this.#server.torrent_pause(this.#hash); e.stopPropagation(); break; case 'magnet': let magneturl; for (const [srv, data] of Object.entries(this.#getKnownTorrents()[this.#hash].servers)) { if (data.magnetLink != null) { magneturl = data.magnetLink; break; } } if (magneturl != null) { this.#server.torrent_add_url(magneturl, false, null); } else { this.#log(3, `Couldn't find magnet link! ${JSON.stringify(this.#getKnownTorrents()[this.#hash].servers)}`); } e.stopPropagation(); break; case 'download': e.stopPropagation(); window.alert('not implemented'); break; } } } } constructor(hash, server, logcb, getKnownTorrents) { this.#hash = hash; this.#server = server; this.#logcb = logcb; this.#getKnownTorrents = getKnownTorrents; let srv = server.name; // statusbar let element_statusbar = document.createElement('div'); element_statusbar.classList.add('trweb_torrentliststatusbar'); // Current status and percentage let element_status = document.createElement('div'); element_status.classList.add('trweb_torrentliststatus', 'col-12'); element_status.setAttributeNS('trweb', 'server', srv); element_status.setAttributeNS('trweb', 'torrentlistfield', 'status'); let element_start = document.createElement('div'); element_start.classList.add('trweb_torrentlistcontrol', 'col-4'); element_start.setAttributeNS('trweb', 'server', srv); element_start.setAttributeNS('trweb', 'torrent', this.#hash); element_start.setAttributeNS('trweb', 'torrentlistfield', 'start'); element_start.appendChild(document.createTextNode("Start")); element_start.addEventListener("click", this); let element_pause = document.createElement('div'); element_pause.classList.add('trweb_torrentlistcontrol', 'col-4'); element_pause.setAttributeNS('trweb', 'server', srv); element_pause.setAttributeNS('trweb', 'torrent', this.#hash); element_pause.setAttributeNS('trweb', 'torrentlistfield', 'pause'); element_pause.appendChild(document.createTextNode("Pause")); element_pause.addEventListener("click", this); // Download by magnet let element_magnet = document.createElement('div'); element_magnet.classList.add('trweb_torrentlistmagnet', 'col'); element_magnet.setAttributeNS('trweb', 'server', srv); element_magnet.setAttributeNS('trweb', 'torrent', this.#hash); element_magnet.setAttributeNS('trweb', 'torrentlistfield', 'magnet'); element_magnet.appendChild(document.createTextNode(`[${srv}] Magnet`)); element_magnet.addEventListener("click", this); // Download by torrent file let element_download = document.createElement('div'); element_download.classList.add('trweb_torrentlistdownload', 'col'); element_download.setAttributeNS('trweb', 'server', srv); element_download.setAttributeNS('trweb', 'torrent', this.#hash); element_download.setAttributeNS('trweb', 'torrentlistfield', 'download'); element_download.appendChild(document.createTextNode(`[${srv}] Get torrent`)); element_download.addEventListener("click", this); // row container let element_serverrow = document.createElement('div'); element_serverrow.classList.add('trweb_torrentlistserverrow', 'row'); element_serverrow.appendChild(element_status); element_serverrow.appendChild(element_start); element_serverrow.appendChild(element_pause); element_serverrow.appendChild(element_magnet); element_serverrow.appendChild(element_download); this.#element.classList.add('trweb_torrentlistserver', 'col-2', 'container'); this.#element.setAttributeNS('trweb', 'torrentlistfield', 'server'); this.#element.setAttributeNS('trweb', 'server', srv); this.#element.element_statusbar = element_statusbar; this.#element.appendChild(element_statusbar); this.#element.element_row = element_serverrow; this.#element.appendChild(element_serverrow); this.#element.element_status = element_status; this.#element.element_start = element_start; this.#element.element_pause = element_pause; this.#element.element_magnet = element_magnet; this.#element.element_download = element_download; } }