Skip to content

Commit 65be0ed

Browse files
committed
Move FileSaveWatcher to its own file
1 parent c059562 commit 65be0ed

2 files changed

Lines changed: 40 additions & 41 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import Foundation
2+
3+
final class FileSaveWatcher {
4+
let url: URL
5+
var fileHandle: FileHandle?
6+
var source: DispatchSourceFileSystemObject?
7+
var changeHandler: () -> Void = {}
8+
9+
init(fileURL: URL) {
10+
url = fileURL
11+
startup()
12+
}
13+
14+
deinit {
15+
source?.cancel()
16+
}
17+
18+
func startup() {
19+
if let source = source {
20+
source.cancel()
21+
}
22+
23+
fileHandle = try? FileHandle(forReadingFrom: url)
24+
if let fileHandle = fileHandle {
25+
source = DispatchSource.makeFileSystemObjectSource(
26+
fileDescriptor: fileHandle.fileDescriptor,
27+
eventMask: .link,
28+
queue: .main
29+
)
30+
31+
source?.setEventHandler { [weak self] in
32+
self?.changeHandler()
33+
self?.startup()
34+
}
35+
36+
source?.resume()
37+
}
38+
}
39+
}

Core/Sources/Service/Workspace.swift

Lines changed: 1 addition & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ final class Workspace {
184184
}
185185

186186
let new = Workspace(projectRootURL: currentProjectURL)
187+
workspaces[currentProjectURL] = new
187188
let filespace = new.createFilespaceIfNeeded(fileURL: fileURL)
188189
return (new, filespace)
189190
}
@@ -419,44 +420,3 @@ extension Workspace {
419420
realtimeSuggestionRequests = []
420421
}
421422
}
422-
423-
// MARK: - Helper
424-
425-
final class FileSaveWatcher {
426-
let url: URL
427-
var fileHandle: FileHandle?
428-
var source: DispatchSourceFileSystemObject?
429-
var changeHandler: () -> Void = {}
430-
431-
init(fileURL: URL) {
432-
url = fileURL
433-
startup()
434-
}
435-
436-
deinit {
437-
source?.cancel()
438-
}
439-
440-
func startup() {
441-
if let source = source {
442-
source.cancel()
443-
}
444-
445-
fileHandle = try? FileHandle(forReadingFrom: url)
446-
if let fileHandle {
447-
source = DispatchSource.makeFileSystemObjectSource(
448-
fileDescriptor: fileHandle.fileDescriptor,
449-
eventMask: .link,
450-
queue: .main
451-
)
452-
453-
source?.setEventHandler { [weak self] in
454-
self?.changeHandler()
455-
self?.startup()
456-
}
457-
458-
source?.resume()
459-
}
460-
}
461-
}
462-

0 commit comments

Comments
 (0)