aerc/lib/open.go
Moritz Poldrack 978d35d356 lint: homogenize operations and minor fixes (gocritic)
Apply GoDoc comment policy (comments for humans should have a space
after the //; machine-readable comments shouldn't)

Use strings.ReplaceAll instead of strings.Replace when appropriate

Remove if/else chains by replacing them with switches

Use short assignment/increment notation

Replace single case switches with if statements

Combine else and if when appropriate

Signed-off-by: Moritz Poldrack <moritz@poldrack.dev>
Acked-by: Robin Jarry <robin@jarry.cc>
2022-08-04 21:58:01 +02:00

65 lines
1.5 KiB
Go

package lib
import (
"os/exec"
"runtime"
"git.sr.ht/~rjarry/aerc/logging"
)
var openBin string = "xdg-open"
func init() {
if runtime.GOOS == "darwin" {
openBin = "open"
}
}
type xdgOpen struct {
args []string
errCh chan (error)
cmd *exec.Cmd
}
// NewXDGOpen returns a handler for opening a file via the system handler xdg-open
// or comparable tools on other OSs than Linux
func NewXDGOpen(filename string) *xdgOpen {
errch := make(chan error, 1)
return &xdgOpen{
errCh: errch,
args: []string{filename},
}
}
// SetArgs sets additional arguments to the open command prior to the filename
func (xdg *xdgOpen) SetArgs(args []string) {
args = append([]string{}, args...) // don't overwrite array of caller
filename := xdg.args[len(xdg.args)-1]
xdg.args = append(args, filename) //nolint:gocritic // intentional append to different slice
}
// Start the open handler.
// Returns an error if the command could not be started.
// Use Wait to wait for the commands completion and to check the error.
func (xdg *xdgOpen) Start() error {
xdg.cmd = exec.Command(openBin, xdg.args...)
err := xdg.cmd.Start()
if err != nil {
xdg.errCh <- err // for callers that just check the error from Wait()
close(xdg.errCh)
return err
}
go func() {
defer logging.PanicHandler()
xdg.errCh <- xdg.cmd.Wait()
close(xdg.errCh)
}()
return nil
}
// Wait for the xdg-open command to complete
// The xdgOpen must have been started
func (xdg *xdgOpen) Wait() error {
return <-xdg.errCh
}