Обработка /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;
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;
@@ -39,7 +43,8 @@ public class UpdatesResource {
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<UpdateItem> 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<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) {
if (!Files.isDirectory(PACKS_DIR)) {
return new PackSelection(null, null, null);