From 664485ccd5c416797f804a225b13b8cd27f93345 Mon Sep 17 00:00:00 2001 From: zadam Date: Sat, 9 Nov 2019 13:01:05 +0100 Subject: [PATCH] file revisions preview --- .../a2c75661-f9e2-478f-a69f-6a9409e69997.xml | 129 +++++++++--------- .../javascripts/dialogs/note_revisions.js | 40 ++++-- src/public/javascripts/services/utils.js | 3 +- src/routes/api/note_revisions.js | 9 +- src/services/note_revisions.js | 5 + 5 files changed, 107 insertions(+), 79 deletions(-) diff --git a/.idea/dataSources/a2c75661-f9e2-478f-a69f-6a9409e69997.xml b/.idea/dataSources/a2c75661-f9e2-478f-a69f-6a9409e69997.xml index ff9d9b811..f9cd3efb1 100644 --- a/.idea/dataSources/a2c75661-f9e2-478f-a69f-6a9409e69997.xml +++ b/.idea/dataSources/a2c75661-f9e2-478f-a69f-6a9409e69997.xml @@ -400,263 +400,268 @@ parentNoteId 1 "note" - + 3 INT|0s 1 + + + 4 + INT|0s + 1 0 - - 4 + + 5 TEXT|0s 1 'text' - - 5 + + 6 TEXT|0s 1 'text/html' - - 6 + + 7 TEXT|0s 1 "" - - 7 - INT|0s - 1 - 0 - - + 8 INT|0s 1 0 - + 9 - TEXT|0s + INT|0s 1 + 0 - + 10 TEXT|0s 1 - + 11 TEXT|0s 1 - + 12 TEXT|0s 1 - + + 13 + TEXT|0s + 1 + + 1 noteId 1 - + title - + type - + isDeleted - + dateCreated - + dateModified - + utcDateCreated - + utcDateModified - + noteId 1 sqlite_autoindex_notes_1 - + 1 TEXT|0s 1 - + 2 TEXT|0s - + 3 INTEGER|0s 1 0 - + 4 TEXT|0s 1 "" - + 5 TEXT|0s 1 - + 6 TEXT|0s 1 - + 1 name 1 - + name 1 sqlite_autoindex_options_1 - + 1 TEXT|0s 1 - + 2 TEXT|0s 1 - + 3 TEXT|0s 1 "" - + 4 TEXT|0s 1 - + 5 INT|0s - + 1 noteId 1 - + noteId 1 sqlite_autoindex_recent_notes_1 - + 1 TEXT|0s 1 - + 2 TEXT|0s 1 - + 1 sourceId 1 - + sourceId 1 sqlite_autoindex_source_ids_1 - + 1 text|0s - + 2 text|0s - + 3 text|0s - + 4 int|0s - + 5 text|0s - + 1 - + 2 - + 1 INTEGER|0s 1 1 - + 2 TEXT|0s 1 - + 3 TEXT|0s 1 - + 4 TEXT|0s 1 - + 5 TEXT|0s 1 - + entityName entityId 1 - + utcSyncDate - + id 1 diff --git a/src/public/javascripts/dialogs/note_revisions.js b/src/public/javascripts/dialogs/note_revisions.js index 4af7e2d7f..a62f2b617 100644 --- a/src/public/javascripts/dialogs/note_revisions.js +++ b/src/public/javascripts/dialogs/note_revisions.js @@ -64,31 +64,41 @@ $list.on('change', async () => { const fullNoteRevision = await server.get(`notes/${revisionItem.noteId}/revisions/${revisionItem.noteRevisionId}`); - if (note.type === 'text') { + if (revisionItem.type === 'text') { $content.html(fullNoteRevision.content); } - else if (note.type === 'code') { + else if (revisionItem.type === 'code') { $content.html($("
").text(fullNoteRevision.content));
     }
-    else if (note.type === 'image') {
+    else if (revisionItem.type === 'image') {
         $content.html($("")
             // reason why we put this inline as base64 is that we do not want to let user to copy this
             // as a URL to be used in a note. Instead if they copy and paste it into a note, it will be a uploaded as a new note
             .attr("src", `data:${note.mime};base64,` + fullNoteRevision.content)
             .css("width", "100%"));
     }
-    else if (note.type === 'file') {
-        $content.html(
-            $("")
-                .append($("").append(
-                    $("").append(
-                    $("
").text("MIME: "), - $("").text(revisionItem.mime) - )) - .append($("
").text("File size:"), - $("").text(revisionItem.contentLength + " bytes") - )) - ); + else if (revisionItem.type === 'file') { + const $table = $("") + .append($("").append( + $("").append( + $("").append( + $("
").text("MIME: "), + $("").text(revisionItem.mime) + )) + .append($("
").text("File size:"), + $("").text(revisionItem.contentLength + " bytes") + )); + + if (fullNoteRevision.content) { + $table.append($("
").text("Preview:"), + $("").append( + $('
')
+                        .text(fullNoteRevision.content)
+                )
+            ));
+        }
+
+        $content.html($table);
     }
     else {
         $content.text("Preview isn't available for this note type.");
diff --git a/src/public/javascripts/services/utils.js b/src/public/javascripts/services/utils.js
index f8f3bcdee..1f1560d74 100644
--- a/src/public/javascripts/services/utils.js
+++ b/src/public/javascripts/services/utils.js
@@ -96,6 +96,8 @@ function getHost() {
 }
 
 function download(url) {
+    url += '?' + Date.now(); // don't use cache
+
     if (isElectron()) {
         const remote = require('electron').remote;
 
@@ -227,7 +229,6 @@ export default {
     assertArguments,
     escapeHtml,
     stopWatch,
-    formatValueWithWhitespace,
     formatLabel,
     getHost,
     download,
diff --git a/src/routes/api/note_revisions.js b/src/routes/api/note_revisions.js
index 4177586f8..62f0c6c7d 100644
--- a/src/routes/api/note_revisions.js
+++ b/src/routes/api/note_revisions.js
@@ -19,7 +19,14 @@ async function getNoteRevisions(req) {
 async function getNoteRevision(req) {
     const noteRevision = await repository.getNoteRevision(req.params.noteRevisionId);
 
-    if (noteRevision.type !== 'file') {
+    if (noteRevision.type === 'file') {
+        if (noteRevision.isStringNote()) {
+            await noteRevision.getContent();
+
+            noteRevision.content = noteRevision.content.substr(0, 10000);
+        }
+    }
+    else {
         await noteRevision.getContent();
 
         if (noteRevision.content && noteRevision.type === 'image') {
diff --git a/src/services/note_revisions.js b/src/services/note_revisions.js
index 24f40e580..8548bf9f8 100644
--- a/src/services/note_revisions.js
+++ b/src/services/note_revisions.js
@@ -9,8 +9,13 @@ const dateUtils = require('../services/date_utils');
 async function protectNoteRevisions(note) {
     for (const revision of await note.getRevisions()) {
         if (note.isProtected !== revision.isProtected) {
+            const content = await revision.getContent();
+
             revision.isProtected = note.isProtected;
 
+            // this will force de/encryption
+            await revision.setContent(content);
+
             await revision.save();
         }
     }