From ab305f7acf788c65b9fe4372d70605e6fbc1f21d Mon Sep 17 00:00:00 2001 From: igor Date: Fri, 7 Feb 2025 23:35:51 -0800 Subject: [PATCH] Improvements to FS. --- src/AppDelegate.swift | 35 +++++----------------------------- src/DirMonitor.swift | 29 +++++----------------------- src/MenulessWindow.swift | 1 + src/PathManager.swift | 1 + src/SearchViewController.swift | 3 +-- 5 files changed, 13 insertions(+), 56 deletions(-) diff --git a/src/AppDelegate.swift b/src/AppDelegate.swift index c419ef8..9c9486c 100644 --- a/src/AppDelegate.swift +++ b/src/AppDelegate.swift @@ -81,41 +81,16 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate { // NOTE: This function is triggered by DirMonitor. public func fsEventTriggered(_ path: String, _ flags: Int) { - var shouldReload = false - print("PATH: \(path)") - // if containsFlags(key: kFSEventStreamEventFlagNone, in: flags) { - // } - // if containsFlags(key: kFSEventStreamEventFlagRootChanged, in: flags) { - // } - // if containsFlags(key: kFSEventStreamEventFlagMustScanSubDirs, in: flags) { - // } - // if containsFlags(key: kFSEventStreamEventFlagItemInodeMetaMod, in: flags) { - // } - if containsFlags(key: kFSEventStreamEventFlagItemCreated, in: flags) { - print(" CREATED") - shouldReload = true - } - if containsFlags(key: kFSEventStreamEventFlagItemRemoved, in: flags) { - print(" REMOVED") - shouldReload = true - } - if containsFlags(key: kFSEventStreamEventFlagItemCloned, in: flags) { - print(" CLONED") - shouldReload = true - } - if containsFlags(key: kFSEventStreamEventFlagItemRenamed, in: flags) { - print(" RENAMED") - shouldReload = true - } - - // TODO: This should also trigger SearchViewController's search re-index. - if shouldReload { + if containsFlags(key: kFSEventStreamEventFlagItemCreated, in: flags) || + containsFlags(key: kFSEventStreamEventFlagItemRemoved, in: flags) || + containsFlags(key: kFSEventStreamEventFlagItemCloned, in: flags) || + containsFlags(key: kFSEventStreamEventFlagItemRenamed, in: flags) + { for dir in PathManager.shared.paths { if path.hasPrefix(dir.key) { PathManager.shared.rebuildIndex(at: dir.key) } } - PathManager.shared.refreshFilesystemWatchers() } } } diff --git a/src/DirMonitor.swift b/src/DirMonitor.swift index 8ed8c47..bb48038 100644 --- a/src/DirMonitor.swift +++ b/src/DirMonitor.swift @@ -16,7 +16,6 @@ class DirMonitor { private var dirs: NSMutableArray = [] private let queue: DispatchQueue - // var handler: ((Int, UnsafeMutablePointer>, UnsafeBufferPointer, UnsafeBufferPointer) -> Void)? private var stream: FSEventStreamRef? = nil func start() -> Bool { @@ -26,39 +25,21 @@ class DirMonitor { var context = FSEventStreamContext() context.info = Unmanaged.passUnretained(self).toOpaque() - // func test(count: Int, paths: UnsafeMutablePointer>, flags: UnsafeBufferPointer, ids: UnsafeBufferPointer) { } - // test(count: numEvents, paths: pathsBase, flags: flagsBuffer, ids: eventIDsBuffer) - - guard let stream = FSEventStreamCreate(nil, - { - (stream, info, numEvents, eventPaths, eventFlags, eventIds) in + guard let stream = FSEventStreamCreate(nil, { (stream, info, numEvents, eventPaths, eventFlags, eventIds) in let pathsBase = eventPaths .assumingMemoryBound(to: UnsafePointer.self) let pathsBuffer = UnsafeBufferPointer(start: pathsBase, count: numEvents) let flagsBuffer = UnsafeBufferPointer(start: eventFlags, count: numEvents) // let eventIDsBuffer = UnsafeBufferPointer(start: eventIds, count: numEvents) - // stream -> OpaquePointer - // info -> Optional - // numEvents -> Int - // eventPaths -> UnsafeMutableRawPointer - // eventFlags -> UnsafePointer - // eventIds -> UnsafePointer - - // pathsBase -> UnsafeMutablePointer> - // pathsBuffer -> UnsafeBufferPointer> - // flagsBuffer -> UnsafeBufferPointer - // eventIDsBuffer -> UnsafeBufferPointer - for i in 0..