Browse Source

Merge 1b5342d9f0 into d96bbaf42c

pull/6082/merge
Daniel Riggins 1 week ago
committed by GitHub
parent
commit
136c584744
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
2 changed files with 1219 additions and 3 deletions
  1. 49
      server/models/pages.js
  2. 1173
      server/models/pages.js.orig

49
server/models/pages.js

@ -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')
@ -815,7 +820,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)
@ -928,6 +934,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
*

1173
server/models/pages.js.orig
File diff suppressed because it is too large
View File

Loading…
Cancel
Save