From 7ca60179866bd0bb3cabc7e55c6a3ed88f7ccdce Mon Sep 17 00:00:00 2001 From: Alex Liebowitz Date: Wed, 7 Dec 2016 16:29:04 -0500 Subject: [PATCH 1/3] Add lbry.getPeersForBlobHash() --- js/lbry.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/js/lbry.js b/js/lbry.js index dffb903be..4be044fb0 100644 --- a/js/lbry.js +++ b/js/lbry.js @@ -183,6 +183,10 @@ lbry.getCostEstimate = function(name, callback) { lbry.call('get_est_cost', { name: name }, callback); } +lbry.getPeersForBlobHash = function(blobHash, callback) { + lbry.call('get_peers_for_hash', { blob_hash: blobHash }, callback) +} + lbry.getFileStatus = function(name, callback) { lbry.call('get_lbry_file', { 'name': name }, callback); } From 100dac0629e0d306235b171d6e229293eedc11b5 Mon Sep 17 00:00:00 2001 From: Alex Liebowitz Date: Wed, 7 Dec 2016 16:31:44 -0500 Subject: [PATCH 2/3] My Files: monitor file availability using lbry.getPeersForBlobHash() Also reduce the checking rate to once every 5 minutes to avoid slamming your peers with availability checks --- js/page/my_files.js | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/js/page/my_files.js b/js/page/my_files.js index d5e5aea5d..91b8ae3af 100644 --- a/js/page/my_files.js +++ b/js/page/my_files.js @@ -232,24 +232,17 @@ var MyFilesPage = React.createClass({ filesInfo = []; } - if (!(this._fileInfoCheckNum % 5)) { + let newFilesAvailable; + if (!(this._fileInfoCheckNum % 300)) { // Time to update file availability status + newFilesAvailable = {}; + let filePeersCheckCount = 0; for (let fileInfo of filesInfo) { - let name = fileInfo.lbry_uri; - - if (name === null) { - continue; - } - - lighthouse.search(name, (results) => { - var result = results[0]; - - var available = result.name == name && result.available; - - if (typeof this.state.filesAvailable[name] === 'undefined' || available != this.state.filesAvailable[name]) { - var newFilesAvailable = Object.assign({}, this.state.filesAvailable); - newFilesAvailable[name] = available; + lbry.getPeersForBlobHash(fileInfo.sd_hash, (peers) => { + filePeersCheckCount++; + newFilesAvailable[fileInfo.sd_hash] = peers.length >= 0; + if (filePeersCheckCount >= filesInfo.length) { this.setState({ filesAvailable: newFilesAvailable, }); @@ -284,7 +277,7 @@ var MyFilesPage = React.createClass({ for (let fileInfo of this.state.filesInfo) { let {completed, written_bytes, total_bytes, lbry_uri, file_name, download_path, - stopped, metadata} = fileInfo; + stopped, metadata, sd_hash} = fileInfo; var isMine = this._filesOwnership[lbry_uri]; @@ -314,7 +307,7 @@ var MyFilesPage = React.createClass({ content.push(); + available={this.state.filesAvailable[sd_hash]} isMine={isMine} />); } } return ( From 177fa2cfa294d448df1e5acc8fb0efac01da8fb3 Mon Sep 17 00:00:00 2001 From: Alex Liebowitz Date: Tue, 13 Dec 2016 13:11:01 -0500 Subject: [PATCH 3/3] Move file availability check interval to class member --- js/page/my_files.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/page/my_files.js b/js/page/my_files.js index 91b8ae3af..19cb5d152 100644 --- a/js/page/my_files.js +++ b/js/page/my_files.js @@ -166,6 +166,7 @@ var MyFilesRow = React.createClass({ var MyFilesPage = React.createClass({ _fileTimeout: null, + _fileInfoCheckRate: 300, _fileInfoCheckNum: 0, _filesOwnership: {}, @@ -233,7 +234,7 @@ var MyFilesPage = React.createClass({ } let newFilesAvailable; - if (!(this._fileInfoCheckNum % 300)) { + if (!(this._fileInfoCheckNum % this._fileInfoCheckRate)) { // Time to update file availability status newFilesAvailable = {};