From 6fb2419a11c98ea565647133ff0cbfc39aacad82 Mon Sep 17 00:00:00 2001 From: Will Boyd Date: Sat, 8 Mar 2025 12:22:36 -0500 Subject: [PATCH] Updated headings and count logging --- src/intake.js | 4 ++-- src/parser.js | 4 ++-- src/shared.js | 5 +++++ src/writer.js | 35 +++++++++++++++++++++-------------- 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/intake.js b/src/intake.js index 676e648..beed047 100644 --- a/src/intake.js +++ b/src/intake.js @@ -24,7 +24,7 @@ export async function getConfig() { let wizardAnswers; if (commandLineAnswers.wizard) { - console.log('\nStarting wizard...'); + shared.logHeading('Starting wizard'); // run wizard for questions with prompts that were not answered via the command line const wizardQuestions = questions.load().filter((question) => { @@ -32,7 +32,7 @@ export async function getConfig() { }); wizardAnswers = await getWizardAnswers(wizardQuestions, commandLineAnswers); } else { - console.log('\nSkipping wizard...'); + shared.logHeading('Skipping wizard'); } Object.assign(shared.config, commandLineAnswers, wizardAnswers); diff --git a/src/parser.js b/src/parser.js index 12e0e5e..b9ebaaa 100644 --- a/src/parser.js +++ b/src/parser.js @@ -1,3 +1,4 @@ +import chalk from 'chalk'; import fs from 'fs'; import * as luxon from 'luxon'; import * as data from './data.js'; @@ -6,7 +7,7 @@ import * as shared from './shared.js'; import * as translator from './translator.js'; export async function parseFilePromise() { - console.log('\nParsing...'); + shared.logHeading('Parsing'); const content = await fs.promises.readFile(shared.config.input, 'utf8'); const rssData = await data.load(content); const allPostData = rssData.child('channel').children('item'); @@ -197,4 +198,3 @@ function populateFrontmatter(posts) { function isAbsoluteUrl(url) { return (/^https?:\/\//i).test(url); } - diff --git a/src/shared.js b/src/shared.js index cf3f4fc..c1a13c4 100644 --- a/src/shared.js +++ b/src/shared.js @@ -1,3 +1,4 @@ +import chalk from 'chalk'; import path from 'path'; // simple data store, populated via intake, used everywhere @@ -11,6 +12,10 @@ export function getSlugWithFallback(post) { return post.slug ? post.slug : 'id-' + post.id; } +export function logHeading(text) { + console.log(`\n${chalk.cyan(text + '...')}`); +} + export function buildPostPath(post, overrideConfig) { const pathConfig = overrideConfig ?? config; diff --git a/src/writer.js b/src/writer.js index 5a6b4cc..140b78c 100644 --- a/src/writer.js +++ b/src/writer.js @@ -43,13 +43,13 @@ async function writeFile(destinationPath, data) { async function writeMarkdownFilesPromise(posts) { // package up posts into payloads - let skipCount = 0; + let existingCount = 0; let delay = 0; const payloads = posts.flatMap(post => { const destinationPath = shared.buildPostPath(post); if (checkFile(destinationPath)) { // already exists, don't need to save again - skipCount++; + existingCount++; return []; } else { const payload = { @@ -64,11 +64,8 @@ async function writeMarkdownFilesPromise(posts) { } }); - const remainingCount = payloads.length; - if (remainingCount + skipCount === 0) { - console.log('\nNo posts to save...'); - } else { - console.log(`\nSaving ${remainingCount} posts (${skipCount} already exist)...`); + logSavingMessage('posts', existingCount, payloads.length); + if (payloads.length > 0) { await processPayloadsPromise(payloads, loadMarkdownFilePromise); } } @@ -118,7 +115,7 @@ async function loadMarkdownFilePromise(post) { async function writeImageFilesPromise(posts) { // collect image data from all posts into a single flattened array of payloads - let skipCount = 0; + let existingCount = 0; let delay = 0; const payloads = posts.flatMap(post => { const postPath = shared.buildPostPath(post); @@ -128,7 +125,7 @@ async function writeImageFilesPromise(posts) { const destinationPath = path.join(imagesDir, filename); if (checkFile(destinationPath)) { // already exists, don't need to save again - skipCount++; + existingCount++; return []; } else { const payload = { @@ -144,11 +141,8 @@ async function writeImageFilesPromise(posts) { }); }); - const remainingCount = payloads.length; - if (remainingCount + skipCount === 0) { - console.log('\nNo images to download and save...'); - } else { - console.log(`\nDownloading and saving ${remainingCount} images (${skipCount} already exist)...`); + logSavingMessage('images', existingCount, payloads.length); + if (payloads.length > 0) { await processPayloadsPromise(payloads, loadImageFilePromise); } } @@ -182,6 +176,19 @@ function checkFile(path) { return fs.existsSync(path); } +function logSavingMessage(things, existingCount, remainingCount) { + shared.logHeading(`Saving ${things}`); + if (existingCount + remainingCount === 0) { + console.log(`No ${things} to save.`); + } else if (existingCount === 0) { + console.log(`${remainingCount} ${things} to save.`); + } else if (remainingCount === 0) { + console.log(`All ${existingCount} ${things} already saved.`); + } else { + console.log(`${existingCount} ${things} already saved, ${remainingCount} remaining.`); + } +} + function logPayloadResult(payload, errorMessage) { const messageBits = [ errorMessage ? chalk.red('✗') : chalk.green('✓'),