Add standalone desktop workflow
This commit is contained in:
20
internal/dialog/pickfolder_darwin.go
Normal file
20
internal/dialog/pickfolder_darwin.go
Normal file
@@ -0,0 +1,20 @@
|
||||
package dialog
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func PickFolder() (string, error) {
|
||||
cmd := exec.Command("osascript", "-e", `POSIX path of (choose folder with prompt "Select a folder")`)
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("folder selection failed: %s", strings.TrimSpace(string(out)))
|
||||
}
|
||||
path := strings.TrimSpace(string(out))
|
||||
if path == "" {
|
||||
return "", fmt.Errorf("folder selection canceled")
|
||||
}
|
||||
return strings.TrimSuffix(path, "/"), nil
|
||||
}
|
||||
9
internal/dialog/pickfolder_other.go
Normal file
9
internal/dialog/pickfolder_other.go
Normal file
@@ -0,0 +1,9 @@
|
||||
//go:build !darwin && !windows
|
||||
|
||||
package dialog
|
||||
|
||||
import "fmt"
|
||||
|
||||
func PickFolder() (string, error) {
|
||||
return "", fmt.Errorf("native folder picker is not supported on this platform")
|
||||
}
|
||||
21
internal/dialog/pickfolder_windows.go
Normal file
21
internal/dialog/pickfolder_windows.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package dialog
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func PickFolder() (string, error) {
|
||||
script := `Add-Type -AssemblyName System.Windows.Forms; $dialog = New-Object System.Windows.Forms.FolderBrowserDialog; $dialog.ShowNewFolderButton = $false; if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { [Console]::Write($dialog.SelectedPath) }`
|
||||
cmd := exec.Command("powershell", "-NoProfile", "-STA", "-Command", script)
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("folder selection failed: %s", strings.TrimSpace(string(out)))
|
||||
}
|
||||
path := strings.TrimSpace(string(out))
|
||||
if path == "" {
|
||||
return "", fmt.Errorf("folder selection canceled")
|
||||
}
|
||||
return path, nil
|
||||
}
|
||||
Reference in New Issue
Block a user