Обработка /updates/all
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user