feat(download): basic torrent download support

This commit is contained in:
Alexey Kasyanchuk
2018-02-08 03:44:57 +03:00
parent 0e46df3dbc
commit 765177d89d
5 changed files with 93 additions and 5 deletions

View File

@ -146,6 +146,9 @@ export default class TorrentPage extends Page {
searchingIndicator: false,
voting: false,
voted: false,
askDownloading: false,
downloading: false,
downloadProgress: {}
};
this.setTitle('Information about torrent');
}
@ -236,6 +239,31 @@ export default class TorrentPage extends Page {
this.forceUpdate();
}
window.torrentSocket.on('vote', this.onVote);
this.downloadMetadata = (hash) => {
if(this.props.hash != hash)
return;
this.setState({downloading: true})
}
window.torrentSocket.on('downloadMetadata', this.downloadMetadata);
this.downloadDone = (hash) => {
if(this.props.hash != hash)
return;
this.setState({downloading: false})
}
window.torrentSocket.on('downloadDone', this.downloadDone);
this.downloadProgress = (hash, progress) => {
if(this.props.hash != hash)
return;
console.log(progress)
this.setState({downloadProgress: progress})
}
window.torrentSocket.on('downloadProgress', this.downloadProgress);
}
componentWillUnmount() {
if(this.filesUpdated)
@ -247,6 +275,12 @@ export default class TorrentPage extends Page {
if(this.torrent && this.torrent.contentCategory == 'xxx') {
this.removeMetaTag('robots');
}
if(this.downloadMetadata)
window.torrentSocket.off('downloadMetadata', this.downloadMetadata);
if(this.downloadDone)
window.torrentSocket.off('downloadDone', this.downloadDone);
if(this.downloadProgress)
window.torrentSocket.off('downloadProgress', this.downloadProgress);
}
vote(good) {
if(!this.torrent)
@ -320,6 +354,29 @@ export default class TorrentPage extends Page {
}}
icon={<svg fill='white' viewBox="0 0 24 24"><path d="M17.374 20.235c2.444-2.981 6.626-8.157 6.626-8.157l-3.846-3.092s-2.857 3.523-6.571 8.097c-4.312 5.312-11.881-2.41-6.671-6.671 4.561-3.729 8.097-6.57 8.097-6.57l-3.092-3.842s-5.173 4.181-8.157 6.621c-2.662 2.175-3.76 4.749-3.76 7.24 0 5.254 4.867 10.139 10.121 10.139 2.487 0 5.064-1.095 7.253-3.765zm4.724-7.953l-1.699 2.111-1.74-1.397 1.701-2.114 1.738 1.4zm-10.386-10.385l1.4 1.738-2.113 1.701-1.397-1.74 2.11-1.699z"/></svg>}
/>
{
!this.state.askDownloading
?
<RaisedButton
href={`magnet:?xt=urn:btih:${this.torrent.hash}`}
target="_self"
label="Download Iternal client"
secondary={true}
onClick={(e) => {
e.preventDefault();
this.setState({askDownloading: true})
window.torrentSocket.emit('download', `magnet:?xt=urn:btih:${this.torrent.hash}`)
}}
icon={<svg fill='white' viewBox="0 0 24 24"><path d="M17.374 20.235c2.444-2.981 6.626-8.157 6.626-8.157l-3.846-3.092s-2.857 3.523-6.571 8.097c-4.312 5.312-11.881-2.41-6.671-6.671 4.561-3.729 8.097-6.57 8.097-6.57l-3.092-3.842s-5.173 4.181-8.157 6.621c-2.662 2.175-3.76 4.749-3.76 7.24 0 5.254 4.867 10.139 10.121 10.139 2.487 0 5.064-1.095 7.253-3.765zm4.724-7.953l-1.699 2.111-1.74-1.397 1.701-2.114 1.738 1.4zm-10.386-10.385l1.4 1.738-2.113 1.701-1.397-1.74 2.11-1.699z"/></svg>}
/>
:
this.state.downloading
&&
<LinearProgress
mode="determinate"
value={this.state.downloadProgress && this.state.downloadProgress.progress * 100}
/>
}
<div className='fs0-75 pad0-75 center column' style={{color: 'rgba(0, 0, 0, 0.541176)'}}><div>BTIH:</div><div>{this.torrent.hash}</div></div>
{
this.torrent.seeders || this.torrent.leechers || this.torrent.completed