From d6ea25a64ef1258d3a50f77ada90a7a6da596598 Mon Sep 17 00:00:00 2001 From: Kodi Craft Date: Thu, 10 Oct 2024 17:55:43 +0200 Subject: [PATCH] Try implementing keeping old server jars --- apps/amethyst/lib/datagen.ex | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/apps/amethyst/lib/datagen.ex b/apps/amethyst/lib/datagen.ex index b22342a..2452af9 100644 --- a/apps/amethyst/lib/datagen.ex +++ b/apps/amethyst/lib/datagen.ex @@ -43,19 +43,35 @@ defmodule Amethyst.DataGenerator do 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 + @spec get_server_jar(:latest | String.t(), path) :: {:ok, path} | {:error, term} when path: String.t() + def get_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} + # Check if the file already exists and has the right hash + Logger.debug("Checking if server jar exists at #{path} with hash #{sha1}") + case File.read(path) do + {:ok, data} -> + if :crypto.hash(:sha, data) == sha1 do + Logger.debug("Using cached server jar at #{path}") + {:ok, path} + else + Logger.debug("Mismatched hash, redownloading server jar") + download_jar(url, path) + end + {:error, _} -> download_jar(url, path) end {:error, err} -> {:error, err} end end + defp download_jar(url, path) do + Logger.debug("Downloading server jar from #{url}") + case Req.get(url, into: File.stream!(path)) do + {:ok, _} -> {:ok, path} + {:error, err} -> {:error, err} + end + end + @spec get_latest_version() :: {:error, %{:__exception__ => true, :__struct__ => atom(), optional(atom()) => any()}} | {:ok, any()}