From 6d4b8c3c26c7921eea8b1c7a288cbb5cb1fd660c Mon Sep 17 00:00:00 2001 From: DC Date: Mon, 22 Aug 2016 21:07:59 -0700 Subject: [PATCH] Fix playback + download of default torrents There was a terrible bug introduced in https://github.com/feross/webtorrent-desktop/commit/0809e20a6e1de917a2f8315c2f1da3b9ef177a43 -- clicking play on any of the default torrents in a fresh install of the app would fail and result in a 'path missing' error. This fixes the bug, and also adds a migration step to clean up resulting broken config files --- .../controllers/torrent-list-controller.js | 15 ++++++++-- src/renderer/lib/migrations.js | 28 +++++++++++++++++-- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/renderer/controllers/torrent-list-controller.js b/src/renderer/controllers/torrent-list-controller.js index dc9fe9cc..2f40d008 100644 --- a/src/renderer/controllers/torrent-list-controller.js +++ b/src/renderer/controllers/torrent-list-controller.js @@ -84,21 +84,30 @@ module.exports = class TorrentListController { var s = TorrentSummary.getByKey(this.state, torrentKey) if (!s) throw new Error('Missing key: ' + torrentKey) - // Use Downloads folder by default - if (!s.path) s.path = this.state.saved.prefs.downloadPath + // New torrent: give it a path + if (!s.path) { + // Use Downloads folder by default + s.path = this.state.saved.prefs.downloadPath + return start() + } + // Existing torrent: check that the path is still there fs.stat(TorrentSummary.getFileOrFolder(s), function (err) { if (err) { s.error = 'path-missing' return } + start() + }) + + function start () { ipcRenderer.send('wt-start-torrenting', s.torrentKey, TorrentSummary.getTorrentID(s), s.path, s.fileModtimes, s.selections) - }) + } } // TODO: use torrentKey, not infoHash diff --git a/src/renderer/lib/migrations.js b/src/renderer/lib/migrations.js index fe29f413..67975e37 100644 --- a/src/renderer/lib/migrations.js +++ b/src/renderer/lib/migrations.js @@ -4,8 +4,10 @@ module.exports = { run } -var semver = require('semver') -var config = require('../../config') +const semver = require('semver') +const config = require('../../config') +const TorrentSummary = require('./torrent-summary') +const fs = require('fs') // Change `state.saved` (which will be saved back to config.json on exit) as // needed, for example to deal with config.json format changes across versions @@ -110,4 +112,26 @@ function migrate_0_12_0 (saved) { saved.prefs.openExternalPlayer = saved.prefs.playInVlc } delete saved.prefs.playInVlc + + // Undo a terrible bug where clicking Play on a default torrent on a fresh + // install results in a "path missing" error + // See https://github.com/feross/webtorrent-desktop/pull/806 + var defaultTorrentFiles = [ + '6a9759bffd5c0af65319979fb7832189f4f3c35d.torrent', + '88594aaacbde40ef3e2510c47374ec0aa396c08e.torrent', + '6a02592d2bbc069628cd5ed8a54f88ee06ac0ba5.torrent', + '02767050e0be2fd4db9a2ad6c12416ac806ed6ed.torrent', + '3ba219a8634bf7bae3d848192b2da75ae995589d.torrent' + ] + saved.torrents.forEach(function (torrentSummary) { + if (!defaultTorrentFiles.includes(torrentSummary.torrentFileName)) return + var fileOrFolder = TorrentSummary.getFileOrFolder(torrentSummary) + if (!fileOrFolder) return + try { + fs.statSync(fileOrFolder) + } catch (e) { + // Default torrent with "missing path" error. Clear path. + delete torrentSummary.path + } + }) }