From 18a6e7c7c140e9a2614da8ed8482a66660945958 Mon Sep 17 00:00:00 2001 From: btzr-io Date: Tue, 28 Jul 2020 23:00:47 -0500 Subject: [PATCH] generate temporal file for published story --- package.json | 1 + ui/component/publishForm/view.jsx | 30 ++++++++++-------------------- yarn.lock | 25 +++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 9cac1d8c6..fb420b5f4 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "express": "^4.17.1", "if-env": "^1.0.4", "remark-breaks": "^1.0.5", + "tempy": "^0.6.0", "videojs-logo": "^2.0.0" }, "devDependencies": { diff --git a/ui/component/publishForm/view.jsx b/ui/component/publishForm/view.jsx index c662a6775..8f62d167c 100644 --- a/ui/component/publishForm/view.jsx +++ b/ui/component/publishForm/view.jsx @@ -29,9 +29,7 @@ import * as PUBLISH_MODES from 'constants/publish_types'; // @if TARGET='app' import fs from 'fs'; -import { remote } from 'electron'; -const { dialog } = remote; -const currentWindow = remote.getCurrentWindow(); +import tempy from 'tempy'; // @endif const MODES = Object.values(PUBLISH_MODES); @@ -209,19 +207,14 @@ function PublishForm(props: Props) { // @endif // @if TARGET='app' - // Prompt a file dialog to save a backup file of the story to publish. - function showSaveDialog() { - return dialog.showSaveDialog(currentWindow, { - filters: [{ name: 'Text', extensions: ['md', 'markdown', 'txt'] }], - }); - } // Save file changes locally ( desktop ) - async function saveFileChanges() { + function saveFileChanges() { let output = filePath; if (!output || output === '') { - output = await showSaveDialog(); + // Generate a temporary file: + output = tempy.file({ name: 'story.md' }); } - // User saved the file on a custom location + // Create a temporary file and save file changes if (typeof output === 'string') { // Save file changes return new Promise((resolve, reject) => { @@ -244,6 +237,8 @@ function PublishForm(props: Props) { // Publish story: // If here is no file selected yet on desktop, show file dialog and let the // user choose a file path. On web a new File is created + const validStory = verifyStoryContent(); + if (mode === PUBLISH_MODES.STORY) { let outputFile = filePath; // If user modified content on the text editor: @@ -258,16 +253,11 @@ function PublishForm(props: Props) { // @endif // New content stored locally and is not empty - if (outputFile) { + if (outputFile && validStory) { updatePublishForm({ filePath: outputFile }); + publish(outputFile); } - } - - // Verify if story has a valid content and is not emoty - // On web file size limit will be verified as well - const verified = verifyStoryContent(); - - if (verified) { + } else if (validStory && outputFile) { publish(outputFile); } } diff --git a/yarn.lock b/yarn.lock index 3ed057127..1865d5b15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6105,6 +6105,11 @@ is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-string@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" @@ -10525,6 +10530,11 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + temp-file@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.7.tgz#686885d635f872748e384e871855958470aeb18a" @@ -10532,6 +10542,16 @@ temp-file@^3.3.7: async-exit-hook "^2.0.1" fs-extra "^8.1.0" +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -10785,6 +10805,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"