From d005a9f3c8cda4aa4d29c55abf31a342efe05c8a Mon Sep 17 00:00:00 2001 From: QiTao Date: Sun, 9 Feb 2020 00:02:09 -0600 Subject: [PATCH] Task #27 - Fix for export markdown function and archiving. --- app/controllers/Export.controller.js | 46 ++++++++++++++++------------ 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/app/controllers/Export.controller.js b/app/controllers/Export.controller.js index b2bf1ef..43c501c 100644 --- a/app/controllers/Export.controller.js +++ b/app/controllers/Export.controller.js @@ -11,7 +11,7 @@ const path = require('path'); */ class Export extends Controller { static get services() { - return [...super.services, 'models'] + return [...super.services, 'models', 'app'] } /* * Serve the main page. @@ -40,11 +40,12 @@ class Export extends Controller { const temp_dir = path.resolve(os.tmpdir(), uuid()) await fs.mkdir(temp_dir) - this._markdown_recurse(page0, temp_dir) + await this._markdown_recurse(page0, temp_dir) /* Archive directory */ const exec = require('child_process').exec; - exec('zip -r ' + path.resolve(temp_dir, 'archive.zip') + ' ' + path.resolve(temp_dir), (error) => { + console.log('zip -9jpr ' + path.resolve(temp_dir, '../archive.zip') + ' ' + path.resolve(temp_dir) + '/') + exec('cd ' + path.resolve(temp_dir) + '; zip -r archive.zip *', (error) => { if (error) { console.error(`exec error: ${error}`); return res.error(500); @@ -56,16 +57,17 @@ class Export extends Controller { } async _markdown_recurse(root, temp_dir) { //recursive function for creating directory and generating markdown pages - console.log('root', root) + const fs = require('fs').promises const Page = this.models.get('api:Page') const child = await Page.find({ UUID: { $in: root.ChildPageIds } }) - for (const page of child) { - const markdown = this._generate_markdown(page) + const markdown = await this._generate_markdown(page) + await fs.writeFile(path.resolve(temp_dir, page.Name.replace(/\s/g, '_')) + '.md', markdown) if (page.ChildPageIds && page.ChildPageIds.length) { const sub_temp_dir = path.resolve(temp_dir, page.Name.replace(/\s/g, '_')) + // console.log(sub_temp_dir) await fs.mkdir(sub_temp_dir) - this._markdown_recurse(page, sub_temp_dir) + await this._markdown_recurse(page, sub_temp_dir) } } } @@ -91,16 +93,19 @@ class Export extends Controller { const html_name = page.Name.replace(/\s/g, '_') + '.html' mapping[page.UUID] = html_name } - const sidebar_html = this._generate_sidebar(page0) //generates the sidebar contents - + console.log(page0) + const sidebar_html = await this._generate_sidebar(mapping, page0) //generates the sidebar contents + const temp_dir = path.resolve(os.tmpdir(), uuid()) //make temporary directory await fs.mkdir(temp_dir) - /* Generates html files from template */ - for(const page of pages) { + for (const page of pages) { const fs = require('fs').promises - const contents = await fs.readFile('../assets/export-template.html') - const content_html = this._generate_html(page) + const contents = (await fs.readFile(path.resolve(this.app.directories.assets, 'export-template.html'))).toString('utf8') + console.log(page) + //console.log({contents}) + const content_html = await this._generate_html(page) + //console.log({content_html, sidebar_html}) const page_html = contents.replace('%%SIDEBAR%%', sidebar_html).replace('%%CONTENTS%%', content_html) await fs.writeFile(path.resolve(temp_dir, mapping[page.UUID]), page_html) } @@ -112,18 +117,21 @@ class Export extends Controller { return res.error(500); return; } - return res.sendFile(`${path.resolve(temp_dir, 'archive.zip')}`) }) } - async _generate_sidebar(root) { //generate sidebar from mapping array and root - if (root.ChildPageIds < 1) { - return '' + root.Name + '' + async _generate_sidebar(mapping, upper_node) { //generate sidebar from mapping array and upper_node + const Page = this.models.get('api:Page') + console.log(upper_node) + console.log(upper_node.ChildPageIds == 'undefined') + if (upper_node.ChildPageIds == 'undefined') { + return '' + upper_node.Name + '' } else { let base = '