From 4ea44184d1a698afdf1b850e55ba24ba028ac605 Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Sun, 30 Aug 2026 11:52:08 +0300 Subject: [PATCH 1/3] torrent client start/stop/trackerDetails --- contrib/webconsole/torrent-rpc.js | 158 ++++++++++++++++--------- contrib/webconsole/torrent_client.html | 139 ++++++++++++++-------- 2 files changed, 193 insertions(+), 104 deletions(-) diff --git a/contrib/webconsole/torrent-rpc.js b/contrib/webconsole/torrent-rpc.js index 0d9b5da9..5023b835 100644 --- a/contrib/webconsole/torrent-rpc.js +++ b/contrib/webconsole/torrent-rpc.js @@ -1,67 +1,117 @@ class TorrentClient { - constructor(host = '127.0.0.1', port = 9191, path = 'mytorrents') { - this.host = host; - this.port = port; - this.path = path; - } + constructor(host = "127.0.0.1", port = 9191, path = "mytorrents") { + this.host = host; + this.port = port; + this.path = path; + } - setConnection(host, port, path) { - this.host = host; - this.port = port; - this.path = path; - } + setConnection(host, port, path) { + this.host = host; + this.port = port; + this.path = path; + } - getEndpoint() { - return `http://${this.host}:${this.port}${this.path}`; - } + getEndpoint() { + return `http://${this.host}:${this.port}${this.path}`; + } - getStatusString(status) { - switch (status) { - case 4: return 'DOWNLOADING'; - case 6: return 'SEEDING'; - case 0: return 'STOPPED'; - case 2: return 'CHECKING'; - default: return 'QUEUED'; - } + getStatusString(status) { + switch (status) { + case 4: + return "DOWNLOADING"; + case 6: + return "SEEDING"; + case 0: + return "STOPPED"; + case 2: + return "CHECKING"; + default: + return "QUEUED"; } + } - formatBytes(bytesPerSec) { - if (!bytesPerSec) return '0 B/s'; - if (bytesPerSec > 1024 * 1024) { - return (bytesPerSec / (1024 * 1024)).toFixed(2) + ' MB/s'; - } - return (bytesPerSec / 1024).toFixed(2) + ' KB/s'; + formatBytes(bytesPerSec) { + if (!bytesPerSec) return "0 B/s"; + if (bytesPerSec > 1024 * 1024) { + return (bytesPerSec / (1024 * 1024)).toFixed(2) + " MB/s"; } + return (bytesPerSec / 1024).toFixed(2) + " KB/s"; + } - async addTorrent(b64metainfo) { - const res = await fetch(this.getEndpoint(), { - method: "POST", - body: JSON.stringify({ 'method': 'torrent-add', 'arguments': { 'metainfo': b64metainfo } }), - headers: { 'Content-Type': 'application/json' } - }); - return res.json(); - } + async addTorrent(b64metainfo) { + const res = await fetch(this.getEndpoint(), { + method: "POST", + body: JSON.stringify({ + method: "torrent-add", + arguments: { metainfo: b64metainfo }, + }), + headers: { "Content-Type": "application/json" }, + }); + return res.json(); + } - async removeTorrent(id) { - const res = await fetch(this.getEndpoint(), { - method: "POST", - body: JSON.stringify({ 'method': 'torrent-remove', 'arguments': { 'ids': [id], 'delete-local-data': true } }), - headers: { 'Content-Type': 'application/json' } - }); - return res.json(); - } + async removeTorrent(id) { + const res = await fetch(this.getEndpoint(), { + method: "POST", + body: JSON.stringify({ + method: "torrent-remove", + arguments: { ids: [id], "delete-local-data": true }, + }), + headers: { "Content-Type": "application/json" }, + }); + return res.json(); + } - async getTorrents() { - const res = await fetch(this.getEndpoint(), { - method: "POST", - body: JSON.stringify({ - 'method': 'torrent-get', - 'arguments': { "fields": ["id", "name", "status", "rateDownload", "rateUpload", "totalSize", "percentDone", "files", "peers", "trackers"] } - }), - headers: { 'Content-Type': 'application/json' } - }); - return res.json(); - } + async getTorrents() { + const res = await fetch(this.getEndpoint(), { + method: "POST", + body: JSON.stringify({ + method: "torrent-get", + arguments: { + fields: [ + "id", + "name", + "status", + "rateDownload", + "rateUpload", + "totalSize", + "percentDone", + "files", + "peers", + "trackers", + "trackerStats", + ], + }, + }), + headers: { "Content-Type": "application/json" }, + }); + return res.json(); + } + async stopTorrent(ids = []) { + const res = await fetch(this.getEndpoint(), { + method: "POST", + body: JSON.stringify({ + method: "torrent-stop", + arguments: ids.length ? { ids } : {}, + tag: 666, + }), + headers: { "Content-Type": "application/json" }, + }); + return res.json(); + } + + async startTorrent(ids = []) { + const res = await fetch(this.getEndpoint(), { + method: "POST", + body: JSON.stringify({ + method: "torrent-start", + arguments: ids.length ? { ids } : {}, + tag: 666, + }), + headers: { "Content-Type": "application/json" }, + }); + return res.json(); + } } //window.tjs = new TorrentClient(); diff --git a/contrib/webconsole/torrent_client.html b/contrib/webconsole/torrent_client.html index 8b3a645e..974909ca 100644 --- a/contrib/webconsole/torrent_client.html +++ b/contrib/webconsole/torrent_client.html @@ -4,8 +4,10 @@

_

+ + @@ -18,12 +20,22 @@

Trackers (0):

+

trackerStats:

+