'use strict'; const log = require('why-is-node-running'); const blessed = require('neo-blessed'); const clipboard = require('clipboardy'); const argv = require('./argv'); const { renderReleases, renderScene } = require('./tui/render'); const fetchReleases = require('./fetch-releases'); const fetchScene = require('./fetch-scene'); function initScreen() { const screen = blessed.screen({ title: `traxxx ${new Date().getTime()}`, smartCSR: true, mouse: false, }); screen.enableInput(); screen.key(['escape', 'q', 'C-c'], () => { screen.render(); screen.destroy(); }); return screen; } function getMethod() { if (argv.scene) { return { fetch: () => fetchScene(argv.scene), render: renderScene, }; } return { fetch: () => fetchReleases(), render: renderReleases, }; } async function init() { const screen = argv.render && !argv.filename && initScreen(); try { const method = getMethod(); const result = await method.fetch(); if (argv.copy && result.copy) { clipboard.writeSync(result.copy); console.log(`Result copied to clipboard: ${result.copy}`); } if (argv.filename && result.filename) { console.log(result.filename); setTimeout(() => log(), 5000); return; } if (argv.render) { method.render(result, screen); } } catch (error) { console.error(argv.debug ? error : error.message); } } init();