// Transmission client module for Transmission RSS Manager // This is a basic implementation that will be extended during installation const Transmission = require('transmission'); class TransmissionClient { constructor(config) { this.config = config; this.client = new Transmission({ host: config.host || 'localhost', port: config.port || 9091, username: config.username || '', password: config.password || '', url: config.path || '/transmission/rpc' }); } // Get all torrents getTorrents() { return new Promise((resolve, reject) => { this.client.get((err, result) => { if (err) { reject(err); } else { resolve(result.torrents || []); } }); }); } // Add a torrent addTorrent(url) { return new Promise((resolve, reject) => { this.client.addUrl(url, (err, result) => { if (err) { reject(err); } else { resolve(result); } }); }); } // Remove a torrent removeTorrent(id, deleteLocalData = false) { return new Promise((resolve, reject) => { this.client.remove(id, deleteLocalData, (err, result) => { if (err) { reject(err); } else { resolve(result); } }); }); } // Start a torrent startTorrent(id) { return new Promise((resolve, reject) => { this.client.start(id, (err, result) => { if (err) { reject(err); } else { resolve(result); } }); }); } // Stop a torrent stopTorrent(id) { return new Promise((resolve, reject) => { this.client.stop(id, (err, result) => { if (err) { reject(err); } else { resolve(result); } }); }); } // Get torrent details getTorrentDetails(id) { return new Promise((resolve, reject) => { this.client.get(id, (err, result) => { if (err) { reject(err); } else { resolve(result.torrents && result.torrents.length > 0 ? result.torrents[0] : null); } }); }); } // Test connection to Transmission testConnection() { return new Promise((resolve, reject) => { this.client.sessionStats((err, result) => { if (err) { reject(err); } else { resolve({ connected: true, version: result.version, rpcVersion: result.rpcVersion }); } }); }); } } module.exports = TransmissionClient;