From 572057dfb664b1e88258db221abb8a44dff1a661 Mon Sep 17 00:00:00 2001 From: RoyceDa Date: Thu, 12 Feb 2026 12:52:29 +0200 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20/updates/all?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/im/rosetta/api/UpdatesResource.java | 51 +++++++++++++++---- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/src/main/java/im/rosetta/api/UpdatesResource.java b/src/main/java/im/rosetta/api/UpdatesResource.java index 66acc72..425a9f3 100644 --- a/src/main/java/im/rosetta/api/UpdatesResource.java +++ b/src/main/java/im/rosetta/api/UpdatesResource.java @@ -1,5 +1,7 @@ package im.rosetta.api; +import im.rosetta.api.dto.UpdateItem; +import im.rosetta.api.dto.UpdateListResponse; import im.rosetta.api.dto.UpdateResponse; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; @@ -10,7 +12,9 @@ import jakarta.ws.rs.core.MediaType; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.ArrayList; import java.util.Comparator; +import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.regex.Matcher; @@ -30,16 +34,17 @@ public class UpdatesResource { @GET @Path("/get") public UpdateResponse getUpdate(@QueryParam("platform") String platform, - @QueryParam("arch") String arch, - @QueryParam("app") String appVersion, - @QueryParam("kernel") String kernelVersion) { + @QueryParam("arch") String arch, + @QueryParam("app") String appVersion, + @QueryParam("kernel") String kernelVersion) { // Нормализуем входные параметры. String normalizedPlatform = normalize(platform); String normalizedArch = normalize(arch); String normalizedApp = normalize(appVersion); String normalizedKernel = normalize(kernelVersion); - // Приводим платформу и архитектуру к нижнему регистру для сопоставления с именами файлов. + // Приводим платформу и архитектуру к нижнему регистру для сопоставления с + // именами файлов. if (normalizedPlatform != null) { normalizedPlatform = normalizedPlatform.toLowerCase(Locale.ROOT); } @@ -90,12 +95,40 @@ public class UpdatesResource { @GET @Path("/all") - public UpdateResponse getAll() { - // По требованию возвращаем пустой ответ, если параметры не указаны. - return new UpdateResponse(null, null, null, false, null, null); + public UpdateListResponse getAll() { + List items = new ArrayList<>(); + if (!Files.isDirectory(KERNEL_DIR)) { + return new UpdateListResponse(items); + } + try (var stream = Files.list(KERNEL_DIR)) { + for (java.nio.file.Path platformDir : (Iterable) stream::iterator) { + if (!Files.isDirectory(platformDir)) { + continue; + } + String platform = platformDir.getFileName().toString(); + try (var archStream = Files.list(platformDir)) { + for (java.nio.file.Path archDir : (Iterable) archStream::iterator) { + if (!Files.isDirectory(archDir)) { + continue; + } + String arch = archDir.getFileName().toString(); + Optional latestKernel = findLatestKernel(platform, arch); + if (latestKernel.isPresent()) { + KernelFileInfo info = latestKernel.get(); + items.add(new UpdateItem(platform, arch, info.version(), + "/kernel/" + platform + "/" + arch + "/" + info.fileName())); + } + } + } catch (IOException ignored) { + } + } + } catch (IOException ignored) { + } + return new UpdateListResponse(items); } - // Находим самый новый пакет обновления и последнюю версию приложения на сервере. + // Находим самый новый пакет обновления и последнюю версию приложения на + // сервере. private PackSelection findPackSelection(String platform, String arch, String clientAppVersion) { if (!Files.isDirectory(PACKS_DIR)) { return new PackSelection(null, null, null); @@ -241,7 +274,7 @@ public class UpdatesResource { // Вспомогательная структура для файла пакета. private record PackFileInfo(String platform, String arch, String appVersion, - String minKernelRequired, String fileName) { + String minKernelRequired, String fileName) { } // Результат выбора пакета обновления.