progress of tar import through WS

This commit is contained in:
zadam 2019-02-10 16:36:25 +01:00
parent 51175e3676
commit cde68abec9
11 changed files with 47 additions and 18 deletions

View file

@ -2,13 +2,20 @@ import treeService from '../services/tree.js';
import treeUtils from "../services/tree_utils.js";
import server from "../services/server.js";
import infoService from "../services/info.js";
import messagingService from "../services/messaging.js";
const $dialog = $("#import-dialog");
const $form = $("#import-form");
const $noteTitle = $dialog.find(".note-title");
const $fileUploadInput = $("#import-file-upload-input");
const $importNoteCountWrapper = $("#import-note-count-wrapper");
const $importNoteCount = $("#import-note-count");
async function showDialog() {
$importNoteCountWrapper.hide();
$importNoteCount.text('0');
$fileUploadInput.val('');
glob.activeDialog = $dialog;
const currentNode = treeService.getCurrentNode();
@ -29,10 +36,6 @@ function importIntoNote(importNoteId) {
const formData = new FormData();
formData.append('upload', $fileUploadInput[0].files[0]);
// this is done to reset the field otherwise triggering import same file again would not work
// https://github.com/zadam/trilium/issues/388
$fileUploadInput.val('');
$.ajax({
url: baseApiUrl + 'notes/' + importNoteId + '/import',
headers: server.getHeaders(),
@ -46,7 +49,7 @@ function importIntoNote(importNoteId) {
.done(async note => {
$dialog.modal('hide');
infoService.showMessage("Import finished successfully.")
infoService.showMessage("Import finished successfully.");
await treeService.reload();
@ -58,6 +61,14 @@ function importIntoNote(importNoteId) {
});
}
messagingService.subscribeToMessages(message => {
if (message.type === 'importNoteCount') {
$importNoteCountWrapper.show();
$importNoteCount.text(message.count);
}
});
export default {
showDialog
}

View file

@ -38,7 +38,7 @@ function handleMessage(event) {
}
if (message.type === 'sync') {
lastPingTs = new Date().getTime();
lastPingTs = Date.now();
if (message.data.length > 0) {
console.debug(utils.now(), "Sync data: ", message.data);
@ -81,10 +81,10 @@ setTimeout(() => {
ws = connectWebSocket();
lastSyncId = glob.maxSyncIdAtLoad;
lastPingTs = new Date().getTime();
lastPingTs = Date.now();
setInterval(async () => {
if (new Date().getTime() - lastPingTs > 30000) {
if (Date.now() - lastPingTs > 30000) {
console.log("Lost connection to server");
}

View file

@ -8,7 +8,7 @@ let protectedSessionId = null;
optionsInitService.optionsReady.then(options => protectedSessionTimeout = options.protectedSessionTimeout);
setInterval(() => {
if (lastProtectedSessionOperationDate !== null && new Date().getTime() - lastProtectedSessionOperationDate.getTime() > protectedSessionTimeout * 1000) {
if (lastProtectedSessionOperationDate !== null && Date.now() - lastProtectedSessionOperationDate.getTime() > protectedSessionTimeout * 1000) {
resetProtectedSession();
}
}, 5000);

View file

@ -77,7 +77,7 @@ async function stopWatch(what, func) {
const ret = await func();
const tookMs = new Date().getTime() - start.getTime();
const tookMs = Date.now() - start.getTime();
console.log(`${what} took ${tookMs}ms`);

View file

@ -430,7 +430,7 @@ async function runChecks() {
await runAllChecks();
elapsedTimeMs = new Date().getTime() - startTime.getTime();
elapsedTimeMs = Date.now() - startTime.getTime();
});
if (fixedIssues) {

View file

@ -42,7 +42,7 @@ async function getHashes() {
links: await getHash(Link)
};
const elapseTimeMs = new Date().getTime() - startTime.getTime();
const elapseTimeMs = Date.now() - startTime.getTime();
log.info(`Content hash computation took ${elapseTimeMs}ms`);

View file

@ -6,6 +6,7 @@ const utils = require('../../services/utils');
const log = require('../../services/log');
const repository = require('../../services/repository');
const noteService = require('../../services/notes');
const messagingService = require('../../services/messaging');
const Branch = require('../../entities/branch');
const tar = require('tar-stream');
const stream = require('stream');
@ -13,7 +14,12 @@ const path = require('path');
const commonmark = require('commonmark');
const mimeTypes = require('mime-types');
let importNoteCount;
let lastSentCountTs = Date.now();
async function importTar(fileBuffer, importRootNote) {
importNoteCount = 0;
// maps from original noteId (in tar file) to newly generated noteId
const noteIdMap = {};
const attributes = [];
@ -287,7 +293,7 @@ async function importTar(fileBuffer, importRootNote) {
}
}
/** @return path without leading or trailing slash and backslashes converted to forward ones*/
/** @return {string} path without leading or trailing slash and backslashes converted to forward ones*/
function normalizeFilePath(filePath) {
filePath = filePath.replace(/\\/g, "/");
@ -314,7 +320,7 @@ async function importTar(fileBuffer, importRootNote) {
// call next when you are done with this entry
stream.on('end', async function() {
let filePath = normalizeFilePath(header.name);
const filePath = normalizeFilePath(header.name);
const content = Buffer.concat(chunks);
@ -331,6 +337,14 @@ async function importTar(fileBuffer, importRootNote) {
log.info("Ignoring tar import entry with type " + header.type);
}
importNoteCount++;
if (Date.now() - lastSentCountTs >= 1000) {
lastSentCountTs = Date.now();
messagingService.sendMessageToAllClients({ type: 'importNoteCount', count: importNoteCount });
}
next(); // ready for next entry
});

View file

@ -397,7 +397,7 @@ async function deleteNote(branch) {
}
async function cleanupDeletedNotes() {
const cutoffDate = new Date(new Date().getTime() - 48 * 3600 * 1000);
const cutoffDate = new Date(Date.now() - 48 * 3600 * 1000);
// it's better to not use repository for this because it will complain about saving protected notes
// out of protected session

View file

@ -132,7 +132,7 @@ async function pullSync(syncContext) {
}
log.info("Pulled " + rows.length + " changes from " + changesUri + " in "
+ (new Date().getTime() - startDate.getTime()) + "ms");
+ (Date.now() - startDate.getTime()) + "ms");
for (const {sync, entity} of rows) {
if (!sourceIdService.isLocalSourceId(sync.sourceId)) {
@ -194,7 +194,7 @@ async function pushSync(syncContext) {
entities: syncRecords
});
log.info(`Pushing ${syncRecords.length} syncs in ` + (new Date().getTime() - startDate.getTime()) + "ms");
log.info(`Pushing ${syncRecords.length} syncs in ` + (Date.now() - startDate.getTime()) + "ms");
lastSyncedPush = syncRecords[syncRecords.length - 1].sync.id;

View file

@ -58,7 +58,7 @@ async function stopWatch(what, func) {
const ret = await func();
const tookMs = new Date().getTime() - start.getTime();
const tookMs = Date.now() - start.getTime();
console.log(`${what} took ${tookMs}ms`);

View file

@ -27,6 +27,10 @@
Trilium <code>.tar</code> export files can contain executable scripts which may contain harmful behavior. Safe import will deactivate automatic execution of all imported scripts. Uncheck "Safe import" only if the imported tar archive is supposed to contain executable scripts and you completely trust the contents of the import file.
</div>
</div>
<div id="import-note-count-wrapper">
<strong>Imported notes:</strong> <span id="import-note-count"></span>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary">Import</button>