53 lines
1.6 KiB
Elixir
53 lines
1.6 KiB
Elixir
defmodule FarmbotCeleryScript.Compiler.Farmware do
|
|
alias FarmbotCeleryScript.Compiler
|
|
|
|
def take_photo(%{body: params}, env) do
|
|
execute_script(%{args: %{label: "take-photo"}, body: params}, env)
|
|
end
|
|
|
|
def execute_script(%{args: %{label: package}, body: params}, _env) do
|
|
env =
|
|
Enum.map(params, fn %{args: %{label: key, value: value}} ->
|
|
{to_string(key), value}
|
|
end)
|
|
|
|
quote location: :keep do
|
|
package = unquote(Compiler.compile_ast(package, env))
|
|
env = unquote(Macro.escape(Map.new(env)))
|
|
FarmbotCeleryScript.SysCalls.log("Executing Farmware: #{package}", true)
|
|
FarmbotCeleryScript.SysCalls.execute_script(package, env)
|
|
end
|
|
end
|
|
|
|
def install_first_party_farmware(_, _env) do
|
|
quote location: :keep do
|
|
FarmbotCeleryScript.SysCalls.log("Installing first party Farmware")
|
|
FarmbotCeleryScript.SysCalls.install_first_party_farmware()
|
|
end
|
|
end
|
|
|
|
def set_user_env(%{body: pairs}, _env) do
|
|
kvs =
|
|
Enum.map(pairs, fn %{kind: :pair, args: %{label: key, value: value}} ->
|
|
quote location: :keep do
|
|
FarmbotCeleryScript.SysCalls.set_user_env(
|
|
unquote(key),
|
|
unquote(value)
|
|
)
|
|
end
|
|
end)
|
|
|
|
quote location: :keep do
|
|
(unquote_splicing(kvs))
|
|
end
|
|
end
|
|
|
|
def update_farmware(%{args: %{package: package}}, env) do
|
|
quote location: :keep do
|
|
package = unquote(Compiler.compile_ast(package, env))
|
|
FarmbotCeleryScript.SysCalls.log("Updating Farmware: #{package}", true)
|
|
FarmbotCeleryScript.SysCalls.update_farmware(package)
|
|
end
|
|
end
|
|
end
|