From 232591fdb3f25dbee53b2024c190e3e11944672b Mon Sep 17 00:00:00 2001 From: bill bittner Date: Thu, 22 Jun 2017 10:08:41 -0700 Subject: [PATCH] consolidated the resolve-and-update code --- controllers/publishController.js | 7 +- controllers/serveController.js | 154 +++++++++++----------- public/assets/js/claimPublish.js | 2 +- public/assets/js/memePublish.js | 2 +- views/partials/memeFodderMaker.handlebars | 4 +- views/partials/publish.handlebars | 38 +++--- 6 files changed, 104 insertions(+), 103 deletions(-) diff --git a/controllers/publishController.js b/controllers/publishController.js index e124bddc..abf3dca8 100644 --- a/controllers/publishController.js +++ b/controllers/publishController.js @@ -50,9 +50,10 @@ function upsert (Model, values, condition) { module.exports = { publish (name, fileName, filePath, fileType, license, nsfw, socket, visitor) { + console.log('nsfw:', nsfw); // validate nsfw if (typeof nsfw === 'string') { - nsfw = (nsfw.toLowerCase() === 'on'); + nsfw = (nsfw.toLowerCase() === 'true'); } // update the client socket.emit('publish-status', 'Your image is being published (this might take a second)...'); @@ -60,14 +61,14 @@ module.exports = { visitor.event('Publish Route', 'Publish Request', filePath).send(); // create the publish object const publishParams = createPublishParams(name, filePath, license, nsfw); - // get a promise to publish + // 1. publish the file lbryApi .publishClaim(publishParams, fileName, fileType) .then(result => { logger.info(`Successfully published ${fileName}`, result); // google analytics visitor.event('Publish Route', 'Publish Success', filePath).send(); - // update old record of create new one + // 2. update old record of create new one (update is in case the claim has been published before by this daemon) upsert( db.File, { diff --git a/controllers/serveController.js b/controllers/serveController.js index 0e21b58d..63b4ab10 100644 --- a/controllers/serveController.js +++ b/controllers/serveController.js @@ -4,9 +4,71 @@ const logger = require('winston'); const getAllFreePublicClaims = require('../helpers/functions/getAllFreePublicClaims.js'); const isFreePublicClaim = require('../helpers/functions/isFreePublicClaim.js'); -function getClaimAndHandleResponse (claimUri, height, resolve, reject) { +function updateFileIfNeeded (uri, claimName, claimId, localOutpoint, localHeight) { + logger.debug(`A mysql record was found for ${claimId}`); + logger.debug('initiating resolve on claim to check outpoint'); + // 1. resolve claim lbryApi - .getClaim(claimUri) + .resolveUri(uri) + .then(result => { + // logger.debug('resolved result:', result); + const resolvedOutpoint = `${result[uri].claim.txid}:${result[uri].claim.nout}`; + const resolvedHeight = result[uri].claim.height; + logger.debug('database outpoint:', localOutpoint); + logger.debug('resolved outpoint:', resolvedOutpoint); + // 2. if the outpoint's match, no further work needed + if (localOutpoint === resolvedOutpoint) { + logger.debug('local outpoint matched'); + // 2. if the outpoints don't match, check the height + } else if (localHeight > resolvedHeight) { + logger.debug('local height was greater than resolved height'); + // 2. get the resolved claim + } else { + logger.debug(`local outpoint did not match for ${uri}. Initiating update.`); + getClaimAndUpdate(uri, resolvedHeight); + } + }) + .catch(error => { + logger.error(`error resolving "${uri}" >> `, error); + }); +} + +function getClaimAndUpdate (uri, height) { + // 1. get the claim + lbryApi + .getClaim(uri) + .then(({ name, claim_id, outpoint, file_name, download_path, mime_type, metadata }) => { + logger.debug(' Get returned outpoint: ', outpoint); + // 2. update the entry in db + db.File + .update({ + outpoint, + height, // note: height is coming from 'resolve', not 'get'. + fileName: file_name, + filePath: download_path, + fileType: mime_type, + nsfw : metadata.stream.metadata.nsfw, + }, { + where: { + name, + claimId: claim_id, + }, + }) + .then(result => { + logger.debug('successfully updated mysql record', result); + }) + .catch(error => { + logger.error('sequelize error', error); + }); + }) + .catch(error => { + logger.error(`error while getting claim for ${uri} >> `, error); + }); +} + +function getClaimAndHandleResponse (uri, height, resolve, reject) { + lbryApi + .getClaim(uri) .then(({ name, claim_id, outpoint, file_name, download_path, mime_type, metadata }) => { // create entry in the db logger.debug('creating new record in db'); @@ -21,6 +83,9 @@ function getClaimAndHandleResponse (claimUri, height, resolve, reject) { fileType: mime_type, nsfw : metadata.stream.metadata.nsfw, }) + .then(result => { + logger.debug('successfully created mysql record', result); + }) .catch(error => { logger.error('sequelize create error', error); }); @@ -36,95 +101,29 @@ function getClaimAndHandleResponse (claimUri, height, resolve, reject) { }); } -function resolveAndUpdateIfNeeded (uri, claimName, claimId, localOutpoint, localHeight) { - logger.debug('initiating resolve on local record to check outpoint'); - // 1. resolve claim - lbryApi - .resolveUri(uri) - .then(result => { - // logger.debug('resolved result:', result); - const resolvedOutpoint = `${result[uri].claim.txid}:${result[uri].claim.nout}`; - const resolvedHeight = result[uri].claim.height; - logger.debug('database outpoint:', localOutpoint); - logger.debug('resolved outpoint:', resolvedOutpoint); - // 2. if the outpoint's match, no further work needed - if (localOutpoint === resolvedOutpoint) { - logger.debug('local outpoint matched'); - // 2. if the outpoints don't match, check the height - } else if (localHeight > resolvedHeight) { - logger.debug('local height was greater than resolve height'); - // 2. get the resolved claim - } else { - logger.debug(`local outpoint did not match for ${uri}. Initiating update.`); - getClaimAndUpdate(uri, claimName, claimId); - } - }) - .catch(error => { - logger.error(`error resolving "${uri}" >> `, error); - }); -} - -function getClaimAndUpdate (uri, claimName, claimId) { - // 1. get the claim - lbryApi - .getClaim(uri) - .then(({ outpoint, file_name, download_path, mime_type }) => { - logger.debug('getClaim outpoint', outpoint); - // 2. update the entry in db - db.File - .update({ - outpoint: outpoint, - fileName: file_name, - filePath: download_path, - fileType: mime_type, - }, { - where: { - name : claimName, - claimId: claimId, - }, - }) - .then(result => { - logger.debug('successfully updated mysql record', result); - }) - .catch(error => { - logger.error('sequelize error', error); - }); - }) - .catch(error => { - logger.error(`error while getting claim for ${uri}`, error); - }); -} - module.exports = { getClaimByName (claimName) { const deferred = new Promise((resolve, reject) => { - // 1. get all free public claims + // 1. get the top free, public claims getAllFreePublicClaims(claimName) .then(freePublicClaimList => { - const claimId = freePublicClaimList[0].claim_id; const name = freePublicClaimList[0].name; - const outpoint = `${freePublicClaimList[0].txid}:${freePublicClaimList[0].nout}`; + const claimId = freePublicClaimList[0].claim_id; const uri = `${name}#${claimId}`; const height = freePublicClaimList[0].height; // 2. check to see if the file is available locally db.File - .findOne({ where: { name: name, claimId: claimId } }) // note: consolidate for es6? + .findOne({ where: { name: name, claimId: claimId } }) // note: destructure for es6? .then(claim => { // 3. if a matching claim_id is found locally, serve it if (claim) { - logger.debug(`A mysql record was found for ${claimId}`); // trigger update if needed - if (claim.dataValues.outpoint === outpoint) { - logger.debug(`local outpoint matched for ${claimId}`); - } else { - logger.debug(`local outpoint did not match for ${claimId}`); - getClaimAndUpdate(uri, name, claimId); - } - // return the claim + updateFileIfNeeded(uri, name, claimId, claim.dataValues.outpoint, claim.dataValues.height); + // serve the file resolve(claim.dataValues); // 3. otherwise use daemon to retrieve it } else { - // 4. get the claim and serve it + // get the claim and serve it getClaimAndHandleResponse(uri, height, resolve, reject); } }) @@ -144,14 +143,13 @@ module.exports = { const uri = `${claimName}#${claimId}`; // 1. check locally for the claim db.File - .findOne({ where: { name: claimName, claimId: claimId } }) // note: consolidate for es6? + .findOne({ where: { name: claimName, claimId: claimId } }) // note: destructure? .then(claim => { // 2. if a match is found locally, serve it if (claim) { - logger.debug(`A mysql record was found for ${claimId}`); // trigger an update if needed - resolveAndUpdateIfNeeded(uri, claimName, claimId, claim.dataValues.outpoint, claim.dataValues.outpoint); // ok to just start asynch function, or need to add to a task cue? - // resolve and send + updateFileIfNeeded(uri, claimName, claimId, claim.dataValues.outpoint, claim.dataValues.outpoint); + // serve the file resolve(claim.dataValues); // 2. otherwise use daemon to retrieve it } else { diff --git a/public/assets/js/claimPublish.js b/public/assets/js/claimPublish.js index 8d329507..97ffc829 100644 --- a/public/assets/js/claimPublish.js +++ b/public/assets/js/claimPublish.js @@ -110,7 +110,7 @@ document.getElementById('publish-submit').addEventListener('click', function(eve uploader.addEventListener('start', function(event){ var name = document.getElementById('publish-name').value; var license = document.getElementById('publish-license').value; - var nsfw = document.getElementById('publish-nsfw').value; + var nsfw = document.getElementById('publish-nsfw').checked; event.file.meta.name = name; event.file.meta.license = license; event.file.meta.nsfw = nsfw; diff --git a/public/assets/js/memePublish.js b/public/assets/js/memePublish.js index 452d616c..7f69cd6b 100644 --- a/public/assets/js/memePublish.js +++ b/public/assets/js/memePublish.js @@ -128,7 +128,7 @@ socket.on('publish-complete', function(msg){ { text: 'Check out my meme creation on the LBRY blockchain!', url: 'https://spee.ch/' + directUrl, - hashtags: 'MemeFodder', + hashtags: 'LBRYMemeFodder', via: 'lbryio' }) .then( function( el ) { diff --git a/views/partials/memeFodderMaker.handlebars b/views/partials/memeFodderMaker.handlebars index 2828fd1a..0990a84b 100644 --- a/views/partials/memeFodderMaker.handlebars +++ b/views/partials/memeFodderMaker.handlebars @@ -1,13 +1,13 @@
-

#MemeFodder

+

#LBRYMemeFodder

Congratulations, you found the /meme-fodder game

-

Create a meme based on the current lbry://meme-fodder claims using the tool below. Got a masterpiece? Share it with the community and see what they think!

+

Create a meme based on the current lbry://meme-fodder claims using the tool below. Got a masterpiece? Share it with the community and see what they think!

Spee.ch/meme-fodder/play uses the free, public images at the claim lbry://meme-fodder. Want to put a different image on the chopping block? Go publish it!

diff --git a/views/partials/publish.handlebars b/views/partials/publish.handlebars index 25a1cc9e..361cd621 100644 --- a/views/partials/publish.handlebars +++ b/views/partials/publish.handlebars @@ -13,25 +13,27 @@ Image preview...
-
- -
-
- License: - -
-
- - -
-

By clicking 'Publish' I attest that I have read and agree to the LBRY terms of service.

- - +
+
+ +
+
+ License: + +
+
+ + +
+

By clicking 'Publish' I attest that I have read and agree to the LBRY terms of service.

+ + +
- \ No newline at end of file +