Add as a wizard question, automatically gather post types

This commit is contained in:
Will Boyd
2020-12-26 16:27:16 -05:00
parent 2e9550f14a
commit 108dafd100
4 changed files with 27 additions and 11 deletions
+18 -3
View File
@@ -29,6 +29,20 @@ async function parseFilePromise(config) {
return posts;
}
function getItemTypes(data, config) {
if (config.includeOtherTypes) {
// search export file for all post types minus some default types we don't want
// effectively this will be 'post', 'page', and custom post types
const types = data.rss.channel[0].item
.map(item => item.post_type[0])
.filter(type => !['attachment', 'revision', 'nav_menu_item'].includes(type));
return [...new Set(types)]; // remove duplicates
} else {
// just plain old vanilla "post" posts
return ['post'];
}
}
function getItemsOfType(data, type) {
return data.rss.channel[0].item.filter(item => item.post_type[0] === type);
}
@@ -37,8 +51,9 @@ function collectPosts(data, config) {
// this is passed into getPostContent() for the markdown conversion
const turndownService = translator.initTurndownService();
const types = getItemTypes(data, config);
let allPosts = [];
settings.post_types.forEach(postType => {
types.forEach(postType => {
const postsForType = getItemsOfType(data, postType)
.filter(post => post.status[0] !== 'trash' && post.status[0] !== 'draft')
.map(post => ({
@@ -59,14 +74,14 @@ function collectPosts(data, config) {
content: translator.getPostContent(post, turndownService, config)
}));
if (settings.post_types.length > 1) {
if (types.length > 1) {
console.log(`${postsForType.length} "${postType}" posts found.`);
}
allPosts.push(...postsForType);
});
if (settings.post_types.length === 1) {
if (types.length === 1) {
console.log(allPosts.length + ' posts found.');
}
return allPosts;
-4
View File
@@ -1,7 +1,3 @@
// the post types you want to export (the default is plain old vanilla "post")
// if you specify multiple post types, then a folder will be created for each within the output folder
exports.post_types = ['post'];
// time in ms to wait between requesting image files
// increase this if you see timeouts or server errors
exports.image_file_request_delay = 500;
+7 -2
View File
@@ -3,11 +3,10 @@ const commander = require('commander');
const fs = require('fs');
const inquirer = require('inquirer');
const path = require('path');
const process = require('process');
const package = require('../package.json');
// all user options for command line and wizard are declard here
// all user options for command line and wizard are declared here
const options = [
// wizard must always be first
{
@@ -69,6 +68,12 @@ const options = [
type: 'boolean',
description: 'Save images scraped from post body content',
default: true
},
{
name: 'include-other-types',
type: 'boolean',
description: 'Include custom post types and pages',
default: false
}
];
+2 -2
View File
@@ -132,8 +132,8 @@ function getPostPath(post, config) {
// start with base output dir
const pathSegments = [config.output];
// create fragment for post type, if there's more than one
if (settings.post_types.length > 1) {
// create fragment for post type if we're dealing with more than just "post"
if (config.includeOtherTypes) {
pathSegments.push(post.meta.type);
}