mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 20:34:37 +03:00
69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
package events
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
"github.com/gobuffalo/buffalo-plugins/plugins"
|
|
"github.com/gobuffalo/envy"
|
|
"github.com/markbates/oncer"
|
|
"github.com/markbates/safe"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// LoadPlugins will add listeners for any plugins that support "events"
|
|
func LoadPlugins() error {
|
|
var err error
|
|
oncer.Do("events.LoadPlugins", func() {
|
|
// don't send plugins events during testing
|
|
if envy.Get("GO_ENV", "development") == "test" {
|
|
return
|
|
}
|
|
plugs, err := plugins.Available()
|
|
if err != nil {
|
|
err = errors.WithStack(err)
|
|
return
|
|
}
|
|
for _, cmds := range plugs {
|
|
for _, c := range cmds {
|
|
if c.BuffaloCommand != "events" {
|
|
continue
|
|
}
|
|
err := func(c plugins.Command) error {
|
|
return safe.RunE(func() error {
|
|
n := fmt.Sprintf("[PLUGIN] %s %s", c.Binary, c.Name)
|
|
fn := func(e Event) {
|
|
b, err := json.Marshal(e)
|
|
if err != nil {
|
|
fmt.Println("error trying to marshal event", e, err)
|
|
return
|
|
}
|
|
cmd := exec.Command(c.Binary, c.UseCommand, string(b))
|
|
cmd.Stderr = os.Stderr
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stdin = os.Stdin
|
|
if err := cmd.Run(); err != nil {
|
|
fmt.Println("error trying to send event", strings.Join(cmd.Args, " "), err)
|
|
}
|
|
}
|
|
_, err := NamedListen(n, Filter(c.ListenFor, fn))
|
|
if err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
return nil
|
|
})
|
|
}(c)
|
|
if err != nil {
|
|
err = errors.WithStack(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
}
|
|
})
|
|
return err
|
|
}
|