Skip to content

Commit

Permalink
feat: add debounce for filesystem change notifications and register n…
Browse files Browse the repository at this point in the history
…ew hook
  • Loading branch information
purocean committed Dec 27, 2024
1 parent 3caa217 commit 74e39e1
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/renderer/others/indexer-worker.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import AsyncLock from 'async-lock'
import MarkdownIt, { Token } from 'markdown-it'
import { throttle } from 'lodash-es'
import { debounce, throttle } from 'lodash-es'
import { JSONRPCClient, JSONRPCClientChannel, JSONRPCRequest, JSONRPCResponse, JSONRPCServer, JSONRPCServerChannel } from 'jsonrpc-bridge'
import { fetchTree, readFile, watchFs } from '@fe/support/api'
import { DOM_ATTR_NAME, FLAG_DEBUG, FLAG_DEMO, HELP_REPO_NAME, MODE } from '@fe/support/args'
Expand Down Expand Up @@ -129,6 +129,12 @@ let allMtimeMs: Map<string, { id: number, mtimeMs: number }> | null = null
let toPutItems: (Omit<DocumentEntity, 'id'> & { id?: number })[] = []
let reusedIds: number[] = []

const triggerFsChangeHook = debounce((repo: Repo) => {
if (processingStatus.ready) {
bridgeClient.notify.ctx.triggerHook('INDEXER_FS_CHANGE', { repo })
}
}, 500)

class RepoWatcher {
logger = utils.getLogger('indexer-worker-repo-watcher')

Expand Down Expand Up @@ -182,6 +188,10 @@ class RepoWatcher {
async payload => {
this.logger.debug('startWatch onResult', payload.eventName, (payload as any).path)

if (processingStatus.ready && payload.eventName !== 'change' && payload.eventName !== 'ready') {
triggerFsChangeHook(repo)
}

if (payload.eventName === 'add' || payload.eventName === 'change') {
try {
if (!processingStatus.ready) {
Expand Down
1 change: 1 addition & 0 deletions src/renderer/startup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ registerHook('DOC_CREATED', refreshTree)
registerHook('DOC_DELETED', refreshTree)
registerHook('DOC_MOVED', refreshTree)
registerHook('DOC_SWITCH_FAILED', refreshTree)
registerHook('INDEXER_FS_CHANGE', refreshTree)
registerHook('DOC_SWITCH_FAILED', async (payload?: { doc?: Doc | null, message: string }) => {
if (payload && payload.doc && payload.message?.includes('NOENT')) {
unmarkDoc(payload.doc)
Expand Down
1 change: 1 addition & 0 deletions src/renderer/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,7 @@ export type BuildInHookTypes = {
},
PREMIUM_STATUS_CHANGED: never,
WORKER_INDEXER_BEFORE_START_WATCH: { repo: Repo },
INDEXER_FS_CHANGE: { repo: Repo },
AFTER_PARSE_LINK: { params: { currentFile: PathItem, href: string, isWikiLink: boolean, tree?: Components.Tree.Node[] }, result: ParseLinkResult | null },
}

Expand Down

0 comments on commit 74e39e1

Please sign in to comment.