Homepage API v2: includes meme
Ticket: 1318 Had to create v2 as there is no backward-compatible location in the v1 json to place it. v2 allows any future expansion beyond 'categories' and 'meme'. One-meme-per-homepage is also supported, but not enabled for now.
This commit is contained in:
parent
6e34282cdc
commit
45bb9ad0fa
4 changed files with 62 additions and 31 deletions
|
@ -1,13 +1,39 @@
|
||||||
const memo = {};
|
const memo = {};
|
||||||
|
|
||||||
// this didn't seem to help.
|
// this didn't seem to help.
|
||||||
if (!memo.homepageData) {
|
if (!memo.homepageData) {
|
||||||
try {
|
try {
|
||||||
memo.homepageData = require('../../custom/homepages/v2');
|
memo.homepageData = require('../../custom/homepages/v2');
|
||||||
|
memo.meme = require('../../custom/homepages/meme');
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log('homepage data failed');
|
console.log('getHomepageJSON:', err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const getHomepageJSON = () => {
|
|
||||||
|
const getHomepageJsonV1 = () => {
|
||||||
return memo.homepageData || {};
|
return memo.homepageData || {};
|
||||||
};
|
};
|
||||||
module.exports = { getHomepageJSON };
|
|
||||||
|
const getHomepageJsonV2 = () => {
|
||||||
|
if (!memo.homepageData) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
const v2 = {};
|
||||||
|
const homepageKeys = Object.keys(memo.homepageData);
|
||||||
|
|
||||||
|
homepageKeys.forEach((hp) => {
|
||||||
|
v2[hp] = {
|
||||||
|
categories: memo.homepageData[hp],
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
if (memo.meme && v2['en']) {
|
||||||
|
// Only supporting English memes for now, but one-per-homepage is possible.
|
||||||
|
v2['en'].meme = memo.meme;
|
||||||
|
}
|
||||||
|
|
||||||
|
return v2;
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = { getHomepageJsonV1, getHomepageJsonV2 };
|
||||||
|
|
27
web/src/homepageApi.js
Normal file
27
web/src/homepageApi.js
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
const { CUSTOM_HOMEPAGE } = require('../../config');
|
||||||
|
const { getHomepageJsonV1, getHomepageJsonV2 } = require('./getHomepageJSON');
|
||||||
|
|
||||||
|
async function getHomepage(ctx, version) {
|
||||||
|
if (!CUSTOM_HOMEPAGE) {
|
||||||
|
ctx.status = 404;
|
||||||
|
ctx.body = { message: 'Not Found' };
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const content = version === 1 ? getHomepageJsonV1() : getHomepageJsonV2();
|
||||||
|
ctx.set('Content-Type', 'application/json');
|
||||||
|
ctx.set('Access-Control-Allow-Origin', '*');
|
||||||
|
ctx.body = {
|
||||||
|
status: 'success',
|
||||||
|
data: content,
|
||||||
|
};
|
||||||
|
} catch (err) {
|
||||||
|
ctx.status = err.statusCode || err.status || 500;
|
||||||
|
ctx.body = {
|
||||||
|
message: err.message,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { getHomepage };
|
|
@ -22,7 +22,7 @@ const {
|
||||||
} = require('../../ui/util/web');
|
} = require('../../ui/util/web');
|
||||||
const { getJsBundleId } = require('../bundle-id.js');
|
const { getJsBundleId } = require('../bundle-id.js');
|
||||||
const { lbryProxy: Lbry } = require('../lbry');
|
const { lbryProxy: Lbry } = require('../lbry');
|
||||||
const { getHomepageJSON } = require('./getHomepageJSON');
|
const { getHomepageJsonV1 } = require('./getHomepageJSON');
|
||||||
const { buildURI, parseURI, normalizeClaimUrl } = require('./lbryURI');
|
const { buildURI, parseURI, normalizeClaimUrl } = require('./lbryURI');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const moment = require('moment');
|
const moment = require('moment');
|
||||||
|
@ -61,7 +61,7 @@ function truncateDescription(description, maxChars = 200) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCategoryMeta(path) {
|
function getCategoryMeta(path) {
|
||||||
const homepage = getHomepageJSON();
|
const homepage = getHomepageJsonV1();
|
||||||
|
|
||||||
if (path === `/$/${PAGES.WILD_WEST}` || path === `/$/${PAGES.WILD_WEST}/`) {
|
if (path === `/$/${PAGES.WILD_WEST}` || path === `/$/${PAGES.WILD_WEST}/`) {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
const { CUSTOM_HOMEPAGE } = require('../../config.js');
|
|
||||||
const { generateStreamUrl } = require('../../ui/util/web');
|
const { generateStreamUrl } = require('../../ui/util/web');
|
||||||
const { getHomepageJSON } = require('./getHomepageJSON');
|
|
||||||
const { getHtml } = require('./html');
|
const { getHtml } = require('./html');
|
||||||
const { getOEmbed } = require('./oEmbed');
|
const { getOEmbed } = require('./oEmbed');
|
||||||
const { getRss } = require('./rss');
|
const { getRss } = require('./rss');
|
||||||
|
@ -8,6 +6,7 @@ const { getTempFile } = require('./tempfile');
|
||||||
|
|
||||||
const fetch = require('node-fetch');
|
const fetch = require('node-fetch');
|
||||||
const Router = require('@koa/router');
|
const Router = require('@koa/router');
|
||||||
|
const { getHomepage } = require('./homepageApi');
|
||||||
|
|
||||||
// So any code from 'lbry-redux'/'lbryinc' that uses `fetch` can be run on the server
|
// So any code from 'lbry-redux'/'lbryinc' that uses `fetch` can be run on the server
|
||||||
global.fetch = fetch;
|
global.fetch = fetch;
|
||||||
|
@ -39,30 +38,9 @@ const tempfileMiddleware = async (ctx) => {
|
||||||
ctx.body = temp;
|
ctx.body = temp;
|
||||||
};
|
};
|
||||||
|
|
||||||
router.get(`/$/api/content/v1/get`, async (ctx) => {
|
router.get(`/$/api/content/v1/get`, async (ctx) => getHomepage(ctx, 1));
|
||||||
if (!CUSTOM_HOMEPAGE) {
|
|
||||||
ctx.status = 404;
|
router.get(`/$/api/content/v2/get`, async (ctx) => getHomepage(ctx, 2));
|
||||||
ctx.body = {
|
|
||||||
message: 'Not Found',
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
let content;
|
|
||||||
try {
|
|
||||||
content = getHomepageJSON();
|
|
||||||
ctx.set('Content-Type', 'application/json');
|
|
||||||
ctx.set('Access-Control-Allow-Origin', '*');
|
|
||||||
ctx.body = {
|
|
||||||
status: 'success',
|
|
||||||
data: content,
|
|
||||||
};
|
|
||||||
} catch (err) {
|
|
||||||
ctx.status = err.statusCode || err.status || 500;
|
|
||||||
ctx.body = {
|
|
||||||
message: err.message,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
router.get(`/$/download/:claimName/:claimId`, async (ctx) => {
|
router.get(`/$/download/:claimName/:claimId`, async (ctx) => {
|
||||||
const streamUrl = getStreamUrl(ctx);
|
const streamUrl = getStreamUrl(ctx);
|
||||||
|
|
Loading…
Reference in a new issue