Обработка /updates/all
This commit is contained in:
@@ -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) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Результат выбора пакета обновления.
|
// Результат выбора пакета обновления.
|
||||||
|
|||||||
Reference in New Issue
Block a user