Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ class CETask: ObservableObject, Identifiable, Hashable, Codable {
self.environmentVariables = environmentVariables
}

init(target: String, workingDirectory: String) {
init(target: String) {
self.target = target
self.workingDirectory = workingDirectory
}

var isInvalid: Bool {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ struct AddCETaskView: View {
@EnvironmentObject var workspaceSettingsManager: CEWorkspaceSettings
@StateObject var newTask: CETask

init(workingDirectory: String) {
self._newTask = StateObject(wrappedValue: CETask(target: "My Mac", workingDirectory: workingDirectory))
init() {
self._newTask = StateObject(wrappedValue: CETask(target: "My Mac"))
}
var body: some View {
VStack(spacing: 0) {
Expand Down Expand Up @@ -47,5 +47,5 @@ struct AddCETaskView: View {
}

#Preview {
AddCETaskView(workingDirectory: "/User/")
AddCETaskView()
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ struct CEWorkspaceSettingsView: View {
selectedTaskIndex: selectedTaskIndex
)
} else {
AddCETaskView(workingDirectory: workspace.fileURL?.relativePath ?? "")
AddCETaskView()
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ struct EditCETaskView: View {
var dismiss

@EnvironmentObject var workspaceSettingsManager: CEWorkspaceSettings
@EnvironmentObject var taskManger: TaskManager
@EnvironmentObject var taskManager: TaskManager
@ObservedObject var task: CETask

let selectedTaskIndex: Int
Expand All @@ -27,7 +27,7 @@ struct EditCETaskView: View {
$0.id == task.id
})
try? workspaceSettingsManager.savePreferences()
taskManger.deleteTask(taskID: task.id)
taskManager.deleteTask(taskID: task.id)
self.dismiss()
} label: {
Text("Delete")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,10 @@ final class WorkspaceDocument: NSDocument, ObservableObject, NSToolbarDelegate {
self.commandsPaletteState = .init()
self.workspaceSettingsManager = CEWorkspaceSettings(workspaceURL: url)
if let workspaceSettingsManager {
self.taskManager = TaskManager(workspaceSettings: workspaceSettingsManager.settings)
self.taskManager = TaskManager(
workspaceSettings: workspaceSettingsManager.settings,
workspaceURL: url
)
}

editorManager?.restoreFromState(self)
Expand Down
12 changes: 10 additions & 2 deletions CodeEdit/Features/Tasks/Models/CEActiveTask.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,16 @@ class CEActiveTask: ObservableObject, Identifiable, Hashable {
}.store(in: &cancellables)
}

func run() {
func run(workspaceURL: URL? = nil) {
Task {
// Reconstruct the full command to ensure it executes in the correct directory.
// Because: CETask only contains information about the relative path.
let fullCommand: String
if let workspaceURL = workspaceURL {
fullCommand = "cd \(workspaceURL.relativePath) && \(task.fullCommand)"
} else {
fullCommand = task.fullCommand
}
guard let process, let outputPipe else { return }

await updateTaskStatus(to: .running)
Expand All @@ -61,7 +69,7 @@ class CEActiveTask: ObservableObject, Identifiable, Hashable {
do {
try Shell.executeCommandWithShell(
process: process,
command: self.task.fullCommand,
command: fullCommand,
environmentVariables: self.task.environmentVariablesDictionary,
shell: Shell.zsh, // TODO: Let user decide which shell to use
outputPipe: outputPipe
Expand Down
8 changes: 5 additions & 3 deletions CodeEdit/Features/Tasks/TaskManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ class TaskManager: ObservableObject {

@ObservedObject var workspaceSettings: CEWorkspaceSettingsData

private var workspaceURL: URL?
private var settingsListener: AnyCancellable?

init(workspaceSettings: CEWorkspaceSettingsData) {
init(workspaceSettings: CEWorkspaceSettingsData, workspaceURL: URL? = nil) {
self.workspaceURL = workspaceURL
self.workspaceSettings = workspaceSettings

settingsListener = workspaceSettings.$tasks
Expand Down Expand Up @@ -75,10 +77,10 @@ class TaskManager: ObservableObject {
while activeTask.status == .running {
await Task.yield()
}
activeTask.run()
activeTask.run(workspaceURL: workspaceURL)
} else {
let runningTask = CEActiveTask(task: task)
runningTask.run()
runningTask.run(workspaceURL: workspaceURL)
await MainActor.run {
activeTasks[task.id] = runningTask
}
Expand Down
2 changes: 1 addition & 1 deletion CodeEditTests/Features/Documents/DocumentsUnitTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ final class DocumentsUnitTests: XCTestCase {
super.setUp()
hapticFeedbackPerformerMock = NSHapticFeedbackPerformerMock()
navigatorViewModel = .init()
workspace.taskManager = TaskManager(workspaceSettings: .init())
workspace.taskManager = TaskManager(workspaceSettings: CEWorkspaceSettingsData())
window = NSWindow()
splitViewController = .init(
workspace: workspace,
Expand Down