bg rendering patch

pull/6082/head
Daniel Riggins 1 year ago
parent 9dddef3a3f
commit f3dc28cb3f

@ -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
*

Loading…
Cancel
Save