script editor

This commit is contained in:
2023-10-06 13:15:19 +02:00
parent 13da56009e
commit e06cf1ae34
35 changed files with 776 additions and 68 deletions
+5 -1
View File
@@ -177,7 +177,11 @@ func New(addr string) (lucifer3.Service, error) {
}
}
if patch.Script != nil {
statePatch.Scripts[patch.Script.Name] = svc.data.Scripts[patch.Script.Name]
if len(patch.Script.Lines) > 0 {
statePatch.Scripts[patch.Script.Name] = svc.data.Scripts[patch.Script.Name]
} else {
statePatch.Scripts[patch.Script.Name] = nil
}
}
}
svc.mu.Unlock()
+10
View File
@@ -48,6 +48,9 @@ func Prepare(ctx context.Context, db DBTX) (*Queries, error) {
if q.deleteDeviceInfoLikeStmt, err = db.PrepareContext(ctx, deleteDeviceInfoLike); err != nil {
return nil, fmt.Errorf("error preparing query DeleteDeviceInfoLike: %w", err)
}
if q.deleteScriptStmt, err = db.PrepareContext(ctx, deleteScript); err != nil {
return nil, fmt.Errorf("error preparing query DeleteScript: %w", err)
}
if q.deleteScriptTriggerStmt, err = db.PrepareContext(ctx, deleteScriptTrigger); err != nil {
return nil, fmt.Errorf("error preparing query DeleteScriptTrigger: %w", err)
}
@@ -138,6 +141,11 @@ func (q *Queries) Close() error {
err = fmt.Errorf("error closing deleteDeviceInfoLikeStmt: %w", cerr)
}
}
if q.deleteScriptStmt != nil {
if cerr := q.deleteScriptStmt.Close(); cerr != nil {
err = fmt.Errorf("error closing deleteScriptStmt: %w", cerr)
}
}
if q.deleteScriptTriggerStmt != nil {
if cerr := q.deleteScriptTriggerStmt.Close(); cerr != nil {
err = fmt.Errorf("error closing deleteScriptTriggerStmt: %w", cerr)
@@ -260,6 +268,7 @@ type Queries struct {
deleteDeviceInfoStmt *sql.Stmt
deleteDeviceInfoByIDStmt *sql.Stmt
deleteDeviceInfoLikeStmt *sql.Stmt
deleteScriptStmt *sql.Stmt
deleteScriptTriggerStmt *sql.Stmt
insertDeviceAliasStmt *sql.Stmt
listDeviceAliasesStmt *sql.Stmt
@@ -289,6 +298,7 @@ func (q *Queries) WithTx(tx *sql.Tx) *Queries {
deleteDeviceInfoStmt: q.deleteDeviceInfoStmt,
deleteDeviceInfoByIDStmt: q.deleteDeviceInfoByIDStmt,
deleteDeviceInfoLikeStmt: q.deleteDeviceInfoLikeStmt,
deleteScriptStmt: q.deleteScriptStmt,
deleteScriptTriggerStmt: q.deleteScriptTriggerStmt,
insertDeviceAliasStmt: q.insertDeviceAliasStmt,
listDeviceAliasesStmt: q.listDeviceAliasesStmt,
+9
View File
@@ -12,6 +12,15 @@ import (
"github.com/google/uuid"
)
const deleteScript = `-- name: DeleteScript :exec
DELETE FROM script WHERE name = ?
`
func (q *Queries) DeleteScript(ctx context.Context, name string) error {
_, err := q.exec(ctx, q.deleteScriptStmt, deleteScript, name)
return err
}
const deleteScriptTrigger = `-- name: DeleteScriptTrigger :exec
DELETE FROM script_trigger WHERE id = ?
`
+3
View File
@@ -4,6 +4,9 @@ SELECT * FROM script;
-- name: SaveScript :exec
REPLACE INTO script (name, data) VALUES (?, ?);
-- name: DeleteScript :exec
DELETE FROM script WHERE name = ?;
-- name: ListScriptVariables :many
SELECT * FROM script_variable;
+20 -9
View File
@@ -434,16 +434,27 @@ func (d *database) HandleCommand(bus *lucifer3.EventBus, command lucifer3.Comman
case script.Update:
j, _ := json.Marshal(command.Lines)
err := q.SaveScript(timeout, mysqlgen.SaveScriptParams{
Name: command.Name,
Data: j,
})
if err != nil {
bus.RunEvent(events.Log{
Level: "error",
Code: "database_could_not_save_script",
Message: "Failed to save script: " + err.Error(),
if (len(command.Lines)) > 0 {
err := q.SaveScript(timeout, mysqlgen.SaveScriptParams{
Name: command.Name,
Data: j,
})
if err != nil {
bus.RunEvent(events.Log{
Level: "error",
Code: "database_could_not_save_script",
Message: "Failed to save script: " + err.Error(),
})
}
} else {
err := q.DeleteScript(timeout, command.Name)
if err != nil {
bus.RunEvent(events.Log{
Level: "error",
Code: "database_could_not_delete_script",
Message: "Failed to delete script: " + err.Error(),
})
}
}
}
}
+5 -1
View File
@@ -115,7 +115,11 @@ func (d *Data) WithPatch(patches ...Patch) Data {
}
if patch.Script != nil {
newData.Scripts[patch.Script.Name] = patch.Script.Lines
if len(patch.Script.Lines) > 0 {
newData.Scripts[patch.Script.Name] = patch.Script.Lines
} else {
delete(newData.Scripts, patch.Script.Name)
}
}
}