Files
localiserd/lib/localiser/domain/firmware.ex
T

38 lines
977 B
Elixir

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