recent changes respect hoisted note state

This commit is contained in:
zadam 2020-03-29 19:37:34 +02:00
parent f8bd6183bf
commit cc298b1e7a
3 changed files with 64 additions and 35 deletions

View File

@ -4,6 +4,7 @@ import server from '../services/server.js';
import treeService from "../services/tree.js"; import treeService from "../services/tree.js";
import treeCache from "../services/tree_cache.js"; import treeCache from "../services/tree_cache.js";
import appContext from "../services/app_context.js"; import appContext from "../services/app_context.js";
import hoistedNoteService from "../services/hoisted_note.js";
const $dialog = $("#recent-changes-dialog"); const $dialog = $("#recent-changes-dialog");
const $content = $("#recent-changes-content"); const $content = $("#recent-changes-content");
@ -11,7 +12,7 @@ const $content = $("#recent-changes-content");
export async function showDialog() { export async function showDialog() {
utils.openDialog($dialog); utils.openDialog($dialog);
const result = await server.get('recent-changes'); const result = await server.get('recent-changes/' + hoistedNoteService.getHoistedNoteId());
// preload all notes into cache // preload all notes into cache
await treeCache.getNotes(result.map(r => r.noteId), true); await treeCache.getNotes(result.map(r => r.noteId), true);

View File

@ -3,11 +3,39 @@
const sql = require('../../services/sql'); const sql = require('../../services/sql');
const protectedSessionService = require('../../services/protected_session'); const protectedSessionService = require('../../services/protected_session');
const noteService = require('../../services/notes'); const noteService = require('../../services/notes');
const noteCacheService = require('../../services/note_cache');
async function getRecentChanges() { async function getRecentChanges(req) {
const recentChanges = await sql.getRows( const {ancestorNoteId} = req.params;
const noteRows = await sql.getRows(
` `
SELECT * FROM ( SELECT * FROM (
SELECT note_revisions.noteId,
note_revisions.noteRevisionId,
note_revisions.utcDateCreated AS date
FROM note_revisions
ORDER BY note_revisions.utcDateCreated DESC
)
UNION ALL SELECT * FROM (
SELECT
notes.noteId,
NULL AS noteRevisionId,
utcDateModified AS date
FROM notes
ORDER BY utcDateModified DESC
)
ORDER BY date DESC`);
const recentChanges = [];
for (const noteRow of noteRows) {
if (!noteCacheService.isInAncestor(noteRow.noteId, ancestorNoteId)) {
continue;
}
if (noteRow.noteRevisionId) {
recentChanges.push(await sql.getRow(`
SELECT SELECT
notes.noteId, notes.noteId,
notes.isDeleted AS current_isDeleted, notes.isDeleted AS current_isDeleted,
@ -20,11 +48,10 @@ async function getRecentChanges() {
FROM FROM
note_revisions note_revisions
JOIN notes USING(noteId) JOIN notes USING(noteId)
ORDER BY WHERE noteRevisionId = ?`, [noteRow.noteRevisionId]));
note_revisions.utcDateCreated DESC }
LIMIT 200 else {
) recentChanges.push(await sql.getRow(`
UNION ALL SELECT * FROM (
SELECT SELECT
notes.noteId, notes.noteId,
notes.isDeleted AS current_isDeleted, notes.isDeleted AS current_isDeleted,
@ -36,12 +63,13 @@ async function getRecentChanges() {
notes.utcDateModified AS date notes.utcDateModified AS date
FROM FROM
notes notes
ORDER BY WHERE noteId = ?`, [noteRow.noteId]));
utcDateModified DESC }
LIMIT 200
) if (recentChanges.length >= 200) {
ORDER BY date DESC break;
LIMIT 200`); }
}
for (const change of recentChanges) { for (const change of recentChanges) {
if (change.current_isProtected) { if (change.current_isProtected) {

View File

@ -181,7 +181,7 @@ function register(app) {
route(POST, '/api/images', [auth.checkApiAuthOrElectron, uploadMiddleware, csrfMiddleware], imageRoute.uploadImage, apiResultHandler); route(POST, '/api/images', [auth.checkApiAuthOrElectron, uploadMiddleware, csrfMiddleware], imageRoute.uploadImage, apiResultHandler);
route(PUT, '/api/images/:noteId', [auth.checkApiAuthOrElectron, uploadMiddleware, csrfMiddleware], imageRoute.updateImage, apiResultHandler); route(PUT, '/api/images/:noteId', [auth.checkApiAuthOrElectron, uploadMiddleware, csrfMiddleware], imageRoute.updateImage, apiResultHandler);
apiRoute(GET, '/api/recent-changes', recentChangesApiRoute.getRecentChanges); apiRoute(GET, '/api/recent-changes/:ancestorNoteId', recentChangesApiRoute.getRecentChanges);
apiRoute(GET, '/api/options', optionsApiRoute.getOptions); apiRoute(GET, '/api/options', optionsApiRoute.getOptions);
// FIXME: possibly change to sending value in the body to avoid host of HTTP server issues with slashes // FIXME: possibly change to sending value in the body to avoid host of HTTP server issues with slashes