Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4cbad1fccd | ||
|
|
f818564dd1 | ||
|
|
8be690a26e | ||
|
|
8081d42477 | ||
|
|
b0b6069fe2 | ||
|
|
994aed9af7 | ||
|
|
852fc86cbd | ||
|
|
8801a87a58 | ||
|
|
1e10f0083c | ||
|
|
bb40f0f11a | ||
|
|
78d7243a08 |
@@ -1,5 +1,13 @@
|
||||
# WebTorrent Desktop Version History
|
||||
|
||||
## v0.17.2 - 2016-10-10
|
||||
|
||||
### Fixed
|
||||
- Windows: Fix impossible-to-delete "Wired CD" default torrent
|
||||
- Throttle browser-window 'move' and 'resize' events
|
||||
- Fix crash ("Cannot read property 'files' of null" error)
|
||||
- Fix crash ("TypeError: Cannot read property 'startPiece' of undefined")
|
||||
|
||||
## v0.17.1 - 2016-10-03
|
||||
|
||||
### Changed
|
||||
|
||||
@@ -134,7 +134,7 @@ const win32 = {
|
||||
platform: 'win32',
|
||||
|
||||
// Build ia32 and x64 binaries.
|
||||
arch: 'all',
|
||||
arch: ['ia32', 'x64'],
|
||||
|
||||
// Object hash of application metadata to embed into the executable (Windows only)
|
||||
win32metadata: {
|
||||
@@ -168,7 +168,7 @@ const linux = {
|
||||
platform: 'linux',
|
||||
|
||||
// Build ia32 and x64 binaries.
|
||||
arch: 'all'
|
||||
arch: ['ia32', 'x64']
|
||||
|
||||
// Note: Application icon for Linux is specified via the BrowserWindow `icon` option.
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "webtorrent-desktop",
|
||||
"description": "WebTorrent, the streaming torrent client. For Mac, Windows, and Linux.",
|
||||
"version": "0.17.1",
|
||||
"version": "0.17.2",
|
||||
"author": {
|
||||
"name": "WebTorrent, LLC",
|
||||
"email": "feross@webtorrent.io",
|
||||
@@ -90,6 +90,7 @@
|
||||
"optionalDependencies": {
|
||||
"appdmg": "^0.4.3"
|
||||
},
|
||||
"private": true,
|
||||
"productName": "WebTorrent",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -106,6 +107,6 @@
|
||||
"test": "standard && depcheck --ignores=buble,lodash.merge,nodemon,gh-release --ignore-dirs=build,dist && node ./bin/extra-lint.js",
|
||||
"test-integration": "npm run build && node ./test",
|
||||
"update-authors": "./bin/update-authors.sh",
|
||||
"watch": "nodemon --exec \"npm run start\" --ext js,pug,css --ignore build/ --ignore dist/"
|
||||
"watch": "nodemon --exec \"npm run start\" --ext js,css --ignore build/ --ignore dist/"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ module.exports = {
|
||||
},
|
||||
{
|
||||
testID: 'wired',
|
||||
name: 'The WIRED CD - Rip. Sample. Mash. Share.',
|
||||
name: 'The WIRED CD - Rip. Sample. Mash. Share',
|
||||
posterFileName: 'wiredCd.jpg',
|
||||
torrentFileName: 'wiredCd.torrent'
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ const main = module.exports = {
|
||||
}
|
||||
|
||||
const electron = require('electron')
|
||||
const debounce = require('debounce')
|
||||
|
||||
const app = electron.app
|
||||
|
||||
@@ -83,13 +84,13 @@ function init (state, options) {
|
||||
win.setMenuBarVisibility(true)
|
||||
})
|
||||
|
||||
win.on('move', function (e) {
|
||||
win.on('move', debounce(function (e) {
|
||||
send('windowBoundsChanged', e.sender.getBounds())
|
||||
})
|
||||
}, 1000))
|
||||
|
||||
win.on('resize', function (e) {
|
||||
win.on('resize', debounce(function (e) {
|
||||
send('windowBoundsChanged', e.sender.getBounds())
|
||||
})
|
||||
}, 1000))
|
||||
|
||||
win.on('close', function (e) {
|
||||
if (process.platform !== 'darwin') {
|
||||
|
||||
@@ -268,8 +268,16 @@ module.exports = class PlaybackController {
|
||||
state.playing.jumpToTime = jumpToTime
|
||||
|
||||
// if it's audio, parse out the metadata (artist, title, etc)
|
||||
if (state.playing.type === 'audio' && !fileSummary.audioInfo) {
|
||||
ipcRenderer.send('wt-get-audio-metadata', torrentSummary.infoHash, index)
|
||||
if (torrentSummary.status === 'paused') {
|
||||
ipcRenderer.once('wt-ready-' + torrentSummary.infoHash, getAudioMetadata)
|
||||
} else {
|
||||
getAudioMetadata()
|
||||
}
|
||||
|
||||
function getAudioMetadata () {
|
||||
if (state.playing.type === 'audio' && !fileSummary.audioInfo) {
|
||||
ipcRenderer.send('wt-get-audio-metadata', torrentSummary.infoHash, index)
|
||||
}
|
||||
}
|
||||
|
||||
// if it's video, check for subtitles files that are done downloading
|
||||
|
||||
@@ -5,6 +5,7 @@ module.exports = {
|
||||
}
|
||||
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const semver = require('semver')
|
||||
|
||||
const config = require('../../config')
|
||||
@@ -18,30 +19,15 @@ function run (state) {
|
||||
}
|
||||
|
||||
const version = state.saved.version
|
||||
const saved = state.saved
|
||||
|
||||
if (semver.lt(version, '0.7.0')) {
|
||||
migrate_0_7_0(state.saved)
|
||||
}
|
||||
|
||||
if (semver.lt(version, '0.7.2')) {
|
||||
migrate_0_7_2(state.saved)
|
||||
}
|
||||
|
||||
if (semver.lt(version, '0.11.0')) {
|
||||
migrate_0_11_0(state.saved)
|
||||
}
|
||||
|
||||
if (semver.lt(version, '0.12.0')) {
|
||||
migrate_0_12_0(state.saved)
|
||||
}
|
||||
|
||||
if (semver.lt(version, '0.14.0')) {
|
||||
migrate_0_14_0(state.saved)
|
||||
}
|
||||
|
||||
if (semver.lt(version, '0.17.0')) {
|
||||
migrate_0_17_0(state.saved)
|
||||
}
|
||||
if (semver.lt(version, '0.7.0')) migrate_0_7_0(saved)
|
||||
if (semver.lt(version, '0.7.2')) migrate_0_7_2(saved)
|
||||
if (semver.lt(version, '0.11.0')) migrate_0_11_0(saved)
|
||||
if (semver.lt(version, '0.12.0')) migrate_0_12_0(saved)
|
||||
if (semver.lt(version, '0.14.0')) migrate_0_14_0(saved)
|
||||
if (semver.lt(version, '0.17.0')) migrate_0_17_0(saved)
|
||||
if (semver.lt(version, '0.17.2')) migrate_0_17_2(saved)
|
||||
|
||||
// Config is now on the new version
|
||||
state.saved.version = config.APP_VERSION
|
||||
@@ -163,3 +149,60 @@ function migrate_0_17_0 (saved) {
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function migrate_0_17_2 (saved) {
|
||||
// Remove the trailing dot (.) from the Wired CD torrent name, since
|
||||
// folders/files that end in a trailing dot (.) or space are not deletable from
|
||||
// Windows Explorer. See: https://github.com/feross/webtorrent-desktop/issues/905
|
||||
|
||||
const cpFile = require('cp-file')
|
||||
const rimraf = require('rimraf')
|
||||
|
||||
const OLD_NAME = 'The WIRED CD - Rip. Sample. Mash. Share.'
|
||||
const NEW_NAME = 'The WIRED CD - Rip. Sample. Mash. Share'
|
||||
|
||||
const OLD_HASH = '3ba219a8634bf7bae3d848192b2da75ae995589d'
|
||||
const NEW_HASH = 'a88fda5954e89178c372716a6a78b8180ed4dad3'
|
||||
|
||||
const ts = saved.torrents.find((ts) => {
|
||||
return ts.infoHash === OLD_HASH
|
||||
})
|
||||
|
||||
if (!ts) return // Wired CD torrent does not exist
|
||||
|
||||
// New versions of WebTorrent ship with a fixed torrent file. Let's fix up the
|
||||
// name in existing versions of WebTorrent.
|
||||
ts.name = ts.displayName = NEW_NAME
|
||||
ts.files.forEach((file) => {
|
||||
file.path = file.path.replace(OLD_NAME, NEW_NAME)
|
||||
})
|
||||
|
||||
// Changing the torrent name causes the info hash to change
|
||||
ts.infoHash = NEW_HASH
|
||||
ts.magnetURI = ts.magnetURI.replace(OLD_HASH, NEW_HASH)
|
||||
|
||||
try {
|
||||
fs.renameSync(
|
||||
path.join(config.POSTER_PATH, ts.posterFileName),
|
||||
path.join(config.POSTER_PATH, NEW_HASH + '.jpg')
|
||||
)
|
||||
} catch (err) {}
|
||||
ts.posterFileName = NEW_HASH + '.jpg'
|
||||
|
||||
rimraf.sync(path.join(config.TORRENT_PATH, ts.torrentFileName))
|
||||
cpFile.sync(
|
||||
path.join(config.STATIC_PATH, 'wiredCd.torrent'),
|
||||
path.join(config.TORRENT_PATH, NEW_HASH + '.torrent')
|
||||
)
|
||||
ts.torrentFileName = NEW_HASH + '.torrent'
|
||||
|
||||
if (ts.path) {
|
||||
// If torrent folder already exists on disk, try to rename it
|
||||
try {
|
||||
fs.renameSync(
|
||||
path.join(ts.path, OLD_NAME),
|
||||
path.join(ts.path, NEW_NAME)
|
||||
)
|
||||
} catch (err) {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -599,12 +599,15 @@ function renderLoadingBar (state) {
|
||||
|
||||
const torrentSummary = state.getPlayingTorrentSummary()
|
||||
if (!torrentSummary.progress) {
|
||||
return []
|
||||
return null
|
||||
}
|
||||
|
||||
// Find all contiguous parts of the torrent which are loaded
|
||||
const prog = torrentSummary.progress
|
||||
const fileProg = prog.files[state.playing.fileIndex]
|
||||
|
||||
if (!fileProg) return null
|
||||
|
||||
const parts = []
|
||||
let lastPiecePresent = false
|
||||
for (let i = fileProg.startPiece; i <= fileProg.endPiece; i++) {
|
||||
@@ -626,6 +629,7 @@ function renderLoadingBar (state) {
|
||||
|
||||
return (<div key={i} className='loading-bar-part' style={style} />)
|
||||
})
|
||||
|
||||
return (<div key='loading-bar' className='loading-bar'>{loadingBarElems}</div>)
|
||||
}
|
||||
|
||||
|
||||
@@ -125,8 +125,6 @@ function startTorrenting (torrentKey, torrentID, path, fileModtimes, selections)
|
||||
|
||||
// Only download the files the user wants, not necessarily all files
|
||||
torrent.once('ready', () => selectFiles(torrent, selections))
|
||||
|
||||
return torrent
|
||||
}
|
||||
|
||||
function stopTorrenting (infoHash) {
|
||||
|
||||
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1010 KiB After Width: | Height: | Size: 1011 KiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 302 KiB After Width: | Height: | Size: 302 KiB |
|
Before Width: | Height: | Size: 698 KiB After Width: | Height: | Size: 698 KiB |
|
Before Width: | Height: | Size: 478 KiB After Width: | Height: | Size: 479 KiB |
|
Before Width: | Height: | Size: 480 KiB After Width: | Height: | Size: 480 KiB |
|
Before Width: | Height: | Size: 480 KiB After Width: | Height: | Size: 480 KiB |
|
Before Width: | Height: | Size: 480 KiB After Width: | Height: | Size: 480 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 481 KiB After Width: | Height: | Size: 481 KiB |
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 627 KiB After Width: | Height: | Size: 627 KiB |
|
Before Width: | Height: | Size: 843 KiB After Width: | Height: | Size: 844 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1014 KiB After Width: | Height: | Size: 1014 KiB |
|
Before Width: | Height: | Size: 549 KiB After Width: | Height: | Size: 549 KiB |
|
Before Width: | Height: | Size: 698 KiB After Width: | Height: | Size: 698 KiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1024 KiB |
|
Before Width: | Height: | Size: 1014 KiB After Width: | Height: | Size: 1014 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1015 KiB After Width: | Height: | Size: 1016 KiB |