mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 04:14:39 +03:00
Plugin hooks (#1452)
* Refactor session and plugin code * Add context to job tasks * Show hooks in plugins page * Refactor session management
This commit is contained in:
@@ -54,6 +54,9 @@ type Config struct {
|
||||
|
||||
// The task configurations for tasks provided by this plugin.
|
||||
Tasks []*OperationConfig `yaml:"tasks"`
|
||||
|
||||
// The hooks configurations for hooks registered by this plugin.
|
||||
Hooks []*HookConfig `yaml:"hooks"`
|
||||
}
|
||||
|
||||
func (c Config) getPluginTasks(includePlugin bool) []*models.PluginTask {
|
||||
@@ -74,6 +77,34 @@ func (c Config) getPluginTasks(includePlugin bool) []*models.PluginTask {
|
||||
return ret
|
||||
}
|
||||
|
||||
func (c Config) getPluginHooks(includePlugin bool) []*models.PluginHook {
|
||||
var ret []*models.PluginHook
|
||||
|
||||
for _, o := range c.Hooks {
|
||||
hook := &models.PluginHook{
|
||||
Name: o.Name,
|
||||
Description: &o.Description,
|
||||
Hooks: convertHooks(o.TriggeredBy),
|
||||
}
|
||||
|
||||
if includePlugin {
|
||||
hook.Plugin = c.toPlugin()
|
||||
}
|
||||
ret = append(ret, hook)
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func convertHooks(hooks []HookTriggerEnum) []string {
|
||||
var ret []string
|
||||
for _, h := range hooks {
|
||||
ret = append(ret, h.String())
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func (c Config) getName() string {
|
||||
if c.Name != "" {
|
||||
return c.Name
|
||||
@@ -90,6 +121,7 @@ func (c Config) toPlugin() *models.Plugin {
|
||||
URL: c.URL,
|
||||
Version: c.Version,
|
||||
Tasks: c.getPluginTasks(false),
|
||||
Hooks: c.getPluginHooks(false),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,6 +135,19 @@ func (c Config) getTask(name string) *OperationConfig {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c Config) getHooks(hookType HookTriggerEnum) []*HookConfig {
|
||||
var ret []*HookConfig
|
||||
for _, h := range c.Hooks {
|
||||
for _, t := range h.TriggeredBy {
|
||||
if hookType == t {
|
||||
ret = append(ret, h)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func (c Config) getConfigPath() string {
|
||||
return filepath.Dir(c.path)
|
||||
}
|
||||
@@ -194,6 +239,13 @@ type OperationConfig struct {
|
||||
DefaultArgs map[string]string `yaml:"defaultArgs"`
|
||||
}
|
||||
|
||||
type HookConfig struct {
|
||||
OperationConfig `yaml:",inline"`
|
||||
|
||||
// A list of stash operations that will be used to trigger this hook operation.
|
||||
TriggeredBy []HookTriggerEnum `yaml:"triggeredBy"`
|
||||
}
|
||||
|
||||
func loadPluginFromYAML(reader io.Reader) (*Config, error) {
|
||||
ret := &Config{}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user