fix(download): fix download status in recent torrents
This commit is contained in:
		| @ -6,6 +6,8 @@ import Search from './search' | ||||
| import SelectField from 'material-ui/SelectField'; | ||||
| import MenuItem from 'material-ui/MenuItem'; | ||||
|  | ||||
| import _ from 'lodash' | ||||
|  | ||||
| export default class SearchPage extends Page { | ||||
| 	constructor(props) { | ||||
| 		super(props) | ||||
| @ -14,10 +16,32 @@ export default class SearchPage extends Page { | ||||
| 	componentDidMount() | ||||
| 	{ | ||||
| 		Search.instance().onSearchUpdate = () => this.forceUpdate() | ||||
| 		window.torrentSocket.emit('downloads', (downloads) => { | ||||
| 			for(const torrent of downloads) { | ||||
| 				const hash = torrent.torrentObject.hash; | ||||
| 				delete torrent.torrentObject; | ||||
| 				let needUpdate = false; | ||||
| 				const updateValues = (target) => { | ||||
| 					let index = _.findIndex(target, {hash}); | ||||
| 					if(index >= 0) { | ||||
| 						target[index].download = torrent | ||||
| 						needUpdate = true; | ||||
| 					} | ||||
| 				} | ||||
| 				updateValues(Search.instance().searchTorrents); | ||||
| 				updateValues(Search.instance().searchFiles); | ||||
| 				if (needUpdate) | ||||
| 					this.forceUpdate() | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| 	componentWillUnmount() | ||||
| 	{ | ||||
| 		Search.instance().onSearchUpdate = () => {} | ||||
| 		for(const torrent of Search.instance().searchTorrents) | ||||
| 			delete torrent.download | ||||
| 		for(const torrent of Search.instance().searchFiles) | ||||
| 			delete torrent.download | ||||
| 	} | ||||
| 	render() { | ||||
| 		const orderText = (text, field) => { | ||||
|  | ||||
| @ -169,11 +169,19 @@ export default class Torrent extends Component { | ||||
|   	downloadRemoveOnDone: false, | ||||
|   	downloadPaused: false, | ||||
|   } | ||||
|   downloadInited = false; | ||||
|  | ||||
|   constructor(props) | ||||
|   { | ||||
| 	super(props) | ||||
| 	 | ||||
|   	const download = props.download || props.torrent.download | ||||
| 	const download = props.download || props.torrent.download; | ||||
| 	this.updateDownload(download); | ||||
|   	this.downloadPathInput = React.createRef(); | ||||
|   } | ||||
|  | ||||
|   updateDownload(download) | ||||
|   { | ||||
| 	if(download) | ||||
| 	{ | ||||
| 		const { progress, downloaded, downloadSpeed, removeOnDone, paused } = download | ||||
| @ -184,9 +192,18 @@ export default class Torrent extends Component { | ||||
| 		this.state.downloaded = progress === 1 | ||||
| 		this.state.downloadRemoveOnDone = removeOnDone | ||||
| 		this.state.downloadPaused = paused | ||||
|  | ||||
| 		this.downloadInited = true; | ||||
| 	} | ||||
|   } | ||||
|  | ||||
|   	this.downloadPathInput = React.createRef(); | ||||
|   componentDidUpdate(prevProps) | ||||
|   { | ||||
| 	  const download = this.props.download || this.props.torrent.download; | ||||
| 	  if(prevProps && !prevProps.download && download && !this.downloadInited) { | ||||
| 		this.updateDownload(download); | ||||
| 		this.forceUpdate(); | ||||
| 	  } | ||||
|   } | ||||
|  | ||||
|   componentDidMount() | ||||
|  | ||||
| @ -36,15 +36,19 @@ describe("download", function() { | ||||
| 	}) | ||||
|  | ||||
| 	it("check download exists in download tab", async function() { | ||||
| 		this.timeout(8000); | ||||
| 		this.timeout(10000); | ||||
| 		const { app } = this | ||||
| 		await (await app.client.$('#downloadTab')).click() | ||||
| 		const value = await (await app.client.$('.downloads-list .torrentRow .torrentName')).getText() | ||||
| 		assert.equal(value, 'Roblox_setup.exe') | ||||
| 		console.log('download progress', await (await app.client.$('.torrentRow .progressDownloading')).getText()); | ||||
| 		let progress = parseInt(await (await app.client.$('.torrentRow .progressDownloading')).getText()); | ||||
| 		console.log('download progress', progress, '%'); | ||||
| 		// cancel in progress button must be exists | ||||
| 		if (progress < 90) { | ||||
| 			console.log('testing buttons') | ||||
| 			assert(await (await app.client.$('.torrentRow .deleteDownloadBeforeFinish')).isExisting()); | ||||
| 			assert(await (await app.client.$('.torrentRow .pauseTorrent')).isExisting()); | ||||
| 		} | ||||
| 		// back to recent search | ||||
| 		await (await app.client.$('#open-recent-search')).click() | ||||
| 		await app.client.$('.search-list') | ||||
| @ -57,7 +61,7 @@ describe("download", function() { | ||||
| 		console.log('download progress', await (await app.client.$('.torrentRow .progressDownloading')).getText()); | ||||
| 		await app.client.waitUntil(async () => { | ||||
| 			return (await (await app.client.$('.torrentRow .progressDownloading')).getText()) === '100.0%' | ||||
| 		}, 60000, 'expected that download will be finished', 200) | ||||
| 		}, 80000, 'expected that download will be finished', 200) | ||||
| 		// There is some time before button will be replaced | ||||
| 		await asyncWait(800); | ||||
|  | ||||
| @ -100,7 +104,7 @@ describe("download", function() { | ||||
| 	}) | ||||
|  | ||||
| 	it("download file to folder", async function() { | ||||
| 		this.timeout(60000); | ||||
| 		this.timeout(90000); | ||||
| 		const { app } = this | ||||
| 		await (await app.client.$('#searchInput')).setValue('1413ba1915affdc3de7e1a81d6fdc32ef19395c9') | ||||
| 		await (await app.client.$('#search')).click() | ||||
| @ -115,7 +119,7 @@ describe("download", function() { | ||||
| 		// Downloading check | ||||
| 		await app.client.waitUntil(async () => { | ||||
| 			return (await (await app.client.$('.torrentRow .progressDownloading')).getText()) === '100.0%' | ||||
| 		}, 60000, 'expected that download will be finished', 200) | ||||
| 		}, 80000, 'expected that download will be finished', 200) | ||||
| 		// Check downloaded to directory | ||||
| 		assert(fs.existsSync(fileFolderTest)); | ||||
| 		assert.equal(await md5(fileFolderTest), '7df171da63e2013c9b17e1857615b192'); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user