mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-22 01:48:11 +00:00
feat: restructure plugin system, add Lua plugin support, update docs
This commit is contained in:
@ -11,6 +11,7 @@ import (
|
||||
)
|
||||
|
||||
func init() {
|
||||
plugin.RegisterPluginMeta("timer", "定时任务", "Timer")
|
||||
plugin.RegisterFactory("timer", func(name string, config map[string]interface{}) (sdk.Plugin, error) {
|
||||
return New(name), nil
|
||||
})
|
||||
@ -21,6 +22,7 @@ type Plugin struct {
|
||||
mu sync.Mutex
|
||||
wg sync.WaitGroup
|
||||
stopCh chan struct{}
|
||||
maxDur time.Duration
|
||||
}
|
||||
|
||||
type timerTask struct {
|
||||
@ -38,6 +40,20 @@ func New(name string) *Plugin {
|
||||
func (p *Plugin) Name() string { return p.name }
|
||||
|
||||
func (p *Plugin) Start(s *sdk.PluginSDK) error {
|
||||
p.maxDur = 24 * time.Hour
|
||||
s.Settings().RegisterDef(sdk.ConfigDef{
|
||||
Key: "max_duration", Type: "string", DisplayName: "最大定时时长",
|
||||
Description: "允许设置的最大定时时长,例如 24h, 7d, 1h(默认 24h)",
|
||||
Default: "24h",
|
||||
})
|
||||
if v, _ := s.Settings().Get("max_duration"); v != nil {
|
||||
if s, ok := v.(string); ok && s != "" {
|
||||
if d, err := time.ParseDuration(s); err == nil && d > 0 {
|
||||
p.maxDur = d
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s.RegisterTool("timer_set", sdk.ToolDef{
|
||||
Name: "timer_set",
|
||||
Description: "设置一个定时提醒。倒计时结束后通过中断通道通知 agent。",
|
||||
@ -69,6 +85,9 @@ func (p *Plugin) Start(s *sdk.PluginSDK) error {
|
||||
if err != nil {
|
||||
return map[string]interface{}{"error": fmt.Sprintf("invalid duration %q: %v", durStr, err)}, nil
|
||||
}
|
||||
if dur > p.maxDur {
|
||||
return map[string]interface{}{"error": fmt.Sprintf("duration %v exceeds max %v", dur, p.maxDur)}, nil
|
||||
}
|
||||
|
||||
p.mu.Lock()
|
||||
p.wg.Add(1)
|
||||
|
||||
Reference in New Issue
Block a user