From 3f2229d9e13b70ddb27d2e2c9caa0c10b9627880 Mon Sep 17 00:00:00 2001 From: zadam Date: Sun, 6 Oct 2019 18:28:53 +0200 Subject: [PATCH] better handling of not detected mime type --- Dockerfile | 2 +- bin/build-server.sh | 2 +- src/services/import/mime.js | 1 + src/services/import/single.js | 7 +++---- src/services/import/tar.js | 2 +- src/services/note_cache.js | 9 ++++++--- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2b5244e38..30a586e95 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:12.10.0-alpine +FROM node:12.11.1-alpine # Create app directory WORKDIR /usr/src/app diff --git a/bin/build-server.sh b/bin/build-server.sh index ed47eed55..811f3e804 100755 --- a/bin/build-server.sh +++ b/bin/build-server.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash PKG_DIR=dist/trilium-linux-x64-server -NODE_VERSION=12.10.0 +NODE_VERSION=12.11.1 rm -r $PKG_DIR mkdir $PKG_DIR diff --git a/src/services/import/mime.js b/src/services/import/mime.js index 3266b5a1e..8ea3f5361 100644 --- a/src/services/import/mime.js +++ b/src/services/import/mime.js @@ -64,6 +64,7 @@ const EXTENSION_TO_MIME = { ".swift": "text/x-swift" }; +/** @returns false if MIME is not detected */ function getMime(fileName) { if (fileName.toLowerCase() === 'dockerfile') { return "text/x-dockerfile"; diff --git a/src/services/import/single.js b/src/services/import/single.js index 9aafd0fd7..0ef9c0750 100644 --- a/src/services/import/single.js +++ b/src/services/import/single.js @@ -8,7 +8,7 @@ const path = require('path'); const mimeService = require('./mime'); async function importSingleFile(importContext, file, parentNote) { - const mime = mimeService.getMime(file.originalname); + const mime = mimeService.getMime(file.originalname) || file.mimetype; if (importContext.textImportedAsText) { if (mime === 'text/html') { @@ -42,13 +42,12 @@ async function importImage(file, parentNote, importContext) { async function importFile(importContext, file, parentNote) { const originalName = file.originalname; const size = file.size; - const mime = mimeService.getMime(originalName); const {note} = await noteService.createNote(parentNote.noteId, originalName, file.buffer, { target: 'into', isProtected: parentNote.isProtected && protectedSessionService.isProtectedSessionAvailable(), type: 'file', - mime: mime === false ? file.mimetype : mime, + mime: mimeService.getMime(originalName) || file.mimetype, attributes: [ { type: "label", name: "originalFileName", value: originalName }, { type: "label", name: "fileSize", value: size } @@ -63,7 +62,7 @@ async function importFile(importContext, file, parentNote) { async function importCodeNote(importContext, file, parentNote) { const title = getFileNameWithoutExtension(file.originalname); const content = file.buffer.toString("UTF-8"); - const detectedMime = mimeService.getMime(file.originalname); + const detectedMime = mimeService.getMime(file.originalname) || file.mimetype; const mime = mimeService.normalizeMimeType(detectedMime); const {note} = await noteService.createNote(parentNote.noteId, title, content, { diff --git a/src/services/import/tar.js b/src/services/import/tar.js index 05d92d505..c07446acd 100644 --- a/src/services/import/tar.js +++ b/src/services/import/tar.js @@ -132,7 +132,7 @@ async function importTar(importContext, fileBuffer, importRootNote) { } function detectFileTypeAndMime(importContext, filePath) { - const mime = mimeService.getMime(filePath); + const mime = mimeService.getMime(filePath) || "application/octet-stream"; const type = mimeService.getType(importContext, mime); return { mime, type }; diff --git a/src/services/note_cache.js b/src/services/note_cache.js index d91e36484..2c5a8f0b6 100644 --- a/src/services/note_cache.js +++ b/src/services/note_cache.js @@ -86,9 +86,12 @@ async function findNotes(query) { return []; } - // trim is necessary because even with .split() trailing spaces are tokens which causes havoc - // filtering '/' because it's used as separator - const allTokens = query.trim().toLowerCase().split(" ").filter(token => token !== '/'); + const allTokens = query + .trim() // necessary because even with .split() trailing spaces are tokens which causes havoc + .toLowerCase() + .split(/[ -]/) + .filter(token => token !== '/'); // '/' is used as separator + const tokens = allTokens.slice(); let results = [];