Implement downloading server jar
All checks were successful
Build & Test / nix-build (push) Successful in 1m48s
All checks were successful
Build & Test / nix-build (push) Successful in 1m48s
This commit is contained in:
parent
827004e145
commit
02c05122d7
@ -15,6 +15,8 @@
|
|||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
defmodule Amethyst.DataGenerator do
|
defmodule Amethyst.DataGenerator do
|
||||||
|
require Logger
|
||||||
|
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
This module allows Amethyst to download the vanilla Minecraft server and generate
|
This module allows Amethyst to download the vanilla Minecraft server and generate
|
||||||
necessary data files.
|
necessary data files.
|
||||||
@ -28,7 +30,12 @@ defmodule Amethyst.DataGenerator do
|
|||||||
{:ok, %{body: %{"versions" => versions}}} ->
|
{:ok, %{body: %{"versions" => versions}}} ->
|
||||||
case Enum.find(versions, fn %{"id" => id} -> id == version end) do
|
case Enum.find(versions, fn %{"id" => id} -> id == version end) do
|
||||||
nil -> {:error, :version_not_found}
|
nil -> {:error, :version_not_found}
|
||||||
version_meta -> {:ok, version_meta}
|
version_header ->
|
||||||
|
# Get the version manifest
|
||||||
|
case Req.get(version_header["url"]) do
|
||||||
|
{:ok, %{body: version_meta}} -> {:ok, version_meta}
|
||||||
|
{:error, err} -> {:error, err}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
{:error, err} -> {:error, err}
|
{:error, err} -> {:error, err}
|
||||||
end
|
end
|
||||||
@ -36,6 +43,22 @@ defmodule Amethyst.DataGenerator do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec download_server_jar(:latest | String.t(), path) :: {:ok, path} | {:error, term} when path: String.t()
|
||||||
|
def download_server_jar(version, path) do
|
||||||
|
case get_version_meta(version) do
|
||||||
|
{:ok, %{"downloads" => %{"server" => %{"url" => url, "sha1" => sha1}}}} ->
|
||||||
|
Logger.debug("Downloading server jar from #{url}, sha1: #{sha1}")
|
||||||
|
case Req.get(url, into: File.stream!(path)) do
|
||||||
|
{:ok, _} -> {:ok, path}
|
||||||
|
{:error, err} -> {:error, err}
|
||||||
|
end
|
||||||
|
{:error, err} -> {:error, err}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec get_latest_version() ::
|
||||||
|
{:error, %{:__exception__ => true, :__struct__ => atom(), optional(atom()) => any()}}
|
||||||
|
| {:ok, any()}
|
||||||
def get_latest_version() do
|
def get_latest_version() do
|
||||||
case Req.get(Application.fetch_env!(:amethyst, :mojang_game_meta)) do
|
case Req.get(Application.fetch_env!(:amethyst, :mojang_game_meta)) do
|
||||||
{:ok, %{body: %{"latest" => %{"release" => release}}}} -> {:ok, release}
|
{:ok, %{body: %{"latest" => %{"release" => release}}}} -> {:ok, release}
|
||||||
|
Loading…
Reference in New Issue
Block a user