mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-04 05:28:59 +01:00 
			
		
		
		
	Merge branch 'stable'
This commit is contained in:
		
						commit
						f3a2e2cbde
					
				@ -2,7 +2,7 @@
 | 
				
			|||||||
  "name": "trilium",
 | 
					  "name": "trilium",
 | 
				
			||||||
  "productName": "Trilium Notes",
 | 
					  "productName": "Trilium Notes",
 | 
				
			||||||
  "description": "Trilium Notes",
 | 
					  "description": "Trilium Notes",
 | 
				
			||||||
  "version": "0.39.4",
 | 
					  "version": "0.39.5",
 | 
				
			||||||
  "license": "AGPL-3.0-only",
 | 
					  "license": "AGPL-3.0-only",
 | 
				
			||||||
  "main": "electron.js",
 | 
					  "main": "electron.js",
 | 
				
			||||||
  "bin": {
 | 
					  "bin": {
 | 
				
			||||||
 | 
				
			|||||||
@ -42,6 +42,8 @@ async function setupProtectedSession(password) {
 | 
				
			|||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $("#container").addClass('protected-session-active');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protectedSessionHolder.setProtectedSessionId(response.protectedSessionId);
 | 
					    protectedSessionHolder.setProtectedSessionId(response.protectedSessionId);
 | 
				
			||||||
    protectedSessionHolder.touchProtectedSession();
 | 
					    protectedSessionHolder.touchProtectedSession();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1 @@
 | 
				
			|||||||
module.exports = { buildDate:"2020-01-04T22:01:20+01:00", buildRevision: "3b8b4da149fbc1b17d09253693823f5135a55f2e" };
 | 
					module.exports = { buildDate:"2020-01-08T21:01:24+01:00", buildRevision: "2b69abf8ab2241f01cd38b31308e54b9faaa74d5" };
 | 
				
			||||||
 | 
				
			|||||||
@ -18,18 +18,6 @@ class ConsistencyChecks {
 | 
				
			|||||||
        this.fixedIssues = false;
 | 
					        this.fixedIssues = false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async findIssues(query, errorCb) {
 | 
					 | 
				
			||||||
        const results = await sql.getRows(query);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for (const res of results) {
 | 
					 | 
				
			||||||
            logError(errorCb(res));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            this.unrecoveredConsistencyErrors = true;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return results;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    async findAndFixIssues(query, fixerCb) {
 | 
					    async findAndFixIssues(query, fixerCb) {
 | 
				
			||||||
        const results = await sql.getRows(query);
 | 
					        const results = await sql.getRows(query);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -175,13 +163,6 @@ class ConsistencyChecks {
 | 
				
			|||||||
                    logError(`Relation ${attributeId} references missing note ${noteId}`)
 | 
					                    logError(`Relation ${attributeId} references missing note ${noteId}`)
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					 | 
				
			||||||
        await this.findIssues(`
 | 
					 | 
				
			||||||
                    SELECT noteRevisionId, note_revisions.noteId
 | 
					 | 
				
			||||||
                    FROM note_revisions
 | 
					 | 
				
			||||||
                             LEFT JOIN notes USING (noteId)
 | 
					 | 
				
			||||||
                    WHERE notes.noteId IS NULL`,
 | 
					 | 
				
			||||||
            ({noteRevisionId, noteId}) => `Note revision ${noteRevisionId} references missing note ${noteId}`);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async findExistencyIssues() {
 | 
					    async findExistencyIssues() {
 | 
				
			||||||
@ -335,13 +316,22 @@ class ConsistencyChecks {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await this.findIssues(`
 | 
					        await this.findAndFixIssues(`
 | 
				
			||||||
                    SELECT noteId
 | 
					                    SELECT noteId
 | 
				
			||||||
                    FROM notes
 | 
					                    FROM notes
 | 
				
			||||||
                             JOIN note_contents USING (noteId)
 | 
					                             JOIN note_contents USING (noteId)
 | 
				
			||||||
                    WHERE isErased = 1
 | 
					                    WHERE isErased = 1
 | 
				
			||||||
                      AND content IS NOT NULL`,
 | 
					                      AND content IS NOT NULL`,
 | 
				
			||||||
            ({noteId}) => `Note ${noteId} content is not null even though the note is erased`);
 | 
					            async ({noteId}) => {
 | 
				
			||||||
 | 
					            if (this.autoFix) {
 | 
				
			||||||
 | 
					                await sql.execute(`UPDATE note_contents SET content = NULL WHERE noteId = ?`, [noteId]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                logFix(`Note ${noteId} content has been set to null since the note is erased`);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else {
 | 
				
			||||||
 | 
					                logError(`Note ${noteId} content is not null even though the note is erased`);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await this.findAndFixIssues(`
 | 
					        await this.findAndFixIssues(`
 | 
				
			||||||
                    SELECT noteId, noteRevisionId
 | 
					                    SELECT noteId, noteRevisionId
 | 
				
			||||||
@ -398,20 +388,40 @@ class ConsistencyChecks {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await this.findIssues(`
 | 
					        await this.findAndFixIssues(`
 | 
				
			||||||
                    SELECT noteRevisionId
 | 
					                    SELECT noteRevisionId
 | 
				
			||||||
                    FROM note_revisions
 | 
					                    FROM note_revisions
 | 
				
			||||||
                             JOIN note_revision_contents USING (noteRevisionId)
 | 
					                             JOIN note_revision_contents USING (noteRevisionId)
 | 
				
			||||||
                    WHERE isErased = 1
 | 
					                    WHERE isErased = 1
 | 
				
			||||||
                      AND content IS NOT NULL`,
 | 
					                      AND content IS NOT NULL`,
 | 
				
			||||||
            ({noteRevisionId}) => `Note revision ${noteRevisionId} content is not null even though the note revision is erased`);
 | 
					            async ({noteRevisionId}) => {
 | 
				
			||||||
 | 
					                if (this.autoFix) {
 | 
				
			||||||
 | 
					                    await sql.execute(`UPDATE note_revision_contents SET content = NULL WHERE noteRevisionId = ?`, [noteRevisionId]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await this.findIssues(`
 | 
					                    logFix(`Note revision ${noteRevisionId} content was set to null since the note revision is erased`);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else {
 | 
				
			||||||
 | 
					                    logError(`Note revision ${noteRevisionId} content is not null even though the note revision is erased`);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        await this.findAndFixIssues(`
 | 
				
			||||||
                    SELECT noteId
 | 
					                    SELECT noteId
 | 
				
			||||||
                    FROM notes
 | 
					                    FROM notes
 | 
				
			||||||
                    WHERE isErased = 1
 | 
					                    WHERE isErased = 1
 | 
				
			||||||
                      AND isDeleted = 0`,
 | 
					                      AND isDeleted = 0`,
 | 
				
			||||||
            ({noteId}) => `Note ${noteId} is not deleted even though it is erased`);
 | 
					            async ({noteId}) => {
 | 
				
			||||||
 | 
					                if (this.autoFix) {
 | 
				
			||||||
 | 
					                    const note = await repository.getNote(noteId);
 | 
				
			||||||
 | 
					                    note.isDeleted = true;
 | 
				
			||||||
 | 
					                    await note.save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    logFix(`Note ${noteId} was set to deleted since it is erased`);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else {
 | 
				
			||||||
 | 
					                    logError(`Note ${noteId} is not deleted even though it is erased`);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await this.findAndFixIssues(`
 | 
					        await this.findAndFixIssues(`
 | 
				
			||||||
                    SELECT parentNoteId
 | 
					                    SELECT parentNoteId
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
const dayjs = require("dayjs");
 | 
					const dayjs = require("dayjs");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const filterRegex = /(\b(AND|OR)\s+)?@(!?)([\p{L}\p{Number}_]+|"[^"]+")\s*((=|!=|<|<=|>|>=|!?\*=|!?=\*|!?\*=\*)\s*(\S+|"[^"]+"))?/igu;
 | 
					const filterRegex = /(\b(AND|OR)\s+)?@(!?)([\p{L}\p{Number}_]+|"[^"]+")\s*((=|!=|<|<=|>|>=|!?\*=|!?=\*|!?\*=\*)\s*([^\s=*]+|"[^"]+"))?/igu;
 | 
				
			||||||
const smartValueRegex = /^(NOW|TODAY|WEEK|MONTH|YEAR) *([+\-] *\d+)?$/i;
 | 
					const smartValueRegex = /^(NOW|TODAY|WEEK|MONTH|YEAR) *([+\-] *\d+)?$/i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function calculateSmartValue(v) {
 | 
					function calculateSmartValue(v) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user