UNPKG

@sugarcube/plugin-youtube

Version:
95 lines (78 loc) 2.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _fp = require("lodash/fp"); var _dashp = require("dashp"); var _core = require("@sugarcube/core"); var _utils = require("@sugarcube/utils"); var _api = require("../api"); var _utils2 = require("../utils"); const querySource = "youtube_video"; const fetchVideos = async (envelope, { cfg, log, stats }) => { const decisions = (0, _core.createFeatureDecisions)(); const key = (0, _fp.get)("youtube.api_key", cfg); const queries = _core.envelope.queriesByType(querySource, envelope).map(term => (0, _utils2.parseYoutubeVideo)(term)); const logCounter = (0, _utils.counter)(envelope.data.length, ({ cnt, total, percent }) => log.debug(`Progress: ${cnt}/${total} units (${percent}%).`), { threshold: 50, steps: 25 }); log.info(`Querying for ${queries.length} videos.`); const videos = await (0, _dashp.flatmapP)((0, _dashp.flowP)([async qs => { stats.count("total", qs.length); log.info(`Fetch details for ${qs.length} videos.`); let results = []; let failMsg = "Doesn't exist"; try { results = await (0, _api.videosList)(key, qs); stats.count("success", results.length); } catch (e) { failMsg = e.message; } if (results.length !== qs.length) { const missing = qs.reduce((memo, q) => results.find(({ id }) => id === q) == null ? memo.concat({ type: querySource, term: q, reason: failMsg }) : memo, []); missing.forEach(stats.fail); } qs.forEach(logCounter); // Merge the query into the data unit. return results.map(r => { const q = envelope.queries.find(({ type, term }) => { const videoId = decisions.canNcube() ? r._sc_id : r.id; return type === querySource && (0, _utils2.parseYoutubeVideo)(term) === videoId; }); if (q == null) return r; const { tags, ...query } = q; return Object.assign(r, { _sc_queries: Array.isArray(r._sc_queries) ? r._sc_queries.concat(query) : [query] }, Array.isArray(tags) && tags.length > 0 ? { _sc_tags: Array.isArray(r._sc_tags) ? r._sc_tags.concat(tags) : tags } : undefined); }); }, (0, _dashp.delayP)(1000)]), (0, _fp.chunk)(50, queries)); return _core.envelope.concatData(videos, envelope); }; const plugin = _core.plugin.liftManyA2([_utils2.assertCredentials, fetchVideos]); plugin.desc = "List details for individual videos."; plugin.argv = {}; var _default = plugin; exports.default = _default;