Обработка /updates/all

This commit is contained in:
RoyceDa
2026-02-12 12:52:29 +02:00
parent a3f7e25fa6
commit 572057dfb6

View File

@@ -1,5 +1,7 @@
package im.rosetta.api; package im.rosetta.api;
import im.rosetta.api.dto.UpdateItem;
import im.rosetta.api.dto.UpdateListResponse;
import im.rosetta.api.dto.UpdateResponse; import im.rosetta.api.dto.UpdateResponse;
import jakarta.ws.rs.GET; import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path; import jakarta.ws.rs.Path;
@@ -10,7 +12,9 @@ import jakarta.ws.rs.core.MediaType;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Optional; import java.util.Optional;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@@ -30,16 +34,17 @@ public class UpdatesResource {
@GET @GET
@Path("/get") @Path("/get")
public UpdateResponse getUpdate(@QueryParam("platform") String platform, public UpdateResponse getUpdate(@QueryParam("platform") String platform,
@QueryParam("arch") String arch, @QueryParam("arch") String arch,
@QueryParam("app") String appVersion, @QueryParam("app") String appVersion,
@QueryParam("kernel") String kernelVersion) { @QueryParam("kernel") String kernelVersion) {
// Нормализуем входные параметры. // Нормализуем входные параметры.
String normalizedPlatform = normalize(platform); String normalizedPlatform = normalize(platform);
String normalizedArch = normalize(arch); String normalizedArch = normalize(arch);
String normalizedApp = normalize(appVersion); String normalizedApp = normalize(appVersion);
String normalizedKernel = normalize(kernelVersion); String normalizedKernel = normalize(kernelVersion);
// Приводим платформу и архитектуру к нижнему регистру для сопоставления с именами файлов. // Приводим платформу и архитектуру к нижнему регистру для сопоставления с
// именами файлов.
if (normalizedPlatform != null) { if (normalizedPlatform != null) {
normalizedPlatform = normalizedPlatform.toLowerCase(Locale.ROOT); normalizedPlatform = normalizedPlatform.toLowerCase(Locale.ROOT);
} }
@@ -90,12 +95,40 @@ public class UpdatesResource {
@GET @GET
@Path("/all") @Path("/all")
public UpdateResponse getAll() { public UpdateListResponse getAll() {
// По требованию возвращаем пустой ответ, если параметры не указаны. List<UpdateItem> items = new ArrayList<>();
return new UpdateResponse(null, null, null, false, null, null); if (!Files.isDirectory(KERNEL_DIR)) {
return new UpdateListResponse(items);
}
try (var stream = Files.list(KERNEL_DIR)) {
for (java.nio.file.Path platformDir : (Iterable<java.nio.file.Path>) 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<java.nio.file.Path>) archStream::iterator) {
if (!Files.isDirectory(archDir)) {
continue;
}
String arch = archDir.getFileName().toString();
Optional<KernelFileInfo> 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) { private PackSelection findPackSelection(String platform, String arch, String clientAppVersion) {
if (!Files.isDirectory(PACKS_DIR)) { if (!Files.isDirectory(PACKS_DIR)) {
return new PackSelection(null, null, null); return new PackSelection(null, null, null);
@@ -241,7 +274,7 @@ public class UpdatesResource {
// Вспомогательная структура для файла пакета. // Вспомогательная структура для файла пакета.
private record PackFileInfo(String platform, String arch, String appVersion, private record PackFileInfo(String platform, String arch, String appVersion,
String minKernelRequired, String fileName) { String minKernelRequired, String fileName) {
} }
// Результат выбора пакета обновления. // Результат выбора пакета обновления.