Deluge uses a JSON-RPC HTTP API exposed by the Web UI plugin (port 8112),
not the daemon binary protocol (port 58846). The integration logs in,
fetches completed torrents, filters by configured labels, and enqueues
them the same way as the qBittorrent poller.
- DelugeConfig in config.rs (enabled, url, password, poll_interval_secs, labels)
- src/publisher/deluge.rs: DelugeClient with login/_session_id cookie
handling, core.get_torrents_status, label + is_finished filtering
- Watcher: deluge_poll_loop alongside qb_poll_loop; each only starts
if its respective client is configured/enabled
- Example config updated with deluge section and Web UI port note
- NetworkConfig/ProxyConfig in config.rs: mode=direct|tor|i2p|socks5
with socks5_addr() helper that maps tor→9050, i2p→4446, socks5→url
- build_http_client() routes reqwest through SOCKS5 when configured
- build_nostr_opts() routes nostr-sdk WebSocket connections through
SOCKS5 using Connection::new().proxy(addr)
- Shared http_client passed to Enricher and BlossomClient so proxy
applies to TMDB and Blossom blob fetches as well
- nostr_opts passed to Reader, WotBuilder, ProfileFetcher
- Dashboard: network status card showing proxy mode, listen address,
IPv4/IPv6; relay section now shows X connected / Y configured
- Publishers: rename vouch form to "Override publisher trust", add
clear note that this is local-only (not broadcast to Nostr), explain
WoT comes from NIP-02 kind 3; rename column headers for clarity
- Example and dev configs updated with network.proxy section
- BlossomClient: unauthenticated fetch, kind 24242 signed upload
- Parser: capture `url` tag from NIP-35 events as blossom_url
- Reader: spawn background fetch + cache of blob when url tag present
- Writer: include `url` tag in published NIP-35 events when blob uploaded
- Watcher: upload .torrent file to Blossom before publishing, attach URL
- Migration 007: adds blossom_url + torrent_blob columns to torrents
- Route GET /torrent/<info_hash>.torrent serves cached blobs
- Config: blossom.enabled + blossom.server (disabled by default)