sync fix to prefix and some usability improvements

This commit is contained in:
azivner 2017-11-26 23:10:23 -05:00
parent 37a105db4d
commit 8b5988e13c
8 changed files with 40 additions and 24 deletions

View file

@ -6,10 +6,10 @@ const editTreePrefix = (function() {
const treePrefixInputEl = $("#tree-prefix-input");
const noteTitleEl = $('#tree-prefix-note-title');
function showDialog() {
async function showDialog() {
glob.activeDialog = dialogEl;
dialogEl.dialog({
await dialogEl.dialog({
modal: true,
width: 800
});
@ -36,6 +36,8 @@ const editTreePrefix = (function() {
prefix: prefix
}),
success: () => {
currentNode.data.prefix = prefix;
const noteTitle = noteTree.getNoteTitle(currentNode.data.note_id);
const title = (prefix ? (prefix + " - ") : "") + noteTitle;

View file

@ -346,6 +346,9 @@ const noteTree = (function() {
if (toNode !== null) {
treeChanges.moveToNode(node, toNode);
}
},
"f2": node => {
editTreePrefix.showDialog();
}
};

View file

@ -6,6 +6,7 @@ const auth = require('../../services/auth');
const sql = require('../../services/sql');
const utils = require('../../services/utils');
const notes = require('../../services/notes');
const log = require('../../services/log');
const protected_session = require('../../services/protected_session');
const data_encryption = require('../../services/data_encryption');
const RequestContext = require('../../services/request_context');
@ -15,6 +16,12 @@ router.get('/:noteId', auth.checkApiAuth, async (req, res, next) => {
const detail = await sql.getSingleResult("SELECT * FROM notes WHERE note_id = ?", [noteId]);
if (!detail) {
log.info("Note " + noteId + " has not been found.");
return res.status(404).send({});
}
if (detail.is_protected) {
const dataKey = protected_session.getDataKey(req);

View file

@ -50,10 +50,10 @@ router.put('/:noteId/protectSubTree/:isProtected', auth.checkApiAuth, async (req
router.put('/:noteTreeId/setPrefix', auth.checkApiAuth, async (req, res, next) => {
const noteTreeId = req.params.noteTreeId;
const prefix = req.body.prefix;
const prefix = utils.isEmptyOrWhitespace(req.body.prefix) ? null : req.body.prefix;
await sql.doInTransaction(async () => {
await sql.execute("UPDATE notes_tree SET prefix = ? WHERE note_tree_id = ?", [prefix, noteTreeId]);
await sql.execute("UPDATE notes_tree SET prefix = ?, date_modified = ? WHERE note_tree_id = ?", [prefix, utils.nowTimestamp(), noteTreeId]);
await sync_table.addNoteTreeSync(noteTreeId);
});

View file

@ -17,7 +17,7 @@ async function getContentHash() {
"is_deleted FROM notes ORDER BY note_id"));
hash = updateHash(hash, await sql.getResults("SELECT note_tree_id, note_id, note_pid, note_pos, date_modified, " +
"is_deleted FROM notes_tree ORDER BY note_tree_id"));
"is_deleted, prefix FROM notes_tree ORDER BY note_tree_id"));
hash = updateHash(hash, await sql.getResults("SELECT note_history_id, note_id, note_title, note_text, " +
"date_modified_from, date_modified_to FROM notes_history ORDER BY note_history_id"));

View file

@ -11,24 +11,24 @@ async function createNewNote(parentNoteId, note) {
let newNotePos = 0;
if (note.target === 'into') {
const maxNotePos = await sql.getSingleValue('SELECT MAX(note_pos) FROM notes_tree WHERE note_pid = ? AND is_deleted = 0', [parentNoteId]);
newNotePos = maxNotePos === null ? 0 : maxNotePos + 1;
}
else if (note.target === 'after') {
const afterNote = await sql.getSingleResult('SELECT note_pos FROM notes_tree WHERE note_tree_id = ?', [note.target_note_tree_id]);
newNotePos = afterNote.note_pos + 1;
await sql.execute('UPDATE notes_tree SET note_pos = note_pos + 1, date_modified = ? WHERE note_pid = ? AND note_pos > ? AND is_deleted = 0',
[utils.nowTimestamp(), parentNoteId, afterNote.note_pos]);
}
else {
throw new Error('Unknown target: ' + note.target);
}
await sql.doInTransaction(async () => {
if (note.target === 'into') {
const maxNotePos = await sql.getSingleValue('SELECT MAX(note_pos) FROM notes_tree WHERE note_pid = ? AND is_deleted = 0', [parentNoteId]);
newNotePos = maxNotePos === null ? 0 : maxNotePos + 1;
}
else if (note.target === 'after') {
const afterNote = await sql.getSingleResult('SELECT note_pos FROM notes_tree WHERE note_tree_id = ?', [note.target_note_tree_id]);
newNotePos = afterNote.note_pos + 1;
await sql.execute('UPDATE notes_tree SET note_pos = note_pos + 1, date_modified = ? WHERE note_pid = ? AND note_pos > ? AND is_deleted = 0',
[utils.nowTimestamp(), parentNoteId, afterNote.note_pos]);
}
else {
throw new Error('Unknown target: ' + note.target);
}
await sync_table.addNoteTreeSync(noteTreeId);
await sync_table.addNoteSync(noteId);

View file

@ -66,6 +66,10 @@ function hash(text) {
return crypto.createHash('sha1').update(text).digest('base64');
}
function isEmptyOrWhitespace(str) {
return str === null || str.match(/^ *$/) !== null;
}
module.exports = {
randomSecureToken,
@ -79,5 +83,6 @@ module.exports = {
hmac,
isElectron,
formatTwoTimestamps,
hash
hash,
isEmptyOrWhitespace
};

View file

@ -326,7 +326,6 @@
<script src="javascripts/dialogs/edit_tree_prefix.js"></script>
<script src="javascripts/link.js"></script>
<script src="javascripts/status.js"></script>
<script src="javascripts/sync.js"></script>
<script src="javascripts/utils.js"></script>
</body>