Check path for each torrent

This commit is contained in:
DC
2016-08-13 20:28:20 -07:00
parent 1ec305162e
commit 0809e20a6e
6 changed files with 110 additions and 58 deletions

View File

@@ -9,31 +9,27 @@ module.exports = class TorrentList extends React.Component {
render () {
var state = this.props.state
var contents
if (!state.downloadPathStatus) {
contents = ''
} else if (state.downloadPathStatus === 'missing') {
contents = (
<div>
var contents = []
if (state.downloadPathStatus === 'missing') {
contents.push(
<div key='torrent-missing-path'>
<p>Download path missing: {state.saved.prefs.downloadPath}</p>
<p>Check that all drives are connected?</p>
<p>Alternatively, choose a new download path in
<a href='#' onClick={dispatcher('preferences')}>Preferences</a>
<p>Alternatively, choose a new download path
in <a href='#' onClick={dispatcher('preferences')}>Preferences</a>
</p>
</div>
)
} else if (state.downloadPathStatus === 'ok') {
contents = state.saved.torrents.map(
(torrentSummary) => this.renderTorrent(torrentSummary)
)
contents.push(
<div key='torrent-placeholder' className='torrent-placeholder'>
<span className='ellipsis'>Drop a torrent file here or paste a magnet link</span>
</div>
)
} else {
throw new Error('Unhandled downloadPathStatus ' + state.downloadPathStatus)
}
var torrentElems = state.saved.torrents.map(
(torrentSummary) => this.renderTorrent(torrentSummary)
)
contents.push(...torrentElems)
contents.push(
<div key='torrent-placeholder' className='torrent-placeholder'>
<span className='ellipsis'>Drop a torrent file here or paste a magnet link</span>
</div>
)
return (
<div key='torrent-list' className='torrent-list'>
@@ -64,7 +60,7 @@ module.exports = class TorrentList extends React.Component {
if (torrentSummary.playStatus) classes.push(torrentSummary.playStatus)
if (isSelected) classes.push('selected')
if (!infoHash) classes.push('disabled')
if (torrentSummary.torrrentKey) console.error('Missing torrentKey', torrentSummary)
if (!torrentSummary.torrentKey) throw new Error('Missing torrentKey')
return (
<div
key={torrentSummary.torrentKey}
@@ -88,8 +84,14 @@ module.exports = class TorrentList extends React.Component {
// If it's downloading/seeding then show progress info
var prog = torrentSummary.progress
if (torrentSummary.status !== 'paused' && prog) {
elements.push((
if (torrentSummary.error) {
elements.push(
<div key='progress-info' className='ellipsis'>
{getErrorMessage(torrentSummary)}
</div>
)
} else if (torrentSummary.status !== 'paused' && prog) {
elements.push(
<div key='progress-info' className='ellipsis'>
{renderPercentProgress()}
{renderTotalProgress()}
@@ -98,7 +100,7 @@ module.exports = class TorrentList extends React.Component {
{renderUploadSpeed()}
{renderEta()}
</div>
))
)
}
return (<div key='metadata' className='metadata'>{elements}</div>)
@@ -195,8 +197,9 @@ module.exports = class TorrentList extends React.Component {
}
// Only show the play button for torrents that contain playable media
var playButton
if (TorrentPlayer.isPlayableTorrentSummary(torrentSummary)) {
var playButton, downloadButton
var noErrors = !torrentSummary.error
if (noErrors && TorrentPlayer.isPlayableTorrentSummary(torrentSummary)) {
playButton = (
<i
key='play-button'
@@ -207,11 +210,8 @@ module.exports = class TorrentList extends React.Component {
</i>
)
}
return (
<div key='buttons' className='buttons'>
{positionElem}
{playButton}
if (noErrors) {
downloadButton = (
<i
key='download-button'
className={'button-round icon download ' + torrentSummary.status}
@@ -219,6 +219,14 @@ module.exports = class TorrentList extends React.Component {
onClick={dispatcher('toggleTorrent', infoHash)}>
{downloadIcon}
</i>
)
}
return (
<div key='buttons' className='buttons'>
{positionElem}
{playButton}
{downloadButton}
<i
key='delete-button'
className='icon delete'
@@ -233,12 +241,26 @@ module.exports = class TorrentList extends React.Component {
// Show files, per-file download status and play buttons, and so on
renderTorrentDetails (torrentSummary) {
var filesElement
if (!torrentSummary.files) {
// We don't know what files this torrent contains
var message = torrentSummary.status === 'paused'
? 'Failed to load torrent info. Click the download button to try again...'
: 'Downloading torrent info...'
filesElement = (<div key='files' className='files warning'>{message}</div>)
if (torrentSummary.error || !torrentSummary.files) {
var message = ''
if (torrentSummary.error === 'path-missing') {
// Special case error: this torrent's download dir or file is missing
message = 'Missing path: ' + TorrentSummary.getFileOrFolder(torrentSummary)
} else if (torrentSummary.error) {
// General error for this torrent: just show the message
message = torrentSummary.error.message || torrentSummary.error
} else if (torrentSummary.status === 'paused') {
// No file info, no infohash, and we're not trying to download from the DHT
message = 'Failed to load torrent info. Click the download button to try again...'
} else {
// No file info, no infohash, trying to load from the DHT
message = 'Downloading torrent info...'
}
filesElement = (
<div key='files' className='files warning'>
{message}
</div>
)
} else {
// We do know the files. List them and show download stats for each one
var fileRows = torrentSummary.files
@@ -349,3 +371,16 @@ module.exports = class TorrentList extends React.Component {
)
}
}
function getErrorMessage (torrentSummary) {
var err = torrentSummary.error
if (err === 'path-missing') {
return (
<span>
Path missing.<br />
Fix and restart the app, or delete the torrent.
</span>
)
}
return 'Error'
}