mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-08-28 17:45:39 +00:00
pomelo scraps
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
// SPDX-FileCopyrightText: Copyright 2024 Pomelo, Stossy11
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import Foundation
|
||||
|
||||
class FolderMonitor {
|
||||
private var folderDescriptor: Int32 = -1
|
||||
private var folderMonitorSource: DispatchSourceFileSystemObject?
|
||||
private let folderURL: URL
|
||||
private let onFolderChange: () -> Void
|
||||
init(folderURL: URL, onFolderChange: @escaping () -> Void) {
|
||||
self.folderURL = folderURL
|
||||
self.onFolderChange = onFolderChange
|
||||
startMonitoring()
|
||||
}
|
||||
private func startMonitoring() {
|
||||
folderDescriptor = open(folderURL.path, O_EVTONLY)
|
||||
guard folderDescriptor != -1 else {
|
||||
print("Failed to open folder descriptor.")
|
||||
return
|
||||
}
|
||||
|
||||
folderMonitorSource = DispatchSource.makeFileSystemObjectSource(
|
||||
fileDescriptor: folderDescriptor,
|
||||
eventMask: .write,
|
||||
queue: DispatchQueue.global()
|
||||
)
|
||||
folderMonitorSource?.setEventHandler { [weak self] in
|
||||
self?.folderDidChange()
|
||||
}
|
||||
folderMonitorSource?.setCancelHandler {
|
||||
close(self.folderDescriptor)
|
||||
}
|
||||
folderMonitorSource?.resume()
|
||||
}
|
||||
|
||||
private func folderDidChange() {
|
||||
// Detect the change and call the refreshcore function
|
||||
print("Folder changed! New file added or removed.")
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
self?.onFolderChange()
|
||||
}
|
||||
}
|
||||
deinit {
|
||||
folderMonitorSource?.cancel()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user