Skip to content

Commit 43bb09d

Browse files
committed
Remove unused filespaces more frequently
1 parent 944acbe commit 43bb09d

File tree

2 files changed

+40
-25
lines changed

2 files changed

+40
-25
lines changed

Core/Sources/Service/ScheduledCleaner.swift

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,47 @@ public final class ScheduledCleaner {
99
// occasionally cleanup workspaces.
1010
Task { @ServiceActor in
1111
while !Task.isCancelled {
12-
try await Task.sleep(nanoseconds: 4 * 60 * 60 * 1_000_000_000)
13-
let availableTabs = findAvailableOpenedTabs()
14-
for (url, workspace) in workspaces {
15-
if workspace.isExpired {
16-
Logger.service.info("Remove idle workspace")
17-
for url in workspace.filespaces.keys {
18-
WidgetDataSource.shared.cleanup(for: url)
19-
}
20-
workspace.cleanUp(availableTabs: availableTabs)
21-
workspaces[url] = nil
22-
} else {
23-
// cleanup chats for unused files
24-
let filespaces = workspace.filespaces
25-
for (url, _) in filespaces {
26-
if workspace.isFilespaceExpired(
27-
fileURL: url,
28-
availableTabs: availableTabs
29-
) {
30-
Logger.service.info("Remove idle filespace")
31-
WidgetDataSource.shared.cleanup(for: url)
32-
}
33-
}
34-
// cleanup workspace
35-
workspace.cleanUp(availableTabs: availableTabs)
12+
try await Task.sleep(nanoseconds: 10 * 60 * 1_000_000_000)
13+
cleanUp()
14+
}
15+
}
16+
17+
// cleanup when Xcode becomes inactive
18+
Task { @ServiceActor in
19+
for await app in ActiveApplicationMonitor.createStream() {
20+
try Task.checkCancellation()
21+
if let app, !app.isXcode {
22+
cleanUp()
23+
}
24+
}
25+
}
26+
}
27+
28+
@ServiceActor
29+
func cleanUp() {
30+
let availableTabs = findAvailableOpenedTabs()
31+
for (url, workspace) in workspaces {
32+
if workspace.isExpired {
33+
Logger.service.info("Remove idle workspace")
34+
for url in workspace.filespaces.keys {
35+
WidgetDataSource.shared.cleanup(for: url)
36+
}
37+
workspace.cleanUp(availableTabs: availableTabs)
38+
workspaces[url] = nil
39+
} else {
40+
// cleanup chats for unused files
41+
let filespaces = workspace.filespaces
42+
for (url, _) in filespaces {
43+
if workspace.isFilespaceExpired(
44+
fileURL: url,
45+
availableTabs: availableTabs
46+
) {
47+
Logger.service.info("Remove idle filespace")
48+
WidgetDataSource.shared.cleanup(for: url)
3649
}
3750
}
51+
// cleanup workspace
52+
workspace.cleanUp(availableTabs: availableTabs)
3853
}
3954
}
4055
}

Core/Sources/Service/Workspace.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ final class Filespace {
3939

4040
private(set) var lastSuggestionUpdateTime: Date = Environment.now()
4141
var isExpired: Bool {
42-
Environment.now().timeIntervalSince(lastSuggestionUpdateTime) > 60 * 60 * 8
42+
Environment.now().timeIntervalSince(lastSuggestionUpdateTime) > 60 * 3
4343
}
4444

4545
let fileSaveWatcher: FileSaveWatcher

0 commit comments

Comments
 (0)