spee.ch/controllers/serveController.js

115 lines
4.3 KiB
JavaScript
Raw Normal View History

const lbryApi = require('../helpers/libraries/lbryApi.js')
const db = require('../models')
2017-06-14 00:39:38 +02:00
const getAllFreePublicClaims = require('../helpers/functions/getAllFreePublicClaims.js')
const isFreePublicClaim = require('../helpers/functions/isFreePublicClaim.js')
2017-06-14 00:39:38 +02:00
function getClaimAndHandleResponse (claimUri, resolve, reject) {
lbryApi
.getClaim(claimUri)
.then(({ file_name, download_path, mime_type }) => {
resolve({
file_name,
file_path: download_path,
file_type: mime_type,
})
})
.catch(error => {
reject(error)
})
2017-06-16 21:29:02 +02:00
}
2017-06-14 00:39:38 +02:00
module.exports = {
getClaimByName (claimName) {
const deferred = new Promise((resolve, reject) => {
console.log('>> lbryHelpers >> getClaim BasedOnNameOnly:', claimName)
// get all free public claims
getAllFreePublicClaims(claimName)
.then(freePublicClaimList => {
const claimId = freePublicClaimList[0].claim_id
const name = freePublicClaimList[0].name
const freePublicClaimOutpoint = `${freePublicClaimList[0].txid}:${freePublicClaimList[0].nout}`
const freePublicClaimUri = name + '#' + claimId
console.log('>> Decided on public claim id:', claimId)
// check to see if the file is available locally
db.File
.findOne({ where: { name: name, claim_id: claimId } })
.then(claim => {
// if a matching claim is 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(error => {
reject(error)
})
})
.catch(error => {
reject(error)
})
})
return deferred
},
getClaimByClaimId (claimName, claimId) {
const deferred = new Promise((resolve, reject) => {
const 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(result => {
// note should just be 'result' returned.
// get the outpoint
const resolvedOutpoint = `${result[uri].claim.txid}:${result[uri].claim.nout}`
// check locally for the claim
db.File
.findOne({ where: { claim_id: claimId } })
.then(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(error => {
reject(error)
})
})
.catch(error => {
reject(error)
})
})
return deferred
},
2017-06-14 00:39:38 +02:00
}