open: simplify code
There is no need for convoluted channels and other async fanciness. Expose a single XDGOpen static function that runs a command and returns an error if any. Caller is responsible of running this in an async goroutine if needed. Signed-off-by: Robin Jarry <robin@jarry.cc> Tested-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
This commit is contained in:
parent
8e53d33061
commit
92ba132d70
3 changed files with 19 additions and 73 deletions
commands
|
@ -183,9 +183,11 @@ func unsubscribeHTTP(aerc *widgets.Aerc, u *url.URL) error {
|
|||
aerc.CloseDialog()
|
||||
switch option {
|
||||
case "Yes":
|
||||
if err := lib.NewXDGOpen(u.String()).Start(); err != nil {
|
||||
aerc.PushError("Unsubscribe:" + err.Error())
|
||||
}
|
||||
go func() {
|
||||
if err := lib.XDGOpen(u.String()); err != nil {
|
||||
aerc.PushError("Unsubscribe:" + err.Error())
|
||||
}
|
||||
}()
|
||||
default:
|
||||
aerc.PushError("Unsubscribe: link will not be opened")
|
||||
}
|
||||
|
|
|
@ -5,11 +5,9 @@ import (
|
|||
"io"
|
||||
"mime"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"git.sr.ht/~rjarry/aerc/commands"
|
||||
"git.sr.ht/~rjarry/aerc/lib"
|
||||
"git.sr.ht/~rjarry/aerc/logging"
|
||||
"git.sr.ht/~rjarry/aerc/widgets"
|
||||
)
|
||||
|
||||
|
@ -40,8 +38,8 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error {
|
|||
if args[0] == "open-link" && len(args) > 1 {
|
||||
if link := args[1]; link != "" {
|
||||
go func() {
|
||||
if err := lib.NewXDGOpen(link).Start(); err != nil {
|
||||
aerc.PushError(fmt.Sprintf("%s: %s", args[0], err.Error()))
|
||||
if err := lib.XDGOpen(link); err != nil {
|
||||
aerc.PushError("open: " + err.Error())
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
@ -64,34 +62,20 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error {
|
|||
aerc.PushError(err.Error())
|
||||
return
|
||||
}
|
||||
defer tmpFile.Close()
|
||||
|
||||
_, err = io.Copy(tmpFile, reader)
|
||||
tmpFile.Close()
|
||||
if err != nil {
|
||||
aerc.PushError(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
xdg := lib.NewXDGOpen(tmpFile.Name())
|
||||
// pass through any arguments the user provided to the underlying handler
|
||||
if len(args) > 1 {
|
||||
xdg.SetArgs(args[1:])
|
||||
}
|
||||
err = xdg.Start()
|
||||
if err != nil {
|
||||
aerc.PushError(err.Error())
|
||||
return
|
||||
}
|
||||
go func() {
|
||||
defer logging.PanicHandler()
|
||||
|
||||
err := xdg.Wait()
|
||||
err = lib.XDGOpen(tmpFile.Name())
|
||||
if err != nil {
|
||||
aerc.PushError(err.Error())
|
||||
aerc.PushError("open: " + err.Error())
|
||||
}
|
||||
}()
|
||||
|
||||
aerc.PushStatus("Opened", 10*time.Second)
|
||||
})
|
||||
|
||||
return nil
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue