From 9eeb8133af479d48f04d67949b2c99b23ec5c24a Mon Sep 17 00:00:00 2001 From: Feross Aboukhadijeh Date: Wed, 11 May 2016 18:36:20 +0200 Subject: [PATCH] Fix duplicate torrent handling WebTorrent 0.91 changed how duplicate torrents are handled, which broke handling in WebTorrent Desktop. After this PR: - No more try-catch on client.add -- this has never thrown errors. - No check for duplicate torrent.key value since client.add no longer returns the same torrent object when adding a duplicate torrent. It emits 'error' instead, and that case is already handled :) --- renderer/index.js | 18 +++++++++--------- renderer/webtorrent.js | 21 ++++++--------------- 2 files changed, 15 insertions(+), 24 deletions(-) diff --git a/renderer/index.js b/renderer/index.js index 2779780c..f7e076a9 100644 --- a/renderer/index.js +++ b/renderer/index.js @@ -724,16 +724,16 @@ function torrentWarning (torrentKey, message) { } function torrentError (torrentKey, message) { - var torrentSummary = getTorrentSummary(torrentKey) + // TODO: WebTorrent needs semantic errors + if (message.startsWith('Cannot add duplicate torrent')) { + // Remove infohash from the message + message = 'Cannot add duplicate torrent' + } + onError(message) - // TODO: WebTorrent should have semantic errors - if (message.startsWith('There is already a swarm')) { - onError(new Error('Can\'t add duplicate torrent')) - } else if (!torrentSummary) { - onError(message) - } else { - console.log('error, stopping torrent %s (%s):\n\t%o', - torrentSummary.name, torrentSummary.infoHash, message) + var torrentSummary = getTorrentSummary(torrentKey) + if (torrentSummary) { + console.log('Pausing torrent %s due to error: %s', torrentSummary.infoHash, message) torrentSummary.status = 'paused' update() } diff --git a/renderer/webtorrent.js b/renderer/webtorrent.js index d90458fc..385b4b45 100644 --- a/renderer/webtorrent.js +++ b/renderer/webtorrent.js @@ -68,23 +68,14 @@ function init () { // See https://github.com/feross/webtorrent/blob/master/docs/api.md#clientaddtorrentid-opts-function-ontorrent-torrent- function startTorrenting (torrentKey, torrentID, path, fileModtimes) { console.log('starting torrent %s: %s', torrentKey, torrentID) - var torrent - try { - torrent = client.add(torrentID, { - path: path, - fileModtimes: fileModtimes - }) - } catch (err) { - return ipc.send('wt-error', torrentKey, err.message) - } - // If we add a duplicate magnet URI or infohash, WebTorrent returns the - // existing torrent object! (If we add a duplicate torrent file, it creates a - // new torrent object and raises an error later.) Workaround: - if (torrent.key) { - return ipc.send('wt-error', torrentKey, 'Can\'t add duplicate torrent') - } + + var torrent = client.add(torrentID, { + path: path, + fileModtimes: fileModtimes + }) torrent.key = torrentKey addTorrentEvents(torrent) + return torrent }