102 lines
3.6 KiB
JavaScript
102 lines
3.6 KiB
JavaScript
var lbryApi = require('../helpers/libraries/lbryApi.js');
|
|
var db = require("../models");
|
|
|
|
var getAllFreePublicClaims = require("../helpers/functions/getAllFreePublicClaims.js");
|
|
var isFreePublicClaim = require("../helpers/functions/isFreePublicClaim.js");
|
|
|
|
function getClaimAndHandleResponse(claimUri, resolve, reject){
|
|
lbryApi.getClaim(claimUri)
|
|
.then(function(result){
|
|
resolve({
|
|
file_name: result.file_name,
|
|
file_path: result.download_path,
|
|
file_type: result.mime_type
|
|
});
|
|
}).catch(function(error){
|
|
reject(error)
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
getClaimByName: function(claimName){
|
|
var deferred = new Promise(function (resolve, reject){
|
|
console.log(">> lbryHelpers >> getClaim BasedOnNameOnly:", claimName);
|
|
// get all free public claims
|
|
getAllFreePublicClaims(claimName)
|
|
.then(function(freePublicClaimList){
|
|
console.log(">> Decided on public claim id:", freePublicClaimList[0].claim_id);
|
|
var freePublicClaimOutpoint = freePublicClaimList[0].txid + ":" + freePublicClaimList[0].nout;
|
|
var freePublicClaimUri = freePublicClaimList[0].name + "#" + freePublicClaimList[0].claim_id;
|
|
// check to see if the file is available locally
|
|
db.File.findOne({where: { claim_id: freePublicClaimList[0].claim_id }})
|
|
.then(function(claim){
|
|
// if a found locally...
|
|
if (claim){
|
|
console.log(">> A matching claim_id was found locally");
|
|
// if the outpoint's match return it
|
|
if (claim.dataValues.outpoint === freePublicClaimOutpoint){
|
|
console.log(">> Local outpoint matched");
|
|
resolve(claim.dataValues);
|
|
// if the outpoint's don't match, fetch updated claim
|
|
} else {
|
|
console.log(">> local outpoint did not match");
|
|
getClaimAndHandleResponse(freePublicClaimUri, resolve, reject);
|
|
}
|
|
// ... otherwise use daemon to retrieve it
|
|
} else {
|
|
// 'get' the claim
|
|
getClaimAndHandleResponse(freePublicClaimUri, resolve, reject)
|
|
}
|
|
}).catch(function(error){
|
|
reject(error);
|
|
});
|
|
}).catch(function(error){
|
|
reject(error);
|
|
});
|
|
});
|
|
return deferred;
|
|
},
|
|
getClaimByClaimId: function(claimName, claimId){
|
|
var deferred = new Promise(function (resolve, reject){
|
|
var uri = claimName + "#" + claimId;
|
|
console.log(">> lbryHelpers >> getClaimBasedOnUri:", uri);
|
|
// resolve the Uri
|
|
lbryApi.resolveUri(uri) // note: use 'spread' and make parallel with db.File.findOne()
|
|
.then(function(result){ // note should just be 'result' returned.
|
|
// get the outpoint
|
|
var resolvedOutpoint = result[uri].claim.txid + ":" + result[uri].claim.nout;
|
|
// check locally for the claim
|
|
db.File.findOne({where: { claim_id: claimId }})
|
|
.then(function(claim){
|
|
// if a found locally...
|
|
if (claim){
|
|
console.log(">> A matching claim_id was found locally");
|
|
// if the outpoint's match return it
|
|
if (claim.dataValues.outpoint === resolvedOutpoint){
|
|
console.log(">> Local outpoint matched");
|
|
resolve(claim.dataValues);
|
|
// if the outpoint's don't match, fetch updated claim
|
|
} else {
|
|
console.log(">> Local outpoint did not match");
|
|
getClaimAndHandleResponse(uri, resolve, reject);
|
|
}
|
|
// ... otherwise use daemon to retrieve it
|
|
} else {
|
|
// check to make sure it is free and public (note: no need for another resolve?)
|
|
if (isFreePublicClaim(result[uri].claim)){
|
|
// 'get' the claim
|
|
getClaimAndHandleResponse(uri, resolve, reject);
|
|
} else {
|
|
reject("NO_FREE_PUBLIC_CLAIMS");
|
|
}
|
|
}
|
|
}).catch(function(error){
|
|
reject(error)
|
|
});
|
|
}).catch(function(error){
|
|
reject(error);
|
|
});
|
|
});
|
|
return deferred;
|
|
}
|
|
}
|