macos refactoring.
This commit is contained in:
parent
9b63531d6a
commit
1824aab27c
7 changed files with 55 additions and 50 deletions
|
@ -2,11 +2,13 @@ package zenity
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/ncruces/zenity/internal/osa"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SelectFile(options ...Option) (string, error) {
|
func SelectFile(options ...Option) (string, error) {
|
||||||
opts := optsParse(options)
|
opts := optsParse(options)
|
||||||
out, err := osaRun("file", osaFile{
|
out, err := osa.Run("file", osa.File{
|
||||||
Operation: "chooseFile",
|
Operation: "chooseFile",
|
||||||
Prompt: opts.title,
|
Prompt: opts.title,
|
||||||
Location: opts.filename,
|
Location: opts.filename,
|
||||||
|
@ -23,7 +25,7 @@ func SelectFile(options ...Option) (string, error) {
|
||||||
|
|
||||||
func SelectFileMutiple(options ...Option) ([]string, error) {
|
func SelectFileMutiple(options ...Option) ([]string, error) {
|
||||||
opts := optsParse(options)
|
opts := optsParse(options)
|
||||||
out, err := osaRun("file", osaFile{
|
out, err := osa.Run("file", osa.File{
|
||||||
Operation: "chooseFile",
|
Operation: "chooseFile",
|
||||||
Multiple: true,
|
Multiple: true,
|
||||||
Prompt: opts.title,
|
Prompt: opts.title,
|
||||||
|
@ -44,7 +46,7 @@ func SelectFileMutiple(options ...Option) ([]string, error) {
|
||||||
|
|
||||||
func SelectFileSave(options ...Option) (string, error) {
|
func SelectFileSave(options ...Option) (string, error) {
|
||||||
opts := optsParse(options)
|
opts := optsParse(options)
|
||||||
out, err := osaRun("file", osaFile{
|
out, err := osa.Run("file", osa.File{
|
||||||
Operation: "chooseFileName",
|
Operation: "chooseFileName",
|
||||||
Prompt: opts.title,
|
Prompt: opts.title,
|
||||||
Location: opts.filename,
|
Location: opts.filename,
|
||||||
|
@ -60,7 +62,7 @@ func SelectFileSave(options ...Option) (string, error) {
|
||||||
|
|
||||||
func SelectDirectory(options ...Option) (string, error) {
|
func SelectDirectory(options ...Option) (string, error) {
|
||||||
opts := optsParse(options)
|
opts := optsParse(options)
|
||||||
out, err := osaRun("file", osaFile{
|
out, err := osa.Run("file", osa.File{
|
||||||
Operation: "chooseFolder",
|
Operation: "chooseFolder",
|
||||||
Prompt: opts.title,
|
Prompt: opts.title,
|
||||||
Location: opts.filename,
|
Location: opts.filename,
|
||||||
|
@ -83,11 +85,3 @@ func appleFilters(filters []FileFilter) []string {
|
||||||
}
|
}
|
||||||
return filter
|
return filter
|
||||||
}
|
}
|
||||||
|
|
||||||
type osaFile struct {
|
|
||||||
Operation string
|
|
||||||
Prompt string
|
|
||||||
Location string
|
|
||||||
Type []string
|
|
||||||
Multiple bool
|
|
||||||
}
|
|
||||||
|
|
43
internal/osa/osa_darwin.go
Normal file
43
internal/osa/osa_darwin.go
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
package osa
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:generate go run scripts/generate.go scripts/
|
||||||
|
|
||||||
|
func Run(script string, data interface{}) ([]byte, error) {
|
||||||
|
var buf strings.Builder
|
||||||
|
|
||||||
|
err := scripts.ExecuteTemplate(&buf, script, data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
res := buf.String()
|
||||||
|
res = res[len("<script>") : len(res)-len("</script>")]
|
||||||
|
cmd := exec.Command("osascript", "-l", "JavaScript")
|
||||||
|
cmd.Stdin = strings.NewReader(res)
|
||||||
|
return cmd.Output()
|
||||||
|
}
|
||||||
|
|
||||||
|
type File struct {
|
||||||
|
Operation string
|
||||||
|
Prompt string
|
||||||
|
Location string
|
||||||
|
Type []string
|
||||||
|
Multiple bool
|
||||||
|
}
|
||||||
|
|
||||||
|
type Msg struct {
|
||||||
|
Dialog bool
|
||||||
|
Text string
|
||||||
|
Message string
|
||||||
|
As string
|
||||||
|
Title string
|
||||||
|
Icon string
|
||||||
|
Buttons []string
|
||||||
|
Cancel int
|
||||||
|
Default int
|
||||||
|
}
|
|
@ -68,9 +68,9 @@ func main() {
|
||||||
|
|
||||||
var generator = template.Must(template.New("").Parse(`// Code generated by zenity; DO NOT EDIT.
|
var generator = template.Must(template.New("").Parse(`// Code generated by zenity; DO NOT EDIT.
|
||||||
|
|
||||||
package zenity
|
package osa
|
||||||
|
|
||||||
import "html/template"
|
import "html/template"
|
||||||
|
|
||||||
var osaScripts = template.Must(template.New("").Parse(` + "`{{.}}`" + `))
|
var scripts = template.Must(template.New("").Parse(` + "`{{.}}`" + `))
|
||||||
`))
|
`))
|
|
@ -2,6 +2,8 @@ package zenity
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
|
||||||
|
"github.com/ncruces/zenity/internal/osa"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Error(text string, options ...Option) (bool, error) {
|
func Error(text string, options ...Option) (bool, error) {
|
||||||
|
@ -23,7 +25,7 @@ func Warning(text string, options ...Option) (bool, error) {
|
||||||
func message(dialog int, text string, options []Option) (bool, error) {
|
func message(dialog int, text string, options []Option) (bool, error) {
|
||||||
opts := optsParse(options)
|
opts := optsParse(options)
|
||||||
|
|
||||||
data := osaMsg{
|
data := osa.Msg{
|
||||||
Text: text,
|
Text: text,
|
||||||
Title: opts.title,
|
Title: opts.title,
|
||||||
Dialog: opts.icon != 0 || dialog == 2,
|
Dialog: opts.icon != 0 || dialog == 2,
|
||||||
|
@ -96,7 +98,7 @@ func message(dialog int, text string, options []Option) (bool, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := osaRun("msg", data)
|
_, err := osa.Run("msg", data)
|
||||||
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
|
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
@ -105,15 +107,3 @@ func message(dialog int, text string, options []Option) (bool, error) {
|
||||||
}
|
}
|
||||||
return true, err
|
return true, err
|
||||||
}
|
}
|
||||||
|
|
||||||
type osaMsg struct {
|
|
||||||
Dialog bool
|
|
||||||
Text string
|
|
||||||
Message string
|
|
||||||
As string
|
|
||||||
Title string
|
|
||||||
Icon string
|
|
||||||
Buttons []string
|
|
||||||
Cancel int
|
|
||||||
Default int
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
package zenity
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os/exec"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
//go:generate go run osa_scripts/generate.go osa_scripts/
|
|
||||||
|
|
||||||
func osaRun(script string, data interface{}) ([]byte, error) {
|
|
||||||
var buf strings.Builder
|
|
||||||
|
|
||||||
err := osaScripts.ExecuteTemplate(&buf, script, data)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var res = buf.String()
|
|
||||||
cmd := exec.Command("osascript", "-l", "JavaScript")
|
|
||||||
cmd.Stdin = strings.NewReader(res[len("<script>") : len(res)-len("</script>")])
|
|
||||||
return cmd.Output()
|
|
||||||
}
|
|
Loading…
Reference in a new issue