feat: support firmware uploads, OTA pushes
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
defmodule Localiser.Domain.Firmware do
|
||||
@moduledoc false
|
||||
|
||||
def firmware_dir do
|
||||
dir = Application.app_dir(:localiserd, "priv/firmware")
|
||||
File.mkdir_p!(dir)
|
||||
dir
|
||||
end
|
||||
|
||||
def store(version, %Plug.Upload{path: tmp_path}) do
|
||||
dest = Path.join(firmware_dir(), "#{version}.bin")
|
||||
case File.cp(tmp_path, dest) do
|
||||
:ok -> {:ok, version}
|
||||
{:error, reason} -> {:error, reason}
|
||||
end
|
||||
end
|
||||
|
||||
def list do
|
||||
dir = firmware_dir()
|
||||
|
||||
dir
|
||||
|> File.ls!()
|
||||
|> Enum.filter(&String.ends_with?(&1, ".bin"))
|
||||
|> Enum.map(fn filename ->
|
||||
version = String.replace_suffix(filename, ".bin", "")
|
||||
path = Path.join(dir, filename)
|
||||
stat = File.stat!(path, time: :posix)
|
||||
%{version: version, size: stat.size, uploaded_at: stat.mtime}
|
||||
end)
|
||||
|> Enum.sort_by(& &1.uploaded_at, :desc)
|
||||
end
|
||||
|
||||
def get(version) do
|
||||
path = Path.join(firmware_dir(), "#{version}.bin")
|
||||
if File.exists?(path), do: {:ok, path}, else: :not_found
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user