From 31cfede7a73d5ad8d423df4b32ccd64ab6cf8536 Mon Sep 17 00:00:00 2001 From: perissology Date: Wed, 9 Jan 2019 06:29:13 -0800 Subject: [PATCH] enex import: attempt to get correct mime from Buffer --- package.json | 1 + src/services/import/enex.js | 34 +++++++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 88f830980..e23b537ac 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "electron-in-page-search": "1.3.2", "express": "4.16.4", "express-session": "1.15.6", + "file-type": "10.7.0", "fs-extra": "7.0.1", "get-port": "4.1.0", "helmet": "3.15.0", diff --git a/src/services/import/enex.js b/src/services/import/enex.js index 81a7f386d..183e2b192 100644 --- a/src/services/import/enex.js +++ b/src/services/import/enex.js @@ -1,4 +1,5 @@ const sax = require("sax"); +const fileType = require('file-type'); const stream = require('stream'); const xml2js = require('xml2js'); const log = require("../log"); @@ -222,7 +223,26 @@ async function importEnex(file, parentNote) { const mediaRegex = new RegExp(`]*>`, 'g'); + const fileTypeFromBuffer = fileType(resource.content); + if (fileTypeFromBuffer) { + // If fileType returns something for buffer, then set the mime given + resource.mime = fileTypeFromBuffer.mime; + } + + const createResourceNote = async () => { + const resourceNote = (await noteService.createNote(noteEntity.noteId, resource.title, resource.content, { + attributes: resource.attributes, + type: 'file', + mime: resource.mime + })).note; + + const resourceLink = `${utils.escapeHtml(resource.title)}`; + + noteEntity.content = noteEntity.content.replace(mediaRegex, resourceLink); + } + if (["image/jpeg", "image/png", "image/gif"].includes(resource.mime)) { + try { const originalName = "image." + resource.mime.substr(6); const { url } = await imageService.saveImage(resource.content, originalName, noteEntity.noteId); @@ -236,17 +256,13 @@ async function importEnex(file, parentNote) { // otherwise image would be removed since no note would include it note.content += imageLink; } + } catch (e) { + log.error("error when saving image from ENEX file: " + e); + await createResourceNote(); + } } else { - const resourceNote = (await noteService.createNote(noteEntity.noteId, resource.title, resource.content, { - attributes: resource.attributes, - type: 'file', - mime: resource.mime - })).note; - - const resourceLink = `${utils.escapeHtml(resource.title)}`; - - noteEntity.content = noteEntity.content.replace(mediaRegex, resourceLink); + await createResourceNote(); } }