|
|
@ -28,6 +28,9 @@ const punctuationRegex = /[!,:;/\\_+\-=()&#@<>$~%^*[\]{}"'|]+|(\.\s)|(\s\.)/ig |
|
|
|
* Pages model |
|
|
|
*/ |
|
|
|
module.exports = class Page extends Model { |
|
|
|
static rebuildIsRunning = false |
|
|
|
static rebuildIsQueued = false |
|
|
|
|
|
|
|
static get tableName() { return 'pages' } |
|
|
|
|
|
|
|
static get jsonSchema () { |
|
|
@ -333,7 +336,8 @@ module.exports = class Page extends Model { |
|
|
|
await WIKI.models.pages.renderPage(page) |
|
|
|
|
|
|
|
// -> Rebuild page tree
|
|
|
|
await WIKI.models.pages.rebuildTree() |
|
|
|
// await WIKI.models.pages.rebuildTree()
|
|
|
|
WIKI.models.pages.rebuildTreeBG() |
|
|
|
|
|
|
|
// -> Add to Search Index
|
|
|
|
const pageContents = await WIKI.models.pages.query().findById(page.id).select('render') |
|
|
@ -736,7 +740,8 @@ module.exports = class Page extends Model { |
|
|
|
WIKI.events.outbound.emit('deletePageFromCache', page.hash) |
|
|
|
|
|
|
|
// -> Rebuild page tree
|
|
|
|
await WIKI.models.pages.rebuildTree() |
|
|
|
// await WIKI.models.pages.rebuildTree()
|
|
|
|
WIKI.models.pages.rebuildTreeBG() |
|
|
|
|
|
|
|
// -> Rename in Search Index
|
|
|
|
const pageContents = await WIKI.models.pages.query().findById(page.id).select('render') |
|
|
@ -814,7 +819,8 @@ module.exports = class Page extends Model { |
|
|
|
WIKI.events.outbound.emit('deletePageFromCache', page.hash) |
|
|
|
|
|
|
|
// -> Rebuild page tree
|
|
|
|
await WIKI.models.pages.rebuildTree() |
|
|
|
// await WIKI.models.pages.rebuildTree()
|
|
|
|
WIKI.models.pages.rebuildTreeBG() |
|
|
|
|
|
|
|
// -> Delete from Search Index
|
|
|
|
await WIKI.data.searchEngine.deleted(page) |
|
|
@ -927,6 +933,43 @@ module.exports = class Page extends Model { |
|
|
|
return rebuildJob.finished |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Rebuild page tree for new/updated/deleted page in the |
|
|
|
* background. Multiple calls to this function will |
|
|
|
* queue up a single pending job if a rebuild is already |
|
|
|
* in progress, and that queued up job will start when |
|
|
|
* the current rebuild ends. In other words, calling this |
|
|
|
* function will ensure at least one rebuild will start |
|
|
|
* in the near future as soon as no rebuilds are running, |
|
|
|
* but 50 quick calls to this routine will only cause |
|
|
|
* one rebuild to kick off when possible. |
|
|
|
* |
|
|
|
* @returns {Promise} Promise with no value |
|
|
|
*/ |
|
|
|
static async rebuildTreeBG() { |
|
|
|
if (this.rebuildIsRunning) { |
|
|
|
this.rebuildIsQueued = true |
|
|
|
return |
|
|
|
} |
|
|
|
this.rebuildIsRunning = true |
|
|
|
const rebuildJob = await WIKI.scheduler.registerJob({ |
|
|
|
name: 'rebuild-tree', |
|
|
|
immediate: true, |
|
|
|
worker: true |
|
|
|
}) |
|
|
|
await rebuildJob.finished |
|
|
|
while (this.rebuildIsQueued) { |
|
|
|
this.rebuildIsQueued = false |
|
|
|
const rebuildJob = await WIKI.scheduler.registerJob({ |
|
|
|
name: 'rebuild-tree', |
|
|
|
immediate: true, |
|
|
|
worker: true |
|
|
|
}) |
|
|
|
await rebuildJob.finished |
|
|
|
} |
|
|
|
this.rebuildIsRunning = false |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Trigger the rendering of a page |
|
|
|
* |
|
|
|